iptablesは、Linuxに実装されたパケットフィルタリング及びネットワークアドレス変換(NAT)の機能であり、ファイアーウォールの役割を果たす。iptablesを操作するコマンドには、IPv4用の「iptables」とIPv6用の「ip6tables」がある。iptablesはOSIの第3階層(ネットワーク層)で動作する。第2階層(データリンク層)を扱いたい場合はebtablesを使用する。
iptablesサービスを起動するには、スーパーユーザの権限が必要である。suでスーパーユーザになるか、sudoコマンドを使う。
IPv4のiptablesサービスを起動する。
service iptables start
IPv6のiptablesサービスを起動する。
service ip6tables start
システム起動時にIPv4のiptablesサービスを起動する。
chkconfig iptables on
システム起動時にIPv6のiptablesサービスを起動する。
chkconfig ip6tables on
IPv4のiptablesサービスを停止する。
service iptables stop
IPv6のiptablesサービスを停止する。
service ip6tables stop
システム起動時にIPv4のiptablesサービスを停止する。
chkconfig iptables off
システム起動時にIPv6のiptablesサービスを停止する。
chkconfig ip6tables off
なお、Ubuntuではiptablesサービスを停止することができない。
iptablesコマンド及びip6tablesコマンドの操作対象は「テーブル」と「チェイン」である。
チェインの最後にルールを追加する。
iptables [-t table] -A chain rule [options]
チェインからルールを削除する。
iptables [-t table] -D chain rule [options]
チェインにルールを追加する。
iptables [-t table] -I chain [rule-no] rule [options]
チェインにあるルールを置き換える。
iptables [-t table] -R chain rule-no rule [options]
iptables [-t table] -D chain rule-no [options]
チェインにあるルールの一覧を表示する。
iptables [-t table] -L|-F|-Z [chain] [options]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target [options]
iptables [-t table] -E old-chain new-chain
「テーブル」とは、フィルタリングの対象である。
filter
テーブルを対象とする。
テーブル | 説明 |
---|---|
filter | パケットの入出力制御(既定値) |
nat | IPアドレス変換やポート変換 |
mangle | IPパケットヘッダの書き換え |
接続状態 | 説明 |
---|---|
NEW | 新規接続のパケット |
INVALID | 既存パケットと関係ないパケット |
ESTABLISHED | 既存パケットと関係するパケット |
RELATED | 新規接続のパケット又は既存パケットと関係するパケット |
chain
には次に示す組み込みチェイン又はユーザ定義チェインを指定する。テーブルにより指定できる組み込みチェインが異なる。
チェイン | 説明 | テーブル | ||
---|---|---|---|---|
filter | nat | mangle | ||
INPUT | 入力パケット | ✓ | ✗ | ✓ |
OUTPUT | 出力パケット | ✓ | ✓ | ✓ |
FORWARD | 転送パケット | ✓ | ✗ | ✓ |
PREROUTING | 入力パケット(ルーティング前) | ✗ | ✓ | ✓ |
POSTROUTING | 出力パケット(ルーティング後) | ✗ | ✓ | ✓ |
rule にはルールを指定する。
!
を指定すると、そのインタフェースを除外する。
eth+
と指定すると、
eth0, eth1...
にマッチする。このオプションを省略した場合、すべてのインタフェースが対象となる。
!
を指定すると、そのインタフェースを除外する。
eth+
と指定すると、
eth0, eth1...
にマッチする。このオプションを省略した場合、すべてのインタフェースが対象となる。
target
には、ユーザ定義チェイン又は次の組み込みターゲットを指定する。
ターゲット | 説明 |
---|---|
ACCEPT | パケットの送受信を許可する |
DROP | パケットを破棄する |
REJECT | パケットを破棄し、エラーパケット(ICMP)を返す |
LOG | ログを出力する |
SNAT | 送信元IPアドレスを変更する |
DNAT | 送信先IPアドレスを変更する |
MASQUERADE | 複数の送信元IPアドレスを変更する |
ICMPは、送信したデータが届かなかったとき又は障害が発生したときに利用されるプロトコルである。
!
を付けると、指定したプロトコルを除外する。このオプションを省略した場合、すべてのプロトコルが対象となる。
プロトコル | 説明 |
---|---|
all | ICMP、TCP/IP及びUDP/IP |
icmp | ICMP |
tcp | TCP/IP |
udp | UDP/IP |
address
の形式を使用する。ネットワークIPアドレスで指定する場合、
address
/
mask
の形式を使用する。ホスト名で指定する場合、
address
にホスト名を指定する。
!
を指定した場合、指定したアドレスを除外する。
address
の形式を使用する。ネットワークIPアドレスで指定する場合、
address
/
mask
の形式を使用する。ホスト名で指定する場合、
address
にホスト名を指定する。
!
を指定した場合、指定したアドレスを除外する。
# | level-name |
---|---|
0 | emerg |
1 | alert |
2 | crit |
3 | err |
4 | warning |
5 | notice |
6 | info |
7 | debug |
設定内容をチェインごとに表示する。
# iptables -nL
すでに確立しているセッションや、それらに関係する入力パケットを許可する。
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
拒否されたICMPパケットの応答としてエラーパケットを返す。
# iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
ユーザ定義チェインを作成して、そのユーザ定義チェインにルールを追加する。
# iptables -N chain1
# iptables -A chain1 -j DROP -s 0.0.0.0/0 -d 0.0.0.0/0
iptablesのログは/var/log/messagesに出力される。これによりフィルタの適用を確認できる。
iptables-saveは、IPテーブルの内容を標準出力に出力するコマンドである。
iptables-save [-c] [-t table]
# iptables-save
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:user_chain - [0:0]
iptablesコマンドによるフィルタリング設定はシステムに保存されない。したがって、システムを再起動するとiptablesの設定は初期状態に戻る。iptablesの設定をファイルに保存するには、iptables-saveコマンドを使用する。
/sbin/iptables-save > /etc/sysconfig/iptables
iptables-restoreコマンドは、標準入力からiptablesルールを読み込んで設定を復元するコマンドである。
iptables-restore
iptables-saveコマンドで保存したフェイルから設定を復元することもできる。
/sbin/iptables-restore < /etc/sysconfig/iptables
/etc/sysconfig/iptablesにルールを記述すると、iptablesサービス起動時にルールを読み込む。