FreeBSD上のnginxで唯一まともに使えそうなWAF、Naxsiを導入したメモ。
環境
- FreeBSD 14.1
- nginx 1.26.1
WAFの選定
nginxで使えるWAFとして最もよく名前が挙がるModSecurityが、廃止されていた。
2024年3月末にEOLとなり、2024年7月以降はサポートされなくなる。
FreeBSD上のnginxで使えるWAFを探したところ、見つかったのがNaxsi。たぶん、現状ではこれが唯一の選択肢じゃないかと思う。
Linux向けなら、次のようなよさげなのがちょこちょこあるんだけど。
FreeBSDで使えるものは、本当にない。Naxsiも、もともとのメンテナーは開発から手を引いてしまい、2024年3月にリポジトリが凍結されてしまった。有志が引き継ぎ、たったひとりでメンテナンスを続けている。新しいリポジトリは、次の場所。
たったひとりのメンテナーとか……。続けてくれることは本当にありがたいものの、ものすごく心細い。いつ廃止になっても不思議のない状態。
インストール
nginxにNaxsiモジュール追加
モジュール追加の形で、nginxを再インストールする。
# sudo portmaster --force-config www/nginx
オプション選択画面が出てきたら、NAXSI (3rd party naxsi module) にチェックして、インストール。
ルールをダウンロード
https://github.com/wargio/naxsi より、naxsi_rules
の下から必要ファイルをダウンロードして/usr/local/etc/nginx
の下に同じディレクトリ構成で配置する。
naxsi_rules/blocking
下の全ファイルnaxsi_rules/whitelist/generic.rules
naxsi_rules/whitelist/wordpress.rules
うちで使用することにしたのは、次のファイル。
nginx_rules/blocking/10000000_scanner.rules
nginx_rules/blocking/20000000_web_security.rules
nginx_rules/blocking/30000000_wordpress.rules
nginx_rules/blocking/40000000_php_security.rules
nginx_rules/blocking/50000000_sql_injection.rules
nginx_rules/whitelists/generic.rules
nginx_rules/whitelists/wordpress.rules
/usr/local/etc/nginx/nginx.conf
グローバル
グローバルにnaxsiモジュールのロードを記述。
load_module /usr/local/libexec/nginx/ngx_http_naxsi_module.so;
event
ディレクティブより前に記述すること。
httpディレクティブ
http
ディレクティブ内に、naxsi_core.rules
のinclude
を追加する。
http {
charset utf-8;
include mime.types;
include naxsi_core.rules;
include naxsi_rules/blocking/*.rules;
:
}
naxsi_core.rules
はnginx.conf
と同じ/usr/local/etc/nginx
ディレクトリにインストールされている。
locationディレクティブ
location
ディレクティブに次の定義を追加する。
location / {
:
SecRulesEnabled;
DeniedUrl /503.html;
error_log logs/naxsi.log;
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
include naxsi_rules/whitelists/*.rules;
}
nginx再起動
nginxを再起動する。
# sudo service nginx restart
ブラウザでサイトをくまなくチェックして、正常に表示できることを確認。
不具合があれば、その都度Naxsiのルールファイルを編集して調整していく。
参考
- Naxsi (公式リポジトリ)
- nginx向けのWebアプリケーションファイアウォールを試す – Naxsiを使ってみる(さくらのナレッジ)