ACK扫描发送仅设置了ACK位的TCP数据包。无论端口是打开还是关闭,RFC 793都要求目标使用RST数据包进行响应。另一方面,阻止探测的防火墙通常不响应或发回ICMP目标不可达错误。这种区别允许Nmap报告是否正在过滤ACK数据包。Nmap ACK扫描报告的过滤端口集通常小于针对同一台机器的SYN扫描,因为ACK扫描更难以过滤。许多网络允许几乎不受限制的出站连接,但希望阻止Internet主机启动与它们的连接。阻止传入的SYN数据包(没有设置ACK位)是一种简单的方法,但它仍然允许任何ACK数据包通过。阻止这些ACK数据包更加困难,因为它们不会告诉哪一方开始连接。要阻止未经请求的ACK数据包(由Nmap ACK扫描发送), 确定给定的ACK是否合适。这些状态防火墙通常更安全,因为它们可能更具限制性。阻止ACK扫描是一个额外的可用限制。缺点是它们需要更多资源才能运行,并且状态防火墙重启可能导致设备丢失状态并终止通过它的所有已建立连接。
虽然状态防火墙很普遍并且越来越受欢迎,但无状态方法仍然非常普遍。例如,Linux Netfilter / iptables 系统支持 --syn
便利选项,使上述无状态方法易于实现。
在上一节中,SYN扫描显示scanme.nmap.org上的1,000个常见端口中的六个都处于过滤状态。 针对同一主机的ACK扫描,以确定它是否使用状态防火墙。
针对Scanme的ACK扫描
# nmap -sA -T4 scanme.nmap.org
启动Nmap(http://nmap.org) scanme.nmap.org的Nmap扫描报告(64.13.134.52) 未显示:994过滤端口 港口国服务 22 / tcp未过滤的ssh 25 / tcp未经过滤的smtp 53 / tcp未过滤的域名 70 / tcp未过滤的地鼠 80 / tcp未经过滤的http 113 / tcp未过滤的auth 完成Nmap:在5.96秒内扫描1个IP地址(1个主机)
此处显示SYN扫描中显示的相同六个端口。其他994仍在过滤。这是因为Scanme受这个有状态iptables指令的保护:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT。这仅接受属于已建立连接或与已建立连接相关的数据包。除了显示的六个特殊端口外,Nmap发送的未经请求的ACK数据包将被丢弃。特殊规则允许所有数据包到端口22,25,53,70和80,以及发送RST数据包 响应端口113探测器。请注意,显示的六个端口位于 unfiltered
因为ACK扫描不能进一步将它们分成open
(22,53和80)或closed
(25,70,113)。
现在让我们看另一个例子。我本地网络上名为Para的Linux主机使用以下(简化以节省空间)防火墙脚本:
#!/ bin / sh的 # #一个简单的,无状态的,基于主机的防火墙脚本。 #首先,刷新并删除任何现有表 iptables -F iptables -X #默认拒绝(输入/转发) iptables --policy INPUT DROP iptables --policy OUTPUT ACCEPT iptables --policy FORWARD DROP #我想从外面访问ssh和www iptables -A INPUT -m multiport -p tcp --destination-port 22,80 -j ACCEPT #允许响应传出的TCP请求 iptables -A INPUT --proto tcp!--syn -j ACCEPT
此防火墙是无状态的,因为没有--state
选项或-m state
模块请求的迹象 。
针对Para的对比SYN和ACK扫描
#nmap -sS -p1-100 -T4 para
启动Nmap(http://nmap.org) para(192.168.10.191)的Nmap扫描报告 未显示:98个过滤端口 港口国服务 22 / tcp打开ssh 80 / tcp关闭http MAC地址:00:60:1D:38:32:90(朗讯科技) 完成Nmap:在3.81秒内扫描1个IP地址(1个主机) #nmap -sA -p1-100 -T4 para
启动Nmap(http://nmap.org) para(192.168.10.191)上的所有100个扫描端口均为:未过滤 MAC地址:00:60:1D:38:32:90(朗讯科技) 完成Nmap:在0.70秒内扫描1个IP地址(1个主机)
在SYN扫描中,过滤了100个端口中的98个。然而,ACK扫描显示每个扫描端口 unfiltered
。 换句话说,所有的ACK数据包都在不受阻碍地引发RST响应。这些响应也使扫描速度提高了五倍以上,因为它不必等待超时。
现在我们知道如何区分有状态防火墙和无状态防火墙,但有什么用呢?Para的ACK扫描显示某些数据包可能已到达目标主机。我说可能是因为防火墙伪造总是可行的。虽然您可能无法与这些端口建立TCP连接,但它们可用于确定正在使用的IP地址,操作系统检测测试,某些IP ID诡计,以及作为隧道命令到rootkit的通道 安装在那些机器上。其他扫描类型,例如FIN扫描, 甚至可以确定哪些端口是开放的,从而推断出主机的目的。这些主机可能有用作僵尸 用于IP ID空闲扫描。
这对扫描还表明,我们所谓的端口状态不仅仅是端口本身的属性。这里,filtered
一个扫描类型和unfiltered
另一个扫描类型考虑相同的端口号。您扫描的IP地址,沿途任何过滤设备的规则以及您访问的目标计算机的哪个界面都会影响Nmap查看端口的方式。端口表仅反映Nmap在特定计算机上运行时所看到的内容,并在给定时间使用一组已定义的选项。