- Zaurusをルータ化
http://linucha.s25.xrea.com:8080/pukiwiki.php?%5B%5BZaurus%A4%F2%A5%EB%A1%BC%A5%BF%B2%BD%5D%5D
ただ上記のサイトは標準のりなざう+スペシャルカーネルが前提なので、pdaXromだとちょっとだけ勝手が異なります。手順1のNETFILTERの確認は不要で、2のiptablesの導入はPackage Managerから普通に出来るはずです。(http://mirror1.pdaxrom.org/current/feed/ にあります)
3から先はそのまま実施すればいいのですが、ここでの手順では単純にルータ化することしかしていません。常時接続下でせっかくiptablesが使えるのですから、少しセキュリティ面も強化していきたいと思います。
まずは方針。
- PCおよびりなざうからのインターネット接続を可能にする
ただしWindowsのファイル共有系のパケットはインターネットに出ていかないようにする - PCとりなざうの間は何でも出来るようにする(ftp/ssh/VNCなど)
- インターネットからりなざうへの接続は全て拒否
ただしPCやりなざうからのリクエストに対するリプライパケットは許可
iptablesの設定についてはこちらのサイトを参考に。
@IT:natテーブルを利用したLinuxルータの作成(1/6)
http://www.atmarkit.co.jp/flinux/rensai/iptables02/iptables02a.html
で、出来上がった物がこちら。
#! /bin/bash
#
# firewall iptablesのモジュール組み込みとテーブル設定
#
#------------------#
# IPアドレスの設定 #
#------------------#
client_ip='192.168.11.1' # 母艦(PC)のIPアドレス
zaurus_ip='192.168.11.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 $?
#
# firewall iptablesのモジュール組み込みとテーブル設定
#
#------------------#
# IPアドレスの設定 #
#------------------#
client_ip='192.168.11.1' # 母艦(PC)のIPアドレス
zaurus_ip='192.168.11.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 $?
この内容を /etc/rc.d/init.d/firewall として保存します。実行権限をつけることもお忘れなく。
そして起動時に実行されるよう、rc5.dにリンクを張ります。
cd /etc/rc.d/rc5.d
ln -s ../init.d/firewall S80firewall
ln -s ../init.d/firewall S80firewall
これでルータ化だけでなく、りなざう本体でのインターネットもちょっと安心になりました。
お約束ですが…。
bitWarp PDAを使ったルータ化はかなりグレーな利用方法だと思われますので、あまり無茶な使い方をなさらず、ご利用は計画的に。