fail2banのインストール方法

新サーバーに旧サーバーでも使っていたmod_evasiveをインストールしたが、動かなかったので同じようにDoS攻撃対策のフリーソフトfail2banをインストールした。
代替ソフトとして dosdetector も考えたがリポジトリにあるのがfail2banだけだった

環境: Apache 2.4.57 (AlmaLinux9)

fail2banのインストール方法

リポジトリからインストール可能か

sudo dnf list fail2ban

インストール

sudo dnf install fail2ban

fail2banの設定方法

まず、jail.localファイルを作成する。Fail2banはjail.localの設定を優先して適用するので、必要な設定を書き込む。

jail.localの作成

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

もしくは

sudo vi /etc/fail2ban/jail.local

以下のように書き込んだ

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5

[site1-dos]
enabled  = true
port     = http,https
filter   = site1-dos
logpath  = /var/log/httpd/site1_access_log
maxretry = 10
findtime = 1m
bantime  = 10m

# バーチャルホストの場合
[site2-dos]
enabled  = true
port     = http,https
filter   = site2-dos
logpath  = /var/log/httpd/site2_access_log
maxretry = 10
findtime = 1m
bantime  = 10m

つぎに/etc/fail2ban/filter.dディレクトリにフィルタファイル site1-dos.conf を作成

sudo vi /etc/fail2ban/filter.d/site1-dos.conf

Apacheのアクセスログに基づいて、大量のGETまたはPOSTリクエストを送信するIPアドレスを検出するように正規表現で書き込む

[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"

ファイルを作ったら再起動

sudo systemctl restart fail2ban

ステータスを確認

sudo fail2ban-client status site1-dos

banなどがあるとここでわかる

稼働中か
sudo systemctl status fail2ban

起動

sudo systemctl start fail2ban

サーバー起動時に自動的に起動

sudo systemctl enable fail2ban

名前解決ができないエラー

設定が終わり、動作確認のため以下のコマンドを実行

sudo fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/site1-dos.conf

すると名前解決ができないエラーが出る

Running tests

Use failregex filter file : site1-dos, basedir: /etc/fail2ban
Use log file : /var/log/httpd/access_log
Use encoding : UTF-8

^CTraceback (most recent call last):
File "/usr/lib/python3.9/site-packages/fail2ban/server/ipdns.py", line 97, in dnsToIp
for result in socket.getaddrinfo(dns, None, fam, 0, socket.IPPROTO_TCP):
File "/usr/lib64/python3.9/socket.py", line 954, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

ターミナルから名前解決ができるか確認するができない

$ nslookup ec2-44-214-187-82.compute-1.amazonaws.com
-bash: nslookup: command not found

nslookupコマンドをインストールする

sudo dnf install bind-utils

これで nslookup コマンドを実行して、名前解決ができるようになった

再び動作テスト

sudo fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/site1-dos.conf

コマンドライン上は、問題なく動いた

タイトルとURLをコピーしました