# VPN by PPP over SSH でのフィルタリングの例(IPFilter)
# このファイルを vpn-filter という名前で保存したならば
# ipf -Fa -f vpn-filter
# によってルールを登録する

# fxp1からクライアントに出て行くtcpとestablishedを通過
pass out quick on fxp1 proto tcp from any to any keep state

# fxp0, fxp1を グループ化する(物理インタフェースが変わったらここを書き換え)
# 同時にデフォルトルールをblockまたはpassにする
block in  on fxp0 all head 100
pass  out on fxp0 all head 110
block in  on fxp1 all head 200
block out on fxp1 all head 210


# 自分(192.168.11.254)宛のパケットを全てグループ201に導く
block in from any to 192.168.11.254 head 201 group 200

# 192.168.11.0/24 から自身への22/tcpを許可
# (グループ201は自分宛のみなので any to any でよい)
pass in quick proto tcp from any to any port = ssh keep state group 201

# 自身に対するICMP(echo-request)を許可
pass in quick proto icmp from any to any icmp-type echo keep state group 201

# 上記以外の fxp1 宛のtcpにtcp-reset を返す
block return-rst in quick proto tcp from any to any group 201

# 以下はお好みで…

# 基幹LANから外部へのTCP接続許可
pass out on fxp0 proto tcp from 10.0.0.0/24 to any keep state

# 基幹LANからの接続許可
pass in quick from 10.0.0.0/24 to any group 100

# 重要なUDPの通過
pass out quick proto udp from any to any port = domain keep state group 110
pass in quick proto udp from any to any port = domain group 100
pass out quick proto udp from any to any port = ntp keep state group 110
pass in quick proto udp from any to any port = ntp group 100

# 基幹LAN側インタフェースで参照を許すサービスを許可
pass in quick proto tcp from any to any port = ssh keep state group 100
pass in quick proto tcp from any to any port = smtp keep state group 100
pass in quick proto tcp from any to any port = http keep state group 100

# 上記以外のTCPは tcp-reset を返す
block return-rst in proto tcp from any to any group 100

# 以上どれにもマッチしないものはデフォルトルールに従う