CentOS Stream 9 + firewalld + SSHGuardで不正な攻撃を自動ブロック
FreeBSDでSSHGuardを導入したのをCentOSのサーバーでもやったときの覚書。
Gemini 2.5 Proに教えてもらっている。
環境: CentOS Stream 9, SSHGuard 2.4.2-7.el9
1.firewalldをインストールして設定
このサーバーはサービス提供ホストのファイヤーウォールに頼っていたので、firewalldをインストールするところから。
# dnf install firewalld
firewalldを起動
# systemctl start firewalld
# systemctl status firewalld
firewalldが再起動したときでも有効になっているか確認。
# systemctl list-unit-files -t service
firewalldの登録内容確認、サービスの確認。
# firewall-cmd --list-all
# firewall-cmd --list-services
この段階ではhttpとhttpsが遮断されているはず。
運用しているウェブサイトをブラウザで表示して確認。
firewalldへサービスの削除と登録。
# firewall-cmd --get-services
# firewall-cmd --remove-service=cockpit --permanent
# firewall-cmd --add-service=http --permanent
# firewall-cmd --add-service=https --permanent
# firewall-cmd --reload
# firewall-cmd --list-services
運用しているウェブサイトが表示できるか確認。
2.SSHGuardをインストールして設定
dnfでインストール。
# dnf install sshguard
sshguard-firewalldもインストールされる。
設定を確認。
# less /etc/sshguard.conf
THRESHOLD=20BLOCK_TIME=1200DETECTION_TIME=1800BLACKLIST_FILE=/var/lib/sshguard/blacklist# Blacklist Threshold: 何回ブロックされたら永久ブロック(ブラックリスト入り)にするかの閾値。# デフォルトは3。非常に厳しくする場合は2に設定します。BLACKLIST_THRESHOLD=3WHITELIST_FILE=/etc/sshguard.whitelist
サンプルが「BLACKLIST_FILE=90:/var/lib/sshguard/blacklist」になっているのは古い形式で、「90:」の部分はブラックリストに登録する閾値らしい。
設定メモ
- THRESHOLD=20: 2回パスワードを間違えただけでブロックされるようになります。
- BLOCK_TIME=1200: ブロック時間をデフォルトの2倍に延長します。
- BLACKLIST_THRESHOLD=3: 3回ブロックされた攻撃元は、永久にアクセスできなくなります。
ホワイトリストの編集。
# vi /etc/sshguard.whitelist
# 1行に1つのIPアドレスまたはCIDR形式のネットワークを記述127.0.0.0/8192.168.0.0/24192.xxx.xx.xxx # Webrec Office in Kawaguchi
sshguardを起動して再起動後も有効にする。
# systemctl start sshguard
# systemctl enable sshguard
# systemctl status sshguard
3.動作確認
リアルタイムにログを監視
# journalctl -u sshguard -f
GoogleのCloud ShellからSSH接続を試してみると失敗。
telnet xxx.xxx.xx.x 22
が失敗するので、ホストのファイヤウォール設定を見てみたら、事務所のIPアドレスしかSSHを許可してなかった。
確かにこのサーバーは緊急メンテナンスするようなサーバーでない。
だからsshguardとfirewalldは削除する。
# systemctl stop sshguard
# systemctl stop firewalld
# dnf remove sshguard
# dnf remove firewalld