我正在尝试配置我的 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