2009年12月2日水曜日

iptablesの設定メモ

こんばんわ、俺@家で音楽鑑賞中です。

今年も残り1ヶ月切ってしまいましたね。
今年の元旦に神社で心に誓った目標の何割が達成できたでしょうか?
ちなみに僕は10の目標のうち4しか達成できませんでしたよ。・゚・(ノε`)・゚・。ウワーン


で、今日はiptablesの簡単な設定方法をメモします。
解説サイトは山のようにあるのですが、結構みなさん複雑な事書かれているので
チョチョイっと設定する人向けのメモです。

まずは設定の確認。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- localhost.localdomain anywhere
ACCEPT all -- 192.168.0.0/24 anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:omirr
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- localhost.localdomain anywhere
ACCEPT all -- 192.168.0.0/24 anywhere
ACCEPT all -- xxx.xxx.xxx.xx/28 anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:tproxy
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
一部のIPは伏せてあります。
僕のテストサーバ、思ったより色々設定されてありましたw誰だこんなんしたやつw

まぁ、大きく分けて3つあります。
「Chain INPUT」・・・入ってくるパケットに関するもの。
「Chain FORWARD」・・・転送されていくパケットに関するもの。
「Chain OUTPUT」・・・出力されるパケットに関するもの。

設定する順番は
1)ポリシーを設定
2)ルールを一旦削除(クリア)
3)ルールを設定
4)設定を保存
5)iptables再起動
です。

ではまず1)ポリシーを設定。
簡単なiptablesという事なのでINPUTは許可(ACCEPT)、FORWARDは破棄(DROP)、OUTPUTは許可(ACCEPT)と言う事にします。
FORWARDは滅多な事じゃないと使わない(ルータにするとか)ですし、OUTPUTはサーバからの出力なので上記の方法で良いと思います。
// 書式は iptables -P [チェイン] [ターゲット]
// チェインのポリシーを指定のターゲットに設定するという意。
# iptables -P INPUT ACCEPT
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
これでOK。

次に2)ルールを一旦削除します。現在の設定を変更せずに追加とかした人はココやらなくても良いです。
# iptables -F
OK。
これで一旦設定を見てみると、
# iptables -L
Chain INPUT (Policy ACCEPT)
target  prot opt source     destination

Chain FORWARD (Policy DROP)
target  prot opt source     destination

Chain OUTPUT (Policy ACCEPT)
target  prot opt source     destination
になるはずです。

次に3)ルールを設定。
// 書式は iptables -A [チェイン] -p [プロトコル] -s [送信元] -j [ターゲット] --dport [ポート範囲の指定]
// 他にオプションはたくさんあるけど、これくらい使えばとりあえずOK。
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
と書けば、80番ポートに対するtcpプロトコルは通すよ!という意味です。ちなみに、
# iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT
だと、INPUTチェインの上から3番目に、80番ポートに対するtcpプロトコルは通すルールを挿入!という意味です。
さらには、
# iptables -A INPUT -p tcp -s 192.168.0.0/28 --dport 80 -j ACCEPT
と書けば、INPUTチェインの80番ポートに対するtcpプロトコルの192.168.0.0/28からのパケットは通すぜ!という意味になります。
まぁ、こんな感じでどんどんと
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT // ssh接続はACCEPT
# iptables -A INPUT -p tcp --dport 110 -j ACCEPT // POPはACCEPT
# iptables -A INPUT -p tcp --dport 25 -j ACCEPT // SMTPはACCEPT
# iptables -A INPUT -p icmp -j ACCEPT // PINGはACCEPT
# iptables -A INPUT -i lo -j ACCEPT // 自サーバからはACCEPT(-iはインターフェースの指定)
# iptables -P INPUT DROP // 他の接続は全てDROP
とこんな感じです。

次は4)設定を保存します。
# service iptables save
これはサーバ再起動されたら設定がリセットされてしまうので、保存しておくのです。

次に5)iptables再起動します。(念のために)
# service iptables restart
OK!こんなもんです(´゚艸゚)∴


ちなみにルールを設定する時に
# iptables -A 
と「-A」を多用しましたが、他にも
# iptables -I [チェイン] 番号
で挿入。
# iptables -R [チェイン] 番号
で書き換え(置換)
# iptables -D [チェイン] 番号
で削除ができますので、あしからず。

以上、おやすみー。

0 件のコメント: