Nginx/php-fpmで動いているNextcloudにmodsecurity入れてみた

Docker

約 7 分で読めます。



以前、ApacheでのNextcloud環境にはmod-securityを入れたことがありました。



いまはNginx/php-fpmでNextcloudを動かしているので、そこにmodsecurityを入れてみようかと。



docker-compose.ymlなどはgithubにあるので、参考にしてみてください。

GitHub - kurofuku/nextcloud-container-fpm
Contribute to kurofuku/nextcloud-container-fpm development by creating an account on GitHub.

やったこと

owasp/modsecurity-crs:nginxへの切替

今まではnginxのイメージを使っていました。

Nginx環境にmodsecurityとCRS(Common Rule Sets)を追加したowasp/modsecurity-crs:nginxというイメージがありますので、これを使うようにします。

ただ、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



具体的な修正内容は以下のコミットで見ていただければと。

Switched to use owasp/modsecurity-crs:nginx for nginx. · kurofuku/nextcloud-container-fpm@e7cf318
Contribute to kurofuku/nextcloud-container-fpm development by creating an account on GitHub.
Added missing file. · kurofuku/nextcloud-container-fpm@20a140a
Contribute to kurofuku/nextcloud-container-fpm development by creating an account on GitHub.



除外ルールの追加

以下をブラウザーと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

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