iptablesの概要メモ

公開日:2013/03/18 更新日:2013/03/18
iptablesの概要メモのサムネイル

iptablesは多くのLinuxに標準でインストールされているファイアウォールソフトウェアです。iptablesは特定の通信を通過/遮断したり、パケットの送信元IPアドレス、宛先アドレスを別のアドレスに変換したりする機能を提供しています。

iptablesでは、下記のように「テーブル」、「ルール操作」、「チェイン」、「オプション」、「ターゲット」を指定することで環境に合わせたフィルタリングルールを作成することができます。

iptables テーブル ルール操作 チェイン オプション ターゲット

例えば、下記のコマンドを実行すると、eth0を通して入ってきたパケットを廃棄するフィルタリングルールをiptablesに追加することができます。

iptables --table filter --append INPUT --in-interface eth0 --jump DROP

「テーブル」、「ルール操作」、「チェイン」、「オプション」、「ターゲット」の内容を下記に載せます。

テーブル

iptablesには下記の3つのテーブルがあり、各テーブルをつかってパケットに対する処理を設定します。

テーブル名 説明
filter 特定のパケットの通過/遮断を設定してフィルタリングする時に使うテーブル
nat 特定のパケットのIPアドレス変換を行うときに使うテーブル
mangle 特定のパケットのIPヘッダの値を書き換えるときに使うテーブル

ルール操作

テーブルを指定した後は、ルールの追加、削除、置換などのルール操作を指定します。

ルール操作名 説明
--append、-A ルールを追加する
--delete、-D ルールを削除する
--replace、-R ルールを置換する
--insert、-I ルールを挿入する
--list、-L ルールを表示する
--flush、-F 全ルールを初期化する(全削除する)

チェイン

次に、処理を施すパケットの条件としてチェインを指定します。インターフェースに届いたパケットの内、どのタイミングのパケットを対象とするかを下記の表のチェインによって指定することができます。

チェイン名 対象パケット
INPUT ホストマシンにルーティングされてローカルプロセスに入力される直前のパケット
OUTPUT ホストマシンのローカルプロセスから出力された直後のパケット
FORWARD (filterテーブル、mangleテーブルで指定可能) インタフェースに入ったパケットの内ルーティングされて転送されるパケット
PREROUTING (natテーブル、mangleテーブルで指定可能) インターフェースethに入った直後のパケット
POSTROUTING (natテーブル、mangleテーブルで指定可能) インターフェースethから出る直前のパケット

各チェインがどのパケットを対象とするかを表したイメージ図が下図になります。

iptables3.png 上図の「routing」はiptablesが動作するホストマシンによるルーティング処理を表します。

INPUTとPREROUTINGの違い

PREROUTINGはその名の通り、インタフェースethに入ってきたパケットの内、ルーティング処理される前のパケットを対象としています。すなわち、PREROUTINGが対象とするパケットには、ホストマシン宛ではないパケットも含まれます。これに対してINPUTは、ルーティング処理されてローカルプロセスに入力されるパケット、すなわちホストマシン宛のパケットが対象となります。

OUTPUTとPOSTROUTINGの違い

OUTPUTはローカルプロセスに処理されて出力されたパケット、すなわち送信元がホストマシンであるパケットを対象としているのに対し、POSTROUTINGは送信元がホストマシンであるとは限りません。例えば、FORWARDによって転送されたパケットも対象となります。

オプション

iptablesにはルールの適用対象となるパケットをより細かく指定するためのオプションが多数用意されています。例えば、下記の表のようなオプションが用意されています。

オプション名 説明
--in-interface eth0、-i eth0 パケットが入ってくるインターフェースを指定します。この場合はeth0に流入するパケットが対象になります。
--out-interface eth0、-o eth0 パケットが出ていくインターフェースを指定します。この場合はeth0から流出するパケットが対象になります。
--destination 192.168.1.0/24、 -d 192.168.1.0/24 パケットの宛先IPアドレスを指定します。この場合は宛先IPアドレスが192.168.1.0/24であるパケットが対象となります。
--source 192.168.1.0/24、 -s 192.168.1.0/24 パケットの送信元IPアドレスを指定します。この場合は送信元IPアドレスが192.168.1.0/24であるパケットが対象となります。
--protocol tcp、 -p tcp プロトコルを指定します。この場合はtcpを指定しています。他にはudp、icmp、allなどを指定できます。
--dport 80、 -d 80 パケットの宛先ポート番号を指定しています。このオプションはプロトコルにtcp、udpを指定した場合に使用できます。
--sport 80、 -s 80 パケットの送信元ポート番号を指定しています。このオプションはプロトコルにtcp、udpを指定した場合に使用できます。
--jump ターゲット名、-j ターゲット名 設定したルールに合致したパケットに対する処理(ターゲット)を指定します。ターゲットについては下の表を参照。

ターゲット

「--jump」オプションのターゲットには下記のようなものがあります。

ターゲット名 説明
ACCEPT パケットの通過を許可する
DROP パケットを廃棄する
REJECT パケットを廃棄してエラーパケットを返す
MASQUERADE パケットの送信元IPアドレスをIPマスカレードする
DNAT パケットの宛先IPアドレスを変換する
SNAT パケットの送信元アドレスを変換する
REDIRECT パケットをホストマシン自体へリダイレクトする。なお、「--to-ports 3128」のように「--to-ports」オプションを使用することでポート番号を指定できる

上記の5つの表のテーブル ルール操作 チェイン オプション ターゲットを組み合わせてパケットフィルタリングやIPアドレス変換のためのルールをiptablesに追加したり、iptablesから削除したりします。iptablesの具体例はiptablesの設定内容確認と設定例を参照して下さい。

2013/10/7 追記

良く使うiptablesの運用管理方法2つをメモにiptablesの運用管理方法として、iptables-save、iptables-restoreを使った方法とシェルスクリプトを使った方法の2つをメモしました。iptablesの運用管理についてはこちらの方が情報が多いと思うので、良ければご参照下さい。

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。