ポートスキャン(SHODAN)

 ※ かなりイラッとしたのでこの記事はちょとふざけた部分があります。ご了承ください。そうでもしないと怒りが収まらないのです。

 メールサーバのログに短時間で大量の 「lost connection」が出ていました。

$ grep "lost connection" /var/log/mail.log
  ・
  ・
  ・
Jul  2 17:38:56 eirspi11 postfix/smtpd[18515]: lost connection after CONNECT from red.census.shodan.io[185.165.190.34]
Jul  2 17:38:56 eirspi11 postfix/smtpd[18520]: lost connection after CONNECT from red.census.shodan.io[185.165.190.34]
Jul  2 17:38:56 eirspi11 postfix/smtpd[18515]: lost connection after CONNECT from red.census.shodan.io[185.165.190.34]
Jul  2 17:39:03 eirspi11 postfix/smtpd[18520]: lost connection after CONNECT from red.census.shodan.io[185.165.190.34]
Jul  2 17:39:04 eirspi11 postfix/smtpd[18515]: lost connection after STARTTLS from red.census.shodan.io[185.165.190.34]
Jul  2 17:39:05 eirspi11 postfix/smtpd[18520]: lost connection after STARTTLS from red.census.shodan.io[185.165.190.34]
  ・
  ・
  ・

 shodan.io ? 誰だ?

SHODANはインターネットに接続されたデバイスの中から、ポートが開放されている機器を調べるツールとして知られている。

https://eset-info.canon-its.jp/malware_info/special/detail/201015.html

 で、shodan.io は勝手にポートスキャンしてデータベースに登録して、誰でも見れるようにしてくれているサイトのようです。

 何だこれ、限りなくじゃん勝手にポートスキャンするんじゃないよ。しかも、データベースに登録して、公開するって・・・。真っ黒

 一週間に一回程度ポートスキャンするらしいです。確認してみたら、しっかり 25 番ポートが空いていると表示されました。いいですよ、ドメイン外へのリレーはできないようにしてあるから。しかし、この情報を利用して攻撃対象に選ばれたら、無駄な負荷がかかってしまいます。

 もともとは、セキュリティ意識を高めるため、「こ〜んなに一杯ザルセキュリティの IoT 機器がありますよ」と警鐘を鳴らすことが目的だったんでしょうけど、やってることはクラッカーです。多分、スクリプトキディにとって便利なツールに成り下がっていると思います。

 ありがた迷惑な行為です。

 さて、(冷静になって)調べてみると、他にも同様なプロジェクトがあるようです。表面に出ていないものもあります。ポートスキャンに対してなにか対策をする必要があるようです。

ファイヤーウォールで弾く

SHODAN の IP アドレスは以下のようです。まあ、警鐘を鳴らすことが目的と言っているので、IP アドレスくらい公開してもらわないとねぇ。

