ฉันกำลังพยายามทำความเข้าใจผลลัพธ์ที่ได้รับเมื่อสแกนพอร์ตบนเครื่องที่มี Windows Firewall ในตัวที่ใช้งานอยู่ สภาพแวดล้อมการทดสอบของฉันมีเครื่อง Windows 7 สองเครื่องที่ทำงานใน Hyper-V VM ที่เชื่อมต่อโดยตรงกับสวิตช์เสมือนภายในและในเครือข่ายย่อยเดียวกันโดยไม่มีไฟร์วอลล์อื่นระหว่างกัน

เครื่อง A - ไฟร์วอลล์ Windows ปิดและเรียกใช้ Nmap 7.60

เครื่อง B - เครื่องกำลังสแกน

เมื่อปิดไฟร์วอลล์ Windows บนเครื่อง B พอร์ตทั้งหมดจะแสดงเป็นเปิดหรือปิด - คาดหวัง

เมื่อ Windows Firewall เปิดอยู่บนเครื่อง B โดยใช้กฎเริ่มต้น พอร์ตบางพอร์ตจะแสดงเป็นเปิด (EXPECTED) และส่วนที่เหลือจะแสดงเป็นตัวกรอง

เมื่อฉันสร้างกฎขาเข้าเพื่ออนุญาตการเชื่อมต่อบนพอร์ตเฉพาะที่ไม่มีตัวฟัง ฉันคาดว่าพอร์ตนั้นจะถูกสแกนเป็นปิด อย่างไรก็ตาม พอร์ตนั้นยังคงแสดงเป็นถูกกรองโดยมีเหตุผลว่าไม่มีการตอบกลับ

มีใครอธิบายได้ไหมว่าทำไมไม่มีการตอบสนองเมื่อสแกนพอร์ตที่มีกฎขาเข้าที่ใช้งานอยู่เพื่ออนุญาตการเชื่อมต่อและกฎการปฏิเสธ ฉันกำลังใช้การสแกน SYN

answer

ไฟร์วอลล์จะกรอง TCP SYN เพื่อไม่ให้ TCP ได้รับ และ TCP ไม่สามารถส่ง RST ที่ต้องการได้ จากRFC 793, Transmission Control Protocol :

Reset Generation

As a general rule, reset (RST) must be sent whenever a segment arrives which apparently is not intended for the current connection. A reset must not be sent if it is not clear that this is the case.

There are three groups of states:

  1. If the connection does not exist (CLOSED) then a reset is sent in response to any incoming segment except another reset. In particular, SYNs addressed to a non-existent connection are rejected by this means.

    If the incoming segment has an ACK field, the reset takes its sequence number from the ACK field of the segment, otherwise the reset has sequence number zero and the ACK field is set to the sum of the sequence number and segment length of the incoming segment. The connection remains in the CLOSED state.

  2. If the connection is in any non-synchronized state (LISTEN, SYN-SENT, SYN-RECEIVED), and the incoming segment acknowledges something not yet sent (the segment carries an unacceptable ACK), or if an incoming segment has a security level or compartment which does not exactly match the level and compartment requested for the connection, a reset is sent.

    If our SYN has not been acknowledged and the precedence level of the incoming segment is higher than the precedence level requested then either raise the local precedence level (if allowed by the user and the system) or send a reset; or if the precedence level of the incoming segment is lower than the precedence level requested then continue as if the precedence matched exactly (if the remote TCP cannot raise the precedence level to match ours this will be detected in the next segment it sends, and the connection will be terminated then). If our SYN has been acknowledged (perhaps in this incoming segment) the precedence level of the incoming segment must match the local precedence level exactly, if it does not a reset must be sent.

    If the incoming segment has an ACK field, the reset takes its sequence number from the ACK field of the segment, otherwise the reset has sequence number zero and the ACK field is set to the sum of the sequence number and segment length of the incoming segment. The connection remains in the same state.

  3. If the connection is in a synchronized state (ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT), any unacceptable segment (out of window sequence number or unacceptible acknowledgment number) must elicit only an empty acknowledgment segment containing the current send-sequence number and an acknowledgment indicating the next sequence number expected to be received, and the connection remains in the same state.

    If an incoming segment has a security level, or compartment, or precedence which does not exactly match the level, and compartment, and precedence requested for the connection,a reset is sent and connection goes to the CLOSED state. The reset takes its sequence number from the ACK field of the incoming segment.

When I create an inbound rule to allow connections on a specific port that doesn't have a listener

หากคุณสร้างกฎไฟร์วอลล์สำหรับพอร์ตที่ไม่มี LISTENER แสดงว่าเป็นเรื่องปกติโดยสิ้นเชิงที่คุณไม่มีการตอบสนอง เนื่องจากไม่มีคำตอบในพอร์ตนั้น

อ้างจากที่นั่น

If something other than LISTENING is returned then there could be a problem with a port being blocked somewhere. If the port shows to be FILTERED then a firewall or VLAN could be blocking that port, if the port returns NOT LISTENING then we got to the machine but the machine is not listening on that port number.

พบคำตอบ.

เหตุผลที่พอร์ตออกมาเป็น FILTERED แม้ว่าจะมีกฎขาเข้าคือคุณลักษณะที่เรียกว่า "โหมดซ่อนตัว" ที่ "บล็อกไม่สามารถเข้าถึง ICMP ขาออกและข้อความรีเซ็ต TCP สำหรับพอร์ตเมื่อไม่มีแอปพลิเคชันกำลังฟังพอร์ตนั้น"

https://technet.microsoft.com/en-us/library/dd448557(v=ws.10).aspx