Linuxコマンド辞典 iptables/ip6tablesコマンド(ネットワーク)

パケットフィルタリングとNATを管理する(IPv4 or IPv6)「iptables/ip6tables」コマンドの概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

概要・使用方法

書式

$ iptables [-t テーブル] [オプション] [コマンド] [ルール]

LinuxカーネルのNetfilterフレームワークを使ってパケットフィルタリングルールの設定/管理を行います。iptablesコマンドはIPv4の、ip6tablesコマンドはIPv6のパケットフィルタリングを管理します。基本は、IPv4と変わりません。フィルタリングはフィルタリング対象ごとの「テーブル」で構成され、テーブルは処理内容の「チェイン」により構成されます。テーブルはfilter、nat、mangleが標準で用意されています。テーブルを指定しない場合は、filterがデフォルトで利用されます。

テーブルを指定しない場合は、filterがデフォルトで利用されます。filterテーブルはパケットの通過/許可/破棄などを行うテーブルです。INPUT(マシンに入ってくるパケットへのチェイン)、OUTPUT(マシンから出ていくパケットへのチェイン)、FORWARD(マシンを経由するパケットへのチェイン)が組込みチェインとして用意されます。

natテーブルは送信元や宛先を変換する必要があるパケットに対して利用されるテーブルです。PREROUTING(パケットが入ってきて、変換するためのチェイン)、OUTPUT(ルーティングで外に出る前にパケットを変換するためのチェイン)、POSTROUTING(パケットが出ていくときに変換するためのチェイン)が組込みチェインとして用意されています。mangleテーブルはTTLなどを変更する必要があるパケットに対して利用されます。INPUT(マシンに入ってくるパケットへのチェイン)、FORWARD(マシンを経由するパケットへのチェイン)、PREROUTING(パケットが入ってきた際に変換するためのチェイン)が組込みチェインとして用意されています。

主なテーブルとデフォルトチェイン

テーブルデフォルトチェイン
filterINPUT、OUTPUT、FORWARD
natPREROUTING、POSTROUTING、OUTPUT
mangleINPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

「チェイン」は検知するパケットルールリストです。ルールにマッチしたパケットをどう扱うかを「ターゲット」と呼びます。ターゲットはACCEPT(通過)、DROP(捨てる)、RETURN(現在のチェインを抜け、呼び出し元チェインの次ルールに回す)、REJECT(エラーパケットを送信し、扱うパケットを捨てる)、LOG(マッチしたパケットをログに記録する)、DNAT(送信先アドレスを修正する)、SNAT(送信元アドレスを修正する)などがあります。

チェインは基本的には入力された順番に実行します。また、コマンドは管理者権限で行う必要があります。

オプション

-v , –verbose詳細に出力する
-n, –numeric数値で出力する(IPアドレスやポート番号)
–line-numbersルールを一覧表示する際にルール番号を表示する

コマンド

-A チェイン ルール
–append チェイン ルール
指定したチェインにルールを追加する
-D チェイン ルール
–delete チェイン ルール
指定したルールをチェインから削除する
-l チェイン [ルール番号]ルール
–insert チェイン [ルール番号] ルール
ルールを指定したチェインのルール番号の上に挿入する。ルール番号を指定しない場合は、1が指定されることになり、ルールの一番先頭に追加される
-R チェイン ルール番号 ルール
–replace チェイン ルール番号 ルール
指定したルール番号のルールと指定したルール番号と置き換える
-L [チェイン]
–list [チェイン]
指定したチェイン、もしくはすべてを一覧表示する
-F [チェイン]
–flush [チェイン]
指定したチェイン、もしくはすべてを消去する
-Z [チェイン]
–zero [チェイン]
指定したチェイン、もしくはすべてのパケットカウント、バイトカウンタをゼロにする
-N チェイン
–new-chain チェイン
ユーザ定義チェインを作成する。既に同じ名前のチェインが存在する場合は適用されない
-X [チェイン]
–delete-chain [チェイン]
ユーザ定義チェインを削除する。他のチェインで参照されている場合は削除されない
-P チェイン ターゲット
–policy チェイン ターゲット
チェインの標準ターゲットを指定する
-E 旧チェイン名 新チェイン名
–rename-chain 旧チェイン名 新チェイン名
ユーザ定義チェインの名前を変更する

チェイン

INPUTローカルマシンに入ってくるパケットのためのチェイン
OUTPUTローカルマシンで生成されたパケットのためのチェイン
FORWARDローカルマシンを経由するパケットのためのチェイン
PREROUTING入ってきたパケットを変換するためのチェイン
POSTROUTING出ていくパケットを変換するためのチェイン

ターゲット

ACCEPTパケットの通過を許可
DROPパケットを破棄
REJECTパケットを拒否(送信元に通知)
MASQUERADE送信元IPアドレスとポート番号の変換
SNAT送信元IPアドレスの変換
DNAT送信先IPアドレスの変換
LOGログに出力

ルール

-s 送信元, –source 送信元送信元のIPアドレス
-d 送信先, –destination 送信先送信先のIPアドレス
–sport ポート番号送信元のポート番号
–dport ポート番号送信先のポート番号

パラメータ(!をつけると「除外」を表す)

