Конфигурация UFW для балансировщиков нагрузки с плавающим IP

Вопрос или проблема

У меня есть приложение, которое подключено к HAProxy, который, в свою очередь, подключен к кластеру из 3 SQL серверов. Я открыл брандмауэр UFW на сервере HAProxy, чтобы разрешить трафик с частного IP адреса сервера приложения на порт 80

sudo ufw allow from 10.0.0.0/24 to any port 80 comment 'http backend'

и с частного IP адреса серверов БД на порт 3306.

sudo ufw allow from 10.0.0.0/24 to any port 3306 comment 'mysql'

Все в порядке.

Я добавляю плавающий IP перед HAProxy, а также второй сервер HAProxy, чтобы обеспечить резервирование для балансировщиков нагрузки. Поскольку плавающий IP – это публичный IP адрес, единственный способ, которым сервер приложения может успешно общаться с серверами БД, заключается в том, чтобы разрешить трафик с публичного IP адреса сервера приложения на порт 3306.

sudo ufw allow from <Public IP> to any port 3306 comment 'mysql'

Без открытия публичного IP сервер приложения не может общаться с сервером БД.

Новое сетевое условие требует от меня открытого порта для публичного IP адреса (сервера БД), что немного беспокоит меня, потому что я не предпочитаю открывать публичный IP адрес, если это не необходимо, и мне кажется, что это менее безопасная конфигурация по сравнению с предыдущей, открывающая потенциальное окно для атаки.

Вопрос для опытного сетевого администратора здесь: есть ли более безопасный способ разрешить общение между серверами приложения и БД? Или я слишком переживаю?

Спасибо.

Ответ или решение

Конфигурация UFW для балансировщиков нагрузки с плавающим IP

Ваша ситуация с HAProxy и кластером SQL-серверов требует особого внимания к безопасности при настройке брандмауэра UFW. Давайте рассмотрим, как можно обеспечить безопасную конфигурацию для вашего окружения, подключая плавающий IP и второй сервер HAProxy для резервирования, не открывая лишние порты.

  1. Понимание текущей конфигурации: Ваша текущая настройка UFW позволяет передавать трафик от приложения на HAProxy и от HAProxy к SQL-серверам через внутренние IP-адреса. Это создание безопасного канала для обмена данными. Задача усложняется с внедрением плавающего IP, который является публичным и может повысить риск атаки.

  2. Проблема безопасности: Вы правильно отметили, что открытие порта 3306 для публичного IP-адреса вашего приложения создает потенциальную уязвимость. Однако существует несколько альтернативных подходов, которые вы можете рассмотреть для обеспечения безопасной связи между вашим приложением и SQL-серверами.

  3. Использование VPN: Значительно повысить безопасность соединения можно с помощью Virtual Private Network (VPN). Настройка VPN позволит вашему приложению безопасно соединяться с внутренней сетью, исключая необходимость в открытии публичных портов. Установив VPN-соединение, приложение будет обращаться к SQL-серверам так, как если бы они находились в одной локальной сети.

  4. Настройка SSH-туннелирования: Если VPN не является вариантом, рассмотрите возможность настройки SSH-туннелирования. Это потребует от вас подключения к серверу через SSH и перенаправления локального порта на порт 3306 вашего SQL-сервера. Пример команды:

    ssh -L 3306:localhost:3306 user@<Private IP of DB Server>

    Таким образом, ваше локальное обращение к порту 3306 будет безопасно перенаправляться на SQL-сервер.

  5. Сетевые политики и ограничения: Если вы обязаны использовать публичный IP-адрес, рекомендуется ограничить доступ к 3306 не только по IP-адресу приложения, но и добавить дополнительные меры безопасности. Например, вы можете использовать приложения, такие как Fail2Ban, чтобы заблокировать IP-адреса, которые совершают много неудачных попыток входа.

  6. Конфигурация UFW для наиболее безопасного доступа: Для того чтобы выставить наиболее безопасные правила в UFW, вы можете сделать следующее:

    • Закройте все ненужные порты
    • Позволяйте доступ только от конкретных IP-адресов
    • Проверяйте логи на предмет подозрительной активности

Вот пример конфигурации:

sudo ufw allow from 10.0.0.0/24 to any port 80 comment 'http backend'
sudo ufw allow from 10.0.0.0/24 to any port 3306 comment 'mysql'
sudo ufw allow from <Public IP> to any port 3306 comment 'mysql from app server'
sudo ufw deny from any to any port 3306 comment 'block all other mysql traffic'
  1. Оценка угроз и аудит: Регулярно оценивайте угрозы, проводите аудит безопасности. Существует множество инструментов, которые могут помочь в этой задаче — от встроенных средств мониторинга до сторонних приложений, предоставляющих отчеты и рекомендации по улучшению безопасности.

В заключение, ваша бдительность в отношении безопасности в сетевых конфигурациях является необходимым условием. Рассматривая варианты VPN, SSH-туннелирования и ужесточения сетевых политик, вы можете не только сохранить доступность, но и значительно увеличить уровень безопасности вашего приложения и базы данных.

Оцените материал
Добавить комментарий

Капча загружается...