Я не понимаю, почему мои правила 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. Попробуйте.
Этот набор правил работает для меня. Он должен работать и для вас.
С наилучшими пожеланиями!