iptables についてあまりに分かってないので勉強する

まず、iptables = ファイアウォールかと思ってた\(^o^)/
そこから違う。



iptables とは、パケットフィルタを行うソフトウェアです。
パケットフィルタリングは、ホストに入ってくるパケット、
出て行くパケット、通過するパケットなどを検査し、不要なパケットや
不正なパケットを破棄します。
この機能を活用したものがファイアウォールです。


Linux では、ネットワークインターフェースから入ってきたパケットは、
カーネルを経由してサーバなどのローカルプロセスに渡される。


ネットワーク ⇔ ネットワークインターフェースカード(NIC) ⇔ カーネル ⇔ ローカルプロセス

入力パケット→ルーティング→FORWARD→出力パケット
                   ↓                     ↑
                  INPUT                   ↑
                   ↓                     ↑
                ローカルプロセス→→→→OUTPUT


ホストに入ってくるパケットが通過するのが、INPUT チェイン、
出て行くパケットが通過するのが、OUTPUT チェイン、
別のホストへ転送されるパケットが通過するのが、FORWARD チェイン


そのほかに・・、
PREROUTING チェイン・・・ルーティングする前(INPUT チェインや FORWARD チェインの前)で実施されるチェイン
POSTROUTING チェイン・・・ルーティングした後(FORWARD チェインや OUTPUT チェインの後)で
実施されるチェインでIPマスカレードで使われたりする。


このチェインにフィルタリングのルールを追加していくと、
それぞれの経路を通過する際に検査が行われるようになる。


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


・チェインのデフォルトの動作を設定する。
・パケットを検査するルールをチェインに追加していく。


ことで設定を行う。


ルールにマッチしたパケットに対する挙動をターゲットと呼ぶ。
主なターゲットは、


・ACCEPT 許可
DROP 破棄
REJECT 拒否


がある。


実際にパケットフィルタリングの設定を行う前に、
フィルタリングの方針を決める。


・各チェインのデフォルトの挙動(ルールにマッチしなかったパケットを通すのか、拒否するのか)
・どのようなパケットを通すのか(ポート番号、送信元アドレスなど)


一般的に、外部から入ってくるパケットについてはデフォルトで拒否し、
内部から外部へ出て行くパケットについてはデフォルトで許可とする。


チェインのデフォルトの挙動、つまりすべてのルールをパスした
パケットのターゲットをポリシーという。


vi /etc/sysconfig/iptables
ssh のみ接続可能にする の設定例

*filter--------------------------------------------------------------------------(1)
:INPUT DROP [0:0]----------------------------------------------------------------(2)
:FORWARD DROP [0:0]--------------------------------------------------------------(3)
:OUTPUT ACCEPT [0:0]-------------------------------------------------------------(4)
:firewall - [0:0]----------------------------------------------------------------(5)
-A firewall -m state --state ESTABLISHED,RELATED -j ACCEPT-----------------------(6)
-A firewall -m state --state NEW -p tcp --dport 22 -s 203.216.227.176 -j ACCEPT--(7)
-A INPUT -i lo -j ACCEPT---------------------------------------------------------(8)
-A INPUT -i eth0 -j firewall-----------------------------------------------------(9)
COMMIT

(1) パケットフィルタリングの設定に関するフィールドであることを示す
(2) INPUT のポリシーが破棄であることを示す。
(3) FORWARD のポリシーが破棄であることを示す。
(4) OUTPUT のポリシーが許可であることを示す。
(5) firewall というユーザ定義チェインを定義。
(6) すでに確立している接続のパケット、つまり応答のパケットを許可している
(7) ssh の接続を許可する
(8) ローカルループバック lo 宛のパケットを許可 ※1
(9) ユーザ定義チェインを eth0 に適用する。



(5) と (9) の意味がよく分からない。。
ターゲットが firewall?うーん。。
またあとで書く。


※1, lo (ループバックアドレス) は 127.0.0.1 で示される。
lo はすべてのシステムで共通のIPアドレス。lo に ping コマンドを
実行することで、ネットワーク機能そのものが動作しているか検証可能。


追記081210


今の Debian はどうか分からないが、
昔の Debian 系は save がなかったらしい。
なのでサーバが再起動する度にコマンドを
実行するようにシェルスクリプトで書いていたらしい。


参照した本

DVD付 CentOS徹底入門 第2版

DVD付 CentOS徹底入門 第2版

CentOS5で作るネットワークサーバ構築ガイド (Network Server Construction Guide Series)

CentOS5で作るネットワークサーバ構築ガイド (Network Server Construction Guide Series)