Fail2banの設定について
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
Debian
はrsyslog
をインストールしないとログファイルが作成されない。詳しくは以下の記事のFail2Banの章を参照。
macOS
MacPorts
を使ってインストールした場合は、jail.d
ディレクトリーがない。自分で作ってもいいのかもしれない。分からない。jail.local
が空なので、それに追記してよい(はず)。[1]
設定の流れ
- カスタムフィルターを作成する(filterファイルの作成)
作成場所:/etc/fail2ban/filter.d/*.conf
- カスタムフィルターを有効にする(jailファイルの作成)
作成場所:/etc/fail2ban/jail.d/*.conf
- Fail2banの再起動:
fail2ban-server restart
リロードでもいける:fail2ban-server reload
- 設定が有効になっているか確認:
sudo fail2ban-server status
各フィルターの詳細を確認する:sudo fail2ban-server status (フィルター名)
BanしたIPアドレスを解除する方法
sudo fail2ban-client set <jail名> unbanip <IPアドレス>
Apache
Apacheのログを解析して、不正なアクセスを遮断する。
設定の流れは以下の通り。
- カスタムフィルターを作成
- カスタムフィルターを有効にするJailファイルの作成
- Fail2banの再起動
- カスタムフィルターが有効になっているか確認
カスタムフィルタの作成
sudo nano /etc/fail2ban/filter.d/apache-url.conf
cgi-bin、wordpress、gitのconfigにアクセスしたIPアドレスを遮断する。
[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]
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
デフォルトで用意されているApacheのフィルター
OS・ディストリビューション毎に異なる。
- apache-auth.conf
- apache-badbots.conf
- apache-botsearch.conf
- apache-common.conf
- apache-fakegooglebot.conf
- apache-modsecurity.conf
- apache-nohome.conf
- apache-noscript.conf
- apache-overflows.conf
- apache-pass.conf
- apache-shellshock.conf
SSHの設定について
-
拡張子が
.local
のファイルは、パッケージ・マネージャーがファイルを上書きしないルール(紳士協定)になっている。ただし、それを守るか守らないか、うっかりミスして上書きしてしまう(不具合)かは、パッケージ・マネージャー次第。 ↩︎
Discussion