Image

ナレッジベース → Linuxでiptablesを使用して送信トラフィックを制限および制御する

[仮想サーバー]
公開日: 21.07.2025

送信トラフィックの制限と制御は、多くの場合に役立ちます。たとえば:

  • 攻撃からの保護 - サーバー上のサービスが応答を生成する場合
  • データの保護 - サーバーから情報を引き出すのを難しくする
  • ユーザーの知らないうちに情報を収集して送信する可能性のあるクローズドソースのスクリプトからの保護

この例では、仮想マシンを作成し、特定のソフトウェアのデータ送信をテストする必要があると仮定します。そのため、テストに使用する1つのIPアドレスを除き、すべてをブロックします。

1. iptablesにルールを追加

# 現在のルールをクリア(SSHで接続している場合は注意)
iptables -F OUTPUT

# ループバック(localhost)を許可
iptables -A OUTPUT -o lo -j ACCEPT

# DNSクエリを許可(必要に応じて、オプション)
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

# IP 111.222.111.222へのすべての送信接続を許可
iptables -A OUTPUT -d 111.222.111.222 -j ACCEPT

# その他のすべての送信接続をブロック
iptables -A OUTPUT -j REJECT

ここで、111.222.111.222はテスト、データ送受信に使用するIPアドレスです。

2. ルールの確認、サーバー自体からSSHで検証

2.1 ピンの確認

ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 79.174.xx.xxx icmp_seq=1 Destination Port Unreachable
ping: sendmsg: 操作が許可されていません
From 79.174.xx.xxx icmp_seq=2 Destination Port Unreachable
ping: sendmsg: 操作が許可されていません
From 79.174.xx.xxx icmp_seq=3 Destination Port Unreachable
ping: sendmsg: 操作が許可されていません

2.2 テルネットの確認

telnet google.com 443
Trying 209.85.233.101...
Connection failed: 接続が拒否されました
Trying 209.85.233.113...
Connection failed: 接続が拒否されました
Trying 209.85.233.139...
Connection failed: 接続が拒否されました
Trying 209.85.233.100...

ご覧の通り、ルールが機能しており、スクリプトやサービスが接続を試みても、インターネットにデータが送信されることはありません。

3. トラフィックおよび接続試行の監視

3.1 この例では、PHPの接続データを1秒ごとに更新します

watch -n 1 'lsof -i -nP | grep php'

php-fpm8.  445 www-data   11u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm8.  448 www-data   12u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm8.  449 www-data   14u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm8.  453 www-data   16u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)

外部ノードへの接続試行がある場合、ポートやIPアドレスを含む接続情報が表示されます。

PHPスクリプトの監視時には、xdebugなどの追加モジュールもあります。本番環境ではこれを有効にせず、デバッグ専用に使用してください。

この方法により、仮想サーバー上で必要なスクリプト用のサンドボックスを迅速に作成し、ネットワーク活動を監視することでデータの露出リスクを軽減できます。





No Comments Yet