我最近买了新的 KVM/VPS,安装 OpenResty(nginx fork)并运行它后,我的服务器无法接受测试端口上的传入连接,8080
我设法通过将端口 8080 添加到允许规则来解决这个问题,
iptables -I INPUT -p tcp --dport 8080 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -p tcp --sport 8080 -m conntrack --ctstate ESTABLISHED -j ACCEPT
但我仍然不明白我的 VPS 自带的默认规则
pkts bytes target prot opt in out source destination
361K 1192M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
1 60 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
464K 70M INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
464K 70M INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
464K 70M INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
1324 61332 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
458K 70M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
特别是最后一行,它阻止所有传入流量!
答案1
iptables
规则是自上而下评估的。如果数据包与其中一条规则匹配,它将执行ACTION
规则的 定义。通常是REJECT
、ACCEPT
、DROP
、REDIRECT
(到不同的端口)或跳转到CHAIN
。
最后一条规则只是一条通用规则,当之前的规则都没有触发时,它就会触发。基本上,它是“默认情况下,拒绝任何与之前的规则不匹配的内容”。这是实施防火墙时的标准做法,也是一种良好做法。
这icmp-host-prohibited
只是数据包被拒绝的消息。这意味着您的服务器将使用该消息通知发送者数据包已被拒绝。
请注意,为了更好地强化,建议使用DROP
消息而不是REJECT
它们,因为后者可能会向攻击者提供一些信息,例如“该主机存在并且拒绝了您的数据包”,而DROP
不会提供这样的信息。