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

17

У меня есть два сервера. Программа по первому должна общаться со вторым по порту 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
siliconpi
источник
но это работает, когда вы делаете telnet localhost 2194 на server1? как насчет telnet server1spublicip 2194 с server1?
Герайнт Джонс
telnet localhost 2194 на server2 работает. telnet server2ipaddress 2194 на server2 также работает.
Силиконпи
1
вы делаете: iptables -L -n на обоих серверах и сообщите мне, если вы получаете больше, чем указано ниже (я не хочу видеть ваши правила и т. д .;-)) Цепочка INPUT (policy ACCEPT) target prot opt ​​source destination Chain FORWARD ( policy ACCEPT) целевой целевой источник источника назначения Цепной OUTPUT (policy ACCEPT) целевой целевой источник назначения
Герайнт Джонс
Здравствуйте! Смотрите изменения, пожалуйста ...
silicpi

Ответы:

21

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

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

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

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
Massimo
источник
Дерьмо - я сделал первое, не сработало. Я сделал второе, это тоже не сработало ... У меня могут быть очень ограничительные настройки ... см. Редактирование ранее
silicpi
1
Попробуйте использовать «-I» вместо «-A»; это ставит новые правила выше всех других, которые уже могут быть в силе.
Массимо
Должен ли я делать что-то другое, если приложение на самом деле использует доменное имя, а не IP-адрес напрямую?
Силиконпи
Вау ... я могу телнетить из приглашения, просто сделав первое заявление ...
silicpi
3
Его минус-я, как в «я» для людей, которые могли бы прочитать это как L
silicpi
6

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

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

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-пакеты, выгруженные на экран, от источника и пункта назначения. С помощью этой информации вы сможете определить, в чем проблема.

Дэн Андреатта
источник
Привет, Дэн, я не думаю, что у server2 есть какие-либо проблемы с принятием соединения (я могу подключиться к нему через домашний компьютер), но я думаю, что server1 не разрешает исходящее соединение ...
silicpi
iptables -A OUTPUT -p tcp --dport 2194 -j ПРИНЯТЬ
Герайнт Джонс
Привет c10k, это не сработало ... И tryign to telnet тоже не сработало
silicpi
Добавлено несколько других идей
Дэн Андриатта,
Привет здесь 2194 мой номер порта или номер целевого IP-порта?
Томми,