Pertanyaan REJECT vs DROP saat menggunakan iptables


Apakah ada alasan mengapa saya ingin memilikinya

iptables -A INPUT -j REJECT

dari pada

iptables -A INPUT -j DROP

80
2017-07-04 09:49






Jawaban:


Sebagai aturan umum, gunakan REJECT ketika Anda ingin ujung yang lain mengetahui port tersebut tidak dapat dijangkau 'gunakan DROP untuk koneksi ke host yang Anda tidak ingin orang-orang melihatnya.

Biasanya, semua aturan untuk koneksi di dalam LAN Anda harus menggunakan REJECT. Untuk Internet, Dengan pengecualian ident pada server tertentu, koneksi dari Internet biasanya DIKEMBALIKAN.

Menggunakan DROP membuat koneksi tampak menjadi alamat IP yang tidak diduduki. Pemindai dapat memilih untuk tidak melanjutkan pemindaian alamat yang tampak kosong. Mengingat NAT dapat digunakan untuk mengarahkan koneksi pada firewall, keberadaan layanan terkenal tidak selalu menunjukkan keberadaan server pada alamat.

Ident harus diteruskan atau ditolak pada setiap alamat yang menyediakan layanan SMTP. Namun, penggunaan pencarian ID oleh SMTP berfungsi tidak lagi digunakan. Ada protokol obrolan yang juga bergantung pada layanan ident yang berfungsi.

EDIT: Saat menggunakan aturan DROP:  - Paket UDP akan dijatuhkan dan perilaku akan sama dengan menghubungkan ke port tanpa porting tanpa layanan.  - Paket TCP akan mengembalikan ACK / RST yang merupakan respons yang sama dengan port terbuka tanpa layanan di atasnya akan merespons. Beberapa router akan merespons dengan dan ACK / RST atas nama server yang sedang down.

Saat menggunakan aturan REJECT, paket ICMP dikirim untuk menunjukkan bahwa port tidak tersedia.


72
2017-07-04 16:40



Ini tidak benar. Bahkan ketika aturan mengatakan "DROP" sistem akan tetap membalas paket yang masuk dengan TCP SYN / ACK seolah-olah terbuka. Untuk benar-benar menjatuhkan paket, sistem harus membalas dengan TCP RST / ACK - yang tidak ada aturan firewall. Dengan demikian, pengaturan firewall terbaik adalah di mana hanya port yang dipilih yang diteruskan. Aturan DROP Anda akan mengiklankan firewall Anda dan port-scanner akan tahu bahwa Anda firewall sesuatu dan terus memalu Anda dengan harapan menangkap firewall Anda. - Dagelf
@Dagelf Lihat hasil edit saya. RST / ACK tidak menunjukkan kepada pemindai bahwa Anda melakukan firewall apa pun. Sementara beberapa peretas mungkin terus menyelidiki setelah respons ini, itu harus didasarkan pada mengetahui layanan Anda bukan respons firewall. Itu pasti menurunkan jumlah dan lamanya pemindaian yang saya alami. - BillThor
Maksud saya adalah, itu dapat dideteksi dari luar apakah Anda firewall sesuatu atau tidak karena fakta bahwa tumpukan TCP Anda berperilaku berbeda ketika Anda DROP daripada ketika Anda tidak memiliki layanan yang berjalan di tempat pertama! - Dagelf
Tidak mengubah fakta bahwa ada botnet memanfaatkan perbedaan dan memantau port Anda sebagai konsekuensinya. - Dagelf
@Dagelf, dari mana Anda mendapatkan informasi bahwa DROP mengirim tanggapan? Itu berita besar dan bertentangan dengan semua yang telah saya amati dan diceritakan. Apakah Anda memiliki tautan ke dokumentasi yang menggambarkan perilaku ini? - Score_Under


Perbedaannya adalah bahwa target REJECT mengirim respons penolakan ke sumber, sedangkan target DROP tidak mengirim apa pun.

Ini bisa berguna misalnya untuk layanan ident. Jika Anda menggunakan REJECT, maka klien tidak perlu menunggu batas waktu.

Lebih lanjut tentang ini: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html


25
2017-07-04 09:59



Target DROP tidak mengirim apa pun. Periksa komentar saya tentang jawaban yang diterima dan pergilah riset sendiri topiknya jika Anda tertarik dengan detailnya! - Dagelf


