Bagaimana cara saya mengizinkan koneksi keluar melalui iptables?

17

Saya punya dua server. Program pada yang pertama perlu berkomunikasi dengan yang kedua pada port 2194.

Saya tahu ini tidak berfungsi, karena ketika saya melakukannya:

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
silikonpi
sumber
tetapi bekerja ketika Anda melakukan telnet localhost 2194 di server1? bagaimana dengan telnet server1spublicip 2194 dari server1?
Geraint Jones
telnet localhost 2194 di server2 berfungsi. telnet server2ipaddress 2194 di server2 juga berfungsi.
siliconpi
1
con Anda lakukan: iptables -L -n di kedua server, dan katakan padaku jika Anda mendapatkan lebih dari yang berikut (saya tidak ingin melihat aturan Anda dll ;-)) Chain INPUT (kebijakan ACCEPT) target prot opt ​​sumber tujuan tujuan Chain FORWARD ( kebijakan ACCEPT) target tujuan sumber pilihan opt Chain OUTPUT (kebijakan ACCEPT) target tujuan sumber pilihan opt
Geraint Jones
Halo! Lihat hasil edit tolong ...
siliconpi

Jawaban:

21

Untuk mengizinkan koneksi keluar dari server1 ke server2 pada TCP port 2194, gunakan ini pada server1:

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

Untuk mengizinkan koneksi masuk dari server1 ke server2 pada TCP port 2194, gunakan ini pada server2:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
Massimo
sumber
Sial - Saya melakukan yang pertama, tidak berhasil. Saya melakukan yang kedua, itu juga tidak berhasil ... Saya mungkin memiliki pengaturan yang sangat ketat di tempat ... lihat hasil edit sebelumnya
siliconpi
1
Coba gunakan "-I", bukan "-A"; ini menempatkan aturan baru di atas semua aturan lain yang mungkin sudah ada.
Massimo
Haruskah saya melakukan sesuatu yang berbeda jika aplikasi benar-benar menggunakan nama domain, daripada alamat ip secara langsung?
siliconpi
Woah ... saya bisa telnet dari prompt hanya dengan melakukan pernyataan pertama ...
siliconpi
3
Minus-I seperti pada "i" untuk orang-orang yang mungkin membacanya sebagai L
siliconpi
6

Hanya beberapa petunjuk

Apakah layanan yang Anda jalankan hanya mendengarkan di localhost? Lari

netstat -ltn

Jika Anda melihat garis seperti 0.0.0.0:2194maka Anda baik-baik saja. Jika Anda melihat 127.0.0.1:2194maka Anda hanya mendengarkan pada koneksi lokal (atau :::2194dan ::1:2194masing-masing untuk alamat IPv6, ditampilkan sebagai tcp6baris).

Apa aturan iptables saat ini?

iptables -L

Apakah kebijakan DROP / TOLAK (jika tidak seharusnya, untuk semua rantai)? Apakah ada aturan khusus untuk port yang Anda butuhkan?

Jika ini adalah masalah firewall, maka memodifikasi aturan yang menyinggung atau menambahkan aturan seperti

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

harus melakukan trik (belum diuji)

=== EDIT ===

Untuk menguji masalah jaringan alat yang bagus adalah tcpdump. Jalankan di kedua server sambil mencoba untuk terhubung dan melihat ke mana paket-paket itu pergi. misalnya pada server 1 run:

tcpdump -i eth0 -n host server2.com

dan pada server 2 jalankan:

tcpdump -i eth0 -n host server1.com

Kemudian coba sambungkan. Anda akan melihat semua paket TCP dibuang di layar, dari sumber dan tujuan. Dengan info ini Anda harus bisa menentukan di mana masalahnya.

Dan Andreatta
sumber
Hai Dan - Saya rasa server2 tidak memiliki masalah dalam menerima koneksi (saya dapat terhubung dengan PC rumah saya), tapi saya pikir server1 tidak mengizinkan koneksi keluar ...
siliconpi
iptables-OUTPUT -p tcp --port 2194 -j ACCEPT
Geraint Jones
Hai c10k, itu tidak berhasil ... Dan tryign ke telnet juga tidak bekerja
siliconpi
Menambahkan beberapa ide lain
Dan Andreatta
Hai di sini 2194 apakah nomor port saya atau nomor port IP target?
Tommy