Что именно делает директива ModSecurity SecCollectionTimeout?
У меня возникли небольшие проблемы с повторяющимся сообщением об ошибке "Ошибка удаления коллекции" из ModSecurity (см. Это обсуждение @ GitHub для некоторого контекста). При обсуждении этой ошибки часто предлагается, что директива SecCollectionTimeout может оказать некоторое влияние. Читая документацию, я узнаю только об этой директиве:
Определяет время ожидания коллекций. По умолчанию 3600 секунд.
Однако я не совсем понимаю, что такое "тайм-аут сбора". Может кто-нибудь объяснить мне, что делает этот параметр?
Спасибо заранее.
1 ответ
Если в это время запись коллекции не обновляется, она помечается для удаления и сбора мусора в определенный момент.
В зависимости от того, как написано правило, 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, из-за которой просроченные элементы не очищаются, и в этом случае приведенное выше может не помочь...