Вопрос или проблема
У меня есть 2 сервера, и я развернул VPN на сервере 1 с использованием IP-адреса сервера 1 в качестве IP-адреса VPN.
Затем я ограничил порты сервера 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 с режимом сети host.
Проблема: я могу получить доступ к порту 8080 сервера 2 через VPN, но не к серверу 1.
Ответ или решение
Ограничение доступа к портам Linux-сервера для IP-адреса VPN
Введение
Вопрос ограничения доступа к портам серверов через настройки iptables является важным аспектом управления безопасностью в информационных технологиях. В данном случае, у вас имеется два сервера, на одном из которых развернут VPN-клиент, а на другом – сервис, работающий на порту 8080. Для обеспечения безопасности и доступа к этим сервисам необходимо правильно настроить правила iptables.
Проблема
Вы сталкиваетесь с проблемой доступа к порту 8080 на сервере 1 из-за конфигурации iptables. В то время как сервер 2 корректно принимает соединения через VPN, сервер 1 блокирует их. Давайте разберёмся, как корректно настроить правила для обоих серверов.
Текущие правила iptables
Ваши текущие правила iptables выглядят следующим образом:
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
Эти команды устанавливают следующие правила:
- Разрешить входящие TCP-запросы к порту 8080 от IP-адреса сервера 1.
- Разрешить локальные запросы к порту 8080.
- Блокировать все остальные запросы к порту 8080.
Анализ проблемы
Проблема заключается в том, что сервер 1 использует свой собственный IP-адрес, который, возможно, не совпадает с VPN-адресом или не соответствуют условиям вашего правила. В результате пакеты от VPN-клиента не проходят через ваши настройки iptables.
Решение
Для решения данной проблемы, необходимо внести следующие изменения в настройки iptables на сервере 1:
-
Добавить правило для разрешения доступа от VPN: Убедитесь, что вы разрешаете запросы от VPN-адреса. Вам нужно будет определить IP-адреса, которые выделяются вашим VPN-сервером (это можно сделать с помощью
ifconfig
илиip a
на сервере 1).iptables -A INPUT -p tcp -s ${VPN_IP} --dport 8080 -j ACCEPT
-
Проверка порядка правил: Помните, что порядок правил в iptables важен. Более общие правила должны располагаться ниже более специфичных. После добавления строк для VPN, ваши правила могут выглядеть следующим образом:
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 8080 -j ACCEPT iptables -A INPUT -p tcp -s ${VPN_IP} --dport 8080 -j ACCEPT iptables -A INPUT -p tcp -s ${SERVER_1_IP} --dport 8080 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j DROP
-
Тестирование: После внесения изменений, протестируйте доступность порта 8080 на сервере 1 через VPN. Используйте команды
curl
илиtelnet
на вашем VPN-клиенте, чтобы проверить доступ. -
Сохранение настроек: Не забудьте сохранить ваши настройки iptables, чтобы они сохранялись после перезагрузки сервера. В зависимости от вашей системы, это можно сделать следующими командами:
service iptables save # или iptables-save > /etc/iptables/rules.v4
Заключение
Корректная настройка iptables является ключевым аспектом обеспечения безопасности серверов. Описанные выше шаги помогут вам ограничить доступ к портам только для IP-адресов VPN и локальных адресов, улучшая безопасность и функциональность ваших систем. Если у вас остались вопросы или возникли трудности, рекомендуем обратиться к системным администраторам для детального анализа вашей конфигурации.