毎日少しずつ上達:Linux iptablesの例


この文書では、25のiptablesの一般的なルールの例を示します.これらの例では、特定のニーズに応じて修正調整して期待できる基本的なテンプレートを提供します.
書式設定
iptables[-tテーブル名]オプション[チェーン名][条件][-j制御タイプ]
パラメータ
-Pデフォルトポリシーの設定:iptables-P INPUT(DROP|ACCEPT)-Fクリアルールチェーン-Lルールチェーン-Aルールチェーンの末尾に新しいルール-I numを追加ルールチェーンの先頭に新しいルール-D numを追加ルール-sマッチングソースアドレスIP/MASKを削除し、感嘆符を付けます.」このIP以外を表す.-dマッチングターゲットアドレス-iネットワークカード名マッチングこのネットワークカードから流入したデータ-oネットワークカード名マッチングこのネットワークカードから流出したデータ-pマッチングプロトコル、例えばtcp,udp,icmp、Cdport numマッチングターゲットポート番号、Csport numマッチングソースポート番号

1.既存のルールの削除
iptablesルールの作成を開始する前に、既存のルールを削除する必要があるかもしれません.コマンドは次のとおりです.
iptables -F
(or)
iptables �Cflush

2.チェーンのデフォルトポリシーの設定
チェーンのデフォルトポリシーは「ACCEPT」(承認)に設定されています.INPUT、FOrWARD、OUTPUTチェーンを「DROP」(拒否)に設定するには、次のコマンドを実行します.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

INPUTチェーンとOUTPUTチェーンがDROPに設定されている場合、ファイアウォールルールごとに2つのルールを定義する必要があります.たとえば、1つの送信が別の送信に送信されます.以下のすべての例では、DROPをINPUTチェーンとOUTPUTチェーンのデフォルトポリシーに設定したため、各場合に2つのルールを作成します.もちろん、内部ユーザーを信じている場合は、上記の最後の行を省略することができます.たとえば、デフォルトでは、アウトバウンドしたすべてのパケットは破棄されません.この場合、ファイアウォールのルール要件ごとに、インバウンド・パケットのみにルールを設定するルールを作成する必要があります.
3.指定IPアドレスのブロック
例:IPアドレスx.x.x.x.xからのパケットを破棄する
BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP

注意:logでipアドレスからの異常レコードを発見した場合、このコマンドでアドレスへのアクセスを一時的にブロックしてより深く分析することができます.
例:IPアドレスx.x.x.x.x eth 0 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の接続要求を許可する
例:外部からのすべてのSSH接続要求、すなわちeth 0インタフェースへのアクセスのみを許可し、ターゲットポートが22のパケット
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

5.指定されたネットワークからのSSH接続要求のみ許可
例:192.168.100.0/24ドメインからのユーザのみの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

6.httpとhttpの接続要求を許可する
例:Web 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�C 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.マルチポートを使用して複数のルールを結合する
複数のポートを外部から接続できます.各ポートに独立したルールを書く以外に、multiportでルールに組み合わせることができます.次のようになります.
例:すべての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リクエストの許可
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

これはsshの接続を許可するルールとは少し異なることに注意してください.この例はOUTPUTチェーンにおいてNEWとESTABLISHED状態を許容する.INPUTチェーンではESTABLISHED状態のみを許可した.ssh接続のルールは逆です.
9.ローカルから1つの指定されたネットワークドメインへのSSH要求のみを許可する
例:内部からネットワークドメインへの接続のみを許可192.168.100.0/24
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接続要求を許可する
次のルールでは、安全なネットワークトラフィックを出力できます.ユーザーがインターネットにアクセスできるようにするには、非常に必要です.サーバでは、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トラフィックの外部接続要求は、上記コマンドのポートを443から80に変更するだけです.
11.ロードバランシングによるネットワークトラフィック
iptablesを使用すると、Webトラフィックへの負荷分散を実現できます.iptablesファイアウォールルールを使用すると、Webトラフィックへの負荷分散を実現できます.例:iptables nthを使用してHTTPSトラフィック負荷を3つの異なるipアドレスにバランスさせる.
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内部ホストを許可する
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

13.内部ホスト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つのNICが外部に接続され、もう1つのNICが内部サーバに接続されています.次のルールを使用して、内部ネットワークと外部ネットワークの通信を許可します.この例では、eth 1は外部ネットワーク(インターネット)に接続され、eth 0は内部ネットワーク(たとえば192.168.1.x)に接続されます.
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

16.アウトバウンドを許可する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接続を許可する必要があります.NIS関連のypbind接続要求が許可されていない場合、SSH接続要求が許可されていてもユーザーはログインできません.NISのポートはダイナミックであり、まずコマンドrpcinfo、Cpを使用してポート番号を知る.この例では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)shellスクリプトを作成し、「rpcinfo�C p」コマンドで動的ポート番号を自動的に取得し、上記のiptablesルールで使用します.
18.指定されたネットワークからのrsync接続要求を許可する
例:ネットワーク192.168.101.0/24からの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データベースはウェブサービスと同じサーバ上を走っています.DBAと開発者のみが内部ネットワーク(192.168.100.0/24)から直接データベースにログインしたい場合があります.次のコマンドを試してみてください.
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は25ポートを使用しているので、25ポートからの接続要求を許可するだけでいいです.
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/IMAP 2流量を許可し、ポートは143
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流量を許可し、ポートは993
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.POP 3とPOP 3 Sを許可する
例:POP 3アクセス許可
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

例:POP 3 Sアクセス許可
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 -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

上記の例では、-m limit:limit拡張を有効にし、Climit 25/minute:必要に応じて最大25個の接続を許可します.Climit-burst 100:上記limit/minute制限は、接続がlimit-burstレベル(この例では100)に達した場合にのみ有効になります.
24.ポート転送
例:422ポートからのトラフィックをすべて22ポートに転送する.
これは、422ポートと22ポートを介してssh接続が可能であることを意味します.DNAT転送を有効にします.
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.廃棄されたデータテーブルを記録する
ステップ1:LOGGINGというチェーンを新規作成
iptables -N LOGGING

ステップ2:INPUTチェーンからのすべてのパケットをLOGGINGチェーンにジャンプ
iptables -A INPUT -j LOGGING

ステップ3:これらのパッケージの接頭辞をカスタマイズし、「IPTables Packet Dropped」と名前を付けます.
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7

ステップ4:これらのパケットを破棄
iptables -A LOGGING -j DROP

原文住所:http://www.thegeekstuff.com/2011/06/iptables-rules-examples/
ヨコ