Iptables:阻止除特定 IP 地址之外的出站流量

Iptables:阻止除特定 IP 地址之外的出站流量

使用 iptables,我需要阻止服务器上的所有出站流量,但以下情况除外:

  • SSH 访问少量 IP 地址
  • 对同一组 IP 地址进行 HTTPS 访问

有人能给我展示一套合适的规则吗?

谢谢。

答案1

iptables -I OUTPUT -d <remote_ip> -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -s <remote_ip> -p tcp --sport 22 -j ACCEPT
iptables -I OUTPUT -d <remote_ip> -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s <remote_ip> -p tcp --sport 443 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

您需要为每个 IP 输入前 4 条规则。但请注意,因为您必须通过此计算机上的控制台登录;所有其他访问都将被阻止。

答案2

现在我了解了你的问题的背景,请尝试:

iptables -P OUTPUT DROP
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 8.8.8.8 --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -s 8.8.8.8 --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -s 10.11.12.13/24 --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -s 10.11.12.13/24 --dport 443 -j ACCEPT

等等。这将设置默认策略为 DROP,然后仅允许列出的 IP 地址(或范围)访问。第二行允许相关流量(例如正在进行的 SSH 会话的出站数据包),第三和第四个示例用于 DNS 查找。

不要忘记您需要与第 2 行类似的 INPUT 规则。

答案3

上述帖子将实现阻止除 SSH 和 HTTPS 之外的所有传出流量,但它们不会满足您上面(在评论中)提出的目标:

我希望通过 SSH 登录的用户无法从这台机器发送数据。

考虑以下情况:如果我可以通过 SSH 访问您的设备,我可以使用 SSH 隧道将任何数据上传到不受信任的位置,并通过您允许传出流量的目的地之一进行传输。因此,如果您希望敏感数据不会以任何方式复制到网络之外,我认为仅通过在包含敏感数据的主机上设置 iptable 规则无法解决问题。

相关内容