我正在尝试在 RHEL Web 服务器上设置防火墙规则,以便我的 Web 服务器可以提供网页,同时使用 curl/wget 下载远程文件。我遇到的问题是,我只能执行其中一项操作。我尝试调整 iptables 设置,并将问题隔离到出站数据包,因为如果我启用所有出站数据包,它就可以正常工作。
这就是我正在使用的:
iptables -A INPUT -p tcp -m tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j DROP
iptables -A OUTPUT -p tcp -m tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp -m multiport --sports 80,443 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
这可能与已成立,相关在我的 http/https 输出规则中?
答案1
您非常清楚地丢弃了所有不匹配任何规则的输出数据包:
iptables -P OUTPUT DROP
但同时你又不接受任何构成新连接的数据包,而所有规则仅对无法实际建立的已建立连接进行操作:
iptables -A OUTPUT ... -m state --state ESTABLISHED,RELATED ...
请阅读手册页,iptables
尤其是描述的部分-m state
。这样,您就不会创建明确阻止新传出连接的防火墙,然后惊讶地发现您的传出连接被阻止了。
我个人认为在和链上使用策略不是一个好主意DROP
,我也不关心它在链上的使用情况。我总是在链的和处使用明确的 REJECT/DROP 规则。通常在开始时会更好,因为它不会引入滞后和超时。INPUT
OUTPUT
FORWARD
REJECT
对您来说,最好的解决方案可能是将OUTPUT
策略切换回ACCEPT
并删除OUTPUT
规则。