kmuto’s blog

はてな社でMackerel CREをやっています。料理と旅行といろんなIT技術

MackerelでFail2banのBAN IP数をグラフ化するためのプラグインを書いてみた

「Mackerelエージェントのプラグインの仕組みを知り、プラグインを書いてみる」練習として。プラグインテンプレートとしてGo言語のは用意されているのだけど、さっちゃんのアドベントカレンダー記事にもあるとおり、メトリック自体は「メトリックに付ける一意な名前」「値」「Unix時刻」をタブ区切りで出力するだけでよい。

c4se.hatenablog.com

ではRubyでさくっと書いてみるかーということで、題材としてはかねてからやろうかなと思っていた、Fail2banのBAN IP数を測ってみる。できたのはこちら。

github.com

kmuto.jpに訪れるいろいろな攻撃をFail2banで叩き落としているが、そのJAILルールごとに現在BANしているIP数をグラフ化している。

Fail2ban BAN IPのグラフ化

BANしているのを眺めてどんなメリットがあるんだという意見もあるが、「お、今日も攻撃お疲れさまです! 拒否させていただきます!」という気持ちを視覚化できる。ほかには、「年末年始、sshdbotネットワークのマシンも休みなのか静かめだけど、PostfixへのAUTH試行はわりとずっとあるんだなぁ」といった手法の違いも目に見える。

余談

Fail2banからは fail2ban-client banned を使えばJSONっぽいというかRubyオブジェクトっぽいのが出てくる。

Ruby的にはevalしてそのまま使えるし、fail2banのログ化されている時点で安全だろうとは思うが、mackerel-agentはrootで動いているのもあってさすがにevalは抵抗がある。

じゃぁJSONとして使うか、としたところでなんかパースエラーになってしまってしばし悩んだのだが、結局シングルクォート(')がダメで、ダブルクォート(")にしろということだった。経験値が1上がった。

『ピアリング戦記』を読んだ

正月の読書、これはとても面白かった。

TCP/IPでスイッチやルーターでつながって、ルーターの先でISPにつながっている」といのはわかっていても、「ISP同士はどうやってつながっているんだろう?」「そういえばGoogleMicrosoftが使っているISPってどこなの?」という疑問を覚えたことはあるだろうか。

ISPのようにある程度自律的なネットワークグループはAS(Autonomous System)と呼ばれ、AS間はレイヤ2ネットワーク内でのBGPルーターどうしとして接続される。「ふーん、でもそれってただ共通のスイッチにケーブル挿すだけでしょ?」というのは物理上の話で、実際にはASどうしの接続は互いのメリットや力関係とお金、政治や国レベルまでも関わってくる。

BGPルータどうしをピアと呼び、これが接続するのでピアリング。ただし、接続の対価を一方が払う場合は、トランジットと呼ばれて区別される。距離的に近くてもASどうしの接続がなければ、隣の国なのにパケットがヨーロッパを回るといった事態になる(かつて学術ネットワークから商業ネットワークに行くのもだいぶ遠回りだった記憶がある)。

ASがデータセンターに集まってそれぞれBGPルーターを持ち込めば、構内配線で互いにピアリングできるが、これがIX(Internet eXchange)。人気のあるASが集まるIXは当然さらに多くのASを集める。さらに今はGoogleのように自身が多くのトラフィックを生み出す「ハイパージャイアンツ」と呼ばれるASが登場し、また新たな状況となっている。

本書は日本でのピアリング、トランジット、IXを巡る物語で、著者の小川あきみちさんが日本のピアリングやIXを開拓した方々に丹念にインタビューし、歴史を掘り起こしながら、現在の日本のインターネットの基盤に焦点を当てる。

ピアリングやトランジットのわかりやすい説明はもちろんだが、日本の代表的IXとして、NSPIXP、JPIX、JPNAP、BBIXの立ち上げにそれぞれ関わった方々の話は、当時の黎明期の雰囲気が感じられて最高に面白い。

tracerouteコマンドで経路のピアリングに感謝の思いをはせながら。