JulyLies

柒月是你的谎言

Debian12におけるFail2banの設定

云サーバーでは常に 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.confFail2ban.conf 設定ファイルです
fail2ban.dFail2ban の追加設定ファイル
filter.dFail2ban のルール / フィルターディレクトリで、ログフィルタリングルールを定義する設定ファイルが含まれています。公式に用意されたルールがありますが、ここで独自のフィルタリングルールを定義することもできます。例えば、frp の内網透過をブロックするなどです。
jail.confFail2ban の公式な監獄のサンプル設定ファイルで、サービスやプロトコルの監視と防御のルール、フィルターとアクションを呼び出すことを定義しています。
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 博客

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。