Biasanya, Anda mau mengabaikan probe dari penyerang ke port tertentu, yang berarti Anda tidak ingin mengirim kembali 'koneksi ditolak'. 'Koneksi ditolak' berarti: 'ada server di sini', dan mungkin memberikan lebih banyak informasi, sedangkan menjatuhkan paket tidak memberikan petunjuk tentang versi perangkat lunak, kemungkinan kerentanan atau bahkan fakta bahwa server sedang mendengarkan IP Anda.

Di atas adalah salah satu alasan utama untuk menggunakan DROP bukan REJECT.


8
2017-07-04 13:09



Tanpa aturan iptables, default port tertutup untuk REJECT. Jika Anda DROP setiap port, itu adalah alternatif yang baik (tuan rumah Anda muncul ke bawah) tetapi jika Anda DROP hanya port tertentu Anda benar-benar memberi mereka lebih banyak informasi daripada REJECT. Jika seseorang menggunakan probe selimut seperti nmap, port tertentu yang menjatuhkan paket akan muncul sebagai "difilter", yang berarti mereka tahu Anda memiliki layanan di sana yang Anda sembunyikan. - Raptor007


Saya melihat banyak jawaban yang saling bertentangan di sini dan mengingat ini adalah artikel pertama di Google dengan kata kunci yang tepat; di sini adalah penjelasan yang benar.
Itu mudah:

DROP tidak melakukan apa-apa dengan paket. Itu tidak diteruskan ke host, itu tidak bisa dijawab. Halaman manual dari IPtable mengatakan itu menjatuhkan paket di lantai, itu tidak ada hubungannya dengan paket.

REJECT berbeda dengan DROP yang mengirim paket kembali, tetapi jawabannya adalah seolah-olah server terletak di IP, tetapi tidak memiliki port dalam keadaan mendengarkan. IPtable akan mengirim RST / ACK dalam kasus TCP atau dengan UDP port tujuan ICMP yang tidak dapat dijangkau.


6
2018-01-11 12:29



+1 dari saya, tetapi jawabannya tidak benar-benar tidak setuju. Mereka semua setuju, sejauh yang saya bisa lihat, kecuali Dagelf - siapa yang salah. - MadHatter
Oke, inilah sedikit trik untuk Anda kemudian: lakukan "nmap localhost". Sekarang pilih port yang tidak "terbuka" ... dan tambahkan aturan yang "tidak melakukan apa-apa", misalnya: "iptables -I INPUT -p tcp --dport 888 -j DROP". Sekarang "nmap localhost" lagi. Apa yang kamu lihat? ... - Dagelf


Jika Anda mencoba menyembunyikan keberadaan mesin Anda sepenuhnya, -j DROPsesuai. Misalnya, Anda dapat menggunakan ini untuk menerapkan daftar hitam.

Jika Anda mencoba menyembunyikan fakta bahwa port terbuka, Anda harus meniru perilaku yang akan terjadi jika port tidak terbuka:

  • TCP: -p tcp -j REJECT --reject-with tcp-reset
  • UDP: -p udp -j REJECT --reject-with icmp-port-unreachable

Jika pemindai port melihat bahwa beberapa port menjatuhkan paket sementara sebagian besar menolaknya, dapat diasumsikan bahwa paket yang jatuh berada di port yang terbuka namun tersembunyi.


3
2017-08-13 01:29



Bagaimana jika Anda membuka beberapa port (mis. 22, 25, 53, 80, 443), lalu DROP hal lainnya? Sekarang apakah saya memiliki MySQL, PostgreSQL, SQLite, atau Cassandra berjalan ... pemindai tidak bisa mengatakan, bukan? - Alexis Wilke
@AlexisWilke Dalam hal ini, satu-satunya informasi tambahan yang Anda berikan kepada pemindai port adalah bahwa Anda memiliki semacam firewall di tempat dengan kebijakan DROP default. - Raptor007


Meskipun banyak jawaban yang benar, hanya dua sen saya:

Berikut ini adalah PoC singkat FW.IDS-DROP-vs-REJECT dari saya untuk subjek berkaitan dengan aturan untuk ban-sistem (firewall, IDS, dll).

