Подключение защищаемого веб-приложения к WAF
Цель
Настроить проксирование HTTP и HTTPS трафика к защищаемому приложению через WAF.
Предпосылки
WAF, установленный в режиме обратного прокси;
Защищаемое веб-приложение, доступное с WAF. Везде ниже по тексту app_ip – его адрес, app_port - порт. Ниже предлагается использовать уязвимое приложение dvwa на том же сервере, где установлен WAF. Вместо него можно использовать любое другое веб-приложение;
SSH-клиент (например, Putty).
Результат
Успешным выполнением данной работы является проксирование транзакций к защищаемому приложению через WAF.
Подготовка защищаемого веб-приложения
Установка веб-приложения DVWA на сервер WAF.
sudo docker pull vulnerables/web-dvwa
Запуск веб-приложения на порту 8080.
sudo docker run --rm -d -p 8080:80 --name dvwa vulnerables/web-dvwa
Для приложения DVWA:
app_ip = 127.0.0.1
app_port = 8080 login: admin password: password
Для доступа к веб-приложению по имени dvwa необходимо добавить в файле hosts (клиентской машины) строчку для локального разрешения доменного имени: IP_WAF dvwa
Файл hosts находится по следующим путям:
На Unix системах - /etc/hosts
На Windows системах - C:\Windows\System32\drivers\etc\hosts
Порядок действий
Общие настройки (опционально)
Увеличить ограничение на размер загружаемых файлов в /etc/ibatyr-nginx/user/http.conf.
client_max_body_size 1024m;
Добавить адрес(а) вышестоящего HTTP-прокси сервера в доверенные адреса в /etc/ibatyr-nginx/user/http.conf.
set_real_ip_from proxy_ip_address;
Отключить LRB-CACHE в /etc/ibatyr-nginx/user/server.conf.
set $LRB_CACHE 0;
Проксирование HTTP трафика.
Подключиться по ssh (putty) к серверу WAF.
Убедиться, что с сервера WAF есть сетевой доступ к защищаемому приложению.
curl -vk http://app_ip:app_port
Удалить созданный по умолчанию конфигурационный файл ibatyr-nginx.
sudo rm /etc/ibatyr-nginx/sites-enabled/default
Открыть на изменение конфигурационный файл ibatyr-nginx в любом текстовом редакторе с правами суперпользователя. Например,
sudo vim /etc/ibatyr-nginx/sites-enabled/dvwa
Ввести настройки проксирования HTTP трафика до бекенда защищаемого приложения. Пример содержимого файла конфигурации:
server { include static/server.conf; listen 80; server_name dvwa; # ibatyr WAF configuration. set $BACKEND http://app_ip:app_port; location / { include static/waf.conf; } }
После внесения изменений необходимо проверить корректность внесенных изменений и, убедившись, что ошибок нет, применить конфигурацию ibatyr-nginx.
sudo ibatyr-nginx test sudo ibatyr-nginx reload
Если нет ошибок, после загрузки новой конфигурации должен быть открыт порт, на котором сервис ibatyr-nginx слушает входящие соединения от клиентов веб-приложения. На рисунке 1 представлен пример вывода команды ss -4lnt.
Рисунок 1 - Вывод команды
Для проверки проделанных настроек можно выполнить запрос к WAF при помощи браузера либо консольного веб-клиента curl. Пример запроса, выполненного в командной строке сервера WAF.
curl -H"host:dvwa" -v localhostДля диагностики неполадок см. ПРИЛОЖЕНИЕ 1. Рекомендации по диагностике неполадок сетевых подключений.
Терминирование HTTPS трафика (опционально)
Создать папку для хранения сертификатов и ключей.
sudo mkdir /etc/ibatyr-nginx/ssl
Сгенерировать или получить от владельца приложения ключ и сертификат для терминирования SSL. Пример команды для генерации ключа и самоподписанного сертификата.
openssl req -x509 -newkey rsa:4096 -keyout key.pem -nodes -out cert.pem -days 365
На рисунке 2 представлен вывод данной команды.
Рисунок 2 - Вывод команды
Поместить ключ и сертификат в созданную папку.
sudo mv cert.pem key.pem /etc/ibatyr-nginx/sslСоздать еще один файл конфигурации ibatyr-nginx.
sudo vim /etc/ibatyr-nginx/sites-enabled/dvwa_sslПример содержимого файла конфигурации:
server { include static/server.conf; listen 443 ssl; ssl_certificate /etc/ibatyr-nginx/ssl/cert.pem; ssl_certificate_key /etc/ibatyr-nginx/ssl/key.pem; server_name dvwa; # iBatyr WAF configuration. set $BACKEND http://app_ip:app_port; location / { include static/waf.conf; } }Применить конфигурацию.
sudo systemctl reload ibatyr-nginx.serviceПроверить доступность приложения через WAF.
curl -k -v -H"host: dvwa" https://localhost:443Для диагностики неполадок см. ПРИЛОЖЕНИЕ 1. Рекомендации по диагностике неполадок сетевых подключений.
ПРИЛОЖЕНИЕ 1. Рекомендации по диагностике неполадок сетевых подключений
Если приложение через WAF недоступно, рекомендуется проверить корректность следующих аспектов:
Сетевая адресация.
ip a
Разрешение имен.
host example.com
Маршрутизация.
ip ro
Доступность приложения напрямую.
curl -v http://example.com
curl -k -v https://example.com
Состояние сервиса ibatyr-nginx.
sudo systemctl status ibatyr-nginx.service
Перечень открытых портов.
ss -lnt
sudo ss -4lntp
Наличие ошибок в журнале сервиса ibatyr-nginx.
sudo journalctl -xefu ibatyr-nginx
Наличие ошибок в конфигурации ibatyr-nginx.
sudo ibatyr-nginx test
Ссылка на описание того, как nginx разбирает запросы (если есть проблемы с указанием имени веб-приложения в конфигурации nginx).

