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(パケットが入ってきた際に変換するためのチェイン)が組込みチェインとして用意されています。
主なテーブルとデフォルトチェイン
テーブル | デフォルトチェイン |
---|---|
filter | INPUT、OUTPUT、FORWARD |
nat | PREROUTING、POSTROUTING、OUTPUT |
mangle | INPUT、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 | –protocol | tcpがオプションで指定されれば以下のオプションは-m tcpを記述しなくても利用できる |
–source-port[!] ポート[:ポート] ポート番号に「1024:65525」と指定した場合は1024から65525番までの いずれかが送信元ポートになっているパケットにマッチする | ||
–destination-port[!] ポート[:ポート] 送信先ポートに指定されているパケットにマッチする | ||
–tcp-flags[!]マスク値 比較値 マスク値には、SYN/ACK/FIN/RST/URG/PSH/ALL/NONEのうちいずれかが選べ、 比較値にマッチさせたいマスク値を選ぶ | ||
–syn SYNビットが設定されているが、ACKとRSTがクリアされているTCPパケットにマッチする |
パケットマッチングモジュールの利用(IPv6)
モジュール名 | オプション | 用途 |
---|---|---|
mac | –mac-source [!] MACアドレス | 送信元MACアドレスにマッチする |
eui64 | EUI-64のパケットにマッチする | |
state | パケットの接続追跡状態を指定してマッチする。状態は「.」区切りで複数を指定できる。 指定可能なものは、INVALID(接続していない)、ESTABLISHED(送受信ともやりとりがある接続)、 NEW(新しい接続)、RELATED(新しい接続だがFTPやICMPエラーのような特殊な接続)となる | |
conntrack tcp | –protocol | tcpがオプションで指定されれば以下のオプションは-m tcpを記述しなくても利用できる |
–source-port[!] ポート[:ポート] ポート番号に「1024:65525」と指定した場合は1024から65525番までのいずれかが送信元ポートになっているパケットにマッチする | ||
–destination-port[!] ポート[:ポート] 送信先ポートに指定されているパケットにマッチする | ||
–tcp-flags[!]マスク値 比較値 比較値にマッチさせたいマスク値を選ぶ | ||
–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