送信トラフィックの制限と制御は、多くの場合に役立ちます。たとえば:
- 攻撃からの保護 - サーバー上のサービスが応答を生成する場合
- データの保護 - サーバーから情報を引き出すのを難しくする
- ユーザーの知らないうちに情報を収集して送信する可能性のあるクローズドソースのスクリプトからの保護
この例では、仮想マシンを作成し、特定のソフトウェアのデータ送信をテストする必要があると仮定します。そのため、テストに使用する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