我如何阻止所有出站连接?

我如何阻止所有出站连接?

我需要阻止我的服务器发起与远程服务器的任何连接。

不过,我仍然希望服务器能够回复通过客户端发起的连接。

换句话说,我希望其他人能够连接到该服务器,但该服务器不能发起到其他服务器的远程连接。

我怎样才能做到这一点?

我正在使用 Ubuntu。

答案1

阻止所有传出连接不是一个好主意,因为这会阻止您从在线存储库安装软件、执行 DNS 搜索(这在大多数环境中都很糟糕)、使用 NTP 保持时钟更新等。无论如何,如果您仍然想这样做,请尝试以下操作:

  # Drop all connections initiated from this host
iptables -t filter -I OUTPUT 1 -m state --state NEW -j DROP
  # Additionally, log the event (optional)
iptables -t filter -I OUTPUT 1 -m state --state NEW -j LOG --log-level warning \
  --log-prefix "Attempted to initiate a connection from a local process" \
  --log-uid

您可以通过允许某些流量(如 DNS)使规则更加智能。您可以通过两种方式实现这一点:

  1. 使匹配更加复杂。对于一个或两个“白名单”项目来说就足够了。例如:

      # Only forbid non-UDP traffic
    iptables -t filter -I OUTPUT 1 -m state --state NEW \! -p udp -j DROP
    
  2. 使用“-j ACCEPT”目标预先添加与允许从本地主机启动的某些所需服务匹配的规则。例如:

      # Run this after the "DROP" rule to allow connection to ports
      #+ 80 and 443, mostly used for HTTP and HTTPS traffic
    iptables -t filter -I OUTPUT 1 -p udp -m multiport --ports 80,443 -j ACCEPT
    

答案2

Ubuntu 的内置防火墙是 ufw。您可以使用名为 Gufw 的 GUI 来控制它。在 Gufw 的主窗格中,只需单击 Outgoing:Deny。

相关内容