ウェブサイト検索

すべての Linux 管理者が知っておくべき 25 の便利な IPtable ファイアウォール ルール


ネットワーク トラフィックの管理は、システム管理者が対処しなければならない最も困難な仕事の 1 つです。システムを攻撃に対して脆弱なままにすることなく、着信接続と発信接続の両方についてシステムとユーザーの要件を満たすようにファイアウォールを構成する必要があります。

ここで iptables が役に立ちます。 iptables は、システム管理者が設定可能なテーブル ルールのセットを介して受信トラフィックと送信トラフィックを管理できるようにする Linux コマンド ライン ファイアウォールです。

iptables は、一連の組み込みルールまたはユーザー定義ルールを含むチェーンを持つ一連のテーブルを使用します。これらのおかげで、システム管理者はシステムのネットワーク トラフィックを適切にフィルタリングできます。

iptables マニュアルによると、現在 3 種類のテーブルがあります。

    1. FILTER – これはデフォルトのテーブルであり、以下の組み込みチェーンが含まれています。

      1. INPUT – ローカルソケット向けのパッケージ
      2. 転送 – システムを介してルーティングされるパケット
      3. 出力 – ローカルで生成されたパケット
    2. NAT – パケットが新しい接続を作成しようとするときに参照されるテーブル。次の組み込み機能があります。

      1. PREROUTING – パケットを受信するとすぐに変更するために使用されます。
      2. 出力 – ローカルで生成されたパケットを変更するために使用されます
      3. ポストルーティング – 送信されるパケットを変更するために使用されます。
    3. MANGLE – このテーブルはパケット変更に使用されます。カーネル バージョン 2.4 まで、このテーブルにはチェーンが 2 つしかありませんでしたが、現在は 5 つになりました。

      1. PREROUTING – 受信接続を変更するため
      2. 出力 – ローカルで生成されたパケットを変更するため
      3. INPUT – 受信パケット用
      4. ポストルーティング – パケットが送信されようとしているときに変更します。
      5. 転送 – ボックスを介してルーティングされたパケットの場合

この記事では、iptables を通じて Linux ボックス ファイアウォールを管理するのに役立ついくつかの便利なコマンドを紹介します。この記事では、より単純なコマンドから始めて、最後までより複雑なコマンドに進んでいきます。

1. iptables ファイアウォールの開始/停止/再起動

まず、さまざまな Linux ディストリビューションで iptables サービスを管理する方法を知っておく必要があります。これは非常に簡単です。

SystemD ベースの Linux ディストリビューション上

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

SysVinit ベースの Linux ディストリビューション上

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. すべての IPtables ファイアウォール ルールを確認します。

既存のルールを確認する場合は、次のコマンドを使用します。

iptables -L -n -v

これにより、以下のような出力が返されるはずです。

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

特定のテーブルのルールを確認したい場合は、-t オプションを使用し、その後に確認したいテーブルを指定します。たとえば、NAT テーブルのルールを確認するには、次を使用できます。

iptables -t nat -L -v -n

3. IPtables ファイアウォールで特定の IP アドレスをブロックする

IP アドレスからの異常または不正なアクティビティを見つけた場合は、次のルールを使用してその IP アドレスをブロックできます。

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

"xxx.xxx.xxx.xxx" を実際の IP アドレスに変更する必要がある箇所。自分の IP アドレスを誤ってブロックしてしまう可能性があるため、このコマンドを実行するときは十分に注意してください。 -A オプションは、選択したチェーンの最後にルールを追加します。

その IP アドレスからの TCP トラフィックのみをブロックしたい場合は、プロトコルを指定する -p オプションを使用できます。そうすれば、コマンドは次のようになります。

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. IPtables ファイアウォールで IP アドレスのブロックを解除する

特定の IP アドレスからのリクエストをブロックしたくない場合は、次のコマンドを使用してブロック ルールを削除できます。

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

-D オプションは、選択したチェーンから 1 つ以上のルールを削除します。より長いオプションを使用したい場合は、--delete を使用できます。

5. IPtables ファイアウォールで特定のポートをブロックする

