S.C. MAGI-SYSTEM 日記
Diary
2009年になって、実に3年ぶりに更新再開。

hns - 日記自動生成システム - Version 2.19.9

2005年03月15日(火) [n年日記]

[天気:雨](家) 起床:17:00 就寝:27:00

#1 [Home] 寝

ここのところ早起きが続いたので、一日中寝てました。

#2 [Server][*BSD] ipfilter with dynamic rule

回線を OCN から IIJmio に変えて一週間になりますが、 そろそろ真面目にパケットフィルタを設定しなくてはと思うようになりました。
うちのサーバは FreeBSD で運用していますので、パケットフィルタとしては ipfwIP FilterPF *1 の3つの選択肢があります。
一般的に IP Filterの方が処理が高速 と言われているので、私もipfilterを使っています。

さてipfilterの設定内容を紹介する前にサーバの構成について説明しますが、 実は melchior.magisystme.netにはハードウェア的なEthernetデバイスは 1つ *2 しかありません。
ゲートウェイとなるマシンには
                  +---------------+
 [Internet]-----(ext)    GW     (int)-----[LAN]
                  +---------------+
のように外向け(ext)の口と、内向け(int)の口の2つを用意するのが一般的ですが、 Mini-ITX を使っている関係で、Ethernet口が1つしかないのです。
そこでこのサーバでは
                +-----------+
                |    GW     |
                +---(vr0)---+
                      |     
              (ng0)---+---(ng1)
                |     |     |
 [Internet]-----+   [LAN]   +-----[Flets-Square]
vr0という1つのEthernet口をつかって全ての通信を行っています。
そのため、対外的な通信であっても PPPoE のパケットとして一度 LAN 側の口から出て行くので かなり帯域ロスが大きいのが難点です。
しかし、省スペースのためには仕方がありません。

このサーバで使っている ipf.conf が下記のもの。
############################################
# group 0
block in log quick all with ipopts
block in log quick all with short
block return-icmp-as-dest(host-unr) in log quick all with frag
block in log quick all with opt rr
block in log quick all with opt ts
block in log quick all with opt ssrr
block in log quick all with opt lsrr
pass in all head 50

############################################
# group 50
# temporary abuse rules

