ブロックリスト自動生成(素人のサーバー管理)

自宅あるPCを使っている分には外部からの攻撃とかあまり気にしないけど、さくらVPSなど外部に配置したサーバーだと、攻撃とは言わないまでも手当たり次第にピンポンダッシュしてくる輩の多いこと・・・。

ここでいうピンポンダッシュとは言うまでも無く、ポートスキャンや不正ログイン試行のことで(不正ログインはピンポンダッシュと言うよりドアガチャのイメージかな)、ログを見てても気持ちの良いものではない。そんなに見ていただく内容もない自己満足のサーバーなだけに、こう言うのだけでアクセスが増えるのも何とも困ったものだ。

そこで、ファイヤーウォールのお世話になることになる。何も用事が無ければ全ポート閉じてしまうのが一番安全だけど、何のためのサーバーぞやということで、WEBサーバーもやりたいしメールサーバーも動かしたい。SSHも当然開けておかないと意味がないし。。。

SSHに関しては自分が使うだけなので、ポート番号を変更して鍵のないアカウントからはログイン出来ないようにすればとりあえず安心。WEBサーバーもそれほどいたずらされる心配も無いと思うが、一番怖いのは多分メールサーバーで25番からポート変更するわけにも行かないし、設定不備で世間に迷惑をかけることになりかねない。

引越前のサーバーだが、下のようなログが1日に何百何千と残ることがある

May  2 15:41:32 marocha postfix/smtpd[810548]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
May  2 15:41:32 marocha postfix/smtpd[810542]: connect from unknown[xxx.xxx.xxx.xxx]
May  2 15:41:42 marocha postfix/smtpd[810542]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: Connection lost to authentication server
May  2 15:41:43 marocha postfix/smtpd[810559]: connect from unknown[xxx.xxx.xxx.xxx]
May  2 15:41:54 marocha postfix/smtpd[810559]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: Connection lost to authentication server
May  2 15:41:54 marocha postfix/smtpd[810568]: connect from unknown[xxx.xxx.xxx.xxx]
May  2 15:41:58 marocha postfix/smtpd[810568]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
May  2 15:41:58 marocha postfix/smtpd[810570]: connect from unknown[xxx.xxx.xxx.xxx]
May  2 15:42:07 marocha postfix/smtpd[810570]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
May  2 15:42:07 marocha postfix/smtpd[810588]: connect from unknown[xxx.xxx.xxx.xxx]
May  2 15:42:20 marocha postfix/smtpd[810588]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
May  2 15:42:20 marocha postfix/smtpd[810589]: connect from unknown[xxx.xxx.xxx.xxx]
May  2 15:42:30 marocha postfix/smtpd[810589]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: Connection lost to authentication server
May  2 15:42:31 marocha postfix/smtpd[810590]: connect from unknown[xxx.xxx.xxx.xxx]
May  2 15:42:41 marocha postfix/smtpd[810590]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: Connection lost to authentication server
May  2 15:42:42 marocha postfix/smtpd[810591]: connect from unknown[xxx.xxx.xxx.xxx]
May  2 15:42:46 marocha postfix/smtpd[810591]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
May  2 15:42:46 marocha postfix/smtpd[810592]: connect from unknown[xxx.xxx.xxx.xxx]
May  2 15:43:15 marocha postfix/smtpd[810592]: warning: unknown[xxx.xxx.xxx.xxx]: SASL LOGIN authentication failed: UGFzc3dvcmQ6

marochaというのはサーバーのマシン名ですが・・・。SMTPサーバーに執拗にログインを試みているログですね。まぁ、そんなユーザーはいないし。まず入ってこられることはないけど、あまり気持ちの良いものではない。

その数も多かったり少なかったりすることもあるが、最近のコロナ禍でやることが無いのか、アクセスは増えているような気がする。

そこで目を付けたのがファイアウォールのブロックリスト機能。CentOSの場合firewalldというデーモンがiptableのラッパみたいな感じで動いている、これの場合は

/etc/firewalld/ipsets/blocklist.xml

<?xml version='1.0' encoding='UTF-8'?>
<ipset type="hash:net">
  <entry>xxx.xxx.xxx.xxx</entry>
  <entry>yyy.yyy.yyy.0/24</entry>
</ipsets>

みたいな感じでブロックリストが登録出来る、不埒なIPアドレスを登録するだけで、それ以降の全てのアクセスを遮断可能だ。

ubuntuの場合はufwという仕組みで管理されており、基本的にはufwコマンドでファイアーウォールの設定を行うが、こちらには複数のIPアドレスをブロックリストとして一括管理する方法がない。しかし別ファイル(/etc/ufw/before.rules)によってブロックリストと似た感じで管理が可能

/etc/ufw/before.rules

-A ufw-before-input -s xxx.xxx.xxx.xxx -j DROP
-A ufw-before-input -s yyy.yyy.yyy.yyy -j DROP
-A ufw-before-input -s zzz.zzz.zzz.0/24 -j DROP

あとは、これらを自動で登録するツールだが、引越前のCentOS時代から自作して運用していたものを、ubuntu用に改造しすでに運用している。

新しいサーバーはDNS的には同じ名前だが、IPアドレスを直接叩きに来る輩には関係はなく、まだアクセスは少ないが、そのうち前と同じように迷惑なお客さんだらけになるだろう。

コマンド的にはあまり良い名前ではないけどblockset.pyというPythonで書いたプログラムになります。

以前はFirewalldのblocklist.xml対応だったが、今はUbuntuサーバーでの運用のためufwの設定ファイルを弄ります。基本動作は同じですが・・・

次回は自分の覚書きがてら、このblokset.pyの解説を行おうと思います。python自体も勉強し始めたばかりなものなので色々お試し的なコードになっていたりします
ホントは個別コマンドではなくてデーモンとしてログを監視しながら動くのが理想かも知れないけど、あまり自身を持って作っていないため、勝手に起動して勝手に不正IPアドレスとして登録してしまうような仕組みにすると、良からぬ弊害がありそうで・・・、とりあえず、サーバー管理作業としては毎日届くLogwatchの報告をみてヤバそうな時にこのコマンドを起動し、登録内容を確認しながら行うようにしている。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)