0

iptables 見かたはコレをまずはおさえておけばOK

[LAST UPDATE : 2016/05/30 ]

前提知識
– – –

パケットフィルタリングとは

カーネルが処理するパケットを検査し、不要なパケットは遮断するなどのルールに基づき処理を行う。

iptablesとは

パケットフィルタリングやNAT(ネットワークアドレス変換)の設定を行う機能およびコマンド。
Linuxカーネルにはnetfilterというのパケット処理機能が組み込まれていて、iptablesはこれを利用する。
iptablesの理解には「テーブル」「チェイン」の概念理解は必要です。

テーブルとは

iptablesで作成するルール群(後述のチェイン)の使用目的を決定するもの。
ルールを作成する際に指定したテーブルによって、デフォルトで使用できるチェインやアクション(後述のターゲット)に制限がかかる等、ルールの使用目的(フィルタリング or NATなど)を明確化する為に用意されている。

主なテーブル
filter パケットフィルタリング用
nat   NAT用

チェインとは・・・ルールです。

パケットの処理方法を定義したルール群。
チェインにルールを追加していきます。
また同時に、チェインはどのタイミングでルールを適用するかを表します。

INPUT

ローカルホスト(ローカルプロセス)宛のパケットに対してルールを適用

OUTPUT

ローカルホストで生成されたパケットに対してルールを適用

FORWARD

ローカルホストを経由するパケットに対してルールを適用

PREROUTING

入ってきたパケットの内容を書き換えるためにルールを適用

POSTROUTING

出て行くパケットの内容を書き換えるためにルールを適用

# テーブル「filter」を指定した場合はデフォルトで「INPUT」「OUTPUT」「FORWARD」が使用できる。
# テーブル「nat」を指定した場合は「OUTPUT」「PREROUTING」「POSTROUTING」が使用できる。

ターゲットとは・・・アクションです。

ACCEPT       通過を許可
DROP        破棄
REJECT       拒否(通信元に通知)
MASQUERADE 送信元IPアドレスと送信元ポート番号を変更
SNAT        送信元IPアドレスを指定したIPアドレスに変更
LOG         ログに記録

ルールで使用する主なオプション

-s IPアドレス       送信元のIPアドレスを指定
-d ipアドレス       送信先のIPアドレスを指定
–sport ポート番号    送信元のポート番号を指定
–dport ポート番号    送信先のポート番号を指定
-p プロトコル       プロトコルの指定(tcp,udp,icmp,all)
-i インターフェース名   受信するインターフェースの指定
-o インターフェース名   送信するインターフェースの指定
-j ターゲット       適用するターゲット(アクション)の指定

– – –

■ iptablesの機能を有効化する

# service iptables restart

■ iptablesの機能を自動的に起動する
# chkconfig iptables on

■ 基本パケットの種類
INPUT(入力)
OUTPUT(出力)
FORWARD(転送)

■ パケットフィルタリング条件の表示

# cat /etc/sysconfig/iptables
・
・
COMMIT

*filter
:INPUT DROP [0:0]
・
・
#COMMIT

で、iptablesの内容を記述しているファイルを直接見れる。
パケットフィルタリングの条件は*filter から #COMMIT の間に記述されている。
ただ、ファイルを直接見るよりも以下のコマンドで見た方が整形され分かりやすい。

■ [書式]パケットフィルタリングのルール一覧表示

iptables [-t テーブル名] ーL[チェイン]
*テーブルを指定しない場合は、パケットフィルタリング用のfilterテーブル、
それに属するチェイン、ルールの一覧表示
*チェインを指定しない場合は、全てのチェインのルールが表示される。
# iptables -v -L
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
		pkts bytes target     prot opt in     out     source               destination
		11835   17M ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
		3   144 ACCEPT     icmp --  any    any     anywhere             anywhere
		2   120 ACCEPT     all  --  lo     any     anywhere             anywhere
		0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            state NEW tcp dpt:ss
		202 13759 REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
		pkts bytes target     prot opt in     out     source               destination
		・
		・
		

Chain毎に空行区切りで表示される。
出力結果の一行目
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
は INPUT チェーンのデフォルトポリシーが ACCEPT で デフォルトポリシーが適用されたパケットの数とバイト数を表す。
ちなみに、INPUTチェーンの最後に全条件にマッチするREJECTがあるので、デフォルトポリシーが適用されるパケットは 0 packets, 0 bytes となっている。
その次の行以降にあるカラムはそれぞれ
target:適用されるアクション(ACCEPT, DROP, REJECT, LOG, …)
prot:プロトコル
opt:オプション
in:受信するNIC(lo, eth0, …)
out:送信するNIC(lo, eth0, …)
source:送信元IP
destination:送信先IP

■ 特定のチェインのパケットフィルタリング条件の表示

-L オプションの後に 引数でチェイン名を付けると、
特定のチェインのパケットフィルタリング条件だけを表示できる。

# iptable -v -L INPUT
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
		pkts bytes target     prot opt in     out     source               destination
		11837   17M ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
		3   144 ACCEPT     icmp --  any    any     anywhere             anywhere
		2   120 ACCEPT     all  --  lo     any     anywhere             anywhere
		0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            state NEW tcp dpt:ssh
		202 13759 REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited

■ IPマスカレードルールを追加する場合

*IPマスカレード:複数のプライベートアドレスをひとつのグローバルアドレスポート番号に割り当てます。
チェイン(ルール):出て行くパケットに対するルール→ POSTROUTING オプション A でルール追加(ADD)
ターゲット(アクション):MASQUERADE オプション j で指定
インターネット側インターフェース:eth0 #送信するインターフェース オプション o で指定
LAN内のアドレス:172.16.0.0/24 #送信元NWアドレス オプション s で指定

IPマスカレードルールはテーブル、チェインは下記の通り。
テーブル:NAT
チェイン:出て行くパケットの内容を書き換える→ POSTROUTEING

上記をふまえると、下記の通りとなります。

iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE

■考えてみよう

FW:10.0.0.10
ローカルNW192.168.0.0/24 から インターネットへのアクセスに対して、FWでNATによるアドレス変換を実施する。

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -j SNAT – -to -source 10.0.0.10

TCPの特定パケット(SYN,ACK、。。)の情報をログに書き込む

s
iptables -I INPUT -s 0.0.0.0 -d 192.168.0.44/32 \
–p tcp \
–tcp-flags ALL SYN,ACK,PSH,URG,RST,FIN \
-j LOG

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です