GNU/Linux >> Linux の 問題 >  >> Linux

最も頻繁に使用される 25 の Linux IPTables ルールの例

一見すると、IPTables のルールは不可解に見えるかもしれません。

この記事では、必要に応じてコピーして貼り付けて使用できる 25 の実用的な IPTables ルールを紹介しました。

これらの例は、特定の要件に合わせてこれらのルールを微調整するための基本的なテンプレートとして機能します。

簡単に参照できるように、これら 25 の iptables ルールはすべてシェル スクリプト形式になっています:iptables-rules

1.既存のルールを削除

新しいルール セットの作成を開始する前に、すべての既定のルールと既存のルールをクリーンアップすることをお勧めします。これを行うには、以下に示すように iptables flush コマンドを使用します。

iptables -F
(or)
iptables --flush

2.デフォルトのチェーン ポリシーを設定

デフォルトのチェーン ポリシーは ACCEPT です。以下に示すように、これをすべての INPUT、FORWARD、および OUTPUT チェーンの DROP に変更します。

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

INPUT チェーンと OUTPUT チェーンの両方のデフォルト ポリシーを DROP として作成する場合、ファイアウォール ルール要件ごとに 2 つのルールを定義する必要があります。つまり、1 つは着信用、もう 1 つは発信用です。

以下のすべての例では、INPUT チェーンと OUTPUT チェーンの両方のデフォルト ポリシーとして DROP を設定しているため、シナリオごとに 2 つのルールがあります。

内部ユーザーを信頼する場合は、上記の最後の行を省略できます。つまり、デフォルトではすべての発信パケットをドロップしません。その場合、ファイアウォール ルールの要件ごとに、ルールを 1 つだけ定義するだけで済みます。つまり、送信はすべてのパケットに対して ACCEPT であるため、受信に対してのみルールを定義します。

注: チェーンの意味がわからない場合は、まず IPTables の基礎を理解する必要があります。

3.特定の IP アドレスをブロック

さらに先に進む前に、他の例を示します。特定の IP アドレスをブロックする場合は、以下に示すように最初にブロックする必要があります。次の例の「x.x.x.x」を、ブロックしたい特定の IP アドレスに変更してください。

BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP

これは、ログ ファイルで特定の IP アドレスから奇妙なアクティビティを発見し、さらに調査を行う間、その IP アドレスを一時的にブロックしたい場合に役立ちます。

次のバリエーションのいずれかを使用して、この ip-address の eth0 接続で TCP トラフィックのみをブロックすることもできます。

iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

4.すべての着信 SSH を許可

次のルールは、eth0 インターフェイスですべての着信 ssh 接続を許可します。

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

注意 :各引数の意味を正確に理解したい場合は、IPTables ファイアウォール ルールを追加する方法をお読みください

5.特定のネットワークからの受信 SSH のみを許可

次のルールは、192.168.100.X ネットワークからの着信 ssh 接続のみを許可します。

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

上記の例では、/24 の代わりに完全なサブネット マスクを使用することもできます。つまり、「192.168.100.0/255.255.255.0」です。

6.受信 HTTP および HTTPS を許可

次のルールは、すべての着信 Web トラフィックを許可します。つまり、ポート 80 への HTTP トラフィック。

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

次のルールは、すべての受信セキュア Web トラフィックを許可します。つまり、ポート 443 への HTTPS トラフィック。

iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

7.マルチポートを使用して複数のルールを組み合わせる

外界から複数のポートへの着信接続を許可する場合、ポートごとに個別のルールを記述する代わりに、以下に示すようにマルチポート拡張機能を使用してそれらを組み合わせることができます。

次の例では、すべての着信 SSH、HTTP、および HTTPS トラフィックを許可します。

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

8.発信 SSH を許可

次のルールは、発信 ssh 接続を許可します。つまり、内部サーバーから外部サーバーに ssh する場合。

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

これは、incoming ルールとは少し異なることに注意してください。つまり、OUTPUT チェーンでは NEW 状態と ESTABLISHED 状態の両方を許可し、INPUT チェーンでは ESTABLISHED 状態のみを許可します。着信ルールの場合は、その逆です。

9.特定のネットワークへの送信 SSH のみを許可する

次のルールは、特定のネットワークへの発信 ssh 接続のみを許可します。つまり、内部から 192.168.100.0/24 ネットワークのみに ssh します。

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

10.送信 HTTPS を許可

次のルールは、安全な Web トラフィックの送信を許可します。これは、ユーザーにインターネット トラフィックを許可する場合に役立ちます。サーバーでは、これらのルールは、wget を使用して外部からファイルをダウンロードする場合にも役立ちます。

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

注:発信 HTTP Web トラフィックの場合、上記のような 2 つのルールを追加し、443 を 80 に変更します。

11.着信 Web トラフィックの負荷分散

iptables ファイアウォール ルールを使用して、着信 Web トラフィックの負荷を分散することもできます。

これは iptables nth 拡張を使用します。次の例では、HTTPS トラフィックを 3 つの異なる IP アドレスに負荷分散します。 3 番目のパケットごとに、適切なサーバーに負荷分散されます (カウンター 0 を使用)。

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

12.外部から内部への Ping を許可

次のルールにより、外部ユーザーがサーバーに ping できるようになります。

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

13.内部から外部への Ping を許可

次のルールにより、内部から外部サーバーへの ping が可能になります。

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

14.ループバック アクセスを許可

