iptablesの概要メモ

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

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

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

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

テーブル

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から出る直前のパケット

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

iptables
上図の「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の運用管理についてはこちらの方が情報が多いと思うので、良ければご参照下さい。

このエントリーをはてなブックマークに追加

SPONSORED LINK

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

  1. […] Linuxをサーバとして使う場合、iptablesにルールを追加したり、削除したりして再設定する必要が出てくる場面が多いと思います。そしてこのような場面にiptablesのルールを自由に編集し、さらに編集したルールを自動設定させてiptablesを運用管理する方法として、iptables-saveとiptables-restoreを使う方法と、シェルスクリプトを使う方法の2つを良く使います。ここでは、この2つの運用管理方法についてメモします。 なお、以降のコマンドは全てroot権限で行います。また、実行環境はubuntu12.04になります。また、iptablesの具体的な設定内容例についてはiptablesの設定内容確認と設定例、iptablesの概要についてはiptablesの概要メモがそれぞれ参考になると思いますのでご参照下さい。 […]

  2. iptablesの設定内容確認と設定例 said on 2014年1月23日 at 11:31

    […] iptablesでは各チェインの一番上のルールから順番に適用していきます。そして上記の場合は、INPUTチェインの一番上のルールがDROPでありかつその対象が全パケットであるため、次のACCEPTが適用されることはありません。すなわち、iptablesでは、ルールの順番が重要であり、パケットの対象範囲が小さいルールから順番に適用されるようルールを記述することが重要になります。なお、ルールの順番は追加した順番と同じになりますが、「- -replace」や「- -insert」などのルール操作コマンドを使うことでルールの順番を操作できます。(iptablesの概要メモを参照) […]

  3. […] 一例として、iptablesをインストールして動作させているubuntuからsambaサーバにアクセスできなかった場合は、iptablesの設定内容を確認し、UDPの137番、138番、TCPの139番、445番のポートを許可する設定になっているかを確認すると良いと思います。ちなみに、iptablesにおいてUDPの137番、138番、TCPの139番、445番をそれぞれ許可するためには、以下のコマンドを実行します。iptablesの使い方についてはiptablesの概要メモに簡単にメモしてあります。 […]

トラックバック URL