ホーム » 技術 » fail2banのBanリストを眺めてみる

fail2banのBanリストを眺めてみる

925

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などではない)ので整形は少々面倒だ。まあ人力で必要な情報を抽出することになる。ランキングに当てはめて表にしてみよう。

ASCountNameNation
14061299DigitalOceanUS
2659948TELEFONICA BRASILBrazil
1627616OVHFrance
413415ChinaNetChina
1287615ONLINE S.A.S.France
2454715China MobileChina
483714CHINA UNICOMChina
3103414Aruba S.p.A.Italy
5366710FranTech SolutionsUS
20929910VITOX TELECOMIndia
426109RostelecomRussia
450908TencentChina
80757MicrosoftUS
2663857TR Servicos de TelecomunicacoesBrazil
250926OpaTelecomUkraine
603556KV Solutions B.V.Netherlands
2022426Aruba S.p.A.Italy
511675Contabo GmbHGermany
1359055VIETNAM POSTS AND TELECOMMUNICATIONS GROUPVietnam
93184SK BroadbandKorea
151694GoogleUS
237244China TelecommunicationsChina
458994VNPT CorpVietnam
48083China UnicomChina
74183TELEFONICA CHILE S.A.Chile
123893RostelecomRussia
204733Choopa, LLCUS
278183CotesmaArgentine
2649423Alcantara Net LTDABrazil
32152France TelecomFrance
34622HINETTaiwan
47662Korea TelecomKorea
56502Frontier Communications of America, Inc.US
75522Viettel GroupVietnam
79222Comcast Cable Communications IncUS
84022VimpelcomRussia
92692Hong Kong Broadband Network Ltd.Hong Kong
105072SprintUS
179622Topway-NetChina
184032Financing & Promoting TechnologyVietnam
240862Viettel CorporationVietnam
244452China MobileChina
266152Tim Celular S.A.Brazil
328752Wow Technologies, Inc.US
382642Wateen TelecomPakistan
422372ICME LIMITEDIsle of Man
435132Sia Nano ITLatvia
435572Eniig Fiber A/SDenmark
478692NetroutingNetherlands
529232Netcar InternetBrazil
563002MyRepublic Ltd.Singapore
590372ZJCERTChina
2001852Aruba S.p.A.Italy
2024252IP Volume incSeychelles
209500 2WXZ NETWORKS SOLUTIONS LIMITEDUK

この下にはまだ136個のASが続くが、Countが1なのと、調べるのが面倒なのでやめておく。

このリストのCountの意味は、攻撃元IPアドレスの数だ。つまり攻撃元を多く持つAS番号順に並んでいる。1つのIPアドレスから多数の攻撃を仕掛けてきた場合も1としかカウントされないので注意されたい。攻撃の中身については吟味しておらず、傾向としては「攻撃者が好んで利用する事業者リスト」と思っていただきたい。このような偏りが出る理由はおそらく、価格が安くて規制が緩いからだと考えられる。省いてしまった136のASには、実はさくらも入っていたりする。

もうひとつ注意して欲しいのは、一応Nationコードに従って国別に分けてはいるものの、本当にそのIPアドレスが物理的にその国にあるかどうかは判らない、ということだ。大きな国や大きなネットワークは大体そこにあるものだが、たとえばセーシェル共和国などというのは名前だけのもので、実体はどうやらヨーロッパにあるようだった。物理的にどの場所にIPアドレスがあるのかが知りたいときは、最初に触れたとおりGeoIPに尋ねるとよい(とはいえそれなりに誤差はある)。

さて個人的に驚いたのは、AS番号が6桁になっていたことだ。自分がadminをやっていたころは1万番台がせいぜいだったが、40万に迫る数字になっている。インターネットは確実に大きくなっているのだ。