Naxsi導入

FreeBSD上のnginxで唯一まともに使えそうなWAF、Naxsiを導入したメモ。

環境

  • FreeBSD 14.1
  • nginx 1.26.1

WAFの選定

nginxで使えるWAFとして最もよく名前が挙がるModSecurityが、廃止されていた。

F5 NGINX ModSecurity WAF Is Transitioning to End-of-Life
Due to changes in third-party support for ModSecurity, F5 NGINX ModSecurity WAF will reach end-of-life in March 2024. Le...

2024年3月末にEOLとなり、2024年7月以降はサポートされなくなる。

FreeBSD上のnginxで使えるWAFを探したところ、見つかったのがNaxsi。たぶん、現状ではこれが唯一の選択肢じゃないかと思う。

Linux向けなら、次のようなよさげなのがちょこちょこあるんだけど。

FreeBSDで使えるものは、本当にない。Naxsiも、もともとのメンテナーは開発から手を引いてしまい、2024年3月にリポジトリが凍結されてしまった。有志が引き継ぎ、たったひとりでメンテナンスを続けている。新しいリポジトリは、次の場所。

GitHub - wargio/naxsi: NAXSI is an open-source, high performance, low rules maintenance WAF for NGINX
NAXSI is an open-source, high performance, low rules maintenance WAF for NGINX - wargio/naxsi

たったひとりのメンテナーとか……。続けてくれることは本当にありがたいものの、ものすごく心細い。いつ廃止になっても不思議のない状態。

インストール

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.rulesincludeを追加する。

http {
    charset utf-8;
    include mime.types;
    include naxsi_core.rules;
   include naxsi_rules/blocking/*.rules;
  :
}

naxsi_core.rulesnginx.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のルールファイルを編集して調整していく。

参考

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