Iptables 不允许来自开放端口的网络流量

Iptables 不允许来自开放端口的网络流量

我改变了 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

为了帮助调试您的问题,您可以尝试以下几种方法:

  1. 用于tcpdump捕获流量以确认其丢失的位置。
  2. INPUT暂时将策略更改ACCEPT为确认它是否与您的防火墙规则相关。
  3. 使用iptables -L -n -v显示每条规则的命中率可能有助于您确认规则是否匹配某些流量(当您尝试访问允许的端口时)。这仅在非繁忙服务器上有用。
  4. 使用LOGiptables 中的目标在接受规则之前记录数据包,以确认数据包源/目标 IP 和端口符合您的预期。

相关内容