Segera:

  • DROP dapat digunakan untuk penyusup residif, jika melarang semua port (sehingga terlihat seperti server turun di sisi penyusup)
  • REJECT --reject-with tcp-reset adalah pilihan terbaik untuk pelarangan multi-port, karena tampaknya berperilaku sebagai port tertutup nyata
  • jika beberapa port menjawab (penyusup tahu bahwa tuan rumah masih hidup), DROP dan REJECT (tanpa tcp-reset) akan memberi penyusup sebuah "tanda" bahwa ada sesuatu yang menghalangi (sehingga bisa menstimulasi dia untuk melanjutkan "serangan" dengan harapan untuk menyediakan data yang diperlukan di beberapa titik)

0
2017-09-20 16:49





Ya, menggunakan DROP tidak ada gunanya. Gunakan REJECT.

Bahkan ketika aturan mengatakan "DROP" sistem masih membalas ke SYN yang masuk dengan TCP RST / ACK - yang merupakan perilaku default untuk port tanpa layanan yang berjalan. (tcpdump et al tidak mencatat ini.)

Jika layanan sedang berjalan, SYN bertemu dengan TCP SYN / ACK.

Karena DROP tidak merespons seperti biasa dengan TCP SYN / ACK, tetapi dengan RST / ACK sebagai gantinya, aturan DROP Anda akan mengiklankan firewall dan port-scanner Anda akan mengetahui bahwa Anda firewall sesuatu dan mungkin terus memalu Anda dengan harapan menangkap firewall Anda.

Ini sekarang nmap dapat melaporkan "disaring" bukannya "tertutup" misalnya:

$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http
1111/tcp filtered lmsocialserver

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -D INPUT 1

Dengan demikian, satu-satunya pengaturan firewall yang "tidak terlihat" adalah di mana perangkat khusus duduk di antara perangkat Anda dan hanya secara selektif memforward port.

Jika Anda benar-benar ingin mengacaukan pemindai dasar, Anda dapat menggunakan koneksi tpp TARPIT, yang mengatur TCP Window ke 0 sehingga tidak ada data yang dapat ditransfer setelah koneksi dibuka, mengabaikan permintaan untuk menutup koneksi, yang berarti pemindai harus menunggu agar batas waktu koneksi terjadi, jika ingin memastikan. Tapi itu sepele bagi penyerang untuk mendeteksi ini dan membuat waktunya sangat singkat.

Semua hal dipertimbangkan, Anda mungkin lebih baik menggunakan REJECT - atau menempatkan perangkat port forwarding khusus antara server Anda dan internet.

Atau hanya menjalankan layanan pada mesin yang menghadap internet Anda yang tidak memerlukan firewall.

Umumnya REJECT adalah yang terbaik untuk server web, karena layanan apa pun yang mencoba mengaksesnya (mungkin lebih sering daripada tidak, Anda) akan segera mendapatkan respons dan pengguna atau layanan lain tidak akan terus menunggu jika ada gangguan jaringan.


-3



Jawaban ini salah. Hal ini dapat dengan mudah ditunjukkan dengan tcpdump bahwa aturan DROP akan menghasilkan sistem yang tidak mengirimkan jawaban APA - seperti yang diharapkan. Dan pernyataan Anda "Untuk benar-benar menjatuhkan paket, sistem perlu membalas dengan TCP RST / ACK" tidak masuk akal karena membalas apa pun jelas bukan "benar-benar menjatuhkan paket". Jika Anda "benar-benar menjatuhkan" paket, Anda tidak menjawab dan ini menunjukkan efek aturan DROP. - Juliane Holzt
Bisakah Anda memberikan sumber untuk tuduhan itu DROP akan menerbitkan a SYN/ACK? Saya tidak pernah melihat ini di mesin saya. - motobói
@Dagelf Artikel Anda mengatakan "DROP (alias DENY, BLACKHOLE) Larang paket lewat. Kirim tidak ada tanggapan." - JeanT
Itu tidak mengirim respons normal, tetapi mengirimkan satu seperti yang dijelaskan, terlepas. - Dagelf
Dokumen yang Anda tautkan mengatakan "DROP ... Kirim tidak ada tanggapan", dan tidak, sejauh yang saya bisa lihat, mendukung klaim Anda itu DROP mengembalikan a SYN/ACK. Saya juga tidak pernah melihat perilaku ini di bawah versi apa pun iptables. Jika Anda memiliki sumber yang mendukung klaim Anda, akan sangat berguna untuk melihatnya; tentu saja, dump paket yang baru saja saya lakukan tidak mendukung klaim Anda. - MadHatter