如何阻止所有出站连接?

Joe*_*200 5 linux iptables

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

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

换句话说,我希望其他人能够连接到服务器,但服务器无法启动到其他服务器的远程连接。

我怎样才能做到这一点?

我正在使用 Ubuntu。

Die*_*ina 10

阻止所有传出连接是一个坏主意,因为这会阻止您从在线存储库安装软件、进行 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
Run Code Online (Sandbox Code Playgroud)

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

  1. 使比赛更加复杂。一两个“白名单”项目就可以了。例子:

      # Only forbid non-UDP traffic
    iptables -t filter -I OUTPUT 1 -m state --state NEW \! -p udp -j DROP
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

  • 你在问两个完全不同的问题。您应该发布一个新问题,具体说明您的问题,而不是要求您实现您认为的解决方案,因为您对此事没有足够的了解。例如:“我的 VPS 的上传速率有限,我如何使用 iptables 或其他解决方案优化我的服务器,以便在某些需要的情况下优先考虑某些流量并丢弃不必要的流量?”。在提出此类具体问题以解决可能更广泛的问题之前,您应该清楚“连接”、“数据包”和“流量”的概念(至少)。 (3认同)
  • 响应“我如何将其限制为每分钟一个连接?”,这可以做类似的事情:`iptables -t filter -I OUTPUT 1 -m state --state NEW -j DROP; iptables -t filter -I OUTPUT 1 -m state --state NEW -m limit --limit 1/minute -j ACCEPT`。请注意,这可能不适用于某些协议,例如需要启动多个连接才能完成一项功能的协议(例如,PASV 模式下的 FTP)。 (3认同)