-p[!]プロトコル
–protocol[!]プロトコル
プロトコル(tcp/udp/icmp/all)を指定する
-s[!]アドレス[/マスク]
–source[!]アドレス[/マスク]
送信元アドレスを指定する
-d[!]アドレス[/マスク]
–destination[!]アドレス[/マスク]
宛先アドレスを指定する
-j ターゲット
–jump ターゲット
パケットがマッチした場合、指定したターゲットに移動する
-i [!] インターフェース名
–in-interface [!] インターフェース名
パケットを受信するネットワークインタフェース(i.e eth0)を指定する
-o [!] インターフェース名
–out-interface [!] インターフェース名
パケットを送信するネットワークインタフェース(i.e eth0)を指定する
[!] -f
[!] –ragment
フラグメント(分割したパケット)への扱いを決める
-n
–numric
デフォルトではホスト名、サービス名で表示するところをIPアドレス、ポート番号で表示する
–line-numbersルール表示でルール番号を付加する
-m利用するパケットマッチングモジュールを指定する
–matchモジュール読み込み後にモジュールごとのオプションが利用できるが、詳細は-hオプションでも参照できる

パケットマッチングモジュールの利用(IPv4)

モジュール名オプション用途
mac–mac-source
[!] MACアドレス
送信元MACアドレスにマッチする
state

パケットの接続追跡状態を指定してマッチする。状態は「.」区切りで複数を指定できる。

指定可能なものは、INVALID(接続していない)、ESTABLISHED(送受信ともやりとりがある接続)

NEW(新しい接続)、RELATED(新しい接続だがFTPやICMPエラーのような特殊な接続)となる

conntrack tcp–protocoltcpがオプションで指定されれば以下のオプションは-m tcpを記述しなくても利用できる

–source-port[!] ポート[:ポート]
送信元ポートが指定されているパケットにマッチする。

ポート番号に「1024:65525」と指定した場合は1024から65525番までの

いずれかが送信元ポートになっているパケットにマッチする

–destination-port[!] ポート[:ポート]
送信先ポートに指定されているパケットにマッチする

–tcp-flags[!]マスク値 比較値
指定されたTCPフラグと等しいパケットにマッチする。

マスク値には、SYN/ACK/FIN/RST/URG/PSH/ALL/NONEのうちいずれかが選べ、

比較値にマッチさせたいマスク値を選ぶ

–syn
SYNビットが設定されているが、ACKとRSTがクリアされているTCPパケットにマッチする

パケットマッチングモジュールの利用(IPv6)

モジュール名オプション用途
mac–mac-source
[!] MACアドレス
送信元MACアドレスにマッチする
eui64EUI-64のパケットにマッチする
state

パケットの接続追跡状態を指定してマッチする。状態は「.」区切りで複数を指定できる。

指定可能なものは、INVALID(接続していない)、ESTABLISHED(送受信ともやりとりがある接続)、

NEW(新しい接続)、RELATED(新しい接続だがFTPやICMPエラーのような特殊な接続)となる

conntrack tcp–protocoltcpがオプションで指定されれば以下のオプションは-m tcpを記述しなくても利用できる

–source-port[!] ポート[:ポート]
送信元ポートが指定されているパケットにマッチする。

ポート番号に「1024:65525」と指定した場合は1024から65525番までのいずれかが送信元ポートになっているパケットにマッチする

–destination-port[!] ポート[:ポート]
送信先ポートに指定されているパケットにマッチする

–tcp-flags[!]マスク値 比較値
指定されたTCPフラグと等しいパケットにマッチする。マスク値には、SYN/ACK/FIN/RST/URG/PSH/ALL/NONEのうちいずれかが選べ、

比較値にマッチさせたいマスク値を選ぶ

–syn
SYNビットが設定されているが、ACKとRSTがクリアされているTCPパケットにマッチする

パケットフィルタリング

マシンから外へのパケットは通過させ、外部からはICMP、22/tcp、80/tcp以外は拒否する設定

実行結果

# iptalbes -F                                                    #チェインをすべて消去する
# iptalbes -P INPUT DROP                                         #INPUTテーブルはDROPを設定する
# iptalbes -P OUTPUT ACCEPT                                      #OUTPUTテーブルはACCEPTで通過許可する
# iptalbes -P FORWARD DROP                                       #FORWARDテーブルはDROPを設定する
# iptalbes -A INPUT -i lo -j ACCEPT                              #ループバック(lo)は許可する
# iptalbes -A INPUT -p ICMP -i eth0 -d 192.168.0.10 -j ACCEPT    #ICMPを許可する
# iptalbes -A INPUT -p TCP -i eth0 -d 192.168.0.10 --dport 22 -j #ACCEPT #sshを許可する
# iptalbes -A INPUT -p TCP -i eth0 -d 192.168.0.10 --dport 80 -j #ACCEPT #httpを許可する
# iptalbes -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #返答パケットを許可する

パケットフィルタ状況を確認する

ルール番号も表示する

$ iptables -L -n --line-numbers
[root@centos ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     icmp --  0.0.0.0/0            192.168.0.60        
3    ACCEPT     tcp  --  0.0.0.0/0            192.168.0.60         tcp dpt:22
4    ACCEPT     tcp  --  0.0.0.0/0            192.168.0.60         tcp dpt:80
5    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

Chain FORWARD (policy DROP)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain LIBVIRT_INP (0 references)
num  target     prot opt source               destination         

Chain LIBVIRT_OUT (0 references)
num  target     prot opt source               destination         

Chain LIBVIRT_FWO (0 references)
num  target     prot opt source               destination         

Chain LIBVIRT_FWI (0 references)
num  target     prot opt source               destination         

Chain LIBVIRT_FWX (0 references)
num  target     prot opt source               destination