# iptables -L -n --line-numbers
を使います。
-nオプションをつけると名前解決せずにアドレスで表示します。
--line-numbersオプションをつけると、ルール番号を表示してくれます。
# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
3 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
6 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:21
11 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
12 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
■設定ファイルで確認したい場合。
RedHatの場合は
○/etc/sysconfig/iptables
ルールやチェインの設定が書かれている
○/etc/sysconfig/iptables-config
なんかよくわからない大人の設定が書いてある。
IPTABLES_MODULES=""
IPTABLES_MODULES_UNLOAD="yes"
IPTABLES_SAVE_ON_STOP="no"
IPTABLES_SAVE_ON_RESTART="no"
IPTABLES_SAVE_COUNTER="no"
IPTABLES_STATUS_NUMERIC="yes"
○Debianの場合はさらにたちが悪い。
まず、なにもない。
# iptables -L -n
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
○しょうがないから起動スクリプトを作った。
# cd /usr/share/doc/iptables/examples/
# zcat oldinitdscript.gz > /etc/init.d/iptables
# cd /etc/init.d
# chmod 755 iptables
# update-rc.d iptables defaults
Adding system startup for /etc/init.d/iptables ...
/etc/rc0.d/K20iptables -> ../init.d/iptables
/etc/rc1.d/K20iptables -> ../init.d/iptables
/etc/rc6.d/K20iptables -> ../init.d/iptables
/etc/rc2.d/S20iptables -> ../init.d/iptables
/etc/rc3.d/S20iptables -> ../init.d/iptables
/etc/rc4.d/S20iptables -> ../init.d/iptables
/etc/rc5.d/S20iptables -> ../init.d/iptables
# /etc/init.d/iptables start
Aborting iptables load: unknown ruleset, "active".
/etc/init.d/iptables options:
start|restart|reload|force-reload
load the "active" ruleset
save
save the current ruleset
load
load a ruleset
stop
load the "inactive" ruleset
clear
remove all rules and user-defined chains, set default policy to ACCEPT
halt
remove all rules and user-defined chains, set default policy to DROP
Saved ruleset locations: /var/lib/iptables/ and /var/lib/ip6tables/
Please read: /etc/init.d/iptables
どうやら設定ファイルは/var/lib/iptables/の中にあるらしい。
しかし、そんなとこにはなにもなかった。
しょうがないので、自分でiptablesというディレクトリを作って、iptablesというファイルをおいた。
中身はRedHatの丸写しだ。
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
のだが、動かなかった。
(以下、続く)
(続き)
というのは、上記の方法でdebianの/etc/init.d/iptablesをつくると、
/var/lib/iptables/にあるactiveとinactiveのファイルしかよみこまなくなる。
そこで、まずはこのデフォルトの何も書いていない奴を
# iptables -L -n
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
inactiveに登録しよう。
最初にまずは/var/lib/iptables/active と inactive をtouchコマンドでつくっておく
# cd /var/lib/iptables
# touch active
# touch inactive
そしたら現在のルールをinactiveに登録する
# /etc/init.d/iptables save inactive
avtiveのほうには、RedHatなどで動いている生きのいいフィルターを
そのままactiveに書き写して、手直しすればよいだろう。
そして、
# /etc/init.d/iptables start
# /etc/init.d/iptables stop
が正しく動作するようになる。