![Iptables 不允许来自开放端口的网络流量](https://linux22.com/image/703418/Iptables%20%E4%B8%8D%E5%85%81%E8%AE%B8%E6%9D%A5%E8%87%AA%E5%BC%80%E6%94%BE%E7%AB%AF%E5%8F%A3%E7%9A%84%E7%BD%91%E7%BB%9C%E6%B5%81%E9%87%8F.png)
我改变了 INPUT 链的策略,添加了以下命令。
iptables -P INPUT DROP
我插入了下一个规则以允许来自网络端口 80 和 443 的输入数据包,但端口仍然关闭(例如我无法使用 Web 浏览器)。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
输出自iptables -L
:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我如何允许来自 HTTP 和 HTTPS 端口的网络流量?
答案1
您需要允许端口 80 和 443 上的传入请求,这已使用两个接受规则完成。
您还需要允许ESTABLISHED
流量,但是您可以跳过这一步,因为您正在设置OUTPUT
策略ACCEPT
。
您的规则似乎仅足以允许传入请求。您将无法发起与其他计算机的连接。这是因为您拒绝了所有INPUT
流量(包括ESTABLISHED
连接)。要解决此问题,您可以添加如下规则:
iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT
为了帮助调试您的问题,您可以尝试以下几种方法:
- 用于
tcpdump
捕获流量以确认其丢失的位置。 INPUT
暂时将策略更改ACCEPT
为确认它是否与您的防火墙规则相关。- 使用
iptables -L -n -v
显示每条规则的命中率可能有助于您确认规则是否匹配某些流量(当您尝试访问允许的端口时)。这仅在非繁忙服务器上有用。 - 使用
LOG
iptables 中的目标在接受规则之前记录数据包,以确认数据包源/目标 IP 和端口符合您的预期。