ヤマハルーター向け鎖国フィルタージェネレーターの使い方

 海外からの SIP 攻撃に業を煮やし、急遽、国外IPを弾く作戦に出たのが昨年の11月。
 その取り組みは功を奏して、以後、まったく攻撃を食らうことがなくなりました。

 
 滅多に利用機会がないものの、自宅ルーターは外出先からも入って来れるように IPSec/L2TPSSH のポートも開けてあるのですが、心配事が減るよう、それらも SIP 同様に「日本以外拒否」という風にしています。

我が家は前衛に RT58i、その配下に RT107e という組み合わせで、後者が IPSec を担当


Raspberry PISSH はパスワード認証を拒否し証明書認証のみにしてあるので、総当たり食らっても大丈夫と思われるが、無駄な負荷をかけられるのも嫌なので


 アメリカ出張が多い人だと、「日本・アメリカ 以外を拒否」にしたい場合もあるでしょうし、いっそのこと自由にフィルター定義を作って頂けるよう ヤマハルーター向け鎖国フィルタージェネレーター を用意してみました。


http://dl.ftrans.etr.jp/?86d4baf7421e43ef8306678df5fed984c6c92d85.png


 条件を指定して request file するたけで、テキストファイルでフィルター文が手に入る、というものです。
 かなり積極的に隣接する CIDR を結合していますので、フィルター行数は最小限かと思います。

  • /7 や /6 はザラで、最高 /3 で括ってます。
  • IPアドレスの前ゼロは本来は要らないのですが、メモ帳で開けたときに見やすいように無駄に入れてます。

 例えば

  • 内側に WEBサーバー/メールサーバー(SMTP/POP/IMAP)がいる。
  • WEB閲覧は全ての国に許可
  • メールは全ての国から受信
  • 受信したメールを読むのは日本国内からのみ
  • 保守用の IPSec/L2TPSSH も日本国内からのみ
  • プロバイダの050番号も収容(RT58iとかNVR500とか想定)

という要件を具現化する場合を例に書きます。

# 例外なく拒否
ip filter 10 reject 10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16 * * * *
ip filter 11 reject * * udp,tcp * 135,netbios_ns-netbios_ssn,445
ip filter 12 reject * * udp,tcp 135,netbios_ns-netbios_ssn,445 *

# 国に関係なく許可
ip filter 30 pass * [メールサーバー] tcp * 25
ip filter 31 pass * [WEBサーバー] tcp * 80,443

# 日本以外を拒否
ip filter 100 reject ・・・
  (省略) ※この部分をジェネレータが作る
ip filter 138  reject ・・・

# 日本のみ許可
ip filter 300 pass * [メールサーバー] tcp * 110,143,587
ip filter 301 pass * [VPNサーバー] udp * 500,4500
ip filter 302 pass * [SSHホスト] tcp * 22
ip filter 303 pass * [ルーター] tcp * 5060
ip filter 304 pass * [ルーター] udp * 5004-5035,5060  # 注)ISP によって相違あり

# これを pp に適用する
pp select 1
ip pp secure filter in 10 11 12 30 31 100 101 ・・ 138 300 301 302 303 304

 こんな風になるかと思います。
 「フィルター番号 300〜 で特に国の IP を指定してないのに日本のみ許可になるの?」って思われるかもしれませんが、ヤマハルーターは最初から順番に評価していって該当した時点で終了する(それより以降は評価されない)という挙動なので、300 よりも前の 100〜138 が先に評価され、そこで「日本以外だったら reject」だったら、日本以外はここでふるい落とされことになり、結果として 300〜 は日本のみ、という風になります。


 別に nat descriptor masquerade static 〜 やるしぃ・・・って割り切りだったら、[メールサーバー] [VPNサーバー]・・・等々、内側の IPアドレス は * で省略しちゃってもいいかと思います。


 ブラウジングDNS 解決など、内側を起点とする戻りのパケットは通さないといけないので、この辺はダイナミックフィルターで通してやって下さい。

# 例外なく拒否
ip filter 20 reject * 10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16 * * *
ip filter 21 reject * * udp,tcp * 135,netbios_ns-netbios_ssn,445
ip filter 22 reject * * udp,tcp 135,netbios_ns-netbios_ssn,445 *

# 何でもあり(家庭用ルーターのデフォルトと同次元)
ip filter 40 pass * * * * *

# ダイナミックフィルター
ip filter dynamic 1 * * tcp
ip filter dynamic 2 * * udp

# これを pp に適用する
pp select 1
ip pp secure filter out 20 21 22 40 dynamic 1 2

 考え方を説明しただけで、かなりユルユル設定です。
 細かい説明も省略してますし、これだけじゃ駄目で他にも設定が必要ですが、鎖国を検討しているような方なら多分この程度でも御理解いただけれると思われ。。
 あとは各自で追い込んでくださいね!


 不審点 or 疑問点 等々あれば、お気軽にコメントどうぞ


(補足)
 現時点では、同じ条件だったらキャッシュを返すみたいな機構を用意しておらず毎度計算してます。
 スクリプトで回されると耐えられないので、captcha 使わせてもらってます、すみません。
 そう頻繁にアドレス枠が大きく変動するわけじゃないので、更新は数ヶ月に1回とかで大丈夫だと思いますが、自動的に定期更新する仕組みは目処がたっていますので、それまでご辛抱いただけたらな、と。


 内部的に持ってるデータベースは毎週月曜の未明に更新されます。
 月曜〜日曜は何度やっても同じ結果になります。


(追記)2018/02/24
 定期更新の自動化に関して つづき を書きました。