ヤマハルーター向け鎖国フィルター、定期更新の自動化(前編)

 10日ほど前に「ヤマハルーター向け鎖国フィルタージェネレーター」なるものを公開いたしました。
 画面に従って条件を入れたらフィルターファイルが出来上がる、という風にしたのですが「よし、これは使えるぞ」ってなったとき、次に遭遇する壁が「定期的な更新が面倒くさい」ということでしょう。


 そう頻繁にIPアドレスの国別割り当てが大きく変わるわけじゃないものの、頻繁じゃないからと言って放置しておくと忘れた頃に変わってる、ってことになりがちです。
 やっぱ自動化でしょ、ってことで、一気にやっちゃいました!


 最初は、これで小遣い稼ぎできないか? という欲望も沸いたのですが、

  • 元が無料で公開されているデータベースなのでデータそのものに著作権を主張できない
  • たとえ月100円(年1000円)であっても課金制にしたら使ってくれる人が激減しそう
  • わずかな金額であっても課金と回収および認証の仕組みは必要で、それを構築するのが面倒
  • 課金制にしたら金額の多寡に関わらず一定の SLA を確保しないといけなくなる

というネガティブな要素が次々と沸き出して来てしまったので、いったん もういいわ! ってなりました。


 将来にわたり、ずっとスケベ心を抑えていられるかどうかは分からないですが、当面は無料の使い放題にしときます。
 商売に繋げられる目論見をお持ちで、仕組み丸ごと買い取りたいという奇特な方がおいでになったら個別に相談ください(笑)

(注記)
 キャッシュ的な仕組みを内蔵して毎度全計算ということを止めたので、以前よりは負荷耐性が増してはいるものの更なる改良の余地ありって状態です。。
 外国からの本気アクセスには耐えられないと思うので、日本以外からの利用は拒否(403)してます。
 いったんは日本人専用ということで、外国の方は申し訳ないですが当面 Captcha版 から手動で使って下さい。


API(URI)の仕様


http[s]://api.wakwak-koba.jp/filter/yamaha/{in|out}/{pass|reject|restrict}{|-log|-nolog}.txt?パラメータ

パラメータの仕様

項目名 内容 省略時の挙動
country 国コード2桁(ISO 3166-1 α-2)をカンマ区切りで羅列
除外(Except)時は先頭に!を付与すること
必須(省略するとエラー)
start フィルター番号のスタート 必須(省略するとエラー)
max フィルター番号の最大
最大を超えるフィルター番号の行は生成されない
以前のゴミ消し用に先頭に no ip filter 〜行が自動的に付与
フィルター行は必要なだけ生成され、
no ip filter は付与されない
increment フィルター番号の増分数
max 指定時の no ip filter 〜行も、この増分に応じて生成される
1
length 1行あたりの最大文字数 4000
zerofill 1を指定すると、IPアドレスに0を埋め込み長さが揃う 0埋めしない
save 1を指定すると、save文が最後に付与される save行はコメント行
srcaddr 始点IPアドレス。out指定時のみ有効 *
destaddr 終点IPアドレス。in指定時のみ有効 *
protocol プロトコル *
srcport 始点ポートリスト *
destport 終点ポートリスト *


HTTPステータスコード

200 成功
202 成功してますが、近いうちに認証が必要になりますので注意
204 条件に該当するデータがありません
206 フィルター番号が指定された max を超えて、データが欠落してますので注意
save=1 の指定は無視され、save 行はコメントになります
400 必須パラメータを指定してください
401 認証が必要になりました(課金制に移行もしくはアクセス過大のため無認証での継続不能)
402 課金してください
403 利用をお断りさせていただいてます
404 URIが間違えてます
500 サーバーが落ちてます
  • 200/202 以外は訳ありなので、更新処理を中断する仕組みが望ましいです。
  • 200 以外が返されたときは管理者に通知される仕組みを実装して頂くのが望ましいです。
  • max 超えは 400番台にするべきか迷いましたが、現時点では 206 にしてます。
  • 斜体(202/401/402)は将来の予備で、現時点では未実装です。
  • 仕様変更の予告は 当ブログtwitter で行います。

例1

  • 日本以外からの接続を reject する。
  • フィルター番号は100〜139
  • 自動保存

https://api.wakwak-koba.jp/filter/yamaha/in/reject.txt?country=!JP&start=100&max=139&save=1


※country=の直後の ! が重要。これがないと、「日本からの接続のみ reject」になります。

例2

  • 日本とアメリカを pass する。
  • フィルター番号は1000〜で増分は +10 ずつ
  • 自動保存しない

https://api.wakwak-koba.jp/filter/yamaha/in/pass.txt?country=JP,US&start=1000&increment=10

例3(クライアント向け)

  • ロシアへの外向き 443/tcp 接続を reject する。
  • フィルター番号は1000〜1099で増分は +1 ずつ
  • 自動保存

https://api.wakwak-koba.jp/filter/yamaha/out/reject.txt?country=RU&start=1000&max=1099&save=1&protocol=tcp&destport=443


 pp に適用する ip filter in 〜 のフィルター番号は存在しなくても大丈夫なので、たとえば例1のケースの場合、現時点では実際には 129 までしか生成されないのですが、将来いつの間にか増えたときに備えて、ip filter in ・・・ 100 101 ・・・ 138 139 ・・・ みたいにしておくのがいいです。


 逆に、128 で収まるようになったときでも ip filter in ・・・ 100 101 ・・・ 138 139 ・・・ のままで構いません。
 max を指定しておけば no ip filter も自動生成されるため、129 のゴミが残り続けることもありません。
 max は省略可能にしてありますが、実運用では 例1や 例3 みたいに max も指定するべき、という認識でお願いします。


 生成されたフィルターを実際に適用するにあたっては、他にも config に記述が必要です。
 そのあたりは Captcha版を公開した時 に触れてますので併せて参考下さい。
 CUI が分からないって人は、そんなに難しくないので、この機会に勉強しちゃいましょう♪




 長くなるので、前編はここまで。
 後編では取得したフィルターファイルを実際にルーターに自動適用するあたり説明します。
 心得のある方だったら、この API だけで定期更新まで自力実装できてしまうと思いますけれど・・・

 乞うご期待!!


(追記)
 Cisco 等、ヤマハ以外にも応用できるのですが、Cisco の機材は弄ったことありません。
 フィルター文の仕様が分かれば、上記 URIyamaha のところを cisco として対応させられそうです。
 Cisco 版が欲しい方、その辺の情報をお寄せ頂けたら対応できると思いますので、コメント下さいませ。


(追記)2018/02/25
 後編(自動的に定期更新させる)を書きました。