############################################
# group 100
# input from Internet
pass in on ng0 all head 100
# common input filter
# faked address
block in quick from 127.0.0.0/8 to any group 100
block in quick from GLOBALIP/32 to any group 100
block in quick from PRIVATEIP/24 to any group 100
# private, multicast
block in quick from 10.0.0.0/8 to any group 100
block in quick from 172.16.0.0/12 to any group 100
block in quick from 192.168.0.0/16 to any group 100
block in quick from 0.0.0.0/8 to any group 100
block in quick from 169.254.0.0/16 to any group 100
block in quick from 192.0.2.0/24 to any group 100
block in quick from 224.0.0.0/4 to any group 100
block in quick from 240.0.0.0/4 to any group 100
# NetBIOS (port 135,137-139,445,1025)
block in quick proto tcp/udp from any to any port = 135 group 100
block in quick proto tcp/udp from any port 136 >< 140 to any group 100
block in quick proto tcp/udp from any to any port 136 >< 140 group 100
block in quick proto tcp/udp from any to any port = 445 group 100
block in quick proto tcp/udp from any to any port = 1025 group 100
# NFS (port 111,1110,2049)
block in quick proto tcp/udp from any port = 111 to any group 100
block in quick proto tcp/udp from any to any port = 111 group 100
block in quick proto tcp/udp from any port = 1110 to any group 100
block in quick proto tcp/udp from any to any port = 1110 group 100
block in quick proto tcp/udp from any port = 2049 to any group 100
block in quick proto tcp/udp from any to any port = 2049 group 100
# X-Window (port 6000-6063)
block in quick proto tcp/udp from any port 5999 >< 6064 to any group 100
block in quick proto tcp/udp from any to any port 5999 >< 6064 group 100
# UDP
block in proto udp all group 100
# ICMP
block in proto icmp all group 100
# IPv6
pass in quick proto ipv6 all group 100
# ESP
pass in quick proto esp all group 100
# SSH
pass in quick proto tcp from any to any port = 22 flags S/FSRAU keep state group 100
# SMTP
pass in quick proto tcp from any to any port = 25 flags S/FSRAU keep state group 100
pass in quick proto tcp from any to any port = 465 flags S/FSRAU keep state group 100
# but, reset IDENT
block return-rst in quick proto tcp from any to any port = 113 group 100
# IMAPS
pass in quick proto tcp from any to any port = 993 flags S/FSRAU keep state group 100
# POP3S
pass in quick proto tcp from any to any port = 995 flags S/FSRAU keep state group 100
# WWW
pass in quick proto tcp from any to any port = 80 flags S/FSRAU keep state group 100
pass in quick proto tcp from any to any port = 8080 flags S/FSRAU keep state group 100
# FTP
pass in quick proto tcp from any to any port = 21 flags S/FSRAU keep state group 100
# FTP (PASV)
pass in quick proto tcp from any port >= 1024 to any port >= 49152 flags S/FSRAU keep state group 100
# FTP (PORT)
pass in quick proto tcp from any port = 20 to any port 1023 >< 5000 flags S/FSRAU keep state group 100
pass in quick proto tcp from any port = 20 to any port >= 49152 flags S/FSRAU keep state group 100
# DNS
pass in quick proto tcp from any to any port = 53 flags S/FSRAU keep state group 100
pass in quick proto udp from any to any port = 53 keep state group 100
# NTP
pass in quick proto udp from any port = 123 to any keep state group 100
# ISAKMP
pass in quick proto udp from any port = 500 to any keep state group 100
# SOCKS
block return-rst in quick proto tcp from any to any port = 1080 group 100
# common input filter (last)
# some dead keep state
block return-rst in quick proto tcp all flags A/SAU group 100
# deny other TCP
block in log quick proto tcp all group 100
# RFC2979
pass in quick proto icmp all icmp-type unreach group 100
# TRACEROUTE
pass in quick proto icmp all icmp-type timex group 100
# should not reach here
log level warn in all group 100

############################################
# group 200
# output to Internet
pass out on ng0 all head 200
# common output filter
# faked address
block out from 127.0.0.0/8 to any group 200
block out from any to 127.0.0.0/8 group 200
block out from any to GLOBALIP/32 group 200
# private, multicast
block out from any to 10.0.0.0/8 group 200
block out from any to 172.16.0.0/12 group 200
block out from any to 192.168.0.0/16 group 200
block out from any to 0.0.0.0/8 group 200
block out from any to 169.254.0.0/16 group 200
block out from any to 192.0.2.0/24 group 200
block out from any to 224.0.0.0/4 group 200
block out from any to 240.0.0.0/4 group 200
# NetBIOS (port 137-139,445,1025)
block out proto tcp/udp from any to any port = 135 group 200
block out proto tcp/udp from any port 136 >< 140 to any group 200
block out proto tcp/udp from any to any port 136 >< 140 group 200
block out proto tcp/udp from any to any port = 445 group 200
block out proto tcp/udp from any to any port = 1025 group 200
# NFS (port 111,1110,2049)
block out proto tcp/udp from any port = 111 to any group 200
block out proto tcp/udp from any to any port = 111 group 200
block out proto tcp/udp from any port = 1110 to any group 200
block out proto tcp/udp from any to any port = 1110 group 200
block out proto tcp/udp from any port = 2049 to any group 200
block out proto tcp/udp from any to any port = 2049 group 200
# X-Window (port 6000-6063)
block out proto tcp/udp from any port 5999 >< 6064 to any group 200
block out proto tcp/udp from any to any port 5999 >< 6064 group 200
# UDP
block out proto udp all group 200
# ICMP
block out proto icmp all group 200
# IPv6
pass out quick proto ipv6 all group 200
# ESP
pass out quick proto esp all group 200
# DNS
pass out quick proto udp from any to any port = 53 keep state group 200
# NTP
pass out quick proto udp from any to any port = 123 keep state group 200
# ISAKMP
pass out quick proto udp from any to any port = 500 keep state group 200
# TRACEROUTE
pass out quick proto udp from any to any port 33433 >< 33535 keep state group 200
# common output filter (last)
# TCP setup
pass out quick proto tcp all flags S/FSRA keep state group 200
# some dead keep state
block quick proto tcp all flags A/SAU group 200
# PING
pass out quick proto icmp all icmp-type echo keep state group 200
# should not reach here
log level warn out all group 200

