Nginxは高性能で柔軟なウェブサーバーとして多くの企業や開発者に利用されています。しかし、その人気の高さゆえに、サーバーへの攻撃対象になりやすいというデメリットもあります。そこで、サーバーを守るための手段として、Fail2Banというツールを使用することが非常に有効です。Fail2Banは、不正なアクセスや攻撃を検出し、特定のIPアドレスからの接続を一時的にブロックすることができるセキュリティツールです。
本記事では、Ubuntu環境でNginxを使用しているサーバーに対してFail2Banを導入し、攻撃から守る方法を詳しく解説します。

Fail2Banとは?
Fail2Banは、ログファイルを監視して、特定のパターン(例えば、失敗したログイン試行)を検出し、それに基づいて攻撃者のIPアドレスをブロックするツールです。攻撃者が何度も失敗したログイン試行を行った場合、そのIPアドレスを一定時間ブロックすることで、攻撃を防ぐことができます。
Nginxをターゲットにした攻撃の多くは、ブルートフォース攻撃やDoS(サービス拒否)攻撃です。Fail2Banを使うことで、これらの攻撃を効率的に防ぐことが可能になります。
Fail2Banのインストール
まず、UbuntuにFail2Banをインストールする必要があります。以下の手順でインストールできます。
-
パッケージリストの更新
bashsudo apt update
-
Fail2Banのインストール
bashsudo apt install fail2ban
-
Fail2Banのサービスを確認
インストールが完了したら、Fail2Banサービスが正しく動作しているか確認します。bashsudo systemctl status fail2ban
-
サービスの自動起動設定
Fail2Banがシステム起動時に自動的に開始されるように設定します。bashsudo systemctl enable fail2ban
Nginx用のFail2Ban設定
Fail2Banはログファイルを監視して不正なアクセスをブロックします。Nginxのログを監視するために、Fail2Banの設定ファイルを変更する必要があります。
-
Nginxのログファイル確認
通常、Nginxのログファイルは以下のディレクトリに格納されています。- アクセスログ:
/var/log/nginx/access.log
- エラーログ:
/var/log/nginx/error.log
- アクセスログ:
-
Fail2Banの設定ファイルの作成
Fail2Banは、/etc/fail2ban/jail.local
ファイルを使って設定を行います。このファイルを編集して、Nginxのログを監視する設定を追加します。以下の手順で設定を行います。
bashsudo nano /etc/fail2ban/jail.local
ファイルの内容を以下のように設定します。
ini[nginx-http-auth] enabled = true port = http,https filter = nginx-http-auth logpath = /var/log/nginx/error.log maxretry = 3 [nginx-botsearch] enabled = true port = http,https filter = nginx-botsearch logpath = /var/log/nginx/access.log maxretry = 2
上記の設定では、
nginx-http-auth
フィルターとnginx-botsearch
フィルターを使用しています。nginx-http-auth
は認証失敗のブロックを行い、nginx-botsearch
は悪意のあるボットによるアクセスを制限します。 -
Nginxのフィルター設定
次に、Fail2Banのフィルター設定を行います。
/etc/fail2ban/filter.d/
ディレクトリに、Nginxに関連するフィルターが格納されています。もし、nginx-http-auth.conf
やnginx-botsearch.conf
が存在しない場合は、以下の内容で新しくフィルターを作成します。bashsudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf
そして、以下の内容を追加します。
ini[Definition] failregex = ^\s*\d+\.\d+\.\d+\.\d+\s-\s-\s\[\S+\s\+\d{4}\]\s"POST\s/Sec\+auth\sHTTP/1.1"\s401 ignoreregex =
同様に、
nginx-botsearch.conf
ファイルも作成して、適切なフィルター設定を追加します。
Fail2Banの設定を再読み込み
設定が完了したら、Fail2Banを再起動して変更を反映させます。
bashsudo systemctl restart fail2ban
また、設定が正しく反映されているか確認するために、Fail2Banのログをチェックすることができます。
bashsudo fail2ban-client status nginx-http-auth sudo fail2ban-client status nginx-botsearch
これにより、Fail2Banが正しく動作しているか、またブロックされたIPアドレスの数を確認することができます。
Fail2Banの動作確認
Fail2BanがNginxに対して正しく動作しているかどうかをテストするためには、意図的に失敗した認証試行を行ってみると良いです。例えば、Nginxの認証ページで誤ったパスワードを入力してみると、Fail2Banが設定した最大試行回数を超えた場合に、そのIPアドレスを一時的にブロックすることが確認できます。
また、Fail2BanによってブロックされたIPアドレスは、/var/log/fail2ban.log
に記録されます。このログを確認することで、どのIPアドレスがブロックされたかを追跡できます。
Fail2Banの設定をさらに強化する方法
Fail2Banの設定をさらに強化するためには、以下の方法も検討すると良いでしょう。
-
iptablesでのアクセス制限
Fail2Banはiptablesを使用してIPアドレスをブロックします。特に多くのトラフィックを扱うサーバーでは、iptablesを最適化して過剰な負荷を避けることが重要です。 -
他のNginxログの監視
Nginxの他のログ(例:アクセスログ)を監視対象に追加することで、さらに多くの攻撃を検出できます。 -
通知設定
Fail2Banには、ブロックしたIPアドレスが発生した際に管理者に通知する機能があります。action = %(action_mwl)s
のように設定することで、メールで通知を受け取ることが可能です。
まとめ
Nginxを使ったウェブサーバーにおけるセキュリティは、サーバー管理者にとって重要な課題です。Fail2Banはその強力なセキュリティ対策の一つであり、誤ったログイン試行や悪意のあるボットからサーバーを守るために非常に有効です。本記事で紹介した手順を実行することで、Nginxのセキュリティを強化し、安全なウェブサーバー運営が可能になります。