事象
Redmineでクリップボードの画像を貼り付けようとした際、画像のアップロードができませんでした。
そこで、エラーログを確認したところ、以下のメッセージが表示されました。
ModSecurity: Request body no files data length is larger than the configured limit (131072). [hostname "redmine-url"] [uri "/uploads.js"] [unique_id "Zv0wom0FwSak1tXDUgFRLAAAAAw"], referer: https://redmine-url/issues/3
環境
- Ubuntu 24.04
- Apache 2.4
- Mod_Security 2
- Redmine 5.1
確認したこと
バーチャルサイトのMod_Securityの設定
SecRequestBodyInMemoryLimit 524288000
SecRequestBodyLimit 524288000
と、50MBはアップロードできるようになっています。
Redmineでアップロード可能なファイル容量
管理> 設定 > ファイルの「添付ファイルサイズの上限でも`51200KB`を確認。
Mod_Security Confファイル確認
`cat /etc/modsecurity/modsecurity.conf |grep Limit` の結果、以下を確認しました。
SecRequestBodyLimit 13107200
SecRequestBodyNoFilesLimit 131072
SecRequestBodyInMemoryLimit 131072
SecRequestBodyLimitAction Reject
SecRequestBodyJsonDepthLimit 512
SecPcreMatchLimit 100000
SecPcreMatchLimitRecursion 100000
SecResponseBodyLimit 524288
SecResponseBodyLimitAction ProcessPartial
原因
`/etc/modsecurity/modsecurity.conf`の設定がバーチャルサイトの設定にオーバーライドしたため、こちらの設定が上書きされた模様です。
これを変更していきます。
対応手順
ファイルバックアップの作成
sudo cp -pi /etc/modsecurity/modsecurity.conf /path/to/backup/directory/modsecurity.conf.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
バックアップ作成確認
diff -u /path/to/backup/directory/modsecurity.conf.$(date +%Y%m%d) /etc/modsecurity/modsecurity.conf
バックアップできていること(差分がないこと)を確認します。
sedによる書き換え
sudo sed -i 's/SecRequestBodyNoFilesLimit 131072/SecRequestBodyNoFilesLimit 52428800/; s/SecRequestBodyInMemoryLimit 131072/SecRequestBodyInMemoryLimit 52428800/; s/SecRequestBodyLimit 13107200/SecRequestBodyLimit 52428800/' /etc/modsecurity/modsecurity.conf
ファイル書き換え確認
diff -u /path/to/backup/directory/modsecurity.conf.$(date +%Y%m%d) /etc/modsecurity/modsecurity.conf
以下の差分を確認します。
-SecRequestBodyLimit 13107200
-SecRequestBodyNoFilesLimit 131072
+SecRequestBodyLimit 52428800
+SecRequestBodyNoFilesLimit 52428800
# Store up to 128 KB of request body data in memory. When the multipart
# parser reaches this limit, it will start using your hard disk for
# storage. That is slow, but unavoidable.
#
-SecRequestBodyInMemoryLimit 131072
+SecRequestBodyInMemoryLimit 52428800
設定反映
sudo systemctl restart apache2.service
書き換え後、無事にファイルのアップロードができることを確認しました。