Я пытаюсь настроить сервер 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 , если кто-то хочет взглянуть на всю установку.