最严格的 iptables 传出 HTTP/HTTPS 流量规则

最严格的 iptables 传出 HTTP/HTTPS 流量规则

我正在尝试在 iptables 中建立最不宽松的传出 TCP HTTP/HTTPS 连接。到目前为止,我已经:

iptables -A OUTPUT -p tcp -m multiport --sports 80,443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

我假设客户端发起的 SSL 握手需要新的,如果我的目标是尽可能地限制传出的 Web 流量,那么规则中还有其他你们会推荐的内容吗?

非常感谢

答案1

您的iptables规则已经足够,只要您还具备以下条件:

# Permit replies to existing (e.g. inbound) connections
iptables -A OUTPUT -j RELATED,ESTABLISHED -j ACCEPT

# Reject all other output traffic
iptables -A OUTPUT -j REJECT

在 OUTPUT 链中,REJECT 比 DROP 更好,可以加速故障处理。

但是我不确定你想防止/保护什么?运行起来很容易任何服务在端口 80 或 443 上。例如,僵尸网络、甚至 VPN 或 SSH 服务器都会顺利地在这些端口上运行,如果有人接管了您的服务器,您无法通过将传出流量限制在端口 80 和 443 来阻止他连接到他们的服务。

您可能更适合具有白名单的 HTTP 代理允许的 URL 或至少是iptables -A OUTPUT链中的 IP 白名单(可以通过 方便地完成ipset)。

仅限制输出端口可能不会达到您想要的效果。

答案2

您需要按如下方式重写规则:

iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT
iptables -P OUTPUT DROP

以下是这些规则含义的摘要:

  • 第一条规则允许所有相关流量(回复发起的
  • 第二条规则允许 HTTP/HTTPS 流量。
  • 需要最后一条规则来丢弃所有其他剩余的流量。

您需要注意两件事:

  1. 您需要确保在需要时允许其他类型的流量。
  2. 这些规则被添加到OUTPUT链中,这意味着它们将应用于来自同一台机器的流量。如果这台机器充当路由器/防火墙,您需要将这些规则添加到FORWARD链中。
  3. 您可能需要考虑向其他链添加规则,例如INPUT。这取决于您的设置和要求。

相关内容