iptables を眺める

iptablesを全くわかっていないので、駄文的に書いてみる。

iptablesのマニュアルはここにあるのでよく読む。

現状を把握したい時は

iptables -L

で状況を確認できる。
とりあえず、デフォルトはこんな感じ。

[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere            icmp any
ACCEPT     esp  --  anywhere             anywhere
ACCEPT     ah   --  anywhere             anywhere
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

簡単にオプションの意味を書き出してみる。
[ -A ] → [ INPUT ][ FORWARD ][ OUTPUT ]の条件として付け加えます(append)。
[ -m ] → モジュールを呼び出します(module)。
[ –state ] → コンマで区切られた接続状態のリストを指定します。
[ -m ] → モジュールを呼び出します(module)。
[ -p ] → プロトコルを指定します。
[ –dport ] → 宛先のポート番号を指定します。
[ -j ] → 今までの条件にマッチしたパケットをどうするか指定します。

上記を踏まえると、
[ -A INPUT ] → INPUTに付け加えます。
[ -m state ] → stateモジュールを呼び出します。
[ –state NEW ] → 接続状態はNEWで。
[ -m tcp ] → tcpモジュールを呼び出します。
[ -p tcp ] → プロトコルはTCPで。
[ –dport 80 ] → 80番ポート宛で。
[ -j ACCEPT ] → 許可します。

ということで、

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

は、
「接続状態はNEW」で「プロトコルはTCP」で「80番ポート宛」なパケットが来たら、
そのパケットは「INPUTの条件」として「許可」する。
という条件を付け加える。
なのかな?

[ -m tcp ]の扱いは何なんだ?ということでググると
http://search.luky.org/linux-users.a/msg03917.html
ということで、[ -p tcp ]を書くなら一緒につけておこうよ的な感覚らしい。

最悪、訳が分からなくなったら

iptables -F

で全てをリセットできるので、初めからやり直せる。

とりあえずは

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

で、httpとsshが通れば文句言わないことにする。

 

自宅内のみか何かで要らないなーと思った時は、

chkconfig --list iptables
iptables       	0:off	1:off	2:on	3:on	4:on	5:on	6:off

なので

chkconfig iptables off

で無効に。

chkconfig --list iptables
iptables       	0:off	1:off	2:off	3:off	4:off	5:off	6:off

を確認しておく。