ホストIP アドレス
atlantic.census.shodan.io188.138.9.50
atlantic.dns.shodan.io209.126.110.38
battery.census.shodan.io93.174.95.106
blog.shodan.io104.236.198.48
blue.census.shodan.io185.142.236.40
blue2.census.shodan.io185.142.236.43
border.census.shodan.io198.20.87.98
burger.census.shodan.io66.240.219.146
census1.shodan.io198.20.69.74
census2.shodan.io198.20.69.98
census3.shodan.io198.20.70.114
census4.shodan.io198.20.99.130
census6.shodan.io66.240.236.119
census7.shodan.io71.6.135.131
census8.shodan.io66.240.192.138
census9.shodan.io71.6.167.142
census10.shodan.io82.221.105.6
census11.shodan.io82.221.105.7
census12.shodan.io71.6.165.200
cloud.census.shodan.io94.102.49.193
debian814285.aspadmin.net71.6.142.85
dojo.census.shodan.io80.82.77.139
flower.census.shodan.io94.102.49.190
goldfish.census.shodan.io185.163.109.66
hat.census.shodan.io 185.142.236.34
house.census.shodan.io89.248.172.16
inspire.census.shodan.io71.6.146.186
malware–hunter.census.shodan.io66.240.205.34
mason.census.shodan.io89.248.167.131
ninja.census.shodan.io71.6.158.166
ny.private.shodan.io159.203.176.62
pacific.census.shodan.io85.25.103.50
pirate.census.shodan.io71.6.146.185
red.census.shodan.io185.165.190.34
red3.census.shodan.io195.144.21.56
rim.census.shodan.io 85.25.43.94
sky.census.shodan.io80.82.77.33
turtle.census.shodan.io185.181.102.18
refrigerator.census.shodan.io71.6.146.130
einstein.census.shodan.io71.6.199.23
wine.census.shodan.io185.142.236.35
shodan.io104.18.12.238
104.18.13.238
216.117.2.180
不明43.245.222.163
SHODAN の IP アドレス

 不明は除いてそれ以外の IP アドレスからのパケットはドロップさせるようにファイヤーウォールの設定をしていきます。しかし、この数でやるということは、ポートスキャンする気満々ですね。

 次のような SHELL スクリプトで一気に拒否設定をしました。

#!/bin/bash

while
    read ip
do
    sudo ufw deny from ${ip}
done << EOF
188.138.9.50
209.126.110.38
93.174.95.106
104.236.198.48
185.142.236.40
185.142.236.43
198.20.87.98
66.240.219.146
198.20.69.74
198.20.69.98
198.20.70.114
198.20.99.130
66.240.236.119
71.6.135.131
66.240.192.138
71.6.167.142
82.221.105.6
82.221.105.7
71.6.165.200
94.102.49.193
71.6.142.85
80.82.77.139
94.102.49.190
185.163.109.66
185.142.236.34
89.248.172.16
71.6.146.186
66.240.205.34
89.248.167.131
71.6.158.166
159.203.176.62
85.25.103.50
71.6.146.185
185.165.190.34
195.144.21.56
85.25.43.94
80.82.77.33
185.181.102.18
71.6.146.130
71.6.199.23
185.142.236.35
104.18.12.238
104.18.13.238
216.117.2.180
EOF

sudo service ufw restart

 時々見直すべきだとは思います。

fail2ban で弾く

 これは難しいですが、ポートスキャンしたほとんどの場合、25 番ポートへの不正なアクセスがあるので、これを利用して弾くように設定する方法があると思います。

 ログを見ると、「lost connection after」があります。このワードは、fail2ban のフィルターの中に既にあるので、これを有効にします。

$ sudo vi /etc/fail2ban/jail.d/postfix-ddos.conf

 次の内容にします。

[postfix-ddos]
enabled = true
filter = postfix[mode=ddos]
logpath = %(postfix_log)s
maxretry = 1
findtime = 86400
bantime = 5184000
backend = %(postfix_backend)s
ignoreip = xxx.xxx.xxx.xxx

 普段受信しているメールサーバで、lost connection を出すサーバがあります。emberpoint.com です。メール代行業者のようです。このサーバが lost connection after RSET を出すので、ブロックしないように ignoreip にこのサーバの ip アドレスを書いておきました。それ以外は、1回「lost connection after」したら、2 ヶ月ブロックします。

2021.07.11 追記
 どうも emberpoint.com は多数のホストからメールを出すようで IP アドレスで許可していくのは現実的ではないようです。他の方法で対処しました。

追記ここまで

確認

$ sudo fail2ban-client status postfix-ddos
Status for the jail: postfix-ddos
 |- Filter
 |  |- Currently failed: 0
 |  |- Total failed:     1
 |  `- File list:        /var/log/mail.log
 `- Actions
    |- Currently banned: 1
    |- Total banned:     1
    `- Banned IP list:   184.105.139.68

 あ、早速引っかかりました。これは、Shadowserver.org です。善意でポートスキャンするありがた迷惑なサイトです。

サーバ設定

Posted by sirius