102 views
【1】やりたいこと
SSH接続でパスワード総当たり攻撃をされたときに、遮断したい。
つまり…
複数回連続して認証に失敗した場合、一定時間だけ認証要求を遮断したい。
【2】やってみる
1) 使用するツール
今回は Ubuntu16上で fail2ban を使用する。
fail2banは、sshdだけでなく sendmailや mysqldなどの認証にも対応している。
(1) fail2banの特徴
・設定ファイルで指定したログファイルを監視する。
・認証失敗回数が指定回数に達したら、firewallを設定変更して指定IPアドレスとの通信を遮断する。
・認証失敗回数は、IPアドレスごとに区別して管理している。 → 認証失敗が複数の相手から輻輳しても問題なし。
・指定時間が経過したら、firewallを設定変更して指定IPアドレスとの通信遮断を解除する。
2) fail2banの実行手順
(1) fail2banをインストールする。
$ sudo apt-get install fail2ban
(2) fail2banの設定ファイルを編集する。
/etc/fail2ban/jail.local を編集する。
$ sudo vi /etc/fail2ban/jail.local
[sshd]セクションを探し、以下を記述する。
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log # ←このログファイルを監視対象とし、 maxretry = 3 # 3回連続で認証に失敗したら、 bantime = 1h # 1[hour] だけ同じIPアドレスからの認証要求を受け付けない。
(3) fail2banを再起動する。
$ sudo systemctl restart fail2ban
念のためにステータスも見ておく。
$ sudo systemctl status fail2ban ● fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2024-01-07 04:42:02 JST; 6s ago Docs: man:fail2ban(1) Process: 4127 ExecStop=/usr/bin/fail2ban-client stop (code=exited, status=0/SUCCESS) Process: 4128 ExecStartPre=/bin/mkdir -p /var/run/fail2ban (code=exited, status=0/SUCCESS) Main PID: 4135 (fail2ban-server) Tasks: 3 (limit: 4915) CGroup: /system.slice/fail2ban.service └─4135 /usr/bin/python3 /usr/bin/fail2ban-server -xf start Jan 07 04:42:02 intel-nuc systemd[1]: Starting Fail2Ban Service... Jan 07 04:42:02 intel-nuc systemd[1]: Started Fail2Ban Service. Jan 07 04:42:02 intel-nuc fail2ban-server[4135]: Server ready