IPTABLES lambat setelah menambahkan '-A INPUT -j DROP' ke daftar aturan

8

Saya baru memulai dengan iptables dan menemukan sesuatu yang tidak saya mengerti.

FYI, saya mengikuti instruksi IptablesHowTo dari wiki Ubuntu .

Tabel nat dan mangle kosong, saya hanya bekerja dengan tabel filter sekarang.

Masalah

Jika saya menambahkan aturan iptables berikut:

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

... maka saya masih memiliki akses ke mesin saya melalui ssh, namun semua perintah iptables membutuhkan waktu sekitar satu atau dua menit untuk berjalan. Ini bukan masalah DNS, -ntidak mengubahnya.

Solusinya

Jika saya menyiram tabel dan menambahkan tiga aturan ini sebagai gantinya, semuanya berfungsi dengan baik:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

Adakah yang bisa menjelaskan kepada saya, mengapa aturan pertama berdampak besar pada iptables? Saya mengerti bahwa ini memungkinkan sesi yang ditetapkan untuk menerima lalu lintas, tetapi mengapa saya membutuhkannya jika ssh terbuka?

mohrphium
sumber
Dalam beberapa kasus, sudoapakah pencarian DNS dan jika ini diblokir, perintah akan lambat. Apakah semua iptablesperintah Anda lainnya diawali sudo?
Ladadadada
Jalankan sudo strace …(dari shell root) untuk melihat apa yang diblokir.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

3

Itu melakukan pencarian DNS dan karena respon diblokir, perlu waktu untuk kehabisan waktu.

Coba lakukan iptables -n ... untuk mencegah pencarian DNS.

Conntrack memungkinkan koneksi diterima pada port ephemeral yang dibuat untuk respons terhadap permintaan yang diprakarsai oleh mesin Anda (dalam hal ini permintaan DNS). Tanpa mengizinkan koneksi ESTABLISHED atau TERKAIT, bahkan respons terhadap permintaan Anda diblokir.

EG: Jika Anda mencoba untuk pergi ke situs web, meskipun Anda akan dapat mengirim permintaan untuk situs web, respons situs web akan diblokir.

pengguna2371745
sumber
4

Dengan

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

mesin Anda akan menjatuhkan setiap paket yang masuk kecuali berasal dari port SSH. Ide yang bagus jika Anda ingin mesin itu berkomunikasi hanya melalui SSH. Kalau tidak, Anda perlu menambahkan

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

itu akan membuat Anda yakin Anda akan terhubung ke beberapa server web daripada terhubung dari seseorang.

edmz
sumber
Meskipun saran yang bagus secara umum, ini tidak menjawab pertanyaan yang sebenarnya ditanyakan.
Shadur
@ Shadur conntrack membuat perbedaan. Ini menentang drop all.
Nils
Jika Anda mengirim permintaan umum ke server web melalui mesin seperti dalam kasus ini, yang terakhir ini tidak akan menunjukkan apa-apa karena firewall tidak mengizinkan pengiriman paket ke mesin dengan koneksi yang sudah mapan.
edmz
Tetapi bahkan jika saya hanya akan mengizinkan ssh menggunakan hanya dua perintah pertama, mengapa perintah iptables membutuhkan waktu lebih lama daripada dengan aturan conntrack ... Dan apakah aturan conntrack berarti bahwa saya dapat terhubung ke server web? Bukankah itu membuat drop drop tidak berguna?
mohrphium
Tidak, itu tidak akan terjadi. Dengan -m conntrackAnda dapat memiliki "kesempatan" lain bahwa paket dapat diterima sebelum mereka akan jatuh pasti. Di mesin klien, Anda harus memiliki iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT jika ingin melihat beberapa jawaban. Di sisi server, izinkan saja koneksi masuk SSH dan lepaskan yang lainnya (jika server bertindak hanya sebagai koneksi SSH). Semoga semuanya jelas.
edmz