ここで例に示している設定は、あくまで基本的なものであり、これ以外にも細々と個別に許可、禁止をしている設定がいくつかあるが、自宅のセキュリティホールの公開になるのもアホらしいので、ここでは割愛する。
ipmasq の設定プログラムの先頭に、必要なモジュールを読み込むための処理を追加する。
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_MASQUERADE
各ルールの初期化
IPTABLES="/sbin/iptables"
$IPTABLES -F # ルールの初期化
$IPTABLES -P OUTPUT DROP # OUTPUTは原則禁止
$IPTABLES -P FORWARD ACCEPT # FORWARDは原則許可
$IPTABLES -P INPUT DROP # INPUTは原則禁止
$IPTABLES -t nat -F # NAT機能の初期化
出力パケットの設定
GROBAL_IF=eth0
# プライベートアドレスパケットの流出禁止
$IPTABLES -I OUTPUT -o $GROBAL_IF -d 10.0.0.0/8 -j DROP
$IPTABLES -I OUTPUT -o $GROBAL_IF -d 172.16.0.0/12 -j DROP
$IPTABLES -I OUTPUT -o $GROBAL_IF -d 192.168.0.0/16 -j DROP
# それ以外のパケットは出力許可
$IPTABLES -A OUTPUT -d 0.0.0.0/0 -j ACCEPT
フォワードの許可(マスカレード許可)
$IPTABLES -t nat -A POSTROUTING -o $GROBAL_IF -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -j MASQUERADE # あれ?不要だよな?
入力パケットの設定
# ローカルはすべて許可
$IPTABLES -I INPUT -i lo -j ACCEPT
# プライベートアドレスの流出・流入の禁止
$IPTABLES -I INPUT -i $GROBAL_IF -s 10.0.0.0/8 -j DROP
$IPTABLES -I INPUT -i $GROBAL_IF -s 172.16.0.0/12 -j DROP
$IPTABLES -I INPUT -i $GROBAL_IF -s 192.168.0.0/16 -j DROP
# 内部ネットワークの許可
$IPTABLES -A INPUT -s 127.0.0.0/8 -j ACCEPT
$IPTABLES -A INPUT -s 192.168.1/24 -j ACCEPT # プライベートなどの許可
個別のプロトコルの許可
# ICMPパケットの許可
for proto in echo-reply destination-unreachable source-quench time-exceeded parameter-problem
do
$IPTABLES -A INPUT -p ICMP --icmp-type $proto -j ACCEPT
$IPTABLES -A OUTPUT -p ICMP --icmp-type $proto -j ACCEPT
done
# UDPパケットの許可(外と同じ様なサービスを提供している)
for port in domain ntp icp
do
$IPTABLES -A INPUT -p udp --dport $port -j ACCEPT
$IPTABLES -A INPUT -p udp --sport $port -j ACCEPT
done
# TCPパケットの許可
for port in domain ntp icp http https ftp ftp-data webcache ssh smtp pop-2 pop-3 ntp nntp
do
$IPTABLES -A INPUT -p tcp --dport $port -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport $port -j ACCEPT
done
# コネクション確立用パケットは禁止
$IPTABLES -A INPUT -p tcp ! --syn -d 192.168.0.0/16 --dport 1024:65535 -j ACCEPT
$IPTABLES -A INPUT -p udp -d 192.168.0.0/16 --dport 1024:65535 -j ACCEPT
# reject パケットの記録を残す
$IPTABLES -A INPUT -j LOG
$IPTABLES -A INPUT -j REJECT
# フォワード機能の有効化
echo "1" > /proc/sys/net/ipv4/ip_forward