云サーバーでは常に 22 ポートをスキャンしてブルートフォース攻撃を行う人がいて、この絶え間ない記録のスクロールを見ると非常に不快です。
root@localhost:~# lastb
ssh:notty 64.62.197.115 Fri Oct 6 21:29 - 21:29 (00:00)
httpfs ssh:notty 68.183.176.157 Fri Oct 6 21:12 - 21:12 (00:00)
httpfs ssh:notty 68.183.176.157 Fri Oct 6 21:12 - 21:12 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 21:10 - 21:10 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 21:10 - 21:10 (00:00)
web ssh:notty 68.183.176.157 Fri Oct 6 21:06 - 21:06 (00:00)
web ssh:notty 68.183.176.157 Fri Oct 6 21:06 - 21:06 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 21:05 - 21:05 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 21:05 - 21:05 (00:00)
root ssh:notty 121.186.84.26 Fri Oct 6 21:03 - 21:03 (00:00)
root ssh:notty 121.186.84.26 Fri Oct 6 21:03 - 21:03 (00:00)
root ssh:notty 121.186.84.26 Fri Oct 6 21:03 - 21:03 (00:00)
unbt ssh:notty 68.183.176.157 Fri Oct 6 20:59 - 20:59 (00:00)
unbt ssh:notty 68.183.176.157 Fri Oct 6 20:59 - 20:59 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:59 - 20:59 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:59 - 20:59 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:53 - 20:53 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:53 - 20:53 (00:00)
node ssh:notty 68.183.176.157 Fri Oct 6 20:53 - 20:53 (00:00)
node ssh:notty 68.183.176.157 Fri Oct 6 20:53 - 20:53 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:47 - 20:47 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:47 - 20:47 (00:00)
backup ssh:notty 68.183.176.157 Fri Oct 6 20:46 - 20:46 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:42 - 20:42 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:42 - 20:42 (00:00)
develope ssh:notty 68.183.176.157 Fri Oct 6 20:40 - 20:40 (00:00)
develope ssh:notty 68.183.176.157 Fri Oct 6 20:40 - 20:40 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:36 - 20:36 (00:00)
operator ssh:notty 157.245.220.120 Fri Oct 6 20:36 - 20:36 (00:00)
nexus ssh:notty 68.183.176.157 Fri Oct 6 20:33 - 20:33 (00:00)
nexus ssh:notty 68.183.176.157 Fri Oct 6 20:33 - 20:33 (00:00)
nifi ssh:notty 157.245.220.120 Fri Oct 6 20:30 - 20:30 (00:00)
nifi ssh:notty 157.245.220.120 Fri Oct 6 20:30 - 20:30 (00:00)
root ssh:notty 59.39.24.254 Fri Oct 6 20:30 - 20:30 (00:00)
root ssh:notty 59.39.24.254 Fri Oct 6 20:28 - 20:28 (00:00)
root ssh:notty 111.26.175.223 Fri Oct 6 20:27 - 20:27 (00:00)
nvidia ssh:notty 68.183.176.157 Fri Oct 6 20:27 - 20:27 (00:00)
nvidia ssh:notty 68.183.176.157 Fri Oct 6 20:27 - 20:27 (00:00)
nifi ssh:notty 157.245.220.120 Fri Oct 6 20:25 - 20:25 (00:00)
nifi ssh:notty 157.245.220.120 Fri Oct 6 20:25 - 20:25 (00:00)
aaa ssh:notty 68.183.176.157 Fri Oct 6 20:20 - 20:20 (00:00
Fail2Ban は侵入検知システムフレームワークで、適切に設定することでブルートフォース攻撃を防ぐことができ、ほとんどのディストリビューションではパッケージ管理が用意されています。
Debian に Fail2ban をインストール#
# Debianパッケージマネージャを使用してインストール
sudo aptitude install fail2ban
Fail2ban の設定#
パッケージ管理でインストールした設定ファイルはすべて/etc/fail2ban
ディレクトリにあり、ディレクトリ構造は以下の通りです。
ls -al
total 104
drwxr-xr-x 6 root root 4096 Apr 14 12:08 .
drwxr-xr-x 97 root root 4096 Mar 21 23:24 ..
drwxr-xr-x 2 root root 4096 Oct 6 2023 action.d
-rw-r--r-- 1 root root 3017 Nov 9 2022 fail2ban.conf
drwxr-xr-x 2 root root 4096 Apr 22 2023 fail2ban.d
drwxr-xr-x 3 root root 4096 Mar 11 21:41 filter.d
-rw-r--r-- 1 root root 25607 Apr 14 11:20 jail.conf
drwxr-xr-x 2 root root 4096 Apr 14 11:29 jail.d
-rw-r--r-- 1 root root 645 Nov 9 2022 paths-arch.conf
-rw-r--r-- 1 root root 2728 Nov 9 2022 paths-common.conf
-rw-r--r-- 1 root root 627 Nov 9 2022 paths-debian.conf
-rw-r--r-- 1 root root 738 Nov 9 2022 paths-opensuse.conf
Fail2ban の設定ファイルディレクトリ構造#
action.d | ルールがトリガーされたときに実行される操作設定ファイルが格納されています |
fail2ban.conf | Fail2ban.conf 設定ファイルです |
fail2ban.d | Fail2ban の追加設定ファイル |
filter.d | Fail2ban のルール / フィルターディレクトリで、ログフィルタリングルールを定義する設定ファイルが含まれています。公式に用意されたルールがありますが、ここで独自のフィルタリングルールを定義することもできます。例えば、frp の内網透過をブロックするなどです。 |
jail.conf | Fail2ban の公式な監獄のサンプル設定ファイルで、サービスやプロトコルの監視と防御のルール、フィルターとアクションを呼び出すことを定義しています。 |
jail.d | 監獄(jail)の追加設定ファイルが格納されており、Fail2ban は起動時に jail.local ファイルと jail.d ディレクトリ内のすべての設定ファイルを読み込みます。 |
[https://github.com/fail2ban/fail2ban/wiki/Proper-fail2ban-configuration\](Proper fail2ban configuration) によると、提供されたサンプル設定ファイルはjail.conf
に置かれ、提供された設定ファイルを直接変更することは推奨されていません。必要に応じてサンプル設定ファイルに基づいて自分のjail.local
を編集してください。jail.conf のサンプル設定ファイルで定義された監獄ルールはデフォルトで無効になっているため、手動で有効にする必要があります。
sduo cp jail.conf jail.local
sudo nano jail.local
jail 設定ファイル#
[DEFAULT]
# このタグの下はjail監獄ルールの全体設定で、全体設定は上書き可能です
...
# 禁止された時間、デフォルトは秒単位で、bantime = 10mは禁止時間が10分であることを示します。
bantime = 10m
# IPを禁止するかどうかを判断する時間帯、秒単位。findtime = 10mは過去10分間にログイン失敗がmaxretry回数以上であれば禁止されることを示します。
findtime = 10m
# 許可される最大ログイン失敗回数。findtimeの時間帯内で特定のIPアドレスのログイン失敗回数がmaxretry回数に達した場合、そのIPアドレスは禁止されます。
maxretry = 5
# "maxmatches"はチケットに保存される一致の数(アクション内のタグ<matches>を介して解決可能)。
maxmatches = %(maxretry)s
# ファイル変更を取得するためのバックエンド。このオプションは、Fail2banが使用するファイル変更監視メカニズムを指定します。
# 選択可能なバックエンドには、pyinotify、gamin、polling、systemd、autoがあります。
# バックエンドが指定されていない場合、Fail2banはこれらのバックエンドを順番に試み、利用可能なバックエンドを見つけるまで続けます。
# backend = autoは、Fail2banがpyinotify、gamin、polling、systemdのいずれかのバックエンドを使用しようとすることを示します。
backend = auto
# sshを有効にする
[sshd]
# nftablesを使用してIPを禁止する
banaction = nftables-multiport
banaction_allports = nftables-allports
# クライアントホストが禁止される時間(単位:秒)
bantime = 86400
# クライアントホストが禁止される前に許可される失敗回数
maxretry = 3
# 失敗回数を調べる時間(単位:秒)
findtime = 600
backend = systemd
enable=true
ここで注意が必要なのは、Fail2ban はログファイルを分析する必要があり、一部の Linux ディストリビューションでは、ssh ログインログが systemd に置き換えられているため、backend = systemd
を設定しないと、以下のエラーが表示されます。
ERROR Failed during configuration: Have not found any log file for sshd jail
Fail2ban コマンド#
設定が完了したら、Fail2ban を再起動します。
# 再起動
sudo systemctl restart fail2ban
# 停止
sudo systemctl stop fail2ban
# 起動
sudo systemctl start fail2ban
# 自動起動を有効にする
sudo systemctl enable fail2ban
# 自動起動を無効にする
sudo systemctl disable fail2ban
# ヘルプコマンドを表示
sudo fail2ban-client -h
# fail2banが正常に起動したか確認
sudo fail2ban-client ping
# pongが表示され、起動成功を示します
Server replied: pong
# 現在有効なルールを確認
sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
# 指定したルールの禁止情報を確認
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 2
| |- Total failed: 14
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 3
|- Total banned: 3
`- Banned IP list: 121.186.84.26 157.245.220.120 68.183.176.157
参考#
Proper fail2ban configuration
How To Protect SSH with Fail2Ban on Debian 11 | DigitalOcean
Gentoo-Fail2ban
how-to-install-fail2ban-on-debian-linux
使用 Fail2ban 自动拉黑暴力破解 SSH 的 IP - Alain's Blog (alainlam.cn)
Fail2ban - ArchWiki (archlinux.org)
防止暴力破解 ssh 的四种方法_ssh 防爆破_Linux 学习中的博客 - CSDN 博客