правила iptables не работают

правила iptables не работают

Я не понимаю, почему мои правила iptable блокируют доступ, https://example.com:9700несмотря acceptна добавление правила

Я начинаю с того, что убираю все

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

Затем отбрасываю все, добавляю исключение для ssh и моего порта 9700

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 9700 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Служба работает после очистки и прекращает работу после второго набора правил.

Обратите внимание, что правило для SSH работает отлично. Я могу повторно подключиться к своему серверу через SSH после добавления правила

Проблема с DNS Проверенный DNS не работает по одному из ответов. Однако это не объясняет, почему я до сих пор не могу получить к нему доступ по IP-адресу:https://xx.xxx.xx.x:9700

решение1

Можете ли вы разрешить имя example.com? Если вы заблокируете доступ к любой службе имен, ваша машина не сможет получить доступ к example.com - вам придется добавить хост example.com и его IP-адрес в /etc/hosts или добавить исключение iptables для вашего DNS.

Как опубликованоздесь, исключением для DNS-поиска будет:

iptables -A INPUT -p udp --source-port 53 -j ACCEPT

РЕДАКТИРОВАТЬ:

Поскольку вы исключили проблемы DNS, я глубже изучил ваше правило, и, насколько я понимаю iptables, оно не может работать. Вы разрешаете ВХОДНОЙ трафик (на вашу машину) на порту назначения 9700 (на вашей машине!), и ВЫХОДНОЙ трафик (с вашей машины наружу) с вашего локального порта 9700.

А вам нужно ровно противоположное (или я ошибаюсь?): вы хотите, чтобы ваша машина подключалась к внешнему серверу через порт 9700, и вы хотите, чтобы этот сервер мог вам ответить.

Итак, ваши последние два правила должны быть такими:

iptables -A OUTPUT -p tcp -m tcp --dport 9700 -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

Это разрешает трафик, начинающийся с любого порта (поскольку вы не можете контролировать, какой порт протокол будет использовать для исходящего трафика) на вашем компьютере, на любую другую машину на порт 9700, и разрешает трафик с любой другой машины в мире на ваш компьютер, ЕСЛИ пакеты являются частью уже установленного соединения.

решение2

Пытаться:

iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

iptables -t filter -A INPUT -i lo -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 9700 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 9700 -m state --state ESTABLISHED -j ACCEPT

Я предполагаю, что DNS-сервер, который разрешает IP-адрес example.com, — это не тот же самый компьютер.

Также я не думаю, что это действительно проблема установить политику цепочки OUTPUT как ACCEPT. Попробуйте.

Этот набор правил работает для меня. Он должен работать и для вас.

С наилучшими пожеланиями!

Связанный контент