UFWとFail2BanでSPAMなアクセスとログファイルのサイズを減らしてみたお話。その1 of 2

UFWとFail2BanでSPAMなアクセスとログファイルのサイズを減らしてみたお話。その1 of 2

このお話は全2本立てでお送りします。
この記事ではUFWの設定についてお話してます。
Fail2Banについては、UFWとFail2BanでSPAMなアクセスとログファイルのサイズを減らしてみたお話。その2 of 2をご参照ください。

UFWとFail2BanでSPAMなアクセスとログファイルのサイズを減らしてみたお話。その2 of 2
SPAMなアクセスがうざったくて、ポートの制限したはいいけど、今度はファイアウォールのログが肥大化してそれはそれでうざったい。 そんなわがまま要求を、ざっくりてきとうな方法で解決してみるおはなし。

なお、別にFail2Banと一緒に使わなければならいわけでもないので、UFWの設定だけ見たい人は、それはそれで、この記事読んで役に立つような気がします。

はじめに

サーバを建ててると、うんざりするほどたくさんのSPAMなアクセスが来ますよね。
規定されてないポートにやってくる子たちは、UFW(Uncomplicated Firewall)で防げばいいじゃんって言えば、それもそうなんですが、UFWってアクセスをブロックするごとにログをつけてくれるんですよね。

ログをつけることそのものは、当たり前だし大事なことなんですが、とはいうものの、延々と同じIPが並んでたりするわけで。しかも毎秒毎秒ログが記録されてたりするから、めちゃくちゃに肥大化するるわけです。
ログが肥大化するのが厭なら止めちゃえばいいじゃんってのも、1つの解な気はしますが、ちょっとこわい。

いずれにせよ、いざ何かが起こったとなった時に、肥大化したログってのはすごく厄介だし、ログがないのも厭っていうわがままセットをどうにか解決しようと思ったわけです。

というわけで、UFWでブロックしたら、その次のタイミングにアクセス自体を止めちゃうってなそんな感じに設計してみました。
iptablesでアクセス止めちゃえば、UFWのログを連投されないし、かなりすっきりします。

なにはともあれ、インストール

Ubuntuを想定してるけど、そのほかのOSでも似たようなことはできるはずです。
aptなんかを読み替えてやってみてね。

$ sudo apt install ufw

インストールが終わったら、とりあえずバージョンを見てみる。

$ ufw version
ufw 0.36.2
Copyright 2008-2023 Canonical Ltd.

最新バージョンは 0.36.2でした。

💡
インストール後、いきなりUFWを有効(enable)にすると、そのタイミングでSSHを叩き切られることがあります。
SSH接続ができない状態になると、すごく面倒くさいので、落ち着いて作業しましょ。

下準備

デフォルト状態でポート全閉にして、必要なポートを開いていくような進行とします。
ということで、いきなりUFWを触っていくのではなく、自分のサーバで何番のポートを使用しているかを、まずは確認しましょう。

💡
とはいえ、SSHのポートさえちゃんと設定できていれば、最悪どうにかなります。
逆に、SSHだけはちゃんと確認しておかないと、めっちゃ面倒くさいことになる可能性高いです。

何はともあれ、ssコマンド。
何番ポートが使用中か確認しましょ。

$ ss -atn

※ 引数-aはall、-tはTCPを表示、-nは名前解決しない、です。
ssが通らなければnetstatでもよいかもしれないです。

たぶん、こんな感じのがずらずらと流れてくると思います。

State     Recv-Q Send-Q          Local Address:Port                Peer Address:Port  Process
LISTEN    0      0                     0.0.0.0:80                       0.0.0.0:*
LISTEN    0      0                     0.0.0.0:443                      0.0.0.0:*
LISTEN    0      0                           *:22                            *:*

参考までに、よく使われるポートなど。
SSHなんかは、変更してたりすると思うので、ちゃんと調べておきましょ。

