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

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

なお、別に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
でした。
enable
)にすると、そのタイミングでSSHを叩き切られることがあります。SSH接続ができない状態になると、すごく面倒くさいので、落ち着いて作業しましょ。
下準備
デフォルト状態でポート全閉にして、必要なポートを開いていくような進行とします。
ということで、いきなりUFWを触っていくのではなく、自分のサーバで何番のポートを使用しているかを、まずは確認しましょう。
逆に、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からのアクセスでも来るたびにログに載っちゃってログが肥大化しちゃうし、そんな不届き者のために使うリソースなんてものはないです。
次の記事で、この不届き者たちを出禁にすることで、ログの肥大化を防ぐ算段です。
つづく。
