我有一个带 nginx 的 VPS,但网站无法运行,并且发送了超时。当我禁用 iptables 时,一切都正常。但不知道哪条规则导致了问题。有什么帮助吗?
$sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -p tcp -m tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
443 和 80 dport 和 sport 规则都是新的。尝试按照网站上的说明打开端口,但没有成功。
答案1
规则的顺序很重要。将使用第一个匹配的规则。在您的例子中,它REJECT
位于 之前ACCEPT
。
您应该考虑(通常是一个好主意)将无条件移至REJECT
链的末尾。
答案2
INPUT 链中的 REJECT 规则匹配所有传入数据包,因此应将其放在链的末尾。因此,顺序更改将解决该问题:
1-保存现有的 iptables
sudo iptables-save > /tmp/iptables.txt
2- 编辑文本文件以更改顺序
sudo vi /tmp/iptables.txt
3-恢复已编辑的规则
sudo iptables-restore < /tmp/iptables.txt