Ограничение порта Linux-сервера для VPN, развернутого на сервере с использованием Docker

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

У меня есть 2 сервера, и я развернул VPN на сервере 1 с использованием IP-адреса сервера 1 в качестве VPN IP

Затем ограничил порты серверов 1 и 2 с помощью iptables.

Это VPN, который я использовал KUY.io Konnect

Правила iptables для сервера 1 и сервера 2

iptables -A INPUT -p tcp -s ${SERVER_1_IP} --dport 8080 -j ACCEPT

iptables -A INPUT -p tcp -s 127.0.0.1 --dport 8080 -j ACCEPT

iptables -A INPUT -p tcp --dport 8080 -j DROP

Сервис, использующий порт 8080, развернут в docker с параметром network_mode host

Проблема: я могу получить доступ к порту 8080 сервера 2 через VPN, но не к серверу 1

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

Ограничение портов сервера Linux для VPN, развернутого в Docker

В данном руководстве мы рассмотрим, как ограничить доступ к портам на двух серверах, используя iptables в контексте развертывания VPN с использованием Docker. В частности, сосредоточимся на проблеме, связанной с доступом к порту 8080 на сервере 1 и сервере 2.

Описание проекта

Вы развернули VPN на сервере 1, используя IP-адрес сервера 1 в качестве VPN-адреса. Вам необходимо ограничить доступ к этим серверам через iptables, чтобы обеспечить поступление трафика только от доверенных источников.

Ваши текущие правила iptables для ограничения доступа к порту 8080 выглядят следующим образом:

iptables -A INPUT -p tcp -s ${SERVER_1_IP} --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP

Следует отметить, что сервис, использующий порт 8080, запущен в Docker с режимом сетевого интерфейса host. Это значит, что контейнер Docker использует сетевые интерфейсы хоста напрямую, что также влияет на правила iptables.

Анализ проблемы

Согласно вашему описанию, вы не можете получить доступ к порту 8080 на сервере 1 через VPN, тогда как сервер 2 доступен. Давайте рассмотрим возможные причины и решения.

  1. Проверка настроек Docker:
    С помощью режима network_mode: host ваш контейнер Docker использует сетевой стек хоста. Поэтому, iptables будет применять все правила к трафику, проходящему через хостовые интерфейсы.

  2. Проверка VPN-настроек:
    Убедитесь, что конфигурация VPN на сервере 1 позволяет подключение к порту 8080. Возможно, в настройках конфигурации VPN существуют ограничения, блокирующие доступ.

  3. Проверка текущих правил iptables:
    Выполните команду iptables -L -v -n, чтобы просмотреть, применяются ли ваши правила к фактическому трафику. Убедитесь, что правила включаются в правильном порядке и что нет других правил, которые могут перекрывать ваши настройки.

  4. Логирование:
    Добавьте логирование перед блокировкой, чтобы выяснить, какие подключения блокируются. Используйте команду:

    iptables -A INPUT -p tcp --dport 8080 -j LOG --log-prefix "Blocked 8080: " --log-level 4

    Проверьте системные журналы (/var/log/syslog или dmesg), чтобы увидеть, какие запросы были заблокированы.

  5. Проверка маршрутизации трафика:
    Убедитесь, что трафик передается через VPN-каталоги на сервере 1. Если VPN не настроен правильно, трафик может не достигать этого сервера.

Оптимизация правил iptables

Если доступ к серверу 1 по VPN не работает, возможно, потребуется пересмотреть порядок правил. Убедитесь, что ваши правила не конфликтуют. Пример более подробного подхода к настройке:

# Разрешить локальный трафик
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 8080 -j ACCEPT

# Разрешить трафик от сервера 1
iptables -A INPUT -p tcp -s ${SERVER_1_IP} --dport 8080 -j ACCEPT

# Разрешить VPN-трафик (замените ${VPN_IP} на реальный IP-адрес VPN)
iptables -A INPUT -p tcp -s ${VPN_IP} --dport 8080 -j ACCEPT

# Заблокировать все остальные заявки на порт 8080
iptables -A INPUT -p tcp --dport 8080 -j DROP

Заключение

Подводя итог, стоит отметить, что ключ к успешной настройке портов на серверах Linux для VPN, развернутого с использованием Docker, заключается в тщательной конфигурации iptables и правильной маршрутизации трафика. Настоятельно рекомендуется выполнять тестирование доступа и логирование потенциальных проблем, чтобы оптимизировать и управлять сетевыми правилами.

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

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