Web Defacement
Содержание |
Обзор
Модуль Web Defacement проверяет, изменился ли хэш файлов на диске сервера, чтобы распознать дефейсмент. Когда происходит дефейсмент, модуль может восстановить замененные веб-страницы.
Этот модуль выпущен в SEnginx, но также может быть использован в стандартном nginx.
Примечание: Эта функция является решением для устранения веб-дефейсмента. Администраторы должны принять необходимые меры, например использовать SELinux для защиты.
Директивы
web_defacement
Синтаксис | web_defacement on | off; |
По умолчанию | off |
Контекст | http, server, location |
Включить веб-дефейсмент.
Пример:
web_defacement on;
web_defacement_original
Синтаксис | web_defacement_original /path/to/original/files; |
По умолчанию | |
Контекст | http, server, location |
Папка файлов/страниц, которые будут защищены. Обычно это абсолютный путь на файловой системе. Если используется относительный путь, то корнем пути будет каталог 'conf' в каталоге SEnginx.
Пример:
web_defacement_original /var/www/html;
web_defacement_hash_data
Синтаксис | web_defacement_hash_data /path/to/hash/data/file; |
По умолчанию | |
Контекст | http, server, location |
Путь к хэш-файлу страниц, которые необходимо защитить.
Хэш-файл можно сгенерировать с помощью утилиты web_defacement.pl, поставляемой вместе с SEnginx. Если используется относительный путь, корнем пути будет каталог 'conf' в каталога SEnginx.
Пример:
web_defacement_hash_data /usr/local/senginx/hash_data;
Сгенерировать хэш-файл:
cd senginx-install-dir ./web_defacement.pl -d /path/to/original/files -o /path/to/hash/file;
Пример:
cd /usr/local/senginx ./web_defacement.pl -d /var/www/html -o ./hash_data;
web_defacement_log
Синтаксис | web_defacement_log on | off; |
По умолчанию | off |
Контекст | http, server, location |
Записать атаку дефейсмента в error.log.
Пример:
web_defacement_log on;
web_defacement_index
Синтаксис | web_defacement_index filename; |
По умолчанию | |
Контекст | http, server, location |
Индексная страница по умолчанию. При запросе пути модуль web defacement проверить хэш-сумму индексной страницы по этому пути.
Пример:
location /cn/ { web_defacement_index index.html; }
В этом примере, если клиент запрашивает путь '/cn/', модуль web defacement проверит файл '/cn/index.html' на дефейсмент. Обратите внимание, что путь должен заканчиваться на "/", в противном случае он будет воспринят как имя файла.
web_defacement_whitelist
Синтаксис | web_defacement_whitelist ua_var_name=UA whitlist ip_var_name=IP whitelist ip_var_value=value; |
По умолчанию | |
Контекст | http, server, location |
С версии | 1.5.11 |
Эта директива определяет использование белого списка IP-адресов и белого списка на основе User Agent. Белый список IP-адресов задается с помощью geo модуля nginx.
Пример:
# Определить белый список IP-адресов geo $ip_wl { ranges; default 0; 127.0.0.1-127.0.0.1 1; 3.0.0.1-3.2.1.254 1; } # Определить белый список на основе User Agent whitelist_ua $ua_wl { "autotest" ".*\.test\.com"; } server { location { web_defacement_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1; } }
Переменные
Модуль Web Defacement предоставляет 2 переменные для определяемых пользователем действий.
- $web_defacement
Если запрошенная страница подвергнута дефейсменту, эта переменная принимает значение true.
- $web_defacement_file
Если запрошенная страница подвергнута дефейсменту, эта переменная принимает значение URL, который ссылается на поврежденный файл.
Примеры
SEnginx в режиме web сервера
Предположим, что все файлы веб-сайта располагаются в каталоге /var/www/html, а SEnginx установлен в /usr/local/senginx. Для настройки модуля веб-дефейсмента выполните следующие шаги:
Перейдите в каталог SEginx
cd /usr/local/senginx
Запустите web_defacement.pl чтобы сгенерировать файл /usr/local/senginx/hash_data с хэш-данными
./web_defacement.pl
Измените nginx.conf, включите модуль Web Defacement и укажите location или server, который нужно защитить:
server { listen 80; server_name localhost; web_defacement on; # Включить модуль web defacement web_defacement_original /var/www/html; # Каталог web-страниц web_defacement_hash_data /usr/local/senginx/hash_data; # Хэш-файл location / { web_defacement_index index.html; # Индексный файл по умолчанию web_defacement_log on; # Включить журнал атак if ($web_defacement) { # Определить действия при дефейсменте. В данном случае - вернуть ошибку 403. # Если необходимо, сделать другие действия здесь return 403; } index index.html; root /var/www/html; } location /other { web_defacement off; # Запретить модуль web defacement в этом location ... ... } }
Перезапустить или перезагрузить SEnginx
SEnginx в режиме reverse proxy
Если SEnginx работает в режиме reverse proxy, как он может получить доступ к файлам на backend серверах? В этом примере мы испольуем NFS чтобы смонтировать удаленную директорию с файлами. Предположим, что IP адрес backend сервера 1.1.1.1 и директория /var/www/html на backend сервере монтируется в /opt/original на сервере SEnginx.
Порядок монтирования 1.1.1.1:/var/www/html к /opt/original на сервере SEnginx здесь не описан.
Сгенерируйте hash_data согласно примеру выше. Обратите внимание, что исходный каталог должен быть /opt/original.
Измените nginx.conf:
server { listen 80; server_name localhost; web_defacement on; # Включить модуль web defacement web_defacement_original /opt/original; # Каталог web-страниц web_defacement_hash_data /usr/local/senginx/hash_data; # Хэш-файл location / { web_defacement_index index.html; # Индексный файл по умолчанию web_defacement_log on; # Включить журнал атак if ($web_defacement) { # Определить действия при дефейсменте. В данном случае - вернуть ошибку 403. # Если необходимо, сделать другие действия здесь return 403; } proxy_pass http://1.1.1.1; } location /other { web_defacement off; # Запретить модуль web defacement в этом location ... ... } }
Чтобы не использовать NFS, скопируйте вручную файлы с backend сервера на сервер SEnginx. Недостаток этого способа в необходимости синхронизации при внесении изменений в файлы на backend сервере.
Восстановление после дефейсмента
Модуль Web Defacement предоставляет переменные, показывающие, происходит ли дефейсмент. С помощью этих переменных можно определить в файле конфигурации необходимые действия при дефейсменте. В следующем примере показано, как восстановить исходные страницы, если страницы были дефейсированы. Прежде всего, вам необходимо сделать резервную копию файлов страниц. Если SEnginx работает в режиме reverse proxy, вам необходимо скопировать файлы резервных копий на сервер SEnginx. Предположим, что файлы страниц резервируются в /var/www/recover.
Следуйте приведенным выше примерам, чтобы настроить обратный прокси-сервер или веб-сервер и сгенерировать hash_data.
Измените nginx.conf:
server { listen 80; server_name localhost; web_defacement on; # Включить модуль web defacement web_defacement_original /opt/original; # Каталог web-страниц web_defacement_hash_data /usr/local/senginx/hash_data; # Хэш-файл location /recover { web_defacement off; root /var/www; } location / { web_defacement_index index.html; # Индексный файл по умолчанию web_defacement_log on; # Включить журнал атак if ($web_defacement) { # При дефейсменте сделать редирект на каталог recover. Также можно сделать восстановление файлов из резервной копии. rewrite ^(.*)$ /recover$1 last; } proxy_pass http://1.1.1.1; } location /other { web_defacement off; # Запретить модуль web defacement в этом location ... ... } }
Статистика
Используйте модуль Статистика трафика и атак для получения статистики атак веб-дефейсмента.