突発ひっそりiptables
スピーカー:Takeshi@インフラ系の人 さん
iptablesとは?
Linux標準のパケットフィルタリングとNATの機能
ipchainsの後継のようなもの
わかりにくい、とっつきにくいイメージがありますが 理解すると使いやすいので布教したい! by Takeshi
tableとchain
table
処理する「対象とルール」について記述するところ
テーブル名 | 用途 |
---|---|
filter | パケットを処理するためのテーブル。(-t オプションが指定されていない場合) このテーブルがデフォルト |
nat | **ネットワークアドレス変換 (NAT) **に使用。 |
mangle | 特別なパケット変換に使われる。パケット処理の優先度付けを行う。通信品質を制御するQoS(Quality of Service)に利用される。 |
raw | 特定パケットの追跡除外をする。他の機材へ通したい時など。(例)DNSのパケットに関しては、別サーバで処理 |
※rawテーブル、mangleテーブルは特殊なものなので、ハンズオンは割愛
chain
テーブルで処理する「タイミング」
以下、ざっくり簡単に
- PREROUTING ・・・外部から入ってきてすぐ(ルーティング前)
- INPUT ・・・ローカルマシン宛に入ってきた時(ルーティング後)
- OUTPUT ・・・ローカルマシンからパケットが生成された後(ルーティング前)
- FORWARD ・・・ローカルマシン経由で他のマシン宛に転送する時(ルーティング前)
- POSTROUTING ・・・外部へ出ていく時(ルーティング後)
わかりやすい図があるのですが…↓のような感じ(まずかったら消します)
受信 │ raw PREROUTING mangle PREROUTING nat PREROUTING ├ ┌─── ROUTING ───┐ mangle INPUT │ filter INPUT │ │ │ ─Local Process─ mangle FORWARD │ filter FORWARD raw OUTPUT │ ├ │ mangle OUTPUT │ nat OUTPUT │ filter OUTPUT │ └─── ROUTING ───┘ │ mangle POSTROUTING nat POSTROUTING │ 送信
filterテーブル
iptabelesコマンド (ルールの確認)
# iptables --list
# iptables -nvL
オプション
- -L/--list ・・・ルールを一覧表示する
- -t [table] ・・・テーブルの指定(指定しないと -t filter)
- -n ・・・IP アドレスやポート番号を数値で表示する。 デフォルトでは、ホスト名、ネットワーク名、サービス名で表示される。
- -v ・・・詳細を表示する。インターフェース名(in/out)、 ルールのオプション等
# iptables -nvL Chain INPUT (policy DROP 2785 packets, 491K bytes) pkts bytes target prot opt in out source destination 1026K 292M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 4997 498K ACCEPT all -- * * 192.168.55.0/24 0.0.0.0/0 36424 2132K ACCEPT tcp -- * * 0.0.0.0/0 192.168.55.1 tcp dpt:22
target
パケットをどう扱うか
- ACCEPT ・・・パケットの通過を許可する
- DROP ・・・パケットを破棄する(破棄したことを通信相手に伝えない)
- REJECT ・・・パケットを破棄する(破棄したことを通信相手に伝える)
- LOG ・・・パケットのログを記録
policy
何も記述がない時(つまりチェイン内に該当ルールがない)のtarget
iptabelesコマンド (ルールの追加、削除)
追加
iptables -A INPUT -p tcp -d 192.168.55.1 --dport 22 -j ACCEPT
削除
iptables -D INPUT -p tcp -d 192.168.55.1 --dport 22 -j ACCEPT iptables -D INPUT [番号]
-Dで削除するときの番号は、そのチェイン内で上から数えて何番目?かを指定する
オプション
-
-A, --append [chain] ・・・チェインの最後にルールを追加する
-
-D, --delete ・・・指定ルールを削除する。行番号での指定も可
-
-I --insert [chain] [rulenum] ・・・指定行にルールを挿入する
-
-p ・・・プロトコルの指定
-
-d ・・・宛先(パケットについている宛先)
-
--dport [port] ・・・受信側(サーバ側)のポート番号を指定
-
-j [target] ・・・jumpパケットの処理を記述