Я запускал 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. Может тебе понравится :)