ModSecurity (Web Application Firewall)
概要
Docker Infrastructure プロジェクトのセキュリティボーナス要件として、ModSecurity v3 (Libmodsecurity) を Nginx に統合しています。 さらに、ルールセットとして業界標準の OWASP Core Rule Set (CRS) v4 を採用し、一般的なWeb攻撃(SQLインジェクション、XSSなど)からアプリケーションを保護します。
実装方法
Debian の標準パッケージ (apt install nginx) では ModSecurity モジュールが含まれていないか、バージョンが古い場合があるため、ソースコードからのコンパイル を行っています。
Dockerfile 解析
(srcs/requirements/nginx/Dockerfile)
ビルドプロセスは以下の4段階で構成されています。
1. ModSecurity ライブラリ (Libmodsecurity) のビルド
dockerfile
# 依存関係のインストール (libxml2, libpcre2, etc.)
RUN apt-get install -y libpcre2-dev libxml2-dev ...
# ModSecurity のソース取得とコンパイル
RUN git clone ... https://github.com/SpiderLabs/ModSecurity
RUN ./build.sh && ./configure && make && make install2. ModSecurity-nginx Connector の取得
Nginx と ModSecurity を繋ぐためのコネクタモジュールです。
dockerfile
RUN git clone ... https://github.com/SpiderLabs/ModSecurity-nginx.git3. Nginx 本体のコンパイル
公式ソースコードをダウンロードし、--add-module オプションでコネクタを組み込みます。
dockerfile
ENV NGINX_VERSION=1.26.2
RUN ./configure \
--prefix=/etc/nginx \
... \
--add-module=/opt/ModSecurity-nginx \
&& make && make install4. OWASP CRS のセットアップ
dockerfile
# CRS v4.0.0 のダウンロード
RUN curl -L .../coreruleset-4.0.0.tar.gz ...
# 推奨設定の適用 (DetectionOnly -> On)
RUN sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' ...設定ファイル
nginx.conf
各 location ブロックで modsecurity on を記述することで有効化します。
nginx
location / {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
...
}main.conf
ModSecurity の基本設定と OWASP CRS のルールをインクルードする集約ファイルです。
nginx
Include /etc/nginx/modsec/modsecurity.conf
Include /etc/nginx/modsec/owasp-crs/crs-setup.conf
Include /etc/nginx/modsec/owasp-crs/rules/*.conf