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から出る直前のパケット |
各チェインがどのパケットを対象とするかを表したイメージ図が下図になります。
上図の「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の運用管理についてはこちらの方が情報が多いと思うので、良ければご参照下さい。
関連記事
- 公開日:2022/09/11 更新日:2022/09/11
Google Compute EngineのインスタンスにSSH接続できなくなった時の対処方法
Google Compute EngineのインスタンスにSSH接続できていたのにSSHの設定ミスや原因不明でSSH接続できなくなった時の対処方法をメモします。自分のPCからだけでなく、Google Cloud Platform上での管理画面からもSSHできない場合にも有効です。
- 公開日:2022/09/08 更新日:2022/09/08
Google Compute EngineのインスタンスにSSH接続する
Google Compute Engineのインスタンスにssh接続するための手順をまとめます。
- 公開日:2018/02/10 更新日:2018/02/10
CentOSでrootのときだけ日本語が文字化けする時の原因と対処方法
さくらVPSでCentOSを使いはじめたところ、一般ユーザで使用している時はvimなどのエディタで編集していても日本語が問題なく表示されていましたが、root権限で同様に編集のためにファイルを開いたら日本語が文字化けしてしまいました。以降ではこの原因と対処方法についてメモします。
- 公開日:2017/12/09 更新日:2017/12/09
サーバ上のディレクトリをローカルにマウントするsshfsの使い方
Linuxでは、サーバ側のディレクトリを自身のローカルPCにマウントして、ローカル上のディレクトリして使用することができるsshfsというコマンドが用意されています。ここではこのsshfsの使い方をメモします。
- 公開日:2017/08/27 更新日:2017/08/27
MacでubuntuのインストールUSBを作成する方法と手順
MacでubuntuのインストールUSBを作成する手順をメモします。ここで載せる手順はターミナルでのコマンドによる方法になります。