パケットフィルタリングの設定 その2

はじめに

ipfwではパケットをルール表の番号の小さい順に比較し該当したルールで処理し、その後のルール表は読み飛ばして次のパケットの処理に移ります。
よって、全てに絶対のルールを先頭に、条件付きルールを中程に、その他のルールを最後に指定します。ルール表に該当しなかったパケットはデフォルトの65535ルールで処理されます(普通のカーネルなら破棄、IPFIREWALL_DEFAULT_TO_ACCEPTオプション付きでコンパイルしたカーネルなら通過)。
パケットを比較するルール数が少ないほど1つのパケットを速く処理できるので多くのパケットが該当するようなルールは少しでも先に書くのがコツです。ただし、ルールが破綻しないようにルール指定の順序には注意して下さい。

なお、このページではルール番号を指定しない設定方法で記述していますが
例えば
ipfw add deny all from any to 10.0.0.0/8 via ed0 なら
ipfw add 200 deny all from any to 10.0.0.0/8 via ed0
というように、ルール番号付きで指定する方法もあります。

フィルタリングルールの雛形

fwcmd="/sbin/ipfw"
# WAN側(外側)インターフェースを指定する
oif="ed0"
onet="192.0.2.0"
omask="255.255.255.240"
oip="192.0.2.1"
# LAN側(内側)インターフェースを指定する
iif="ed1"
inet="192.0.2.16"
imask="255.255.255.240"
iip="192.0.2.17"
# IP詐称を禁止する
#発信元が内側のIPアドレスを持つパケットの外側からの侵入と
#発信元が外側のIPアドレスを持つパケットを内側からの発信を破棄する。
${fwcmd} add deny all from ${inet}:${imask} to any in via ${oif}
${fwcmd} add deny all from ${onet}:${omask} to any in via ${iif}
# 外側NICで発信元がプライベートアドレスのパケットを破棄
${fwcmd} add deny all from any to 10.0.0.0/8 via ${oif}
${fwcmd} add deny all from any to 172.16.0.0/12 via ${oif}
${fwcmd} add deny all from any to 192.168.0.0/16 via ${oif}
# 外側NICでDHCP自動設定とNET-TEST、マルチキャスト(クラスD,クラスE)を破棄
${fwcmd} add deny all from any to 0.0.0.0/8 via ${oif}
${fwcmd} add deny all from any to 169.254.0.0/16 via ${oif}
${fwcmd} add deny all from any to 192.0.2.0/24 via ${oif}
${fwcmd} add deny all from any to 224.0.0.0/4 via ${oif}
${fwcmd} add deny all from any to 240.0.0.0/4 via ${oif}
#NAT変換を行う場合(DIVERTの追加)
${fwcmd} add divert natd all from any to any via ${oif}
# 外側からのプライベートアドレス宛てのパケットを破棄
${fwcmd} add deny all from 10.0.0.0/8 to any via ${oif}
${fwcmd} add deny all from 172.16.0.0/12 to any via ${oif}
${fwcmd} add deny all from 192.168.0.0/16 to any via ${oif}
#外側NICでDHCP自動設定とNET-TEST、マルチキャスト(クラスD,クラスE)を破棄
${fwcmd} add deny all from 0.0.0.0/8 to any via ${oif}
${fwcmd} add deny all from 169.254.0.0/16 to any via ${oif}
${fwcmd} add deny all from 192.0.2.0/24 to any via ${oif}
${fwcmd} add deny all from 224.0.0.0/4 to any via ${oif}
${fwcmd} add deny all from 240.0.0.0/4 to any via ${oif}

※この雛形だけでは全てのパケットを破棄するので通信できません。

原則不許可型のフィルタリング

原則不許可型のフィルタリングでは必要な通信を許可するルールを個別に記述する必要があるので導入当初の設定が大変ですが、別の言い方をすれば必要最低限の通信を許可するだけなので後々が楽で管理者にとって都合が良い方法です。

上の雛形の後に追加します。

