iptablesは、
Linuxカーネルに組み込まれたNetfilterフレームワークの設定を操作するためのコマンドラインツールです。Netfilterはパケットフィルタリングや
ネットワークアドレス変換(NAT)といった、ネットワークセキュリティやルーティングに不可欠な機能を提供し、
ファイアウォールやルーターとしての役割を果たします。
Linuxのバージョンとパケットフィルタ
Linuxカーネル2.4以降では、Netfilterというパケット処理のフレームワークが採用されており、その設定を操作するためにiptablesが使用されます。これに対し、
Linuxカーネル2.2系列以前では、ipchainsやipfwadmといった別の実装が利用されていました。Netfilterとiptablesは、これらの旧来の実装を完全に置き換えるものとして導入されました。
iptablesの構成
iptablesは、パケットをフィルタリングする対象を選ぶ「テーブル」と、各テーブル内でパケットがどのタイミングで処理されるかを示す「チェイン」で構成されています。
テーブルの種類
filterテーブル: パケットの通過を許可または拒否することで、パケットの出入り自体を制御します。主にファイアウォールとして利用されます。
natテーブル: パケットの送信元や宛先のIPアドレスやポート番号を書き換えることで、
ネットワークアドレス変換(NAT)やIPマスカレードを実現します。
チェインの種類
filterテーブルには、以下の初期チェインが用意されています。
INPUTチェイン: ネットワークインターフェースからシステムに入ってくるパケットを処理します。
OUTPUTチェイン: システムからネットワークインターフェースへ出ていくパケットを処理します。
FORWARDチェイン: 異なるインターフェース間でルーティングされるパケットを処理します。
natテーブルには、パケットの書き換えタイミングに関わる以下のチェインが用意されています。
PREROUTINGチェイン: パケットがルーティング決定される前に処理されます。
POSTROUTINGチェイン: パケットがルーティング決定された後に処理されます。
これらのチェインは、管理者権限を持つユーザーであれば、自由に追加や削除が可能です。
チェインの編集
iptablesは、各テーブル内のチェインにルールを追加・編集することで、パケットフィルタリングを実現します。ルールの追加は、パケットのプロトコル、送信元や宛先のIPアドレス、ポート番号など、様々な条件に基づいて行えます。
パケットフィルタリングの例
以下は、filterテーブルのINPUTチェインにルールを追加する例です。
bash
iptables -t filter -I INPUT -p tcp -s 123.123.123.123 --dport 80 -j DROP
このコマンドは、以下のような処理を行います。
`-t filter`: filterテーブルを操作対象に指定します。
`-I INPUT`: INPUTチェインの先頭にルールを追加します(`-A`オプションでは末尾に追加)。
`-p tcp`: TCPプロトコルに限定します。
`-s 123.123.123.123`: 送信元IPアドレスを123.123.123.123に指定します。
`--dport 80`: 宛先ポートを80番(HTTP)に指定します。
`-j DROP`: マッチしたパケットを破棄します。
この例では、IPアドレス123.123.123.123からHTTP(80/tcp)でシステムに入ろうとするパケットを、送信元に通知することなく破棄するルールを追加しています。
以下は、natテーブルを利用して、LAN内のウェブサーバーを外部に公開する例です。
bash
iptables table nat append PREROUTING protocol tcp destination-port 80 \
jump DNAT to-destination 192.168.0.10:8080
この設定により、外部からの80番ポートへのアクセスを、LAN内のウェブサーバー(192.168.0.10:8080)に転送することができます。
関連項目
Firestarter
Firewalld
外部リンク
Man page of iptables (JM Projectによる日本語訳)
Man page of ip6tables
Man page of iptables-extensions
*
Iptablesチュートリアル