Назад | Перейти на главную страницу

nginx как прокси для WebSocket: проверять и блокировать определенные запросы

Я запускал NodeJS как своего рода сервер веб-приложений, обслуживающий интерфейс AngularJS. Они общаются исключительно через WebSockets, используя реализацию Socket.IO SailsJS. Между внешним интерфейсом (клиентом) и серверной частью NodeJS в качестве прокси находится nginx, настроенный следующим образом:

server {
    listen 1337 ssl;
    location /socket.io/ {
       proxy_pass https://localhost:1338;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_http_version 1.1;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Все идет нормально. Теперь я хочу контролировать и защищать соединение Websocket. В частности, я хочу предотвратить XSS-атаки и исключить IP-адреса, пытающиеся грубой силой войти в мое приложение. Я новичок в этом, но после некоторых исследований я наткнулся на fail2ban и nginx-naxsi, которые могут быть именно тем, что мне нужно. Однако я понятия не имею, как заставить их работать с моей настройкой.

Это вообще возможно? Могу ли я как-то перехватить трафик, туннелируемый через веб-сокет в прокси (будучи nginx)?

naxsi и fail2ban - разные naxsi - это WAF (брандмауэр веб-приложений), это означает, что все запросы сначала проходят через naxsi, затем у вас будут установлены некоторые правила для проверки каждого запроса на случай, если клиент сделал запрос к ресурсу, который вы не используете не хотите предоставить доступ, тогда naxsi заблокирует этот запрос

fail2ban - это IDS (система обнаружения вторжений), что делает fail2ban - отслеживает ваши nginx logs (или любой журнал по этому поводу), и на основе некоторого REGEX вы можете блокировать клиентов после определенных попыток. Итак, предположим, что у вас есть атака грубой силы, когда клиент пытается достичь несуществующих URL-адресов, тогда fail2ban обнаружит, что этот клиент получил много ответов 404, затем он заблокирует IP

поэтому naxsi отклоняет вредоносные запросы, а fail2ban просто банит в случае выполнения условия

Лично у меня нет опыта работы с fail2ban или nginx-naxsi, но я знаю, что ModSecurity доступен для nginx с 2012 года. и легко обрабатывает ваши запросы. Это также открытый исходный код, поэтому его можно настроить под свои нужды.

ModSecurity включает base_rulesets и optional_rulesets с уже подготовленными и готовыми к использованию XSS- и DOS-правилами для защиты вашего сервера.

Это определенно вызывает небольшой скачок в вашей производительности (в зависимости от того, сколько правил вы используете и сколько трафика вы обрабатываете), но это действительно мощный инструмент.

Вот руководство о том, как настроить его для nginx. Может тебе понравится :)