############################################
# group 300
# input from Flets-Square
pass in on ng1 all head 300
# common input filter
# faked address
block in quick from 127.0.0.0/8 to any group 300
block in quick from GLOBALIP/32 to any group 300
block in quick from PRIVATEIP/24 to any group 300
# private, multicast
block in quick from 10.0.0.0/8 to any group 300
block in quick from 172.16.0.0/12 to any group 300
block in quick from 192.168.0.0/16 to any group 300
block in quick from 0.0.0.0/8 to any group 300
block in quick from 169.254.0.0/16 to any group 300
block in quick from 192.0.2.0/24 to any group 300
block in quick from 224.0.0.0/4 to any group 300
block in quick from 240.0.0.0/4 to any group 300
# NetBIOS (port 135,137-139,445,1025)
block in quick proto tcp/udp from any to any port = 135 group 300
block in quick proto tcp/udp from any port 136 >< 140 to any group 300
block in quick proto tcp/udp from any to any port 136 >< 140 group 300
block in quick proto tcp/udp from any to any port = 445 group 300
block in quick proto tcp/udp from any to any port = 1025 group 300
# NFS (port 111,1110,2049)
block in quick proto tcp/udp from any port = 111 to any group 300
block in quick proto tcp/udp from any to any port = 111 group 300
block in quick proto tcp/udp from any port = 1110 to any group 300
block in quick proto tcp/udp from any to any port = 1110 group 300
block in quick proto tcp/udp from any port = 2049 to any group 300
block in quick proto tcp/udp from any to any port = 2049 group 300
# X-Win quickdow (port 6000-6063)
block in quick proto tcp/udp from any port 5999 >< 6064 to any group 300
block in quick proto tcp/udp from any to any port 5999 >< 6064 group 300
# UDP
block in proto udp all group 300
# ICMP
block in proto icmp all group 300
# common input filter (last)
# some dead keep state
block return-rst in quick proto tcp all flags A/SAU group 300
# deny other TCP
block in log quick proto tcp all group 300
# RFC2979
pass in quick proto icmp all icmp-type unreach group 300
# should not reach here
log level warn in all group 300

############################################
# group 400
# output to Flets-Square
pass out on ng1 all head 400
# common output filter
# faked address
block out quick from 127.0.0.0/8 to any group 400
block out quick from any to 127.0.0.0/8 group 400
block out quick from any to GLOBALIP/32 group 400
# private, multicast
block out quick from any to 10.0.0.0/8 group 400
block out quick from any to 172.16.0.0/12 group 400
block out quick from any to 192.168.0.0/16 group 400
block out quick from any to 0.0.0.0/8 group 400
block out quick from any to 169.254.0.0/16 group 400
block out quick from any to 192.0.2.0/24 group 400
block out quick from any to 224.0.0.0/4 group 400
block out quick from any to 240.0.0.0/4 group 400
# NetBIOS (port 137-139,445,1025)
block out quick proto tcp/udp from any to any port = 135 group 400
block out quick proto tcp/udp from any port 136 >< 140 to any group 400
block out quick proto tcp/udp from any to any port 136 >< 140 group 400
block out quick proto tcp/udp from any to any port = 445 group 400
block out quick proto tcp/udp from any to any port = 1025 group 400
# NFS (port 111,1110,2049)
block out quick proto tcp/udp from any port = 111 to any group 400
block out quick proto tcp/udp from any to any port = 111 group 400
block out quick proto tcp/udp from any port = 1110 to any group 400
block out quick proto tcp/udp from any to any port = 1110 group 400
block out quick proto tcp/udp from any port = 2049 to any group 400
block out quick proto tcp/udp from any to any port = 2049 group 400
# X-Window (port 6000-6063)
block out quick proto tcp/udp from any port 5999 >< 6064 to any group 400
block out quick proto tcp/udp from any to any port 5999 >< 6064 group 400
# UDP
block out proto udp all group 400
# ICMP
block out proto icmp all group 400
# DNS
pass out quick proto udp from any to any port = 53 keep state group 400
# common output filter (last)
# TCP setup
pass out quick proto tcp all flags S/FSRA keep state group 400
# some dead keep state
block out quick proto tcp all flags A/SAU group 400
# PING
pass out quick proto icmp all icmp-type echo group 400
# should not reach here
log level warn out all group 400

