Назад | Перейти на главную страницу

Как разрешить исходящие соединения через iptables?

У меня два сервера. Программа на первом должна взаимодействовать со вторым через порт 2194.

Я знаю, что это не работает, потому что когда я это делаю:

root@server1 [~]# telnet myserver2.com 2194
Trying 123.123.123.98...
telnet: connect to address 123.123.123.98: Connection timed out
telnet: Unable to connect to remote host: Connection timed out

server1# iptables -L -n

Chain INPUT (policy DROP)
...
...

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
...

Chain LOCALINPUT (1 references)
target     prot opt source               destination
...

Chain LOCALOUTPUT (1 references)
target     prot opt source               destination
...

Chain LOGDROPIN (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain LOGDROPOUT (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Чтобы разрешить исходящие соединения от server1 к server2 через TCP-порт 2194, используйте это на server1:

iptables -A OUTPUT -p tcp -d <server2ip> --dport 2194 -j ACCEPT

Чтобы разрешить входящие соединения от server1 к server2 через TCP-порт 2194, используйте это на server2:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT

Всего несколько указателей

Служба, которую вы используете, слушает только на локальном хосте? Бегать

netstat -ltn

Если вы видите строку вроде 0.0.0.0:2194 тогда ты в порядке. Если ты видишь 127.0.0.1:2194 то вы слушаете только локальные соединения (или :::2194 и ::1:2194 соответственно для адресов IPv6, показанных как tcp6 линий).

Каковы текущие правила iptables?

iptables -L

Есть ли политика DROP / REJECT (если это не так, то должно быть для всех цепочек)? Есть ли какое-то конкретное правило для нужного вам порта?

Если это проблема с брандмауэром, то необходимо либо изменить нарушающее правило, либо добавить такое правило, как

iptables -A INPUT -p tcp --dport 2194 -j ACCEPT 

должен сработать (непроверено)

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

Хороший инструмент для проверки сетевых проблем - tcpdump. Запустите его на обоих серверах, пытаясь подключиться, и посмотрите, куда идут пакеты. например на сервере 1 запустите:

tcpdump -i eth0 -n host server2.com

и на сервере 2 запустите:

tcpdump -i eth0 -n host server1.com

Потом попробуйте подключиться. Вы должны увидеть все пакеты TCP, сброшенные на экран, от источника и назначения. С помощью этой информации вы сможете точно определить, в чем проблема.