半ドン雪かきパケットフィルタ

今日は会社の創業記念日で半ドン
最近結構突然の特急便仕事があったりするので、半ドンで帰れないかと思ったら、そういう仕事は来なかった。
明日出来る仕事は明日へ、今日するはずだった仕事は、後輩の営業に「今日客先と打合せして来るんだから、明日方針を決めよう」と言って先延ばしした。
うーん、ずるいねぇ...。
昼になり、簡単な創業記念式典(お偉いさんの挨拶とスピーチ等)があり、残りの仕事を片付けて帰社した。
家に帰ってから昼飯を食べると、中途半端な時間になるから、帰宅途中で食べることにした。
あまり昼飯を食べることの無い札幌駅地下街で店を物色し、以前から気になっていた韓国料理店で食べた。
私は岩手育ちなので冷麺好きなのだが、北海道で食べた冷麺で美味しい店に当たったことがないので冷麺は止めて、ダッカルビ定食にする。
まぁまぁかな。
 
家に帰ってから、子供達と一緒に3時のおやつを食べた後、雪かきを始める。
今年はとてつもなく雪が多い。昨日と今日で50センチは積もっている。
本来、札幌に比べて家の周りは雪捨て場に困らないような状態なのだが、今年はそうはいかない。
現住所に家を建ててから一番の記録的な雪の多さ。
結局夕飯を食べる直前までずっと雪かきを続けていた。
午後の休日が雪かきで終わってしまった。
 
深夜、気を取り直してサーバーの設定を始める。
WEBメールの設定をする前に、どうしてもしておきたいパケットフィルタの設定。
セキュリティには出来る限り気をつけたい。
既存のサーバーは、FreeBSD-4.x に標準で入っている ipfw を使用しようと思っていたが、思ったとおりの設定がなかなか出来なくて挫折してしまった。
結局、市販のブロードバンドルーター(この名称は嫌いだけど)で簡易 DMZ とパケットフィルタをかけて済ましてしまった。
セキュリティ的にはあまり良くないと思うんだけどねぇ....。
ウチのブロードバンドルーターは無線アクセスポイント兼務のやつで、一応 WEP キーの設定、MACアドレス制限をかけてある。
それも万全とはいえないけどねぇ。
 
とりあえず、FreeBSD-5.3 で使用できるパケットフィルタを調べてみる。
標準で ipfw、ipfilter、pf が使用できるそうだ。
ipfilter と pf は、カーネルを再構築しなくても使用できるそうだ。それは楽だなぁ。
OpenBSD 由来の pf が、設定の簡易さ、機能の豊富さからいって良さそうに見えるので採用してみることにする。
今度は挫折しないようにしないとね。
 
まずは自動起動の設定。/etc/rc.conf に次の1行を追加する
 
 # vi /etc/rc.conf
 
 pf_enable="YES"
 pflog_enable="YES"
 
で、次に設定ファイルに、パケットフィルタリングのルールを記述。
http://www.openbsd.org/faq/pf/ja/ を参考にしていろいろと試してみる。
一応、ローカルネットワークの範囲のみパスさせて、他はブロックさせる設定や簡単なマクロの定義方法はすぐに分かった。
ipfw よりもわかりやすいなぁ。
でもやはりパケットフィルタリングの設計は難しいと感じる。
公開したいポート、公開したくないポート、公開したくないけどサーバーが外部と通信しないといけないポートという切り分けが難しい。
理想は ssh のポートと ssl 通信のポート以外は公開したくないのであるが、そうしてしまうと ntp で同期できなかったり、外部のDNS を引けなかったり、fetchmail でメールを取得できなかったりする。
 
 # vi /etc/pf.conf
 
 # ネットワークインターフェイス定義
 ext_if = "xl0"
 # ローカルネットワーク定義
 priv_net = "192.168.0.0/24"
 # 外部へ開くポートの定義
 tcp_services = "{ ****, 123,53,110 }"
 udp_services = "{ 110 }"
 # パケットの正常化
 scrub in all
 # 全てのパケットをブロック
 block in all
 # ローカルホストは全てパスさせる
 pass quick on lo0 all
 # アドレス詐称に対する防御
 antispoof quick for $ext_if inet
 # ローカルネットワークはパスさせる
 pass in on $ext_if from $priv_net to any
 pass out on $ext_if from any to $priv_net
 # 外部に対して開くポートを設定する
 pass in on $ext_if inet proto tcp from any to ($ext_if) \
   port $tcp_services flags S/SA keep state
 pass in on $ext_if inet proto tcp from any to ($ext_if) \
   port $udp_services flags S/SA keep state
 
一応上記の設定で希望の動作をするが、まだまだ改善しないといけない。
自宅サーバーから POP3 でメールを受信するポートを変えようかな。
まぁ、まだ DMZ に設定はしないし、作業するとき以外は電源を切っているけど、まだまだ勉強しないとなぁ。
う、もう3時半、眠いから寝る。
 

今日の動画鑑賞

シネマ

戦場のピアニスト(やっと見終わった)