Apache modsecurity: еще одно правило с той же ошибкой идентификатора

Я пытаюсь настроить сервер Apache с Набор правил ModSecurity внутри контейнера Docker. Я выполнил несколько руководств (это, это и это), чтобы создать безопасный сервер Apache. Но я не могу заставить сервер работать с набором правил.

Я получаю такую ​​ошибку:

AH00526: Syntax error on line 855 of /etc/httpd/modsecurity.d/crs-setup.conf:
ModSecurity: Found another rule with the same id

Я искал ошибку и, согласно ответам на этой странице, ошибка заключается в том, что одни и те же правила были включены дважды. Но, насколько я понимаю, я не включаю одни и те же правила дважды, и мне интересно, не в чем-то другом заключается ошибка.

Моя файловая структура проекта следующая:

.
├── conf
│   └── httpd.conf
├── Dockerfile
├── index.html
├── modsecurity.d
│   ├── crs-setup.conf
│   ├── modsecurity.conf
│   └── rules

Файл httpd.conf - это файл конфигурации по умолчанию, используемый для сервера Apache, а конфигурации modsecurity вставляются с помощью команд в Dockerfile.

Dockerfile имеет следующую конфигурацию

FROM centos:7

RUN yum -y update && \
    yum -y install less which tree httpd mod_security && \
    yum clean all

COPY index.html /var/www/html/

#COPY conf/ /etc/httpd/conf/
COPY modsecurity.d/crs-setup.conf /etc/httpd/modsecurity.d/
COPY modsecurity.d/modsecurity.conf /etc/httpd/modsecurity.d/
COPY modsecurity.d/rules/* /etc/httpd/modsecurity.d/rules/

RUN echo "ServerName localhost" >> /etc/httpd/conf/httpd.conf
RUN echo "<IfModule security2_module>" >> /etc/httpd/conf/httpd.conf
RUN echo "  Include modsecurity.d/crs-setup.conf" >> /etc/httpd/conf/httpd.conf
RUN echo "  Include modsecurity.d/rules/*.conf" >> /etc/httpd/conf/httpd.conf
RUN echo "  SecRuleEngine On" >> /etc/httpd/conf/httpd.conf
RUN echo "</IfModule>" >> /etc/httpd/conf/httpd.conf

EXPOSE 80

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

index.html - это просто базовый файл приветствия:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" lang="en">
  </head>
  <body>
    <h1>Hello there</h1>
  </body>
</html>

crs-setup.conf имеет следующее содержание (исключая все комментарии)

SecRuleEngine On
SecDefaultAction "phase:1,log,auditlog,pass"
SecDefaultAction "phase:2,log,auditlog,pass"
SecCollectionTimeout 600
SecAction \
 "id:900990,\
  phase:1,\
  nolog,\
  pass,\
  t:none,\
  setvar:tx.crs_setup_version=310"

modsecurity.conf имеет только эти две строчки

SecRequestBodyAccess On
SecStatusEngine On

rules - это каталог, содержащий набор правил ModSecurity.

Я также поместил файлы проекта на github, если кто-то хочет взглянуть на всю установку.

2
0
2 283
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я узнал, почему у меня ошибка. Файл конфигурации ModSecurity был неправильно назван, и файлы правил были помещены в неправильный каталог.

Файл ModSecurity был modsecurity.conf, хотя на самом деле это должен был быть mod_security.conf, обратите внимание на подчеркивание (источник). Файлы правил должны были быть помещены в папку с именем activated_rules(источник).

В моей рабочей конфигурации теперь у меня следующая структура папок:

.
├── conf
│   └── httpd.conf
├── Dockerfile
├── index.html
└── modsecurity.d
    ├── crs-setup.conf
    ├── mod_security.conf
    └── activated_rules

Dockerfile выглядит следующим образом

FROM centos:7

RUN yum -y update && \
    yum -y install less which tree httpd mod_security && \
    yum clean all

COPY index.html /var/www/html/

RUN echo "ServerName localhost" >> /etc/httpd/conf/httpd.conf
RUN echo "<IfModule security2_module>" >> /etc/httpd/conf/httpd.conf
RUN echo "Include modsecurity.d/crs-setup.conf" >> /etc/httpd/conf/httpd.conf
RUN echo "Include modsecurity.d/activated_rules/*.conf" >> /etc/httpd/conf/httpd.conf
RUN echo "</IfModule>" >> /etc/httpd/conf/httpd.conf


COPY modsecurity.d/crs-setup.conf     /etc/httpd/modsecurity.d/
COPY modsecurity.d/mod_security.conf  /etc/httpd/conf.d/
COPY modsecurity.d/rules/*            /etc/httpd/modsecurity.d/activated_rules/

EXPOSE 80

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

Другие вопросы по теме