iptables 阻止除 http 之外的所有内容

iptables 阻止除 http 之外的所有内容

我正在尝试配置我的 iptables 来阻止除 HTTP 之外的任何网络流量:

iptables -P INPUT DROP #set policy of INPUT to DROP
iptables -P OUTPUT DROP #set policy of OUTPUT to DROP

iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables 输出(iptables -L -v)给我:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    4   745 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spt:http state RELATED,ESTABLISHED

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

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    2   330 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http state NEW,ESTABLISHED

当我尝试wget 127.0.0.1(是的,我确实有一个网络服务器并且它运行良好)时,我得到:

--2012-11-14 16:29:01--  http://127.0.0.1/
Connecting to 127.0.0.1:80...

请求从未完成。我做错了什么?我将 iptables 设置为默认 DROP 所有内容,并添加一条规则以 ACCEPT HTTP。

答案1

通常,阻止所有环回接口上的流量并不是一个好主意。此外,您应该在所有希望它们能够正确使用 IP 协议的接口上启用 ICMP。您最可能需要的最后一件事可能是 DNS 流量。此外,匹配 ESTABLISHED 和 RELATED 状态的规则不需要匹配任何端口。因此,请尝试设置以下规则:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m udp -p udp --sport 53
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A OUTPUT -m udp -p udp --dport 53
iptables -A OUTPUT -j REJECT --reject-with icmp-host-prohibited

答案2

我建议您也实施一些针对几种类型的扫描和 TCP 协议不常见使用的保护措施:

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A INPUT -m state --state INVALID -j DROP

相关内容