サーバーで完全なループバック アクセスを許可する必要があります。つまり、127.0.0.1 を使用してアクセスします

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

15.内部ネットワークから外部ネットワークへの許可

1 つのイーサネット カードが外部サーバーに接続され、別のイーサネット カードが内部サーバーに接続されているファイアウォール サーバーでは、次のルールを使用して、内部ネットワークが外部ネットワークと通信できるようにします。

この例では、eth1 は外部ネットワーク (インターネット) に接続され、eth0 は内部ネットワーク (例:192.168.1.x) に接続されています。

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

16.アウトバウンド DNS を許可

次のルールは、発信 DNS 接続を許可します。

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

17. NIS 接続を許可

NIS を実行してユーザー アカウントを管理している場合は、NIS 接続を許可する必要があります。 SSH 接続を許可しても、NIS 関連の ypbind 接続を許可しないと、ユーザーはログインできません。

NIS ポートは動的です。つまり、ypbind が開始すると、ポートが割り当てられます。

最初に以下に示すように rpcinfo -p を実行し、ポート番号を取得します。この例では、ポート 853 と 850 を使用していました。

rpcinfo -p | grep ypbind

ポート 111 への着信接続と、ypbind によって使用されたポートを許可します。

iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 853 -j ACCEPT
iptables -A INPUT -p udp --dport 853 -j ACCEPT
iptables -A INPUT -p tcp --dport 850 -j ACCEPT
iptables -A INPUT -p udp --dport 850 -j ACCEPT

ypbind を再起動すると、ポート番号が異なるため、上記は機能しません。

これには 2 つの解決策があります。1) NIS に静的 IP アドレスを使用するか、2) 巧妙なシェル スクリプト技術を使用して、「rpcinfo -p」コマンド出力から動的ポート番号を自動的に取得し、上記のものを使用します。 iptables ルール。

18.特定のネットワークからの Rsync を許可

次のルールは、特定のネットワークからのみ rsync を許可します。

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

19.特定のネットワークからのみ MySQL 接続を許可する

MySQL を実行している場合、通常、外部からの直接接続を許可したくないでしょう。ほとんどの場合、MySQL データベースが実行されているサーバーと同じサーバーで Web サーバーが実行されている可能性があります。

ただし、DBA と開発者は、MySQL クライアントを使用してラップトップとデスクトップから MySQL に直接ログインする必要がある場合があります。このような場合、以下に示すように、内部ネットワークが MySQL と直接通信できるようにすることをお勧めします。

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

20. Sendmail または Postfix トラフィックを許可する

次のルールは、メール トラフィックを許可します。 sendmail または postfix の可能性があります。

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

21. IMAP と IMAPS を許可

次のルールは、IMAP/IMAP2 トラフィックを許可します。

iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

次のルールは IMAPS トラフィックを許可します。

iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

22. POP3 と POP3S を許可

次のルールは POP3 アクセスを許可します。

iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

次のルールは POP3S アクセスを許可します。

iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

23. DoS 攻撃を防ぐ

次の iptables ルールは、Web サーバーに対するサービス拒否 (DoS) 攻撃を防ぐのに役立ちます。

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

上記の例では:

  • -m limit:これは limit iptables 拡張機能を使用します
  • –limit 25/minute:これは、毎分最大 25 接続のみに制限します。特定の要件に基づいてこの値を変更します
  • –limit-burst 100:この値は、合計接続数が limit-burst レベルに達した後にのみ制限/分が適用されることを示します。

24.ポート転送

次の例では、ポート 442 に着信するすべてのトラフィックを 22 にルーティングします。これは、着信 ssh 接続がポート 22 と 422 の両方から着信できることを意味します。

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

上記を行う場合、ポート 422 で着信接続を明示的に許可する必要もあります。

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

25.ドロップされたパケットのログ

ドロップされたすべてのパケットをログに記録することもできます。これらのルールは一番下にあるべきです。

まず、LOGGING という名前の新しいチェーンを作成します。

iptables -N LOGGING

次に、以下に示すように、残りのすべての着信接続が LOGGING チェーンにジャンプすることを確認します。

iptables -A INPUT -j LOGGING

次に、カスタムの「ログ プレフィックス」を指定して、これらのパケットをログに記録します。

iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7

最後に、これらのパケットをドロップします。

iptables -A LOGGING -j DROP

上記の 25 個の iptables ルールはすべてシェル スクリプト形式です:iptables-rules

iptables シリーズの以前の記事:

  • Linux ファイアウォール チュートリアル:IPTables テーブル、チェーン、ルールの基礎
  • IPTables Flush:RedHat および CentOS Linux でのすべてのルールの削除/削除
  • Linux IPTables:ファイアウォール ルールを追加する方法 (Allow SSH の例を使用)
  • Linux IPTables:着信および発信ルールの例 (SSH および HTTP)

Linux
  1. 頻繁に使用される40の基本的なLinuxコマンド

  2. 最もよく使用される7つのLinux名前空間

  3. lsof :最も一般的に使用される例

  1. [Linux]:最も頻繁に使用される15のYUMコマンドと例

  2. 802021年に最も使用されたEssentialLinuxアプリケーション

  3. 10 の例を含む最も単純な Linux コマンド

  1. Linuxでiptablesファイアウォールを構成する方法

  2. Linuxで最もよく使用されるコマンドを見つける方法

  3. 7 Linux df コマンドの例