############################################
# group 500
# input from LAN
pass in on vr0 all head 500
# faked address
block in quick from 127.0.0.0/8 to any group 500
block in quick from PRIVATEIP/32 to any group 500
block in quick from GLOBALIP/32 to any group 500
# SMTP
pass in quick proto tcp from any to PRIVATEIP port = 25 flags S/FSRA keep state group 500
pass in quick proto tcp from any to GLOBALIP port = 25 flags S/FSRA keep state group 500
block return-rst in log quick proto tcp from any to any port = 25 group 500

############################################
# group 600
# output to LAN
pass out on vr0 all head 600
# faked address
block out quick from 127.0.0.0/8 to any group 600
block out quick from any to 127.0.0.1/8 group 600
block out quick from any to PRIVATEIP/32 group 600

############################################
# group 0
# input/output on loopback
pass in quick on lo0 all
pass out quick on lo0 all

ここで GLOBALIP は ng0 のグローバルIP、PRIVATEIP は vr0 のプライベートIPです。

ルールとしてはかなり厳しめの設定になっているかと。
基本的に ICMP と UDP は禁止。
外からのTCPは、特定のサービスのみ keep state し、万が一 state テーブルから情報が失われた あるいはタイムアウトした場合には
# some dead keep state
block return-rst in quick proto tcp all flags A/SAU group 100
で、リセットを返すようにしています。
また flags S/FSRAU としているのは、Syn+Fin 対策と詐称IPに対する返事である Ack+Syn 対策です。
特に HTTP(80) に来る WebDAV のセキュリティホールを利用した SEARCH /\x90\x02\xb1...(以下略) という 攻撃のほとんどはこの Ack+Syn であることが多いです。
出ていく方のTCPも同様で、keep state でテーブルから情報がなくなったものは
# some dead keep state
block quick proto tcp all flags A/SAU group 200
ブロックするようにしています *3
IPv6は全通し。(笑)
そのうち IPsec をやる予定なので、isakmp (UDP) と ESP を通すようにしています。
また、内部のWindowsが変なワームやトロイの木馬に感染した場合に備えて、 ゲートウェイにあるSMTPサーバを経由しないSMTP接続を全て落とすようにしてあります。

実はこのルールセットのミソは group 50 の指定にあります。
ここには今の状態ではルールを何も書いていませんが、あるホストから不正な接続を受けるという 状態がよく起きるようになったときに
# /sbin/ipf -f - <<EOF;
block quick in all from あるホスト to any group 50
EOF
とコマンドを打つだけでルールを追加できるのです。
番号を使ってルールを delete できる ipfw と違って、ipfを使う人は ipf.conf を丸ごとリロードしがちですが、 このようにすれば動的なルールをある程度構築できます。
また、先程のルールを消したくなったら
# /sbin/ipf -r -f - <<EOF;
block quick in all from あるホスト to any group 50
EOF
で消すこともできます。
今ある 一時ルール を見たい時は
# /sbin/ipfstat -ioh | grep 'group 50'
で確認できます。
これは結構便利だと思いますよ?

最後に ipnat.conf の方ですが、
map ng0 192.168.1.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp
map ng0 192.168.1.0/24 -> 0.0.0.0/32 portmap tcp/udp auto mssclamp 1414
map ng0 192.168.1.0/24 -> 0.0.0.0/32 mssclamp 1414
map ng1 192.168.1.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp
map ng1 192.168.1.0/24 -> 0.0.0.0/32 portmap tcp/udp auto mssclamp 1414
map ng1 192.168.1.0/24 -> 0.0.0.0/32 mssclamp 1414
という感じ。
mssclamp値が 1414 になっているのは 先日書いた通り です。
*1: 実際のところPFが組み込まれているのは 5.x 系なので、4.11-STABLE であるうちのサーバでは使えません。
*2: vr0
*3: 本当はここれリセットが返せればいいのですが…

