Nginx - HTTP-сервер и обратный прокси-сервер

os-nginx - HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения.

Полная документация по nginx, включая описание параметров, доступна по адресу http://nginx.org/ru/docs

Установка

Пройдите в раздел Система -> Прошивка -> Обновления. На вкладке Плагины нажмите на кнопку + напротив плагина os-nginx для его установки.

Настройка функционала

Настройка функционала осуществляется в разделе Службы -> Nginx.

В секции Конфигурация на закладке Основные настройки установите флаг Включает nginx и нажмите Применить.

В меню Глобальные параметры HTTP можно выставить значения количество процессов nginx, количество подключений к серверу, время активности клиента, размер хэш-таблиц.

В меню Настройки GUI можно выставить ограничение удаленного доступа к веб-интерфейсу nginx.

Балансировка нагрузки

Рассмотрим на примере настройку балансировки между двумя веб-серверами zabbix1 (192.168.1.32) и zabbix2 (192.168.1.34).

На вкладке Вышестоящий в подменю выбираем Вышестоящий сервер

Добавляем новый сервер иконкой +

../../_images/nginx-001.png

Указываем IP-адрес сервера zabbix1, порт, приоритет (сервер с большим приоритетом получит больше запросов).

Аналогично добавляем второй сервер zabbix2.

../../_images/nginx-002.png

В результате на вкладке Вышестоящий получим две записи

../../_images/nginx-003.png

В подменю Вышестоящий создаем группу из серверов zabbix1 и zabbix2.

../../_images/nginx-004.png

Данные настойки будут использоваться в последующих примерах.

На вкладке HTTP(s) выбираем подпункт Местоположение

Местоположение определяет, как Nginx будет отвечать на запросы к ресурсам сервера. В нашем случае мы хотим передать запрос ранее созданному апстриму. Если мы хотим сопоставить все, мы используем «/» без специального сопоставления.

../../_images/nginx-005.png

Данные настойки будут использоваться в последующих примерах.

На последнем этапе создаем веб-сервер на вкладке HTTP(s) подпункт Сервер HTTP Заполните поле «Имя сервера», порт HTTP и HTTPS, на которых TING будет принимать входящие запросы и выберите ранее созданное местоположение. Если вы хотите использовать поддержку TLS, вам необходимо добавить сертификат.

../../_images/nginx-006.png

На вкладке Основные настройки нажмите кнопку Применить

Для проверки заходим по адресу http:/ /имя_или_ip-адрес_ting:8080 должна открыться страница нашего веб-сервера Zabbix

В меню Службы: Nginx: Traffic Statistic можно посмотреть статистику по распределению запросов между серверами

../../_images/nginx-007.png

Настройка аутентификации

Открываем меню Учетные данные на вкладке HTTP(s), добавляем пользователя, нажав на иконку +

../../_images/nginx-008.png

Вводим логин и пароль, нажимаем Сохранить.

Далее создаем группу пользователей в меню Список пользователей на вкладке HTTP(s) Вводим имя группы и выбираем пользователя.

../../_images/nginx-009.png

В меню Местоположение на вкладке HTTP(s) редактируем созданную ранее запись

../../_images/nginx-010.png

На вкладке Основные настройки нажимаем Применить

Для проверки заходим по адресу http:/ /имя_или_ip-адрес_ting:8080 должно появиться окно аутентификации, вводим имя пользователя usr-www, пароль и попадаем на станицу нашего веб-сервера Zabbix

Список управления доступом (ACL) на основе IP

Данный параметр позволяет запретить/разрешить доступ к нашим серверам Zabbix1 и Zabbix2 по IP-адресу (сети)

В меню Службы: Nginx: Конфигурация: Доступ: IP ACLs добавляем новый ACL с помощью иконки +

../../_images/nginx-011.png

В поле Записи ACL задаем IP-адрес или сеть и выбираем разрешить (Allow) или запретить (Deny) доступ с этого IP-адреса (сети) к нашему веб-серверу.