サービス名 ポート
FTP 20
SSH 22
http 80
https 443
mysql 3306
smtp 25, 587
imap 143, 993

などなど。

UFWの設定

ポート全閉とSSHの許可

どのポートを開けなきゃいけないかがわかったら、お待ちかね、UFWを触っていきます。

まずは、すべてのポートを全閉にして、SSHのポートを許可しましょう。

$ sudo ufw default DENY
$ sudo ufw allow 22

※ SSHのポートが22の想定で書いてますが、実際の環境で使ってる番号を入れてください。

他サービスの許可

SSHを許可した時のコマンドと同じように、必要なポートを開けていきましょ。

$ sudo ufw allow 80   # http
$ sudo ufw allow 443  # https
$ sudo ufw allow 3306 # mysql
...

必要なだけ打ち込めたら、起動していきましょう。

UFWの起動と確認

UFWを起動します。

$ sudo ufw enable

設定を確認します。

$ sudo ufw status

Status: activeと出ていれば、動いてるってことですね。
そして、先ほど追加したポートがTo欄にあることを確認しましょう。

Status: active

To                         Action      From
--                         ------      ----
3306                       ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
3306 (v6)                  ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

ついでにログも確認

$ sudo tail -f /var/log/ufw.log

設定直後だと、ログが溜まっていない可能性がありますが。
既にブロックしていれば、こんな感じのログが出てくるかと思います。

2024-12-24T21:57:10.809000+09:00 serverName kernel: [UFW BLOCK] IN=ens3 OUT= MAC=XX:XX:......:XX SRC=98.76.543.210 DST=123.45.678.90 LEN=40 TOS=0x00 PREC=0x00 TTL=237 ID=54321 PROTO=TCP SPT=49628 DPT=9080 WINDOW=65535 RES=0x00 SYN URGP=0
2024-12-24T21:57:47.482668+09:00 serverName kernel: [UFW BLOCK] IN=ens3 OUT= MAC=XX:XX:......:XX SRC=876.54.32.109 DST=123.45.678.90 LEN=40 TOS=0x00 PREC=0x00 TTL=49 ID=29206 PROTO=TCP SPT=24308 DPT=23 WINDOW=744 RES=0x00 SYN URGP=0
2024-12-24T21:58:14.671799+09:00 serverName kernel: [UFW BLOCK] IN=ens3 OUT= MAC=XX:XX:......:XX SRC=76.543.210.98 DST=123.45.678.90 LEN=60 TOS=0x00 PREC=0x00 TTL=46 ID=21836 DF PROTO=TCP SPT=45103 DPT=23 WINDOW=5808 RES=0x00 SYN URGP=0
2024-12-24T21:59:11.125986+09:00 serverName kernel: [UFW BLOCK] IN=ens3 OUT= MAC=XX:XX:......:XX SRC=654.32.10.987 DST=123.45.678.90 LEN=60 TOS=0x00 PREC=0x00 TTL=45 ID=16429 DF PROTO=TCP SPT=56485 DPT=23 WINDOW=5808 RES=0x00 SYN URGP=0

このログにあるSRC=の直後に書かれてるIPが、許可したポート以外にアクセスしようとしてきた不届き者のIPですね。
このままでも、何もしないよりはだいぶんマシな状態になったと思います。
ただ、同じIPからのアクセスでも来るたびにログに載っちゃってログが肥大化しちゃうし、そんな不届き者のために使うリソースなんてものはないです。

次の記事で、この不届き者たちを出禁にすることで、ログの肥大化を防ぐ算段です。
つづく。

UFWとFail2BanでSPAMなアクセスとログファイルのサイズを減らしてみたお話。その2 of 2
SPAMなアクセスがうざったくて、ポートの制限したはいいけど、今度はファイアウォールのログが肥大化してそれはそれでうざったい。 そんなわがまま要求を、ざっくりてきとうな方法で解決してみるおはなし。