У меня небольшие проблемы с повторяющимся сообщением об ошибке «Не удалось удалить коллекцию» от ModSecurity (см. это обсуждение @ GitHub для некоторого контекста). При обсуждении этой ошибки часто предполагается, что SecCollectionTimeout директива может иметь некоторое влияние. Чтение документация Я узнаю только об этой директиве:
Задает тайм-аут коллекций. По умолчанию 3600 секунд.
Однако я не совсем понимаю, что такое «тайм-аут коллекций». Может кто-нибудь объяснить мне, что делает этот параметр?
Спасибо заранее.
Если за это время запись сбора не обновляется, она помечается для удаления и в какой-то момент собирается сборщик мусора.
В зависимости от того, как написано правило, ModSecurity может постоянно обновлять запись коллекции до истечения этого времени ожидания, чтобы она никогда не помечалась как истекшая.
Вы можете добавить новое правило для истечения срока действия действительно старых записей. Иван Ристич обсуждает это в своем руководстве по безопасности модов в главе 8 и дает несколько примеров правил для обнаружения действительно старых записей, включая эту от Брайана Ректануса (обратите внимание, что с тех пор я стал обязательным, поэтому его необходимо добавить, если вы хотите использовать это правило в реальной жизни):
# Detect very old IP records
SecAction "phase:5,log,pass,chain,\
msg:'IP record older than 24 hours',\
setvar:tx.exp=%{TIME_EPOCH},\
setvar:tx.exp=-%{IP.CREATE_TIME}"
SecRule TX:exp "@gt 86400"
Этот пример можно обновить, чтобы автоматически удалить старую запись без регистрации, изменив на следующее:
# Delete very old IP records
SecAction "id:12345,phase:5,nolog,pass,chain,\
setvar:tx.exp=%{TIME_EPOCH},\
setvar:tx.exp=-%{IP.CREATE_TIME}"
SecRule TX:exp "@gt 86400" "setvar:!IP.KEY"
Опять же, ваша ссылка может быть действительно ошибкой в ModSecurity, что просроченные элементы не очищаются, и в этом случае вышеуказанное может не помочь ...