fail2banを運用しているとBanした、解除したというログがたっぷり溜まることになる。fail2banのお陰でサーバには問題が生じないが、どこからどんな攻撃が来ているのかということに興味が沸いてくる。ということで、IPアドレスのリストを逆引きしてどんなことが分かるか調べてみることにした。
普通ならここでGeoIPでも引くところだろうが、それは普通の人ならできることなので、みんなはあまりやらないこと、つまりAS番号を引いて相手がどんな事業者を使って繋いで来ているかを推測してみよう。
リストを作る
まずはBanリストの収集だ。ここで華麗にElasticsearchから引っ張り出せればいいのだが、どうせ引いたIPアドレスを逆引きするのにテキスト加工することになるので、最初からログを直接引っ張ってくることにする。まず対象サーバのリストから、こんな感じのバッチを実行する。
for sv in server1 server2 ... serverN; do echo $sv ssh $sv "grep 'sshd.*Ban' /var/log/fail2ban.*" >$sv done
これで、サーバごとにこんな感じのログファイルができる。
/var/log/fail2ban.log:2019-06-23 06:19:13,188 fail2ban.actions [3074]: NOTICE [sshd] Ban 46.101.98.242 /var/log/fail2ban.log:2019-06-23 09:24:20,168 fail2ban.actions [3074]: NOTICE [sshd] Ban 188.92.75.248 /var/log/fail2ban.log:2019-06-23 10:15:01,756 fail2ban.actions [3074]: NOTICE [sshd] Ban 34.202.43.134 /var/log/fail2ban.log:2019-06-23 19:27:43,576 fail2ban.actions [3074]: NOTICE [sshd] Ban 104.248.134.125 : :
相手のIPアドレスは各行の最後のフィールドなので、これを切り出す。
for sv in server1 server2 ... serverN; do awk '{ print $NF }' $sv | sort | uniq done | sort | uniq -c | sort -nr >ip-list-rank
これで、最後に ip-list-rank というファイルには「N台のサーバでBanされたIPアドレスのリスト」が収まる。全部で741行になった。
7 159.89.125.55 7 134.209.247.166 6 68.183.99.64 6 68.183.95.97 6 68.183.88.131 6 68.183.80.232 6 68.183.80.224 : :
というわけで全部のサーバでBanされているものもあったりして、たいしたもんだ。
さて、このIPアドレスを保有しているAS番号を知りたい。昔はaslookupというプログラムがあったのだが、残念ながら今は動かない。そこでlooking glassにクエリを投げるスクリプトで代替する。申し訳ないがコードはシェアできない……が、こんな風に使える。
[north@vortex dat]$ aslookup 159.89.125.55 14061
返ってきたのがAS番号だ。これをWHOISで引いてみる。
[north@vortex dat]$ whois as14061 # # ARIN WHOIS data and services are subject to the Terms of Use # available at: https://www.arin.net/resources/registry/whois/tou/ # # If you see inaccuracies in the results, please report at # https://www.arin.net/resources/registry/whois/inaccuracy_reporting/ # # Copyright 1997-2019, American Registry for Internet Numbers, Ltd. # ASNumber: 14061 ASName: DIGITALOCEAN-ASN ASHandle: AS14061 RegDate: 2012-09-25 Updated: 2012-09-25 Ref: https://rdap.arin.net/registry/autnum/14061 OrgName: DigitalOcean, LLC OrgId: DO-13 Address: 101 Ave of the Americas Address: 10th Floor City: New York StateProv: NY PostalCode: 10013 Country: US RegDate: 2012-05-14 Updated: 2019-02-04 Comment: http://www.digitalocean.com Comment: Simple Cloud Hosting Ref: https://rdap.arin.net/registry/entity/DO-13 : :
では ip-rank-list からAS番号に変換するバッチを書いてみよう。一気に実行して負荷をかけたくないので大きめのディレイを入れる。
for ip in `awk '{ print $NF }' ip-list-rank`; do sleep 10 aslookup $ip done | sort | uniq -c | sort -rn >as-list-rank
これでAS番号のランキングリストができる。
299 14061 48 26599 16 16276 15 4134 15 24547 15 12876 14 4837 14 31034 10 53667 10 209299 9 42610 8 45090 : :
特定のASに集中しすぎているような気がするが…。
最後にバッチでwhoisを引く。
for ip in `awk '{ print $NF }' as-list-rank`; do sleep 5 whois as$ip >as$ip.txt done
結果は「as9370.txt」のような形式で保存される。whoisの出力は、残念ながら統一された形式ではない(たとえばJSONなどではない)ので整形は少々面倒だ。まあ人力で必要な情報を抽出することになる。ランキングに当てはめて表にしてみよう。
AS | Count | Name | Nation |
14061 | 299 | DigitalOcean | US |
26599 | 48 | TELEFONICA BRASIL | Brazil |
16276 | 16 | OVH | France |
4134 | 15 | ChinaNet | China |
12876 | 15 | ONLINE S.A.S. | France |
24547 | 15 | China Mobile | China |
4837 | 14 | CHINA UNICOM | China |
31034 | 14 | Aruba S.p.A. | Italy |
53667 | 10 | FranTech Solutions | US |
209299 | 10 | VITOX TELECOM | India |
42610 | 9 | Rostelecom | Russia |
45090 | 8 | Tencent | China |
8075 | 7 | Microsoft | US |
266385 | 7 | TR Servicos de Telecomunicacoes | Brazil |
25092 | 6 | OpaTelecom | Ukraine |
60355 | 6 | KV Solutions B.V. | Netherlands |
202242 | 6 | Aruba S.p.A. | Italy |
51167 | 5 | Contabo GmbH | Germany |
135905 | 5 | VIETNAM POSTS AND TELECOMMUNICATIONS GROUP | Vietnam |
9318 | 4 | SK Broadband | Korea |
15169 | 4 | US | |
23724 | 4 | China Telecommunications | China |
45899 | 4 | VNPT Corp | Vietnam |
4808 | 3 | China Unicom | China |
7418 | 3 | TELEFONICA CHILE S.A. | Chile |
12389 | 3 | Rostelecom | Russia |
20473 | 3 | Choopa, LLC | US |
27818 | 3 | Cotesma | Argentine |
264942 | 3 | Alcantara Net LTDA | Brazil |
3215 | 2 | France Telecom | France |
3462 | 2 | HINET | Taiwan |
4766 | 2 | Korea Telecom | Korea |
5650 | 2 | Frontier Communications of America, Inc. | US |
7552 | 2 | Viettel Group | Vietnam |
7922 | 2 | Comcast Cable Communications Inc | US |
8402 | 2 | Vimpelcom | Russia |
9269 | 2 | Hong Kong Broadband Network Ltd. | Hong Kong |
10507 | 2 | Sprint | US |
17962 | 2 | Topway-Net | China |
18403 | 2 | Financing & Promoting Technology | Vietnam |
24086 | 2 | Viettel Corporation | Vietnam |
24445 | 2 | China Mobile | China |
26615 | 2 | Tim Celular S.A. | Brazil |
32875 | 2 | Wow Technologies, Inc. | US |
38264 | 2 | Wateen Telecom | Pakistan |
42237 | 2 | ICME LIMITED | Isle of Man |
43513 | 2 | Sia Nano IT | Latvia |
43557 | 2 | Eniig Fiber A/S | Denmark |
47869 | 2 | Netrouting | Netherlands |
52923 | 2 | Netcar Internet | Brazil |
56300 | 2 | MyRepublic Ltd. | Singapore |
59037 | 2 | ZJCERT | China |
200185 | 2 | Aruba S.p.A. | Italy |
202425 | 2 | IP Volume inc | Seychelles |
209500 | 2 | WXZ NETWORKS SOLUTIONS LIMITED | UK |
この下にはまだ136個のASが続くが、Countが1なのと、調べるのが面倒なのでやめておく。
このリストのCountの意味は、攻撃元IPアドレスの数だ。つまり攻撃元を多く持つAS番号順に並んでいる。1つのIPアドレスから多数の攻撃を仕掛けてきた場合も1としかカウントされないので注意されたい。攻撃の中身については吟味しておらず、傾向としては「攻撃者が好んで利用する事業者リスト」と思っていただきたい。このような偏りが出る理由はおそらく、価格が安くて規制が緩いからだと考えられる。省いてしまった136のASには、実はさくらも入っていたりする。
もうひとつ注意して欲しいのは、一応Nationコードに従って国別に分けてはいるものの、本当にそのIPアドレスが物理的にその国にあるかどうかは判らない、ということだ。大きな国や大きなネットワークは大体そこにあるものだが、たとえばセーシェル共和国などというのは名前だけのもので、実体はどうやらヨーロッパにあるようだった。物理的にどの場所にIPアドレスがあるのかが知りたいときは、最初に触れたとおりGeoIPに尋ねるとよい(とはいえそれなりに誤差はある)。
さて個人的に驚いたのは、AS番号が6桁になっていたことだ。自分がadminをやっていたころは1万番台がせいぜいだったが、40万に迫る数字になっている。インターネットは確実に大きくなっているのだ。