iptables блокирует все исходящие соединения

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

iptables -A INPUT -p tcp --dport 43210 -j ACCEPT
iptables -A INPUT -j DROP

И вроде все заработало: подключение (проверил с телефона) работает только по порту 43210. Но вот проблема заключается в том, что после этого блокируются все исходящие соединения на самом ноутбуке (я даже сам к себе не могу подключиться, что уж говорить о разных сайтах, серверах, и т.п.)

Почему это происходит, и как это исправить?

Вот как выглядит таблица после этих команд:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:43210
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Ответы (2 шт):

Автор решения: Gor

Ну можно попробовать открыть порты на исходящий трафик. sudo iptables -P OUTPUT ACCEPT

→ Ссылка
Автор решения: Alexander Prokoshev

Ещё надо первым правилом в INPUT добавить приём пакетов для установленных соединений:

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Кроме того, добавьте разрешение на работу через loopback:

iptables -I INPUT -i lo -j ACCEPT

Если со вторым правилом всё очевидно, то с первым, видимо, требуются пояснения.

Сейчас, если вы пытаетесь открыть исходящее соединение, происходит следующее (рассмотрим на примере TCP):

  1. Вы посылаете TCP-пакет с флагом SYN например на порт 80 адреса 123.45.67.89. Вы его посылаете со своего адреса и с какого-то случайным образом выбранного системой порта из диапазона 1024-65534.
  2. Удалённый хост вам отвечает пакетом с флагами SYN и ACK на ваш адрес и порт, с которого вы открывали соединение.
  3. Этот пакет выбрасывается вашим фаероволлом, потому что он с вероятностью "дофига" идёт НЕ на ваш порт 43210.
  4. Попытка исходящего соединения закрывается по тайм-ауту после пары повторов попытки.
→ Ссылка