Параметр Действие по умолчанию задает разрешен или запрещен доступ с IP-адреса (сети), которые не входят в список Записи ACL

В примере на рисунке мы разрешаем доступ с локальной сети 192.168.1.0/24, с остальных сетей доступ запрещен.

В меню Местоположение на вкладке HTTP(s) включаем ACL

../../_images/nginx-012.png

Нажимаем Сохранить и на вкладке Основные настройки нажимаем Применить

Межсетевой экран для веб-приложений (WAF)

Nginx позволяет использовать WAF (модуль NAXSI), для защиты веб-приложений. NAXSI оценивает каждый веб-запрос к серверу с помощью правил. Если оценка превышает пороговое значение, то данный запрос блокируется.

Открываем меню HTTP(s): Политика Naxsi WAF При первом запуске модуль предложит скачать основные правила из репозитория NAXSI

../../_images/nginx-013.png

Нажимаем кнопку Сохранение

В появившемся окне нажимаем кнопку Принять и скачать

../../_images/nginx-014.png

В меню Правило Naxsi WAF появится список правил, которые можно разбить по типам атак: XSS, SQL-инъекции, CSRF-атаки, Remote File Inclusion и Local File Inclusion.

../../_images/nginx-015.png

Правила группируются в политики, которые после загрузки находятся в меню Политика Naxsi WAF

../../_images/nginx-016.png

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

Примечание

Для создания собственных правил и политик настоятельно рекомендуется изучить документацию по NAXSI https://github.com/nbs-system/naxsi

В меню Местоположение на вкладке HTTP(s) включаем WAF

Параметр Режим обучения означает, что ничего блокироваться не будет, только логироваться.

Следующие два параметра определяют, при какой оценке будут блокироваться запросы с помощью универсального обнаружения.

В парметр Пользовательская политика безопасности отмечаем галочкой необходимые нам политики (на рисунке выбраны все политики)

../../_images/nginx-017.png

Нажимаем Сохранить и на вкладке Основные настройки нажимаем Применить

Для проверки добавим к запросу http:/ /имя_или_ip-адрес_ting:8080/hosts.php строку вида ?a=select&b=union&c=from

http:/ /имя_или_ip-адрес_ting:8080/hosts.php?a=select&b=union&c=from

В результате мы получим сообщение об ошибке Запрос отклонен по причинам безопасности. В случае, если включен параметр Режим обучения, то в меню Службы: Nginx: Журналы на вкладке HTTP Error Logs будет сообщение об ошибке.

Заголовки HTTP

Заголовки HTTP позволяют клиенту и серверу отправлять дополнительную информацию с HTTP запросом или ответом. Nginx может переопределять заголовки веб-сервера. Для этого необходимо в меню HTTP(S): Заголовки безопасности добавить новую политику и выбрать необходимые параметры. Более полную информацию об HTTP-заголовках можно узнать по адресу https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

Далее в меню HTTP(S): Сервер HTTP в параметре Заголовок безопасности необходимо выбрать созданный выше заголовок безопасности.

TCP и UDP проксирование

Помимо HTTP, nginx может обрабатывать TCP и UDP-трафик.

В качестве примера настроим проброс TCP по порту 3389 (RDP) через nginx к терминальному серверу в локальной сети.

В меню Службы: Nginx: Конфигурация: Вышестоящий: Вышестоящий сервер добавим новую запись с нашим терминальным сервером (192.168.1.2)

../../_images/nginx-018.png

В меню Вышестоящий добавляем новую группу. В параметре Записи серверов выбираем созданный терминальный сервер.

../../_images/nginx-019.png

В меню Поток данных: потоковые сервера создаем новую запись. Указываем Порт прослушивания и Вышестоящие серверы.

../../_images/nginx-020.png

В меню Основные настройки нажимаем Применить

Для проверки запустим со стороны WAN удаленный рабочий стол (mstsc) и в строке Компьютер укажем IP-адрес или доменное имя нашего TING. В результе мы подключимся к терминальному серверу по RDP.