すべての送信接続をブロックするにはどうすればよいですか?

すべての送信接続をブロックするにはどうすればよいですか?

サーバーをブロックする必要がある開始するリモート サーバーへの接続。

ただし、接続されたクライアントを介して開始された接続からサーバーが応答できるようにする必要があります。

つまり、他のユーザーがサーバーに接続できるようにしたいが、サーバーが他のサーバーへのリモート接続を開始できないようにしたいのです。

どうやってやるの?

私は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 などの特定のトラフィックを許可することで、ルールをよりスマートにすることができます。これは、次の 2 つの方法で実現できます。

  1. 一致をより複雑にします。1 つまたは 2 つの「ホワイトリスト」項目で十分です。例:

      # 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 のメイン ペインで、[送信:拒否] をクリックするだけです。

関連情報