Linux > ネットワーク関連 > iptables

iptablesの使い方メモ



概要

簡単な編集の概要は以下の通り。
  1. 現在の適用ルールの確認
  2. ルールの修正
  3. 保存
  4. iptablesの再始動



現在の適用ルールの確認

<コマンド>
iptables -L -n --line-numbers
-L リストアップ
-n IPなどを逆引きせずにIPアドレスのまま表示
-v 詳細表示
--line-numbers ルール番号の表示

<実行結果(例)>
Chain INPUT (policy ACCEPT 145 packets, 26201 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0
2      653  763K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
3      169 13178 ACCEPT     tcp  --  *      *       192.168.1.0/24       0.0.0.0/0           tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 853 packets, 789K bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain RH-Firewall-1-INPUT (0 references)
num   pkts bytes target     prot opt in     out     source               destination



編集の基本(ルールの追加・変更・削除)

<コマンド>
iptables -A チェイン名 ... -j ターゲット
iptables -D チェイン名
iptables -D チェイン名 ルール番号
iptables -I チェイン名 ルール番号 ... -j ターゲット
iptables -R チェイン名 ルール番号 ... -j ターゲット
-A 指定したチェインの末尾に新しいルールを追加します。
-D 指定したチェインあるいはルールを削除します。
-I 指定したチェインのルール番号の前にルールを挿入します。
-R 指定したチェインのルールを置き換えます。
チェインとは、いくつか複数定義したルールのリスト。
先頭から順番に評価され、適用されるルールに従って最終的な処理を行います。
INPUT 入力パケット
FORWARD 転送パケット
OUTPUT 出力パケット
RH-Firewall-1-INPUT 入力パケットに対するファイアウォール動作チェイン
RHEL系OSでは初期設定で「RH-Firewall-1-INPUT」という受信(INPUT)ポート用のチェインが定義されているので、通常はこちらを編集する。

ターゲットとはルールが適用された場合に行うべき処理。
ACCEPT 適用対象のパケットによる通信を許可します。
REJECT 適用対象のパケットによる通信を却下します。この時ICMPメッセージを送信元に返します。
DROP 適用対象のパケットを破棄します。応答を返しません。
REDIRECT
ターゲットには、別に定義したチェインを指定することも可能。
初期設定でINPUTはRH-Firewall-1-INPUTにチェインされている。



(例)入出力インタフェースによる指定

iptables -A RH-Firewall-1-INPUT -i <eth#> ... -j ACCEPT
iptables -A RH-Firewall-1-INPUT -o <eth#> ... -j ACCEPT
eth#はOSのifconfigより確認できるインターフェース名



(例)プロトコルによる指定

iptables -A RH-Firewall-1-INPUT -p tcp ... -j ACCEPT
-p tcp TCP/IPによる指定
-p udp UDPパケットによる指定
-p icmp ICMPパケットによる指定
-p all 全て

-p esp Encap Security Payload
-p ah Authentication Header
OSで使えるプロトコル番号の定義は
/etc/protocols
で確認できる。



(例)送信元/送信先による指定

iptables -A RH-Firewall-1-INTPU -s <送信元> -d <送信先> ... -j ACCEPT
-s <送信元> 送信元のネットワークアドレスを指定
-d <送信先> 送信先のネットワークアドレスを指定



(例)ポート番号の指定

iptables -RH-Firewall-1-INPUT -p tcp --dport 22 -j ACCEPT
ポート番号を指定する場合は、プロトコルの指定が必須。



(例)複数ポートを範囲指定

iptables -A RH-Firewall-1-INPUT -p tcp -m multiport --dports 5901:5905 -s 192.168.109.0/24 -j ACCEPT

-A RH-Firewall-1-INPUT ルールの追加
-p tcp 対象のプロトコルをTCPに指定
-m multiport 複数ポートをサポート
--dports 5901:5905 ポート番号を5901から5905に指定
-s 192.168.109.0/24 ソースネットワークを192.168.109.0/24に指定
-j ACCEPT 許可



新しいチェインの作成・削除

iptables -N チェイン名
iptables -Z チェイン名
-N 新しいチェインの作成
-Z 指定したチェインの削除



iptablesの保存

コマンドで修正した内容は、iptablesサービスを再始動すると元の設定内容に戻ってしまうため、保存する必要があります。
保存コマンド
/etc/rc.d/init.d/iptables save
あるいは
iptables-save

尚、上記コマンドにて保存されるファイルは通常
/etc/sysconfig/iptables
です。
OSインストール直後の設定を保存する場合は、このファイルを保存します。



iptablesの再始動

/etc/rc.d/init.d/iptables restart
事前にルールを保存しておく必要があります。



良く使うオプション

-m icmp --icmp-type

-m icmp --icmp-type any
-m icmp ICMPマッチング拡張を指定(必須)
--icmp-type any ICMPのタイプを指定
指定できるタイプはiptables -p icmp -hで確認可能。


-m state --state

-m state --state  RELATED,ESTABLISHED
INVALID 既知の接続と関係していないパケット
ESTABLISHED 過去双方向にパケットがやり取りされた接続に属するパケット
NEW 新しい接続を開始したか、双方向にはパケットがやり取りされていない接続に属するパケット
RELATED このパケットが新しい接続を開始しているが、 FTP データ転送や ICMP エラーのように、既存の接続に関係しているパケット
DNS参照など、UDPパケットにてDNS参照の結果を取得するような場合、IPフィルタかた見た挙動としてはINPUTパケットになる。



--reject-with icmp-host-prohibited

パケットをREJECTする際のICMPメッセージを指定します。


参考情報

Manpage of IPTABLES

Iptablesチュートリアル 1.2.2




最終更新日 : [2009-09-24]
最終更新:2009年09月24日 14:40