Вопрос или проблема
У меня есть 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 доступен. Давайте рассмотрим возможные причины и решения.
-
Проверка настроек Docker:
С помощью режимаnetwork_mode: host
ваш контейнер Docker использует сетевой стек хоста. Поэтому, iptables будет применять все правила к трафику, проходящему через хостовые интерфейсы. -
Проверка VPN-настроек:
Убедитесь, что конфигурация VPN на сервере 1 позволяет подключение к порту 8080. Возможно, в настройках конфигурации VPN существуют ограничения, блокирующие доступ. -
Проверка текущих правил iptables:
Выполните командуiptables -L -v -n
, чтобы просмотреть, применяются ли ваши правила к фактическому трафику. Убедитесь, что правила включаются в правильном порядке и что нет других правил, которые могут перекрывать ваши настройки. -
Логирование:
Добавьте логирование перед блокировкой, чтобы выяснить, какие подключения блокируются. Используйте команду:iptables -A INPUT -p tcp --dport 8080 -j LOG --log-prefix "Blocked 8080: " --log-level 4
Проверьте системные журналы (
/var/log/syslog
илиdmesg
), чтобы увидеть, какие запросы были заблокированы. -
Проверка маршрутизации трафика:
Убедитесь, что трафик передается через 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 и правильной маршрутизации трафика. Настоятельно рекомендуется выполнять тестирование доступа и логирование потенциальных проблем, чтобы оптимизировать и управлять сетевыми правилами.