Skip to main content

Настройка

  • Разбираемся с конфигом. Конфиг, если его прочитать, сам ответит на все возникающие вопросы.
nano -w /etc/crs4/crs-setup.conf
  • Проверяем что модуль работает в Anomaly Scoring режиме
SecDefaultAction "phase:1,log,auditlog,pass"
SecDefaultAction "phase:2,log,auditlog,pass"
  • Выставляем Paranoia Level = 3 (А почему бы и нет ? Секурность мы с Вами повысим, а с ложными срабатываниями разберемся при необходимости)
SecAction \
    "id:900000,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.blocking_paranoia_level=3"
  • Принудительно включаем Body Processor URLENCODED для всех клиентских запросов с отсутствующим Content-Type заголовком
SecAction \
    "id:900010,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.enforce_bodyproc_urlencoded=1"
  • Задаем параметры (веса?) для аномалий
SecAction \
    "id:900100,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.critical_anomaly_score=5,\
    setvar:tx.error_anomaly_score=4,\
    setvar:tx.warning_anomaly_score=3,\
    setvar:tx.notice_anomaly_score=2"
  • Задаем пороговые значения для блокировки. Предлагаю задрать пока не отладим.
SecAction \
    "id:900110,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.inbound_anomaly_score_threshold=5000,\
    setvar:tx.outbound_anomaly_score_threshold=4000"
  • Включаем второй уровень логирования (Как-никак у нас PL=3 и видеть что именно происходит было бы крайне полезным)
SecAction \
    "id:900115,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.reporting_level=2"
  • Включаем дефолтный набор сигнатур
SecAction \
    "id:900130,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.enable_default_collections=1"
  • Включаем ограничение HTTP методов. Здесь я добавил PUT метод используемый CMS (Здесь и далее - осторожнее, ибо многое зависит от опубликованных приложений. Я писал под себя, по этому внимательно и без копипасты) Подробнее про логику здесь и здесь
SecAction \
    "id:900200,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:'tx.allowed_methods=GET HEAD POST OPTIONS PUT'"
  • Ограничиваем HTTP Content Type
SecAction \
    "id:900220,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:'tx.allowed_request_content_type=|application/x-www-form-urlencoded| |text/html|'"
  • Ограничиваем HTTP версии
SecAction \
    "id:900230,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:'tx.allowed_http_versions=HTTP/1.1'"
  • Ограничиваем кодировку
SecAction \
    "id:900280,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:'tx.allowed_request_content_type_charset=|utf-8|'"
  • Ограничиваем количество аргументов, дилну имени аргумента и его собственную длину, суммарную длину всех аргументов.
SecAction \
    "id:900300,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.max_num_args=255"
SecAction \
    "id:900310,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.arg_name_length=100"
SecAction \
    "id:900320,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.arg_length=400"
SecAction \
    "id:900330,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.total_arg_length=64000"
  • Ограничиваем размер файла в POST запросе, а так же суммарный размер всех файлов
SecAction \
    "id:900340,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.max_file_size=1048576"
SecAction \
    "id:900350,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.combined_file_sizes=1048576"
  • Проверяем наш сервер на предмет поддержки кодировки
SecAction \
    "id:900950,\
    phase:1,\
    pass,\
    t:none,\
    nolog,\
    tag:'OWASP_CRS',\
    ver:'OWASP_CRS/4.10.0',\
    setvar:tx.crs_validate_utf8_encoding=1"
  • Остальное оставляем по умолчанию
  • Включаем фильтрацию в конфигурации виртуального хоста
nano -w /etc/apache2/sites-enabled/null.conf
        # WAF
        <IfModule security2_module>
                SecRuleEngine On
        </IfModule>
  • Перезагружаем конфиги Apache
systemctl reload apache2