web-dev-qa-db-ja.com

iptablesを介した発信接続をどのように許可しますか?

2台のサーバーがあります。最初のプログラムは、ポート2194で2番目のプログラムと通信する必要があります。

私はそれが機能していないことを知っています。

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
17
siliconpi

TCPポート2194でserver1からserver2への発信接続を許可するには、server1でこれを使用します。

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

TCPポート2194でserver1からserver2への着信接続を許可するには、server2でこれを使用します。

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

いくつかのポインタ

実行しているサービスはlocalhostでのみリッスンしていますか?走る

netstat -ltn

0.0.0.0:2194のような行が表示されたら、問題ありません。 127.0.0.1:2194が表示されている場合は、ローカル接続(またはIPv6アドレスの場合は:::2194および::1:2194tcp6行として表示)でのみリッスンしています。

現在の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パケットが送信元と宛先から画面にダンプされます。この情報を使用すると、問題の場所を正確に特定できるはずです。

6
Dan Andreatta