我在路由器(Thomson TWG870)后面有一台主机,它有两条转发规则:
1. external: 0.0.0.0:22, internal: 192.168.0.10:22
2. external: 0.0.0.0:26, internal: 192.168.0.10:26
192.168.0.10 的 22 端口上有一个 ssh 服务器在运行。26 端口上没有运行任何应用程序。我的问题如下。当我运行在线端口扫描器时 (http://www.ipfingerprints.com/portscan.php例如)并检查端口 22 和 26,它返回端口 22 是open
(如预期的那样),但端口 26 被声明为filtered
。难道不应该声明为只是closed
因为端口是开放的但没有应用程序运行吗?如何配置它以响应closed
?
PS 当我测试路由器上未转发的端口 27(例如)时,我也会获得状态filtered
。
答案1
这取决于网站使用什么来扫描您的外部地址。
如果它是 SYN 扫描,例如来自 nmap 的扫描,如果 nmap 发送的 SYN 数据包从目标系统获得 ACK 数据包,则它被定义为“开放”TCP 端口。
通常在扫描中,如果您看到过滤,这是因为端口是开放的,但只对指定的 IP 或网络范围开放。您通常不会在“任何或 0.0.0.0”规则中看到这种情况。
如果没有目标端口转发,您不应该看到端口处于打开状态。(这是假设您的 ISP 未向路由器提供开放/过滤端口以供其使用。)众所周知,Verizon 使用 actiontec 路由器通过其网络推送固件和 VOD 指南更新。
尝试使用 nmap 从外部扫描您的网络。或者尝试使用其他网站,例如 canyouseeme.org。看看扫描结果是否与您看到的结果相符。
答案2
由于端口已打开但没有应用程序运行,难道不应该将其声明为仅关闭吗?
从技术上来说确实如此,但这取决于您的操作系统 - 一些操作系统(例如 Windows 或 FreeBSD)默认采用某种“隐身模式”,在这种模式下,没有监听器的端口不会触发任何响应。
(“关闭”是 TCP RST 或 ICMP“端口不可达”,而“过滤”则表示根本没有回复。)
对于 Windows,请参阅以下文章:
- https://technet.microsoft.com/en-us/library/dd448557(WS.10)
- https://msdn.microsoft.com/en-us/library/ff720058.aspx
根据其中的记录,您应该能够使用以下方法禁用隐身模式:
reg add HKLM\Software\Policies\Microsoft\WindowsFirewall\PrivateProfile /v DisableStealthMode /t REG_DWORD /d 1
reg add HKLM\Software\Policies\Microsoft\WindowsFirewall\PublicProfile /v DisableStealthMode /t REG_DWORD /d 1
对于 FreeBSD(例如 pfSense),等效的 sysctl 选项是net.inet.tcp.blackhole=0
和net.inet.udp.blackhole=0
。
PS 当我测试路由器上未转发的端口 27(例如)时,我也得到了状态过滤。
在路由器中,发往非转发端口的数据包将被视为输入(即由路由器本身接收)。同样,路由器的防火墙通常会有一条最终规则,丢弃未知的数据包而不是拒绝它们。
根据路由器类型,这可能可以通过添加拒绝未知数据包的自定义防火墙规则进行配置。