iptables 帮助

iptables 帮助

我最近在家用服务器上安装了 Oracle Linux 6,但一直无法允许端口通过防火墙 (iptables)。我尝试使用以下命令添加端口

iptables -I INPUT -p tcp --dport 80 -s 192.168.0.0/24 -j ACCEPT

我当前的规则配置是:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.0.0/24       anywhere            tcp dpt:ldap 
ACCEPT     tcp  --  192.168.0.0/24       anywhere            tcp dpt:x11 
ACCEPT     tcp  --  192.168.0.0/24       anywhere            tcp dpt:vnc-server 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with     icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

但是我无法从网络上的任何设备(所有设备都以 192.168.0.* 开头)访问这些端口(ssh 除外,它显然是自动配置的)。如果我刷新表(iptables -F),所有连接都可以正常工作。我已保存并重新加载表。有什么想法可以解释为什么它不起作用吗?

答案1

iptables按顺序按照每条规则处理数据包。您正在附加规则以接受 HTTP 流量拒绝所有流量的规则:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

...

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http

如果数据包与前面的任何规则都不匹配,它就会到达这里。如果这是到 SSH 的新 TCP 连接,它就会匹配第一条规则。如果不是(例如,如果这是 HTTP 数据包),它会继续执行下一条规则,该规则会拒绝任何到目前为止尚未匹配的流量。因此,最后一个规则永远不会被匹配,因为任何新的 HTTP 流量都已被前一个规则拒绝。

我不确定 Oracle Linux 建议您如何配置防火墙规则(例如,Ubuntu 鼓励使用ufw)。一个简单的方法是在REJECTiptables -I INPUT $INDEX,其中$INDEX是规则的索引REJECT)之前插入 HTTP 规则。另一个更符合“精神”的方法iptables是删除显式REJECT规则并将默认策略更改为REJECT。这会导致对任何未与规则匹配的数据包隐式拒绝,因此您只需将ACCEPTs 附加到末尾,而不必担心将它们放在显式 之前REJECT

相关内容