Как установить ModSecurity для Nginx в CentOS 7, Debian 8 и Ubuntu 16.04

ModSecurity - это модуль брандмауэра веб-приложений с открытым исходным кодом (WAF), который отлично защищает Apache, Nginx и IIS от различных кибератак, направленных на потенциальные уязвимости в различных веб-приложениях.

В этой статье мы установим и настроим ModSecurity для Nginx в CentOS 7, Debian 8 и Ubuntu 16.04.

Предпосылки

  • До современной установки CentOS, Debian 7 8 или Ubuntu 16.04 64-битной.
  • Вход в систему как root.

Шаг 1: Обновите систему

Следуя этому руководству , обновите ядро ​​и пакеты вашего сервера до последней доступной версии.

Шаг 2: Установите зависимости

Прежде чем вы сможете успешно скомпилировать Nginx и ModSecurity, вам необходимо установить несколько пакетов программного обеспечения следующим образом.

а) на CentOS 7:

yum groupinstall -y "Development Tools"
yum install -y httpd httpd-devel pcre pcre-devel libxml2 libxml2-devel curl curl-devel openssl openssl-devel
shutdown -r now

б) В Debian 8 или Ubuntu 16.04:

apt-get install -y git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-dev libxml2-dev libcurl4-openssl-dev automake pkgconf

Шаг 3: Скомпилируйте ModSecurity

Из-за нескольких нестабильностей, о которых сообщалось в главной ветке ModSecurity for Nginx, на данный момент официально рекоменду��тся использовать последнюю версию nginx_refactoringветки всякий раз, когда это возможно.

Загрузите nginx_refactoringветку ModSecurity для Nginx:

cd /usr/src
git clone -b nginx_refactoring https://github.com/SpiderLabs/ModSecurity.git

Скомпилируйте ModSecurity:

а) на CentOS 7:

cd ModSecurity
sed -i '/AC_PROG_CC/a\AM_PROG_CC_C_O' configure.ac
sed -i '1 i\AUTOMAKE_OPTIONS = subdir-objects' Makefile.am
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make

Примечание: две sedкоманды выше используются для предотвращения появления предупреждающих сообщений при использовании более новых версий automake.

б) В Debian 8 или Ubuntu 16.04:

cd ModSecurity
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make

Шаг 4: Скомпилируйте Nginx

Загрузите и разархивируйте последнюю стабильную версию Nginx, которая Nginx 1.10.3на момент написания:

cd /usr/src
wget https://nginx.org/download/nginx-1.10.3.tar.gz
tar -zxvf nginx-1.10.3.tar.gz && rm -f nginx-1.10.3.tar.gz

а) на CentOS 7:

Во-первых, вам нужно создать выделенного пользователя nginxи выделенную группу nginxдля Nginx:

groupadd -r nginx
useradd -r -g nginx -s /sbin/nologin -M nginx

Затем скомпилируйте Nginx, включив модули ModSecurity и SSL:

cd nginx-1.10.3/
./configure --user=nginx --group=nginx --add-module=/usr/src/ModSecurity/nginx/modsecurity --with-http_ssl_module
make
make install

Измените пользователя Nginx по умолчанию:

sed -i "s/#user  nobody;/user nginx nginx;/" /usr/local/nginx/conf/nginx.conf

б) В Debian 8 или Ubuntu 16.04:

Во-первых, вы должны использовать существующего пользователя www-dataи существующую группу www-data.

Затем скомпилируйте Nginx, включив модули ModSecurity и SSL:

cd nginx-1.10.3/
./configure --user=www-data --group=www-data --add-module=/usr/src/ModSecurity/nginx/modsecurity --with-http_ssl_module
make
make install

Измените пользователя Nginx по умолчанию:

sed -i "s/#user  nobody;/user www-data www-data;/" /usr/local/nginx/conf/nginx.conf

После успешной установки Nginx соответствующие файлы будут расположены по адресу:

nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"

Вы можете проверить установку с:

/usr/local/nginx/sbin/nginx -t

Если ничего не происходит, вывод должен быть:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

Для вашего удобства вы можете настроить системный файл для Nginx:

