約 8 分で読めます。
以前、ApacheでのNextcloud環境にはmod-securityを入れたことがありました。
いまはNginx/php-fpmでNextcloudを動かしているので、そこにmodsecurityを入れてみようかと。
docker-compose.ymlなどはgithubにあるので、参考にしてみてください。
やったこと
owasp/modsecurity-crs:nginxへの切替
今まではnginxのイメージを使っていました。
Nginx環境にmodsecurityとCRS(Common Rule Sets)を追加したowasp/modsecurity-crs:nginxというイメージがありますので、これを使うようにします。
2022/01/29
owasp/modsecurity-crs:nginxイメージをそのまま使えるようになっていました。
↓のエラーは出ない。
使い方は私のgithubコミットを参考にしてみてください。
ただ、modsecurityにlibGeoIPがリンクされておらず、実行したらエラーになりました。
sudo docker run -it --rm owasp/modsecurity-crs:nginx 2021/11/06 09:15:00 [emerg] 1#1: "modsecurity_rules_file" directive Rules error. File: /etc/modsecurity.d/owasp-crs/rules/REQUEST-910-IP-REPUTATION.conf. Line: 76. Column: 22. This version of ModSecurity was not compiled with GeoIP or MaxMind support. in /etc/nginx/conf.d/modsecurity.conf:2 nginx: [emerg] "modsecurity_rules_file" directive Rules error. File: /etc/modsecurity.d/owasp-crs/rules/REQUEST-910-IP-REPUTATION.conf. Line: 76. Column: 22. This version of ModSecurity was not compiled with GeoIP or MaxMind support. in /etc/nginx/conf.d/modsecurity.conf:2
ということで、modsecurityはソースコードからビルドして組み込むことに。
こちらのDockerfileを大いに参考にさせていただきました。感謝です。
ビルドしてインストールするコードはこんな感じです。
記事執筆時点のmodsecurity最新であるv3.0.5を利用。
ラズパイ4で30分くらいかかりました。
apt install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev git clone --depth 1 -b v3.0.5 https://github.com/SpiderLabs/ModSecurity cd ModSecurity git submodule init && git submodule update ./build.sh ./configure make make install
具体的な修正内容は以下のコミットで見ていただければと。
除外ルールの追加
以下をブラウザーとAndroidアプリからそれぞれやってみて、検出したルールを除外しました。
・ログイン ・ダッシュボード閲覧 ・フォルダー閲覧 ・画像閲覧 ・動画閲覧 ・ファイルアップロード 小さめのファイル 大きめのファイル ・ファイル削除 ・トークでチャット ・トークでビデオ電話 ・Joplin
除外したルールはこれら。
echo 'SecRuleRemoveById 911100' > /etc/modsecurity.d/owasp-crs/rules/zz-nextcloud.conf && echo 'SecRuleRemoveById 920420' >> /etc/modsecurity.d/owasp-crs/rules/zz-nextcloud.conf && echo 'SecRuleRemoveById 921110' >> /etc/modsecurity.d/owasp-crs/rules/zz-nextcloud.conf && echo 'SecRuleRemoveById 949110' >> /etc/modsecurity.d/owasp-crs/rules/zz-nextcloud.conf &&
これでそれなりに動くようになりました。
また、パフォーマンスへの影響が気になりましたが、目に見えて速度低下はないので一安心です。
終わりに
いかがでしたか。
さほど手をかけずに導入できますので、やってしまいましょう!
Comments