#内側から外側へのTCPアクセスに対する返答パケットの侵入を許可する
#(接続の確立したTCPパケットを全て許可する)
${fwcmd} add pass tcp from any to any established
#IPフラグメントを許可する
${fwcmd} add pass all from any to any frag
#case.1: 内側から外側へのTCPアクセスの全てを許可
${fwcmd} add pass tcp from any to any setup
#case.2: 内側から外側へのsmtp,http,pop3のTCPアクセスのみ許可
${fwcmd} add pass tcp from any to any 25,80,110 setup
#外部のDNSサーバへの問い合わせを許可
${fwcmd} add pass udp from any to ${oip} 53
${fwcmd} add pass udp from ${oip} 53 to any
#外側からSSH(port22)への接続を許可
${fwcmd} add pass tcp from any to ${oip} 22 setup
#外側からWebサーバ(port80)への接続を許可
${fwcmd} add pass tcp from any to ${oip} 80 setup


原則許可型のフィルタリング

原則許可型のフィルタリングは導入当初の設定が楽な反面、ネットワーク内の全ての個々のホストにも目を光らせる必要があり、更に運用するに従ってより多くの不許可ルールの追加を迫られることがあり、管理者にとっては後々面倒なフィルタリングといえます。
また、ipfwの特性上、拒否ルールを先に、最後にその他を許可という記述方法になる為、不許可ルールが多くなるとパケットの処理で全てのルールと比較することが多くなり速度面で原則不許可型より遅くなる場合があります。
そこで、コツとしては原則許可型であってもルールの出来るだけ最初の方に意識的に許可ルールを書くという方法があります。(早くルールにマッチすると速度低下が起き難い)
特に効果があるのは ${fwcmd} add pass tcp from any to any established や、不特定多数からのアクセス受付を許しても問題の無いサーバー系のアクセス受付ルールなどです。

雛形の最後(またはルール表の最後)に追加します。

${fwcmd} add pass tcp from any to any established # など早めにマッチさせたい許可ルール
            ・
            ・
        拒否ルールを追加する
            ・
            ・
#全てのパケットを許可
${fwcmd} add allow ip from any to any

南朝鮮からのアクセスを拒否する

常時接続環境で侵入検知ソフト(IDS)を利用していると外部から非常に多くのアクセス(アタック)があることに驚くと思います。そのアクセス元を調べるとそれらのおよそ半数がIT先進国(自称)の南朝鮮からのものです。(いんたぁ.ねっとのアクセス統計による)
南朝鮮からのアクセスは百害あって一理無いので、日韓海底通信ケーブルを断ち切って貰いたい程ですが、2002年のW杯にかこつけて更に海底ケーブルを敷いているようで正直勘弁願いたいところです。
次の図は2001年8月1日~5日にCodeRedに感染したサイトを赤点で表した物ですが、東アジアにとてつもなく巨大な赤丸があります。日本がすっぽり隠れて見えませんが、南朝鮮での感染数があまりに多過ぎてこうなったものです。