場合によっては、特定のポートでの受信接続または送信接続をブロックしたい場合があります。これは優れたセキュリティ対策であり、ファイアウォールを設定する際にはこの点についてよく考慮する必要があります。

特定のポートで発信接続をブロックするには、次のコマンドを使用します。

iptables -A OUTPUT -p tcp --dport xxx -j DROP

受信接続を許可するには、次を使用します。

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

どちらの例でも、"xxx" を許可する実際のポートに変更します。 TCP の代わりに UDP トラフィックをブロックしたい場合は、"tcp""udp" に変更するだけです。上記の iptables ルール。

6. マルチポートを使用して IPtables で複数のポートを許可する

マルチポートを使用すると、一度に複数のポートを許可できます。以下に、受信接続と送信接続の両方に対するそのようなルールを示します。

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. IPtables の特定のポートで特定のネットワーク範囲を許可する

特定のネットワークへの特定のポート上の特定の接続を制限したい場合があります。ポート 22 からネットワーク 192.168.100.0/24 への発信接続を許可するとします。

次のコマンドでそれを行うことができます。

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. IPtables ファイアウォールで Facebook をブロックする

一部の雇用主は、従業員のFacebookへのアクセスをブロックしたいと考えています。以下は Facebook へのトラフィックをブロックする方法の例です。

: あなたがシステム管理者で、これらのルールを適用する必要がある場合は、同僚があなたとの会話をやめてしまう可能性があることに留意してください :)

まず Facebook が使用する IP アドレスを見つけます。

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

その後、次のコマンドを使用してその Facebook ネットワークをブロックできます。

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Facebook が使用する IP アドレス範囲は国によって異なる場合があることに注意してください。

9. IPtables でのポート転送のセットアップ

場合によっては、あるサービスのトラフィックを別のポートに転送したい場合があります。これは、次のコマンドで実現できます。

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

上記のコマンドは、ネットワーク インターフェイス eth0 上のすべての受信トラフィックをポート 25 からポート 2525 に転送します。必要なポートに変更できます。

10. IPtables を使用して Apache ポートでのネットワーク フラッドをブロックする

場合によっては、IP アドレスが Web サイト上の Web ポートに対して過剰な接続を要求する場合があります。これにより多くの問題が発生する可能性があり、そのような問題を防ぐために、次のルールを使用できます。

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

上記のコマンドは、1 分あたりの受信接続を 100 に制限し、バースト制限を 200 に設定します。制限と制限バーストを独自の特定の要件に合わせて編集できます。

11. IPtables で受信 ping リクエストをブロックする

システム管理者の中には、セキュリティ上の懸念から受信 ping リクエストをブロックしたい人もいます。脅威はそれほど大きくありませんが、そのようなリクエストをブロックする方法を知っておくと良いでしょう。

iptables -A INPUT -p icmp -i eth0 -j DROP

12. ループバックアクセスを許可する

ループバック アクセス (127.0.0.1 からのアクセス) は重要なので、常にアクティブなままにしておく必要があります。

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. ドロップされたネットワーク パケットのログを IPtables に保存する

ネットワーク インターフェイス eth0 でドロップされたパケットをログに記録する場合は、次のコマンドを使用できます。

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

"--log-prefix" の後の値を任意の値に変更できます。メッセージは /var/log/messages に記録され、次のコマンドで検索できます。

grep "IPtables dropped packets:" /var/log/messages

14. IPtable 上の特定の MAC アドレスへのアクセスをブロックする

以下を使用して、特定の MAC アドレスからのシステムへのアクセスをブロックできます。

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

もちろん、"00:00:00:00:00:00" をブロックしたい実際の MAC アドレスに変更する必要があります。

15. IP アドレスごとの同時接続数を制限する

特定のポート上の単一の IP アドレスから確立される同時接続が多すぎることを望まない場合は、以下のコマンドを使用できます。

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

上記のコマンドでは、クライアントあたり 3 個以下の接続が許可されます。もちろん、さまざまなサービスに合わせてポート番号を変更できます。また、--connlimit-above も要件に合わせて変更する必要があります。

