初めに #
サーバーのログを見たことがある方は、何度も繰り返し行われる不正なログイン試行やその他の攻撃的ログを目にしたことがあるかもしれません。
グローバルに公開されているサーバーに対して上記の様な悪意のある試みが行われる事はもはや日常と言って良いのではないでしょうか?
エンジニアにとって日々の脆弱性の確認や対応、セキュリティの強化は必須となっております。
侵入防止を導入する事でセキュリティリスクを低める事が可能となっております。
そこで今回はAlmaLinuxにFail2banを導入する方法についてご紹介致します。
Fail2banとは? #
Fail2ban(フェイル・トゥー・バン)は、オープンソースとしてPython
で開発されているホスト型の侵入防止ソフトウェアとなります。
Fail2banはシステムのログファイルを監視し、短時間に複数回ログインに失敗したIPアドレスを検出して、iptables
やfirewalld
などと連携し遮断処理を行います。
これにより、不正アクセスやパスワード総当たりによるリスクを大幅に軽減できます。
以下は公開リポジトリとなっております。
Personal Website & Blog Theme for Hugo
Fail2banを導入する #
それではAlmaLinuxにFail2banを導入していきます。
今回使用するOSは「AlmaLinux9
」となります。
標準リポジトリ
AlmaLinux9の標準リポジトリではFail2banは提供されていません。
そのため以下のdnf
コマンドを実行しEPELリポジトリを有効化します。
dnf install epel-release
次に下記コマンドを実行しインストールを行います。
dnf install fail2ban
下記の様に表示されますので「y」を選択します。
dnf install fail2ban
Last metadata expiration check: 1:38:42 ago on Tue 25 Jun 2024 07:45:23 AM JST.
Dependencies resolved.
============================================================================================================================================
=================================================================================================
Package Architecture Version
Repository Size
============================================================================================================================================
=================================================================================================
Installing:
fail2ban noarch 1.0.2-12.el9
epel 8.8 k
Upgrading:
selinux-policy noarch 38.1.35-2.el9_4.2
baseos 49 k
selinux-policy-targeted noarch 38.1.35-2.el9_4.2
baseos 6.5 M
Installing dependencies:
fail2ban-firewalld noarch 1.0.2-12.el9
epel 8.9 k
fail2ban-selinux noarch 1.0.2-12.el9
epel 29 k
fail2ban-sendmail noarch 1.0.2-12.el9
epel 12 k
fail2ban-server noarch 1.0.2-12.el9
epel 444 k
Transaction Summary
============================================================================================================================================
=================================================================================================
Install 5 Packages
Upgrade 2 Packages
Total download size: 7.0 M
Is this ok [y/N]:
下記の様に表示されていればインストール完了です。
Complete!
下記コマンドにてインストール確認を行う事ができます。
dnf list fail2ban
Fail2banの設定 #
続いてFail2banの設定を行います。
Fail2banの設定ファイルは以下のパス内に格納されております。
/etc/fail2ban/
├── action.d/ - アクション定義
├── fail2ban.conf - 基本設定ファイル
├── filter.d/ - ログ解析ルール定義
├── jail.conf - Jail設定のテンプレート(編集非推奨)
├── jail.d/ - Jail設定の追加・上書き用ディレクトリ
├── paths-common.conf - ログファイルの共通パス設定
デフォルトの「jail.conf
」を書き換える事は推奨されていない為、新たに「jail.local
」を作成し追加設定を行います。
vi /etc/fail2ban/jail.local
今回は「sshd
」「vsftpd
」「postfix
」「dovecot
」「apache
」「mysql
」の項目を有効化します。
下記の様に記述する事で設定可能です。
# 共通ルール
[DEFAULT]
maxretry = 5 # ログイン失敗を5回検出したら
findtime = 600 # (10分間以内に)
bantime = 1h # 1時間IPをブロック
# サービス別の個別ルール
[sshd]
enabled = true
filter = sshd
[vsftpd]
enabled = true
filter = vsftpd
[postfix]
enabled = true
filter = postfix
[dovecot]
enabled = true
filter = dovecot
[apache]
enabled = true
filter = apache-auth
[apache-403]
enabled = true
filter = apache-badbots
[mysql]
enabled = true
filter = mysqld-auth
DEFAULT
セクションに記述したルールは、すべてのJail
に対して共通で適用されます。
上記では10分間に5回ログインに失敗した場合、1時間ブロックする設定としました。
ログファイルのパスや監視ポートは、Fail2banのフィルター・アクション定義(filter.d/
, action.d/
)側で設定されております。
特にカスタマイズしない場合はデフォルト設定のままで動作します。
自動起動設定 #
次に自動起動設定を行います。
下記を実行し自動起動を有効化します。
systemctl enable fail2ban
上記によりサーバー再起動時でも利用できるようになります。
Fail2ban起動 #
最後にFail2banの起動を行います。
始めに下記コマンドを使用して現在の起動状況を確認します。
systemctl status fail2ban
初期状態では下記の様に起動していない状況となっておりました。
○ fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: disabled)
Active: inactive (dead)
Docs: man:fail2ban(1)
それでは下記コマンドを使用し起動を行います。 対象のログが無い場合は起動に失敗します。
systemctl start fail2ban
次に「fail2ban-client
」コマンドを使用して監視が正常に行われているか確認します。
#コマンド
fail2ban-client status
#結果
fail2ban-client status
Status
|- Number of jail: 7
`- Jail list: apache, apache-403, dovecot, mysql, postfix, sshd, vsftpd
上記の様に有効化した項目が「Jail list
」に表示されていれば正常に監視されております。