#3 [Server][*BSD] tcp/udp blackhole

空いてないポートへの接続に対して返事を返さない blackhole の設定。
下記を /etc/sysctl.conf に加えておく。
net.inet.tcp.blackhole=1
net.inet.udp.blackhole=1
こうするとサービスを提供していないポートへの接続にリセットを返さなくなります。

2004年03月15日(月) [n年日記]

[天気:晴れときどき曇り](家) 起床:14:30 就寝:24:30

#1 [Home] 春の病

私にとって春の病といえばまずは 花粉症 なのですが、実はもう1つ強敵がいます。
それは 春眠暁を覚えず
ここのところ家で引き籠もり生活をしていますが、 一応朝の11時には起きる努力をしています。
ですが、今日は気付いたら昼を回っていました…
やはりあまりにも暖かいと、どうも体が目覚めるのが遅くなるようだ。

ここのところの私の生活サイクルは朝起きて、体を目覚めさせてから 午後に勉強するという感じなのだが、こう起きたのが昼を過ぎていると 完全にリズムが狂ってしまう。
むぅ。
恐るべし、春。

2003年03月15日() [n年日記]

[天気:曇り](家) 起床:8:00 就寝:24:30

#1 [Muzik] ま〜だ?

ぁゃゃの新シングルですが… まだ買ってません
というのも、ここのところ晴天続きで外に出る気が起きなかった *1 のです。
本当は昨日、買いにいくつもりではいたのですが…結果は見ての通り。
んで、ようやく今日近所のCDショップに珈琲豆買うついでに寄ってみました。
そうしたら初回盤がもう置いてないじゃないですか。(あたりまえだ
別に通常盤だったら別に急いで買う必要もないや、とばかりに結局今日も買いませんでした。(ぇ
レビューするのはもう少し先になるかも。

というか、通常盤の方が初回盤よりも安いんだから買ってもよかったんじゃないか?
*1: おのれ、植林事業!

#2 [MacOSX] Camino 0.7+

自分で build した Camino ですが、どうも調子がよくない。
よくない点を上げると
  1. target=_blank なページをタブに開くと何故か空のウインドウが新規に開く。(もちろんページ自体はタブにロードされる)
  2. ダウンロード完了と同時に勝手にヘルパーアプリケーションを起動する。(Preferencesでは無効になっているにもかかわらず)
  3. input formが背景イメージや背景色で塗りつぶされてしまい、見難い。
  4. IM (input methodと呼ぶのかな?) のフォント、色設定が反映されない。
といった具合である。
まあ checkout した時期が悪かったのかと、もう一度 build してみているが…
駄目だったらおそらく rev 1.4a になったからなのかもしれないな。
正式リリースが出るまでは Camino 0.7 リリース版で我慢します。

#3 [MATSURI] 田中商店

本来の意味での MATSURI とは違う *2 のですが、 ChiBUGたなべ氏 *3MIRA氏 と行ってきました。

ちなみにデスクトップのスクリーンショットは こちら からどうぞ。
*2: 主催者というかメインドライバーが今テンパってますから…
*3: 彼も Buy Now! の誘惑に負けてしまったらしい。


最近の日記
2019年06月24日
10年振り
2009年12月31日
定期アップデート
2009年04月03日
定期アップデート
2009年03月22日
定期アップデート
2009年01月26日
pomera
2009年01月23日
今日のBOT
2009年01月22日
BOT
2009年01月20日
Seagate HDD
PowerPCの備忘録
RSS feed
abuse
2009年01月19日
Windows 7 beta
2009年01月16日
perl-after-upgrade
2009年01月14日
アクセスカウンタ
2009年01月13日
ひとまず完了
2009年01月12日
7.1-RELEASE(適用)
2009年01月10日
hns 2.19.9
2009年01月09日
recursion no
以上、3 日分です。
先月 2019年09月 来月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project