CodeRed感染分布図 (http://www.security.nl/misc/codered-stats/)

CodeRed

そして、CodeRedから1年半の2003年1月25日、今度はSlammerウイルスにより世界中でネットワークの異常が発生しました。中でも 南朝鮮では大手ISPまでが軒並み感染し、国中でインターネット回線が使用できない状態になる事件が起きています。この件については総務省の報道資料で次のように報告されています。

  • 南朝鮮のインターネットインフラの特徴
    南朝鮮はインターネットの全てのポートを原則オープンに設定する傾向があり、日本と比べ、今回のワームの攻撃対象となるサーバが多かった。
  • ユーザのシステムにおけるセキュリティの脆弱性
    違法コピーの存在、正規ユーザでも運用断やコスト増への懸念等から、パッチ(修正プログラム)を当てていなかったSQLサーバが多く存在。

参考 : Slammerが残したもの - 動き始めた日本のセキュリティ対策

日本のようなIT後進国では企業も個人も一生懸命パッチ当てたりポート塞いだり何だりとせせこましいことをしてるのでせっかく送ったパケットが拒否されたり反応が無かったりしてがっかりすることが多いのですが、さすがIT先進国の南朝鮮は違います。
と、いうことで南朝鮮からのアクセスを拒否するルールを追加します。

 ipfw add deny ip from 61.32/13 to any
 ipfw add deny ip from 61.40/14 to any
 ipfw add deny ip from 61.72/13 to any
 ipfw add deny ip from 61.80/13 to any
 ipfw add deny ip from 61.96/12 to any
 ipfw add deny ip from 61.248/13 to any
 ipfw add deny ip from 202.6.95/24 to any
 ipfw add deny ip from 202.14.103/24 to any
 ipfw add deny ip from 202.14.165/24 to any
 ipfw add deny ip from 202.20.82/23 to any
 ipfw add deny ip from 202.20.84/23 to any
 ipfw add deny ip from 202.20.86/24 to any
 ipfw add deny ip from 202.20.99/24 to any
 ipfw add deny ip from 202.20.119/24 to any
 ipfw add deny ip from 202.20.128/17 to any
 ipfw add deny ip from 202.21.0/21 to any
 ipfw add deny ip from 202.30/15 to any
 ipfw add deny ip from 202.189.128/18 to any
 ipfw add deny ip from 203.224/11 to any
 ipfw add deny ip from 210.80.96/19 to any
 ipfw add deny ip from 210.90/15 to any
 ipfw add deny ip from 210.92/14 to any
 ipfw add deny ip from 210.96/11 to any
 ipfw add deny ip from 210.178/15 to any
 ipfw add deny ip from 210.180/14 to any
 ipfw add deny ip from 210.204/14 to any
 ipfw add deny ip from 210.216/13 to any
 ipfw add deny ip from 211.32/11 to any
 ipfw add deny ip from 211.104/13 to any
 ipfw add deny ip from 211.112/13 to any
 ipfw add deny ip from 211.168/13 to any
 ipfw add deny ip from 211.176/12 to any
 ipfw add deny ip from 211.192/10 to any

※上は既に大変古いものです。ご利用の際は最新のIP割り当てリストを元に設定(鎖国フィルタを用意しました)して下さい。

なお、これは南朝鮮に公式に割り当てられたアドレスだけなので南朝鮮からの全てのアクセスが拒否できる訳ではありません。悪意のある人によって南朝鮮外のプロクシ経由でアクセスされる場合には意味がありませんし、南朝鮮外に住み着いてしまっている悪意のある人も多くいます。
しかし、スキルの低い人、ボット・ワームなどによるアクセスの大部分を防ぐことができるのでこれでも十分に有効といえます。
なお、拒否ログを録るとログがゴミで溢れてしまうので録らない方が良いでしょう。

支那からのアクセスを拒否する

南朝鮮からの不正なアクセスと同様に支那からの不正なアクセスも非常に多く、望まれないアクセスの4割強は支那からのものです。つまり中韓で望まれないアクセスのおよそ9割を占めます。(いんたぁ.ねっとでの計測結果)
多くのサイトでは支那からのアクセスを受ける必要は無い筈です。
これもまたバッサリと切り捨ててしまいましょう。

 ipfw add deny ip from 61.28/15 to any
 ipfw add deny ip from 61.48/13 to any
 ipfw add deny ip from 61.128/10 to any
 ipfw add deny ip from 61.232/13 to any
 ipfw add deny ip from 202.0.110/24 to any
 ipfw add deny ip from 202.0.160/20 to any
 ipfw add deny ip from 202.0.176/22 to any
 ipfw add deny ip from 202.4.128/19 to any
 ipfw add deny ip from 202.4.252/22 to any
 ipfw add deny ip from 202.14.88/24 to any
 ipfw add deny ip from 202.14.235/24 to any
 ipfw add deny ip from 202.14.236/23 to any
 ipfw add deny ip from 202.14.238/24 to any
 ipfw add deny ip from 202.20.120/24 to any
 ipfw add deny ip from 202.22.248/21 to any
 ipfw add deny ip from 202.38.0/20 to any
 ipfw add deny ip from 202.38.32/19 to any
 ipfw add deny ip from 202.38.64/18 to any
 ipfw add deny ip from 202.38.128/17 to any
 ipfw add deny ip from 202.90.0/22 to any
 ipfw add deny ip from 202.90.252/22 to any
 ipfw add deny ip from 202.91.0/22 to any
 ipfw add deny ip from 202.91.128/22 to any
 ipfw add deny ip from 202.92.0/22 to any
 ipfw add deny ip from 202.92.252/22 to any
 ipfw add deny ip from 202.93.0/22 to any
 ipfw add deny ip from 202.93.252/22 to any
 ipfw add deny ip from 202.94.0/19 to any
 ipfw add deny ip from 202.95.0/19 to any
 ipfw add deny ip from 202.95.252/22 to any
 ipfw add deny ip from 202.96/12 to any
 ipfw add deny ip from 202.112/13 to any
 ipfw add deny ip from 202.120/15 to any
 ipfw add deny ip from 202.122.0/19 to any
 ipfw add deny ip from 202.122.32/21 to any
 ipfw add deny ip from 202.122.128/24 to any
 ipfw add deny ip from 202.127.0/18 to any
 ipfw add deny ip from 202.127.128/17 to any
 ipfw add deny ip from 202.130.0/19 to any
 ipfw add deny ip from 202.130.224/19 to any
 ipfw add deny ip from 202.131.160/19 to any
 ipfw add deny ip from 202.131.192/19 to any
 ipfw add deny ip from 202.136.252/22 to any
 ipfw add deny ip from 202.192/12 to any
 ipfw add deny ip from 203.81.16/20 to any
 ipfw add deny ip from 203.87.224/19 to any
 ipfw add deny ip from 203.88.0/18 to any
 ipfw add deny ip from 203.89.0/18 to any
 ipfw add deny ip from 203.90.0/18 to any
 ipfw add deny ip from 203.91.0/18 to any
 ipfw add deny ip from 203.92.0/18 to any
 ipfw add deny ip from 203.93/16 to any
 ipfw add deny ip from 203.94.0/18 to any
 ipfw add deny ip from 203.95.0/18 to any
 ipfw add deny ip from 203.128.128/19 to any
 ipfw add deny ip from 203.184.0/19 to any
 ipfw add deny ip from 203.192.0/19 to any
 ipfw add deny ip from 203.196.0/18 to any
 ipfw add deny ip from 203.207.64/18 to any
 ipfw add deny ip from 203.207.128/17 to any
 ipfw add deny ip from 203.208.0/18 to any
 ipfw add deny ip from 203.212.0/18 to any
 ipfw add deny ip from 203.222.192/18 to any
 ipfw add deny ip from 203.223.0/20 to any
 ipfw add deny ip from 210.5/16 to any
 ipfw add deny ip from 210.12/15 to any
 ipfw add deny ip from 210.14.128/17 to any
 ipfw add deny ip from 210.15.0/17 to any
 ipfw add deny ip from 210.15.128/18 to any
 ipfw add deny ip from 210.21/16 to any
 ipfw add deny ip from 210.22/16 to any
 ipfw add deny ip from 210.25/16 to any
 ipfw add deny ip from 210.26/15 to any
 ipfw add deny ip from 210.28/14 to any
 ipfw add deny ip from 210.32/12 to any
 ipfw add deny ip from 210.51/16 to any
 ipfw add deny ip from 210.52/15 to any
 ipfw add deny ip from 210.72/14 to any
 ipfw add deny ip from 210.76/15 to any
 ipfw add deny ip from 210.78/16 to any
 ipfw add deny ip from 210.79.224/19 to any
 ipfw add deny ip from 210.82/15 to any
 ipfw add deny ip from 211.64/13 to any
 ipfw add deny ip from 211.80/12 to any
 ipfw add deny ip from 211.96/13 to any
 ipfw add deny ip from 211.136/13 to any
 ipfw add deny ip from 211.144/12 to any
 ipfw add deny ip from 211.160/13 to any

※上は既に大変古いものです。ご利用の際は最新のIP割り当てリストを元に設定(鎖国フィルタを用意しました)して下さい。

なお、これは支那に公式に割り当てられたアドレスだけなので支那からの全てのアクセスが拒否できる訳ではありません。悪意のある人によって支那外のプロクシ経由でアクセスされる場合には意味がありませんし、支那の外に住み着いてしまっている悪意のある人も多くいます。
しかし、スキルの低い人、ボット・ワームなどによるアクセスの大部分を防ぐことができるのでこれでも十分に有効といえます。
特に、支那からは悪意のあるアクセスも結構多いのが気がかりです。
なお、拒否ログを録るとログがゴミで溢れてしまうので録らない方が良いでしょう。


「出来上がったルータを試す」に進む