更新
我很高兴我问了这个问题。好的,我会再试一次并发布另一个问题。
我想设置一个 CentOS 5.3 主机以仅允许 ping、ssh、httpd 和 SSL 连接。
阅读完教程并尝试创建配置后,我的情况如下...
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere 127.0.0.0/8 reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT icmp -- anywhere anywhere icmp echo-request
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain RH-Firewall-1-INPUT (0 references)
target prot opt source destination
在我看来,我好像已经完成了我的目标,但我想我应该和这里的专家再确认一下。
有什么看上去非常错误吗?
答案1
您的政策(输出除外)应设置为删除(以下代码假设没有规则)
从此开始
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
现在添加您可能需要在接口上监听的任何其他服务
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
不要使用拒绝,除非你限制它...请记住,对于每个被拒绝的数据包,都会有一个被发送回来,这会产生大量流量。我说不要使用它
我写了一些东西供桌面使用这里
答案2
看起来您已设置为拒绝任何尝试使用 TCP 与本地主机通信的操作。我会避免这样做,因为这样做会阻止一些合法的操作[需要引证]。
答案3
唯一严重错误的事情是您正在阻止 ICMP。非常非常糟糕的主意。这会破坏 PMTU 发现。只需让 ICMP 通过即可。
我假设您刚刚添加了它以进行测试,但是:
ACCEPT all -- anywhere anywhere
允许所有流量。因此,该规则集不执行任何操作。
你还打破了:
- 内部服务通过环回进行通信(规则应该说“数据包未通过环回进入”)
- ping 回复(让 ICMP 通过!)
建议:
- 为什么不也添加
state NEW
到您的dpt:http
和dpt:https
中呢?