iptablesってなんぞ?
Linuxに実装されたパケットフィルタ兼NAT
NAT?
NAT(Network Address Translation)
ネットワークアドレス変換
ローカルIPと、グローバルIPの変換を行う
- ローカルから外部に出るときに、グローバルIPの割当を行う
- 外部からローカル内のマシンにアクセスする時に、IPの変換を行う
パケットフィルタ?
送信されてきたパケットを検査して通過/遮断を判断する機能
ファイアウォールとは違うの?
ファイアウォール : 外部との通信制御して、内部のコンピューターネットワークの安全を維持するソフトウェア
有効化する
$ sudo /sbin/chkconfig iptables on
設定の確認
iptables --list
を実行
$ sudo /sbin/iptables --list Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
これは何も設定されていない状態
target prot opt source destination
はヘッダ。
ヘッダの読み方
- target : 後述
- prot : プロトコル
- opt : ちょっとわからなかった
- source : 送信元IPアドレス
- destination : 送信先IPアドレス
policy
チェイン(後述)全体に適用されるルール
- 上記の場合、
policy ACCEPT
で、基本的には通信を許可
用語
- Chain : パケット群にマッチするルールのリスト
- ルール : マッチしたパケットに対する処理を規定する
- target : パケットに対する処理(主に以下の3つ)
- ACCEPT : パケットをそのまま通す
- DROP : パケットを破棄
- RETURN : 同じルールが上位Chainにある場合、そちらを適用
Chain
デフォルトでは INPUT
FORWARD
OUTPUT
の Chain がある
他に自作のChainを作って、上記3つのチェインに連鎖させることができる
例
Fail2ban であるIPをBANした状態のとき(一部)
Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-HTTP tcp -- anywhere anywhere tcp dpt:http Chain fail2ban-HTTP (1 references) target prot opt source destination REJECT all -- 192.0.2.0 anywhere reject-with icmp-port-unreachable RETURN all -- anywhere anywhere
空白の取り方がおかしいので見づらい...
INPUT
にfail2ban-HTTP
が Chainfail2ban-HTTP
では、192.0.2.0 を
REJECT`- それ以外は、
RETURN
INPUT
ではその他に何も指定がないので、policy ACCEPT
なので、そのまま通す
TODO
- フィルタの追加方法
- テーブルについて
- 設定の定石(普通のwebサーバの場合、どんな設定をすべきか?)