iptables 规则未生效

iptables 规则未生效

我有一个 iptable 规则文件,在 INPUT 链上我有

-A INPUT -i em1 -p tcp -m tcp --dport 54000 -j ACCEPT
-A INPUT -i em1 -p tcp -m tcp --dport 30000 -j ACCEPT
-A INPUT -i em1 -p udp -m udp --dport 54000 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct 
-A INPUT -j INPUT_ZONES
-A INPUT -p icmp -j ACCEPT

然后我iptables-restore < rule_file 在端口 30000 上启动了一个 UDP 服务器,这不是允许的 UDP 端口54000 ,但 UDP 服务器仍然在 30000 上接收传入的 UDP 数据包,这有什么问题?

顺便说一句iptables -L -n,我得到:

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination 
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:54000
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:30000
    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:54000
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ES
    TABLISHED
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    INPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0           
    INPUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     icmp --  0.0.0.0/0 

我使用另一台机器的 nmap 来探测这台机器

nmap -port 30000

或者

nmap -port 54000

结果显示这两个端口被关闭了!

答案1

Chain INPUT (policy ACCEPT)

你的规则永远不匹配,因为你接受了一切

检查匹配的数据包:

iptables -nvL

编辑 etagenklo:iptables 从上到下检查链中的所有规则。如果没有规则与您的数据包匹配,iptables 将执行链中定义的策略(在您的例子中,这是 ACCEPT)

要更改您的政策:iptables -P CHAIN RULE

iptables -P INPUT DROP

答案2

请记住,当您使用 nmap/telnet 探测端口并收到“关闭”或“连接被拒绝”或类似错误时,这意味着您可能没有允许该端口,或者您允许该端口但没有服务在其上监听。

我个人会这样写规则:

-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //if you want allow "familiar" packets
-A INPUT -p icmp -j ACCEPT
-A INPUT -i em1 -p tcp -m tcp --dport 54000 -j ACCEPT //the interface is optional if your pc has only one network card
-A INPUT -i em1 -p tcp -m tcp --dport 30000 -j ACCEPT
-A INPUT -i em1 -p udp -m udp --dport 54000 -j ACCEPT
-A INPUT -j INPUT_direct 
-A INPUT -j INPUT_ZONES

答案3

将链的策略更改为 DROP:

iptables -P INPUT DROP

当然,你必须确保你需要的一切都有一个接受规则。

解释:

iptables 将检查链内的所有规则,看它们是否与您的数据包匹配。如果没有匹配的规则,则执行链中的策略。

所以这应该是防火墙的标准配置:您希望它接受规则中指定的所有内容并丢弃其他所有内容。

相关内容