/etc/rc.d/init.d/firewall
#! /bin/bash
#
# firewall iptablesのモジュール組み込みとテーブル設定
#
#------------------#
# IPアドレスの設定 #
#------------------#
client_ip='192.168.129.1' # 母艦(PC)のIPアドレス
zaurus_ip='192.168.129.201' # ZaurusのUSBネットワーク側IPアドレス
# 開始(モジュールの組み込み)
start() {
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_MASQUERADE
}
# テーブルのリロード
reload() {
#------------------#
# テーブルの初期化 #
#------------------#
iptables -F
iptables -t nat -F
iptables -X
#-----------------------#
# テーブルの設定(INPUT) #
#-----------------------#
# ポリシーは全て破棄
iptables -P INPUT DROP
# loopbackは許可
iptables -A INPUT -i lo -j ACCEPT
# 母艦->Zaurusは全て許可
iptables -A INPUT -i usbd0 -s $client_ip -d $zaurus_ip -j ACCEPT
# 上記以外でもステートフル性が確認できれば許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#------------------------#
# テーブルの設定(OUTPUT) #
#------------------------#
# ポリシーは全て許可
iptables -P OUTPUT ACCEPT
# インターネットに向けたローカルアドレスは全て破棄
iptables -A OUTPUT -o ppp0 -d 10.0.0.0/8 -j DROP
iptables -A OUTPUT -o ppp0 -d 176.16.0.0/12 -j DROP
iptables -A OUTPUT -o ppp0 -d 192.168.0.0/16 -j DROP
iptables -A OUTPUT -o ppp0 -d 127.0.0.0/8 -j DROP
#-------------------------#
# テーブルの設定(FORWARD) #
#-------------------------#
# ポリシーは全て破棄
iptables -P FORWARD DROP
# 母艦からのファイル共有パケットはインターネットにFORWARDしない
iptables -A FORWARD -p tcp -i usbd0 -o ppp0 --dport 137:139 -j DROP
iptables -A FORWARD -p udp -i usbd0 -o ppp0 --dport 137:139 -j DROP
iptables -A FORWARD -p tcp -i usbd0 -o ppp0 --dport 445 -j DROP
iptables -A FORWARD -p udp -i usbd0 -o ppp0 --dport 445 -j DROP
# 母艦からのRPCパケットはインターネットにFORWARDしない
iptables -A FORWARD -p tcp -i usbd0 -o ppp0 --dport 111 -j DROP
iptables -A FORWARD -p udp -i usbd0 -o ppp0 --dport 111 -j DROP
# その他の母艦からのパケットはインターネットへFORWARD
iptables -A FORWARD -i usbd0 -o ppp0 -s $client_ip -j ACCEPT
# 上記以外でもステートフル性が確認できれば許可
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#------------------------#
# テーブルの設定(その他) #
#------------------------#
# IPマスカレードを設定
iptables -t nat -A POSTROUTING -o ppp0 -s $client_ip -j MASQUERADE
# ログの設定(今のところ未使用)
#iptables -N LOGGING
#iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit
#iptables -A LOGGING -j DROP
#iptables -A INPUT -j LOGGING
#iptables -A FORWARD -j LOGGING
}
# モジュールの組み込み状態の確認
modstat() {
lsmod | grep ^ip
}
# テーブルの確認
tabstat() {
iptables -L ; echo ; iptables -t nat -L
}
case "$1" in
start)
start
reload
;;
reload)
reload
;;
modstat)
modstat
;;
tabstat)
tabstat
;;
*)
echo "Usage: $0 {start|reload|modstat|tabstat}"
exit 1
esac
exit $?