iptablesを使う
iptablesを使ってパケットフィルタリングを行います。
iptablesルール設定の基本形
テーブル
組み込みチェイン
チェイン操作オプション
ルール関連オプション
ターゲット
ポリシーチェインの設定
NATの設定例
FORWARDチェインの設定例
INPUT/OUTPUTチェインの設定例
iptablesルール設定の基本形
iptablesでルールを設定するときの基本形は次のようになります。
iptables [-t <テーブル>] <チェイン操作オプション> <チェイン> <ルール> [<オプション>]
- -t オプション
- 対象とするテーブルを指定します。
- 省略した場合はfilterテーブルを指定したものされます。
- テーブル
- <チェイン操作オプション>
- チェインに対する操作を指定します。
- チェイン操作オプション
- <チェイン>
- 利用するチェインを指定します。
- 組み込みチェインは大文字で指定します。
- 組み込みチェイン
- <ルール>
- チェインに適合するルールを指定します。
- ルール関連オプション
- <オプション>
- パケットを入出力するネットワークインターフェースやターゲットを指定します。
- ターゲット
テーブル
テーブルは役割に応じたルールを設定する場所です。iptablesには、filter、nat、mangleの3つのテーブルが用意されています。テーブルによって使用できるチェインが異なります。
filter |
パケットフィルタリングで参照するテーブルを指定します。
パケットフィルタリングの設定はすべてfilterテーブルに対して行われます。
INPUT、FORWARD、OUTPUT
|
---|---|
nat |
新しい接続を開くパケットが参照するテーブルを指定します
NAT、IPマスカレードの設定やパケットのリダイレクトなどの設定をnatテーブルに対して行います。
PREROUTING、OUTPUT、POSTROUTING
|
mangle |
特別なパケットが参照するテーブルを指定します。
パケット自体を直接操作する場合に利用されます。
PREROUTING、OUTPUT
|
組み込みチェイン
チェインはパケットを検査するルールのリストです。それぞれのチェインでルールに適合するかを調べ、次のチェインにパケットを渡します。
このチェインのルールを変更、追加することでfilterテーブルやnatテーブルの設定が行われます。
INPUT |
ローカルプロセス宛のパケットに対して適用されます。
|
---|---|
OUTPUT |
ローカルプロセスからネットワークインターフェースにパケットが出力されるときに適用されます。
|
FORWARD |
ネットワークインターフェースから渡されたパケットをどのように転送するかを設定します。
|
PREROUTING |
ネットワークインターフェースから渡されたパケットに対してアドレス変換するときに適用されます。
|
POSTROUTING |
ネットワークインターフェースに出力されるパケットに対してアドレス変換を行うときに適用されます。
|
チェイン操作オプション
チェイン操作オプションはチェインの操作を行うときに使用されます。
- -A <chain>
- <chain>にルールを新規に追加します。
- --append
- -D <chain> [<number>]
- <chain>から<number>で指定したルールを削除します。
- --delete
- -E <old-chain> <new-chain>
- <old-chain>で指定したチェインを<new-chain>で指定したチェインに変更します。
- --rename-chain
- -F [<chain>]
- <chain>からすべてのルールを削除します。
- <chain>を省略した場合はすべてのチェインが対象になります。
- --flush
- -I <chain> [<number>]
- <chain>の<number>で指定される位置にルールを新規に挿入します。
- --insert
- -L [<chain>]
- <chain>のルール一覧を出力します。
- <chain>を省略した場合はすべてのチェインの一覧が出力されます。
- --list
- -N <new-chain>
- 新しいユーザ定義チェイン<new-chain>を作成します。
- --new-chain
- -P <chain> <target>
- <chain>に対するポリシーを<target>に設定します。
- --policy
- -R <chain> <number>
- <chian>の<number>の位置るーるを置き換えます。
- --replace
- -X <chain>
- ユーザ定義チェイン<chain>を削除します。
- --delete-chain
- -Z [<chain>]
- <chain>のパケットカウンタとバイトカウンタをゼロにリセットします。
- <chain>を省略した場合はすべてのチェインが対象になります。
- --zero
ルール関連オプション
ルール関連オプションはチェイン内のルールを指定するのに使用されます。
- -p (--protocol) [!] プロコトル
- ルールで使うプロトコルを指定します。
- tcp、udp、icmp、all
- -s (--source) [!] IPアドレス[/mask]
- 送信元アドレスを指定します。
- IPアドレスのほかにホスト名などでも指定できます。
- -d (--destination) [!] IPアドレス[/mask]
- 送信先アドレスを指定します。
- IPアドレスのほかにホスト名などでも指定できます。
- -i (--in-interface) [!] デバイス
- パケットが入ってくるインターフェイスを指定します。
- eth0、eth1、ppp0
- -o (--out-interface) [!] デバイス
- パケットが出ていくインターフェイスを指定します。
- eth0、eth1、ppp0
- -j (--jump) ターゲット
- パケットがマッチしたときのアクション(ターゲット)を指定します。
- -t (--table) テーブル
- テーブルを指定します。
- filter、nat、mangle
- --sport (--source-port) [!] [<start>[:<end>]]
- パケットの送信元ポートを指定します。
- <start>と<stop>でポートの範囲を指定します。
- --dport (--destination-port) [!] [<start>[:<end>]]
- パケットの送信先ポートを指定します。
- <start>と<stop>でポートの範囲を指定します。
- --icmp-type [!] typename
- typenameにはICMPのタイプ(echo-requestやecho-replyなど)を指定します。
- パラメータ設定で -p icmp を指定したときに使用します。
- --mac-source
- 送信元MACアドレスを指定します。
! を付けと否定の意味になります。
ターゲット
ルールにマッチしたパケットが何を行うかを指定します。
ACCEPT |
パケットの通過を許可します。
|
---|---|
DROP |
パケットを破棄します。
|
REJECT |
エラーパケットをICMPを使って送信後、パケットを破棄します。
|
MASQUERRADE |
パケットの送信元アドレスを変更します。
|
DNAT |
パケットの送信先アドレスを変更します。
|
SNAT |
パケットの送信元アドレスを変更します。
|
REDIRECT |
特定ポートにリダイレクトします。
|
QUEUE |
パケットをキューに登録します。
|
RETURN |
チェイン内のルールに対するパケットのチェックを修了します。
|
LOG |
マッチしたパケットをログに記録します。
|
TOS |
Type of Serviceフィールドを設定します。
|
- SNAT --to(--to-source) <ipaddr>[-<ipaddr>][:port-port]
- パケットの送信元アドレスを変換します。
- natテーブルとPOSTROUTINGチェインでのみ有効です。
- ポートを指定すると、変換されたアドレスの指定されたポートで接続することになります。
- IPアドレス、ポート共にレンジ指定ができます。
- DNAT --to(--to-destination) <ipaddr>[-<ipaddr>][:port-port]
- パケットの送信先アドレスを変換します。
- natテーブルとPREROUTING、OUTPUTチェインと、これらのチェインから呼び出されるユーザ定義チェインのみで有効です。
- ポートを指定すると、変換されたアドレスの指定されたポート宛に接続することになります。
- IPアドレス、ポート共にレンジ指定ができます。
ポリシーチェインの設定
iptablesはポリシー(-P)を使用してデフォルトのルールを作成します。多くの場合、ポリシーとしてすべてのパケットをドロップして、状況に応じて特定のパケットを許可する方法がとられます。
すべての着信、発信パケット、フォワードされたパケットをブロックします。
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
ポリシーチェインを設定したら、セキュリティに必要な新しいルールを作成するようにします。
NATの設定例
NATの動作
外部のホストから内部のサーバに接続する場合、まずファイアウォールの外側のインターフェイス(eth0)に割り当てられたグローバルアドレスに対してアクセスしてきます。
ファイアウォールを介して接続を許可するルールが存在しても、そのままのDestinationアドレスではサーバにはアクセスすることはできません。
そこで、ファイアウォールでDestinationアドレスをグローバルアドレスから実IPアドレスに変換してやる必要があります。
iptablesの記述方法
Webサーバ宛パケットのDestinationアドレスを1.2.3.4(Webサーバのグローバルアドレス)から192.168.10.10(Webサーバの実IPアドレス)に変換するには、次のような記述になります。
Destinationアドレスの変換を行いますから、PREROUTINGチェインにルールを追加します。
# /sbin/iptables -t nat -A PREROUTING -d 1.2.3.4 -i eth0 -j DNAT --to 192.168.10.10
Destinationアドレス変換ルール
-t nat natテーブルの使用を指定
-A PREROUTING PREROUTINGチェインにルールを追加
-d 1.2.3.4 変換前Destinationアドレス 1.2.3.4
-j DNAT --to 192.168.10.10 変換後のアドレス192.168.10.10を指定
-i eth0 パケットを受け取るインターフェイスがeth0であることを指定
(注)
接続要求に対しては、それに対する応答パケットを返します。応答のパケットもファイアウォールを通過するわけですが、NATに関しては特に定義する必要はありません。接続してきたパケットの送信元アドレスは変換させていないからです。応答パケットはファイアウォールを通過した後、もともと接続要求のあったアドレス1.2.3.4でクライアントに戻ります。
FORWARDチェインの設定例
FORWARDチェインの役目は、必要なパケットだけに目的のホストやサービスへアクセスを許可することです。
FORWARDチェインの基本ポリシーはDROP(パケットを破棄)とします。そして、許可するアクセスのみ「穴をあける」設定を行います。
基本ポリシーの設定
FORWARDチェインのポリシーをDROPに設定します。
# /sbin/iptables -P FORWARD DROP
-Pオプションは、指定したチェインに対して基本ポリシーを設定するオプションです。
ファイアウォールを通過してホストへ到達できる経路はすべて絶たれたことになります。
ルールの設定
<想定ルール>
インターネット上のホストからWebサーバ(192.168.10.10)に対するHTTP(80/TCP)のアクセスのみを許可します。
<Webサーバへのアクセス許可>
インターネット上のホストから、Webサーバへのアクセスを許可するには次のコマンドを実行します。
# /sbin/iptables -A FORWARD -p tcp --dport 80 -d 192.168.10.10 -j ACCEPT
-A FORWARDチェインに追加
-p tcp ルールで使用するプロトコル
--dport 80 送信先ポート
-d 192.168.10.10 送信先アドレス
-j ACCEPT パケットの通過を許可
<Webサーバからインターネット ホストへの応答パケットの許可>
Webサーバからインターネット上のホストへの応答パケットを許可するルールを設定します。
# /sbin/iptables -A FORWARD -p tcp ! --syn -m state --state ESTABLISHED --sport 80 -s 192.168.10.10 -j ACCEPT
-A FORWARDチェインに追加
-p tcp ルールで使用するプロトコル
! --syn SYNビットがクリアされACKとFINビットがセットされているTCPパケット
--sport 80 送信元ポート
-s 192.168.10.10 送信元アドレス
-m state --state ESTABLISHED ESTABLISHEDなセッション(双方向接続のパケット)
-j ACCEPT パケットの通過を許可
INPUT/OUTPUTチェインの設定例
メンテナンス用ホスト(192.168.64.10)から、ファイアウォールの外側のインターフェイスeth2(192.168.64.1)に対する22/TCP(ssh)による接続を許可します。
INPUTチェインには外部からホストへ入ってくるためのルールを、OUTPUTチェインにはホストから外部へ出ていくためのルールを追加します。
# /sbin/iptables -A INPUT -p tcp -s 192.168.64.10 --dport 22 -d 192.168.64.1 -i eth2 -j ACCEPT
# /sbin/iptables -A OUTPUT -p tcp ! --syn -m state --state ESTABLISHED --sport 22 -s 192.168.64.10 -d 192.168.64.1
ICMPの処理の例
生存確認のためメンテナンス用のホスト(192.168.64.10)から、Webサーバ(192.168.10.10)に対するEcho Requestと、その応答のためのEcho Replyを許可します。
# /sbin/iptables -A FORWARD -p icmp -s 192.168.64.10 --icmp-type 8 -d 192.168.10.10 -i eth2 -j ACCEPT
# /sbin/iptables -A FORWARD -p icmp --icmp-type 0 -s 192.168.10.10 -d 192.168.64.10 -o eth2 -j ACCEPT
<ICMP Typeフィールド >
0 Echo Reply
3 Destination Unreachable
4 Source Quench
5 Redirect
8 Echo Request
11 Time Exceeded
12 Parameter Problem
13 Timestamp Request
14 Timestamp Reply
15 Information Request
16 Information Reply
17 Address Mask Request
18 Address Mask Reply
変更 2014.04.16
変更 2010.09.29
2008.07.30