cat <<EOF>> /lib/systemd/system/nginx.service
[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
KillStop=/usr/local/nginx/sbin/nginx -s stop

KillMode=process
Restart=on-failure
RestartSec=42s

PrivateTmp=true
LimitNOFILE=200000

[Install]
WantedBy=multi-user.target
EOF

Двигаясь вперед, вы можете запустить / остановить / перезапустить Nginx следующим образом:

systemctl start nginx.service
systemctl stop nginx.service
systemctl restart nginx.service

Шаг 4. Настройте ModSecurity и Nginx

4.1. Настройка Nginx:

vi /usr/local/nginx/conf/nginx.conf

Найдите следующий сегмент внутри http {}сегмента:

location / {
    root   html;
    index  index.html index.htm;
}

Вставьте следующие строки в location / {}сегмент:

ModSecurityEnabled on;
ModSecurityConfig modsec_includes.conf;
#proxy_pass http://localhost:8011;
#proxy_read_timeout 180s;

Окончательный результат должен быть:

location / {
    ModSecurityEnabled on;
    ModSecurityConfig modsec_includes.conf;
    #proxy_pass http://localhost:8011;
    #proxy_read_timeout 180s;
    root   html;
    index  index.html index.htm;
}

Сохранить и выйти:

:wq!

Примечание. Приведенная выше конфигурация Nginx является лишь примером конфигурации для использования Nginx в качестве веб-сервера, а не обратного прокси-сервера. Если вы используете Nginx в качестве обратного прокси-сервера, удалите #символ в последних двух строках и внесите в них соответствующие изменения.

4.2 Создайте файл с именем /usr/local/nginx/conf/modsec_includes.conf:

cat <<EOF>> /usr/local/nginx/conf/modsec_includes.conf
include modsecurity.conf
include owasp-modsecurity-crs/crs-setup.conf
include owasp-modsecurity-crs/rules/*.conf
EOF

Примечание. Приведенная выше конфигурация будет применять все основные правила OWASP ModSecurity в owasp-modsecurity-crs/rules/каталоге. Если вы хотите применять только выборочные правила, вы должны удалить include owasp-modsecurity-crs/rules/*.confстроку, а затем указать точные правила, которые вам нужны, после шага 4.5.

4.3 Импорт файлов конфигурации ModSecurity:

cp /usr/src/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/ModSecurity/unicode.mapping /usr/local/nginx/conf/

4.4 Изменить /usr/local/nginx/conf/modsecurity.confфайл:

sed -i "s/SecRuleEngine DetectionOnly/SecRuleEngine On/" /usr/local/nginx/conf/modsecurity.conf

4.5 Добавьте файлы OWASP ModSecurity CRS (основной набор правил):

cd /usr/local/nginx/conf
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
cd owasp-modsecurity-crs
mv crs-setup.conf.example crs-setup.conf
cd rules
mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

Шаг 5: Тестирование ModSecurity

Запустите Nginx:

systemctl start nginx.service

Откройте порт 80, чтобы разрешить внешний доступ:

а) на CentOS 7:

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --reload

б) в Debian 8:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
touch /etc/iptables
iptables-save > /etc/iptables

в) В Ubuntu 16.04:

ufw allow OpenSSH
ufw allow 80
ufw default deny
ufw enable    

Направьте свой веб-браузер на:

http://203.0.113.1/?param="><script>alert(1);</script>

Используйте grepдля получения сообщений об ошибках следующим образом:

grep error /usr/local/nginx/logs/error.log

Вывод должен включать несколько сообщений об ошибках, которые похожи на:

2017/02/15 14:07:54 [error] 10776#0: [client 104.20.23.240] ModSecurity: Warning. detected XSS using libinjection. [file "/usr/local/nginx/conf/owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "56"] [id "941100"] [rev "2"] [msg "XSS Attack Detected via libinjection"] [data "Matched Data:  found within ARGS:param: \x22><script>alert(1);</script>"] [severity "CRITICAL"] [ver "OWASP_CRS/3.0.0"] [maturity "1"] [accuracy "9"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-xss"] [tag "OWASP_CRS/WEB_ATTACK/XSS"] [tag "WASCTC/WASC-8"] [tag "WASCTC/WASC-22"] [tag "OWASP_TOP_10/A3"] [tag "OWASP_AppSensor/IE1"] [tag "CAPEC-242"] [hostname ""] [uri "/index.html"] [unique_id "ATAcAcAkucAchGAcPLAcAcAY"]

Вот и все. Как видите, модуль ModSecurity успешно зарегистрировал эту атаку в соответствии со своей политикой действий по умолчанию. Если вы хотите сделать больше пользовательских настроек, пожалуйста , внимательно просматривать и редактировать /usr/local/nginx/conf/modsecurity.confи /usr/local/nginx/conf/owasp-modsecurity-crs/crs-setup.confфайлы.

Оставить комментарий

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше