Как установить Nginx с ModSecurity на Ubuntu 15.04
Это руководство существует для этих версий ОС
- Ubuntu 16.04 (Xenial Xerus)
- Ubuntu 15.04 (Vivid Vervet)
На этой странице
- Предпосылки
- 2. Установите зависимости сборки
- 3. Скачать ModSecurity и Nginx
- 4. Установите ModSecurity и Nginx.
- 5. Настроить Nginx
- 6. Настроить ModSecurity
- 7. Настройка основного набора правил OWASP (CRS)
- 8. Тестирование
- Заключение
- Справочник
ModSecurity — это брандмауэр веб-приложений (WAF) с открытым исходным кодом для веб-сервера Apache Nginx и IIS. Этот брандмауэр прикладного уровня разработан Trustwaves SpiderLabs и выпущен под лицензией Apache License 2.0. ModSecurity защищает веб-сайты от хакеров, используя набор правил регулярных выражений для фильтрации широко известных эксплойтов, он позволяет отслеживать HTTP-трафик, вести журнал, анализировать в реальном времени и обнаруживать атаки. Доступно более 16 000 правил для обнаружения таких атак, как SQL-инъекция, межсайтовый скриптинг (XSS), включение локальных файлов, включение удаленных файлов и специальные правила для многих веб-приложений, таких как Wordpress, Joomla, Drupal и т. д.
В этом руководстве я покажу вам, как установить mod_security для быстрого веб-сервера Nginx. Я настрою ModSecurity как отдельный модуль, а затем соберу Nginx из исходного кода, чтобы включить ModSecurity.
Предпосылки
- Сервер Ubuntu 15.04, здесь я буду использовать IP-адрес 192.168.1.106.
- Привилегии root
Что мы будем делать в этом уроке:
- Обновите систему и репозиторий Ubuntu 15.04.
- Установите необходимые зависимости для сборки Nginx и ModSecurity.
- Загрузите ModSecurity и Nginx.
- Установите ModSecurity и Nginx.
- Настройте Nginx.
- Настройте ModSecurity.
- Настройте основной набор правил OWASP (CRS).
- Тестирование.
Все приведенные ниже команды должны выполняться от имени пользователя root. Бег:
sudo -i
чтобы стать пользователем root на вашем сервере.
1. Обновить систему и репозиторий
Прежде чем приступить к установке всех зависимостей, обновите свою систему:
apt-get update
apt-get upgrade
2. Установите зависимости сборки
Установите все пакеты, необходимые для компиляции Nginx и ModSecurity, с помощью команды apt ниже:
apt-get install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev
3. Скачайте ModSecurity и Nginx
Перейдите в каталог \/usr/src/\, затем клонируйте репозиторий ModSecurity из Github:
cd /usr/src/
git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity
Загрузите Nginx с помощью команды wget, здесь я буду использовать стабильную версию Nginx 1.8. Если вы хотите использовать другую версию, перейдите на страницу загрузки Nginx, чтобы получить список всех доступных выпусков.
wget http://nginx.org/download/nginx-1.8.0.tar.gz
4. Установите ModSecurity и Nginx
Теперь пришло время установить ModSecurity, перейдите в каталог /usr/src/modsecurity:
cd /usr/src/modsecurity/
И скомпилируйте ModSecurity как отдельный модуль на вашем сервере, чтобы мы могли включить его в Nginx:
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make
Теперь перейдите в каталог nginx, скомпилируйте Nginx и подключите модуль ModSecurity:
cd ../nginx-1.8.0
./configure \
--user=www-data \
--group=www-data \
--with-debug \
--with-ipv6 \
--with-http_ssl_module \
--add-module=/usr/src/modsecurity/nginx/modsecurity
Описание команды конфигурации:
Nginx будет работать под пользователем и группой \www-data\, и мы активируем модули debug, ipv6 и ssl . И, наконец, мы включаем модуль ModSecurity в Nginx.
Теперь установите Nginx:
make
make install
По завершении команды make install вы увидите, что Nginx установлен в каталог \/usr/local/nginx\:
cd /usr/local/nginx/
ll
drwxr-xr-x 2 root root 4096 Oct 3 07:21 conf/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 html/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 logs/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 sbin/
5. Настройте Nginx
Отредактируйте файл конфигурации nginx с помощью vi/vim и настройте nginx для запуска под пользователем \www-data\.
cd /usr/local/nginx/
vi conf/nginx.conf
В первой строке раскомментируйте строку «пользователь» и измените пользователя на www-data:
user www-data;
Сохранить и выйти.
Создайте символическую ссылку для двоичного файла nginx, чтобы мы могли напрямую использовать команду \nginx\.
ln -s /usr/local/nginx/sbin/nginx /bin/nginx
Далее мы создадим скрипт systemd для Nginx, который будет использоваться для запуска/остановки демона Nginx. Перейдите в каталог \/lib/systemd/system/\ и создайте новый файл \nginx.service\ с помощью vi:
cd /lib/systemd/system/
vi 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
Сохранить и выйти.
Теперь перезагрузите демон systemd, чтобы systemd загрузил наш новый служебный файл Nginx.
systemctl daemon-reload
Протестируйте конфигурацию nginx и запустите nginx с помощью команды systemctl:
nginx -t
systemctl start nginx
6. Настройте ModSecurity
Скопируйте файл конфигурации ModSecurity в каталог nginx и назовите его \modsecurity.conf\:
cp /usr/src/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/modsecurity/unicode.mapping /usr/local/nginx/conf/
Откройте файл modsecurity.conf в редакторе vi:
cd /usr/Local/nginx/conf/
vi modsecurity.conf
В строке 7 измените \DetectionOnly\ на \on\.
SecRuleEngine On
В строке 38 увеличьте значение \SecRequestBodyLimit\ до \100000000\.
SecRequestBodyLimit 100000000
В строке 192 измените значение \SecAuditLogType\ на \Concurrent\, закомментируйте строку SecAuditLog и раскомментируйте строку 196.
SecAuditLogType Concurrent
#SecAuditLog /var/log/modsec_audit.log
# Specify the path for concurrent audit logging.
SecAuditLogStorageDir /opt/modsecurity/var/audit/
Сохранить и выйти.
Теперь создайте новый каталог для журнала аудита ModSecurity и измените владельца на www-data.
mkdir -p /opt/modsecurity/var/audit/
chown -R www-data:www-data /opt/modsecurity/var/audit/
7. Настройте основной набор правил OWASP (CRS)
Загрузите основной набор правил OWASP с github.
cd /usr/src/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Перейдите в каталог \owasp-modsecurity-crs\ и скопируйте каталог \base_rules\ в каталог nginx.
cd owasp-modsecurity-crs
cp -R base_rules/ /usr/Local/nginx/conf/
Отредактируйте modsecurity.conf и добавьте OWASP CRS.
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Перейдите в конец файла и добавьте следующую конфигурацию:
#DefaultAction SecDefaultAction "log,deny,phase:1" #If you want to load single rule /usr/loca/nginx/conf #Include base_rules/modsecurity_crs_41_sql_injection_attacks.conf #Load all Rule Include base_rules/*.conf #Disable rule by ID from error message (for my wordpress) SecRuleRemoveById 981172 981173 960032 960034 960017 960010 950117 981004 960015
Сохранить и выйти.
В качестве последнего шага добавьте файл modsecurity.conf в конфигурацию Nginx, отредактировав файл \nginx.conf\.
vi conf/nginx.conf
Добавьте modsecurity.conf:
[.....]
#Enable ModSecurity ModSecurityEnabled on; ModSecurityConfig modsecurity.conf; root html; index index.php index.html index.htm;
[.....]
Сохранить и выйти.
Перезапустите Nginx, чтобы применить изменения конфигурации:
systemctl restart nginx
8. Тестирование
У меня есть сайт WordPress, работающий на Nginx и ModSecurity, он работает нормально. Для тестирования я установлю новый плагин, уязвимый для XSS и SQL-инъекций.
Вот результаты:
XSS запрещен
https://www.exploit-db.com/exploits/37107/
Доступ через браузер:
Журнал сервера:
Внедрение SQL запрещено
https://www.exploit-db.com/exploits/37560/
Доступ через браузер:
Журнал сервера:
Nginx и ModSecurity успешно.
Заключение
ModSecurity — это WAF (брандмауэр веб-приложений) с открытым исходным кодом, разработанный Trustwaves SpiderLabs для защиты ваших веб-приложений. Доступно более 16 000 правил для обнаружения таких атак, как SQL Injection, XSS, LFI, RFI и т. д. ModSecurity легко установить и он доступен в виде модуля для Apache, Nginx и IIS для Windows.
Ссылка
- https://www.modsecurity.org/documentation.html
- https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
- https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual