iptablesは、Linuxに実装されたパケットフィルタリングおよびネットワークアドレス変換 (NAT) 機能であるNetfilter(複数のNetfilterモジュールとして実装されている)の設定を操作するコマンドのこと。Netfilterは、いわゆるファイアウォールやルータとしての役割を果たす。IPv4 用の実装が iptables で、IPv6 用の実装が ip6tables である。

Linuxのバージョンとパケットフィルタ

Linuxカーネル2.4以降では、Netfilterというパケット処理のためのフレームワークをもっており、これの設定を操作するツールがiptablesである。

Linuxカーネル2.2系列以前ではipchainsまたはipfwadmといった実装が使われていた。netfilterとiptablesはこれらを完全に置き換えるものである。

iptablesの構成 iptablesでは、フィルタリングする対象を選ぶ「テーブル」と、各テーブルにおいて、どのタイミングで処理するかを示す「チェイン」で構成されている。

filterテーブルはパケットの出入り自体を制御できる natテーブルはパケットの中身を書き換えることを制御できる、主にネットワークアドレス変換やIPマスカレード(LinuxのNAPT実装)向けに用いられる。

filterテーブルでは、初期状態で次のチェインが用意されている。

パケットが入る際に利用するINPUTチェイン パケットが出ていく際に利用するOUTPUTチェイン インターフェース間をまたぐ際に利用するFORWARDチェイン

natテーブルでは、主にパケットを書換えるタイミングに影響する次のチェインが用意されている。これらのチェインは管理者であれば自由に追加、削除が可能となっている。

PREROUTINGチェイン POSTROUTINGチェイン

チェインの編集 iptablesは各テーブル内のチェインを書換えることにより、パケットフィルタリングができる。

パケットフィルタリングの例 チェインを編集するには例えば、次のようにiptablesコマンドを用いる。

iptables -t filter -I INPUT -p tcp -s 123.123.123.123 --dport 80 -j DROP

-t filter でfilterテーブルを操作 -I INPUT でINPUTチェインに追加(-Iでチェイン内ルールの先頭に、-Aで末尾に) -p tcp でTCPプロトコル限定 -s 123.123.123.123 で送信元IPアドレスを指定、 --dport 80 で 80番ポート(80/tcp = http)を指定 上記ルールにマッチしたパケットを-j DROPで破棄

まとめるとfilterテーブルのINPUTチェインの先頭に以下のルールを追加:IP 123.123.123.123から80/tcp(http)に入ろうとしているパケットは送信元(123.123.123.123)に通知することなく破棄(DROP)ということになる。

ネットワークアドレス変換の例 下記の例で、例えば、LAN内に 192.168.0.10:8080 で公開しているウェブサーバーがあり、それを 80 番ポートで公開することが出来る。 iptables --table nat --append PREROUTING --protocol tcp --destination-port 80 \ --jump DNAT --to-destination 192.168.0.10:8080

出典

関連項目 Firestarter Firewalld

外部リンク Man page of iptables (JM Projectによる日本語訳) Man page of ip6tables Man page of iptables-extensions Iptablesチュートリアル