为什么 iptables 在给定端口关闭时仍接受数据包?

为什么 iptables 在给定端口关闭时仍接受数据包?

我在 Linux Mint 上。

我在路由器上分配了一个公共静态地址,并手动转发了用于 torrent 的给定端口,因此不是通过 UPnP,我在路由器和 Transmission bittorrent 应用程序中都禁用了 UPnP。

从某种意义上说,它的工作原理是传输显示端口已打开。但是,据我了解,当传输关闭时,端口也应该关闭。

iptables但是,尽管传输已关闭,但仍有新数据包被接受。

为什么?我能做些什么?

这里是iptables -L -v

# iptables -L -v

Chain INPUT (policy DROP 7514 packets, 585K bytes)
 pkts bytes target     prot opt in     out     source               destination         
  251 10040 DROP       all  --  any    any     anywhere             anywhere             ctstate INVALID
 4330  371K DROP       icmp --  any    any     anywhere             anywhere            
    0     0 DROP       igmp --  any    any     anywhere             anywhere            
 4394  850K ACCEPT     all  --  lo     any     anywhere             anywhere            
1324K  462M ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
 6751  415K ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:56874

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 1484K packets, 2391M bytes)
 pkts bytes target     prot opt in     out     source               destination         

一分钟后也是一样:

# iptables -L -v

Chain INPUT (policy DROP 7869 packets, 611K bytes)
 pkts bytes target     prot opt in     out     source               destination         
  251 10040 DROP       all  --  any    any     anywhere             anywhere             ctstate INVALID
 4330  371K DROP       icmp --  any    any     anywhere             anywhere            
    0     0 DROP       igmp --  any    any     anywhere             anywhere            
 4437  863K ACCEPT     all  --  lo     any     anywhere             anywhere            
1324K  462M ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
 6983  430K ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:56874

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 1485K packets, 2391M bytes)
 pkts bytes target     prot opt in     out     source               destination 

至于评论:

netstat -nap | grep <my port number here>

该命令显示空结果。

答案1

当端口关闭时丢弃数据包不是 iptables 的工作,这是正常网络堆栈的工作(就像没有 iptables 一样)。 (准确地说:网络堆栈不只是丢弃数据包,它还会礼貌地通知对方没有任何监听。)

仅仅因为 iptables 接受数据包并不意味着有任何东西在监听。

更新:正如评论中提到的,存在风险。但这不是来自在关闭的端口上接受数据包本身,而是来自不同之处与所有其他端口相比,此端口上的行为:丢弃与拒绝。解决办法是不掉落所有其他端口上的数据包,但拒绝它们就像网络堆栈所做的那样:

如果数据包是 TCP,则使用-j REJECT --reject-with tcp-reset,对于 UDP 和其他基于端口的协议,使用-j REJECT --reject-with icmp-port-unreachable。由于每个简单的 DROP 现在都分为两个规则,因此最好创建一个新链仅用于拒绝,并跳转到您之前想要删除的任何位置的该链。

使用端口映射器来nmap检查结果。

相关内容