📚

Fail2banの設定について

2024/09/27に公開

Fail2banとは?

不正アクセスを検知して、攻撃と思しきアクセスを遮断する。

Fail2banのインストールと起動

  • Debian
    Debianはエラーで起動できないかもしれない。理由は後述のOS毎の差異を参照。
    sudo apt install fail2ban
    sudo systemctl start fail2ban
    
  • FreeBSD
    sudo pkg install fail2ban
    
  • macOS
    sudo port install fail2ban
    sudo port load fail2ban
    

Fail2Banが起動してしまえば、設定のリロードなどは、fail2ban-server reloadで行える。ステータスの確認などもfail2ban-client statusで行える。

ただし、新しくjailを追加した場合は、デーモン(Fail2Banサーバー)の再起動が必要な場合もある。(OSによって違う)

設定ファイルについて

SSH、Apache、Postfixなど、メジャーなミドルウェアの主要な設定はデフォルトで設定されている。デフォルトの設定は変更しない方が良い。

検査対象となるログ・ファイルのパスは、OS毎に異なるが、パッケージ・マネージャーを使ってインストールした場合は、適切に設定されているはずである。fail2banディレクトリーに、paths-debian.confといったファイルが存在するはずで、その設定が自動的に適用されるようになっている(はず)。

Debian

Debianrsyslogをインストールしないとログファイルが作成されない。詳しくは以下の記事のFail2Banの章を参照。

https://zenn.dev/tomoakinagahara/articles/cedcc6a6bd5730#fail2ban

macOS

MacPortsを使ってインストールした場合は、jail.dディレクトリーがない。自分で作ってもいいのかもしれない。分からない。jail.localが空なので、それに追記してよい(はず)。[1]

設定の流れ

  1. カスタムフィルターを作成する(filterファイルの作成)
    作成場所:/etc/fail2ban/filter.d/*.conf
  2. カスタムフィルターを有効にする(jailファイルの作成)
    作成場所:/etc/fail2ban/jail.d/*.conf
  3. Fail2banの再起動:fail2ban-server restart
    リロードでもいける:fail2ban-server reload
  4. 設定が有効になっているか確認:sudo fail2ban-server status
    各フィルターの詳細を確認する:sudo fail2ban-server status (フィルター名)

BanしたIPアドレスを解除する方法

sudo fail2ban-client set <jail名> unbanip <IPアドレス>

Apache

Apacheのログを解析して、不正なアクセスを遮断する。
設定の流れは以下の通り。

  1. カスタムフィルターを作成
  2. カスタムフィルターを有効にするJailファイルの作成
  3. Fail2banの再起動
  4. カスタムフィルターが有効になっているか確認

カスタムフィルタの作成

sudo nano /etc/fail2ban/filter.d/apache-url.conf 

cgi-bin、wordpress、gitのconfigにアクセスしたIPアドレスを遮断する。

apache-url.conf
[Definition]
failregex = <HOST> - - .* "(GET|POST) /cgi-bin/.* HTTP/.*"
            <HOST> - - .* "GET /wp-.* HTTP/.*"
            <HOST> - - .* "GET /\.git/config HTTP/.*"
            <HOST> - - .* "GET /\.env HTTP/.*"
ignoreregex =

Jailの設定

sudo nano /etc/fail2ban/jail.d/apache.conf

フィルター名はapache-urlにする。

apache-url.conf
[apache-url]
enabled = true
port    = http,https
filter  = apache-url
logpath = /var/log/apache2/access.log,/var/log/apache2/access-ssl.log
maxretry = 1
bantime = 8640000

Fail2banの再起動

fail2ban restart

カスタムフィルターが有効になっているか確認

fail2ban status

apache-url が表示されていれば成功。
BanしたIPアドレスのリストを見るには、フィルター名を指定して詳細を表示する。

fail2ban status apache-url

SSHの設定について

https://zenn.dev/nu75cice/articles/c1b22a14cd92258a3a29

脚注
  1. 拡張子が .local のファイルは、パッケージ・マネージャーがファイルを上書きしないルール(紳士協定)になっている。ただし、それを守るか守らないか、うっかりミスして上書きしてしまう(不具合)かは、パッケージ・マネージャー次第。 ↩︎

Discussion