16. IPtables ルール内の検索

iptables ルールを定義したら、時々検索する必要が生じ、場合によってはルールを変更する必要があります。ルール内を検索する簡単な方法は、以下を使用することです。

iptables -L $table -v -n | grep $string

上記の例では、 $table を検索する実際のテーブルに変更し、 $string を検索する実際の文字列に変更する必要があります。

以下に例を示します。

iptables -L INPUT -v -n | grep 192.168.0.100

17. 新しい IPTables チェーンを定義する

iptables を使用すると、独自のチェーンを定義し、そこにカスタム ルールを保存できます。チェーンを定義するには、次を使用します。

iptables -N custom-filter

これで、新しいフィルターが存在するかどうかを確認できます。

iptables -L
サンプル出力
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. IPtables ファイアウォール チェーンまたはルールをフラッシュする

ファイアウォール チェーンをフラッシュしたい場合は、以下を使用できます。

iptables -F

次のコマンドを使用して、特定のテーブルからチェーンをフラッシュできます。

iptables -t nat -F

"nat" をフラッシュしたいチェーンの実際のテーブルに変更できます。

19. IPtables ルールをファイルに保存する

ファイアウォール ルールを保存したい場合は、iptables-save コマンドを使用できます。以下を使用してルールをファイルに保存できます。

iptables-save > ~/iptables.rules

ファイルをどこに保存するか、どのような名前を付けるかはあなた次第です。

20. ファイルから IPtables ルールを復元する

iptables ルールのリストを復元したい場合は、iptables-restore を使用できます。コマンドは次のようになります。

iptables-restore < ~/iptables.rules

もちろん、ルール ファイルへのパスは異なる場合があります。

21. PCI 準拠のための IPtables ルールのセットアップ

一部のシステム管理者は、サーバーを PCI 準拠になるように構成する必要がある場合があります。さまざまな PCI コンプライアンス ベンダーごとに多くの要件がありますが、共通の要件はほとんどありません。

多くの場合、複数の IP アドレスが必要になります。サイトの IP アドレスには以下のルールを適用する必要があります。以下のルールを使用する場合は特に注意し、自分が何をしようとしているのかを確信している場合にのみ使用してください。

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

cPanel または同様のコントロール パネルを使用している場合は、そのポートもブロックする必要がある場合があります。以下に例を示します。

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

: PCI ベンダーの要件を確実に満たすために、ベンダーのレポートを注意深く確認し、必要なルールを適用してください。場合によっては、特定のポート上の UDP トラフィックもブロックする必要があるかもしれません。

22. 確立された接続と関連する接続を許可する

ネットワーク トラフィックは受信と送信で分離されているため、確立された関連する受信トラフィックを許可する必要があります。受信接続の場合は、次のように実行します。

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

発信用:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. IPtables で無効なパケットをドロップする

一部のネットワーク パケットが無効としてマークされる可能性があります。これらのパッケージをログに記録することを好む人もいるかもしれませんが、削除することを好む人もいます。無効なパケットをドロップするには、次を使用できます。

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. ネットワークインターフェース上の接続をブロックする

一部のシステムには複数のネットワーク インターフェイスがある場合があります。そのネットワーク インターフェイスへのアクセスを制限したり、特定の IP アドレスからの接続をブロックしたりできます。

例えば:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

「xxx.xxx.xxx.xxx」 を、ブロックしたい実際の IP アドレス (またはネットワーク) に変更します。

25. IPTables を介した送信メールを無効にする

システムが電子メールを送信しないようにする場合は、SMTP ポートの送信ポートをブロックできます。たとえば、次のように使用できます。

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

結論

iptables は、簡単にメリットを享受できる強力なファイアウォールです。すべてのシステム管理者にとって、少なくとも iptables の基本を学ぶことが重要です。 iptables とそのオプションについてさらに詳しく知りたい場合は、マニュアルを読むことを強くお勧めします。

man iptables

このリストにさらにコマンドを追加する必要があると思われる場合は、下のコメント セクションに送信して共有してください。