Apakah lebih baik untuk menetapkan -J menolak atau -J DROP di iptables?


33

Ada contoh aturan iptables di archlinux wiki:

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

Beberapa hari yang lalu teman saya bertanya mengapa ada REJECTtiga aturan terakhir. Dia mengatakan kepada saya bahwa harus ada DROPsebaliknya, dan dia menyebutkan sesuatu tentang keamanan yang lebih baik jika terjadi DROP.

Jadi, saya punya dua pertanyaan:

  1. Apa yang dilakukan ketiga aturan itu?

  2. Apakah ada bedanya ketika saya menempatkannya DROPdi sana REJECT --reject-with? Jika ya, apa bedanya?


Jawaban:


33

Apa yang dilakukan ketiga aturan itu?

Ketiga aturan itu tampaknya cukup jelas:

  1. Tolak paket UDP yang masuk dengan pesan ICMP "port unreachable"
  2. Tolak paket TCP yang masuk dengan "tcp reset"
  3. Tolak paket yang masuk (dari protokol lain) dengan pesan ICMP "protocol unreachable"

Jika Anda mencari lebih detail (tentang paket UDP / TCP, ICMP), Anda perlu menggali dokumen jaringan, dan mungkin man iptablesjuga itu.

Apakah ada bedanya ketika saya meletakkan DROP di sana Tolak --reject-with? Jika ya, bisakah seseorang menjelaskan perbedaannya kepada saya, saya akan sangat menghargainya.

Itu membuat perbedaan. Dan bertentangan dengan kepercayaan populer, DROPtidak memberikan keamanan yang lebih baik daripada REJECT. Ini merepotkan pengguna yang sah, dan secara efektif tidak ada perlindungan dari yang jahat. Posting ini menjelaskan alasannya secara rinci:

http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject

Alasan umum untuk menggunakan DROP daripada menolak adalah untuk menghindari memberikan informasi tentang port mana yang terbuka, namun, paket yang dibuang memberikan informasi yang sama persis dengan penolakan.

Dengan REJECT, Anda melakukan pemindaian dan mengkategorikan hasil menjadi "koneksi tersambung" dan "koneksi ditolak".

Dengan DROP, Anda mengkategorikan hasil menjadi "koneksi terjalin" dan "batas waktu koneksi habis".

Pemindai yang paling sepele akan menggunakan panggilan "sambungkan" sistem operasi dan akan menunggu sampai satu upaya koneksi selesai sebelum memulai yang berikutnya. Pemindai jenis ini akan sangat diperlambat dengan menjatuhkan paket. Namun, jika serangan menetapkan batas waktu 5 detik per upaya koneksi, dimungkinkan untuk memindai setiap port yang dipesan (1.1023) pada mesin hanya dalam 1,5 jam. Pemindaian selalu otomatis, dan penyerang tidak peduli bahwa hasilnya tidak langsung.

Pemindai yang lebih canggih akan mengirim paket itu sendiri daripada mengandalkan implementasi TCP sistem operasi. Pemindai seperti itu cepat, efisien dan acuh tak acuh terhadap pilihan Tolak atau DROP.

KESIMPULAN

DROP tidak menawarkan penghalang yang efektif untuk pasukan musuh tetapi dapat secara dramatis memperlambat aplikasi yang dijalankan oleh pengguna yang sah. DROP biasanya tidak digunakan.


@janos - dapatkah Anda menulis sedikit lebih banyak tentang apa yang sebenarnya terjadi ketika sebuah paket mencapai masing-masing dari ketiga aturan tersebut?
Mikhail Morfikov

3
@Kiwy - Baca tautannya dan coba sendiri. DROP tidak memberikan keamanan yang lebih baik daripada TOLAK. Ini merepotkan pengguna yang sah, dan secara efektif tidak ada perlindungan dari yang jahat. Ini karena pengguna yang sah mengalami koneksi yang lambat sambil menunggu koneksinya ke time out dan cracker hanya mengkonfigurasi alat mereka untuk tidak menunggu waktu habis. fakta bahwa koneksi lambat (karena menunggu waktu habis) menunjukkan server Anda ada di sana dan firewall.
Panther

2
Saya tidak setuju dengan kesimpulan itu. Tolak menghasilkan jawaban ICMP yang dapat dianalisis. Berdasarkan analisis ini, mesin penyerang yang baik dapat menurunkan OS yang digunakan. Jadi pada sistem di mana semua port diketahui drop mungkin lebih baik. Ini berlaku untuk server di lingkungan produksi.
Nils

1
Firewall yang hanya meneruskan port tertentu bahkan lebih baik. JATUHKAN PENOLAKAN tidak sama dengan benar-benar tidak ada layanan yang menjalankan tempat pertama. Banyak pemindai port menandai host Anda sebagai target potensial untuk pemindaian di masa depan dengan harapan akan menangkap firewall Anda jika mereka menemukan TOLAKAN atau DROPS di sana, karena keduanya dapat dideteksi dari luar. chiark.greenend.org.uk/ ~peterb
Dagelf

1
Perhatikan bahwa teks yang dikutip memiliki satu paragraf lagi, pembaruan, yang mengatakan DROP lebih baik jika Anda memiliki serangan DDoS, yang relatif jarang, tetapi ketika itu terjadi, mungkin baik untuk memilikinya ... bagaimana menurut Anda?
Alexis Wilke
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.