Mengapa tidak memblokir ICMP?

53

Saya pikir saya hampir memiliki pengaturan iptables saya selesai pada sistem CentOS 5.3 saya. Ini skrip saya ...

# Establish a clean slate
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F # Flush all rules
iptables -X # Delete all chains

# Disable routing. Drop packets if they reach the end of the chain.
iptables -P FORWARD DROP

# Drop all packets with a bad state
iptables -A INPUT -m state --state INVALID -j DROP
# Accept any packets that have something to do with ones we've sent on outbound
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept any packets coming or going on localhost (this can be very important)
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp -j ACCEPT

# Allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow httpd
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Allow SSL
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Block all other traffic 
iptables -A INPUT -j DROP

Untuk konteks, mesin ini adalah host aplikasi Web Virtual Private Server.

Dalam pertanyaan sebelumnya , Lee B mengatakan bahwa saya harus "mengunci ICMP sedikit lagi." Mengapa tidak diblokir saja? Apa yang akan terjadi jika saya melakukan itu (hal buruk apa yang akan terjadi)?

Jika saya tidak perlu memblokir ICMP, bagaimana saya bisa menguncinya lebih banyak?

Agvorth
sumber
4
iptables -A INPUT -j DROP <salah (pendapat) Anda harus mengatur kebijakan menjadi iptables -P INPUT DROP yang pada dasarnya sama dengan menetapkan default. MENYANGKAL OLEH DEFAULT.
xenoterracide
2
Cari tahu mengapa memblok icmp adalah ide buruk: security.stackexchange.com/a/22713/485
Rory Alsop

Jawaban:

117

ICMP adalah cara, cara lebih dari "traceroute" dan "ping." Ini digunakan untuk umpan balik ketika Anda menjalankan server DNS (port unreachable) yang, dalam server DNS modern, sebenarnya dapat membantu memilih mesin yang berbeda untuk meminta lebih cepat.

ICMP juga, seperti yang disebutkan di atas, digunakan untuk jalur penemuan MTU. Kemungkinannya adalah OS Anda menetapkan "DF" (jangan fragmen) pada paket TCP yang dikirim. Diharapkan untuk mendapatkan paket ICMP "diperlukan fragmentasi" kembali jika sesuatu di sepanjang jalur gagal menangani ukuran paket tersebut. Jika Anda memblokir semua ICMP, mesin Anda harus menggunakan mekanisme fallback lainnya, yang pada dasarnya menggunakan batas waktu untuk mendeteksi "lubang hitam" PMTU dan tidak akan pernah mengoptimalkan dengan benar.

Selain itu, Anda harus bertanya pada diri sendiri mengapa Anda ingin memblokir ICMP. Apa yang khusus Anda coba cegah di sini? Cukup jelas Anda tidak mengerti untuk apa ICMP digunakan, yang agak umum. Saya akan sangat berhati-hati dalam memblokir sesuatu yang Anda tidak sepenuhnya mengerti.

Untuk membuatnya lebih sulit untuk belajar tentang ini, banyak buku firewall umum mengatakan "blok ICMP" - jelas penulis mereka tidak pernah membaca RFC atau harus menyelesaikan masalah seputar saran tersebut. Saran yang buruk untuk memblokir semua ICMP.

Sekarang, membatasi tingkat itu juga bisa menyakitkan. Jika mesin Anda sibuk, atau bahkan jika tidak, Anda bisa mendapatkan jumlah lalu lintas ICMP yang baik. Server web saya mungkin mendapat sekitar 10-100 paket ICMP per menit, yang sebagian besar adalah penemuan PMTU. Bahkan jika seseorang memilih untuk menyerang server saya dengan paket ICMP dari beberapa jenis, itu benar-benar bukan masalah besar. Jika mesin Anda menerima bahkan satu koneksi TCP (ssh, http, mail, dll) kemungkinan itu adalah vektor serangan yang lebih besar daripada ICMP yang salah paham.

Michael Graff
sumber
4
Tidak bisa mengatakannya lebih baik. +1
Massimo
9
Ada satu jenis ICMP yang bisa merusak redirectjenisnya. Itulah satu - satunya tipe ICMP yang harus Anda pertimbangkan untuk diblokir.
Hubert Kario
2
@Hubert akan sangat membantu jika Anda bisa link ke saran lebih lanjut tentang menghalangi redirect. Saya mengerti sekarang bahwa saya harus mempertimbangkannya, tetapi saya tidak lebih baik - masih tidak dapat memutuskan satu atau lain cara :) Apakah ini risiko atau tidak?
RomanSt
Pesan pengalihan ICMP memberitahu host (router tidak boleh menerimanya) bahwa subnet atau host ini tersedia di gateway yang berbeda (biasanya oleh router yang lebih cepat). Setidaknya itulah yang dikatakan RFC1122.
Hubert Kario
2
Saya percaya pengalihan diabaikan secara default di linux. Tapi ya, lebih baik menyaring yang itu.
Fox
26

ICMP digunakan untuk berbagai fungsi diagnostik (mis. Ping, traceroute) dan kontrol jaringan (mis. Penemuan PMTU). Pemblokiran ICMP yang membabi buta menyebabkan orang lain semua jenis mulas, dan kecuali Anda tahu persis apa yang Anda lakukan, Anda harus membiarkannya sendirian.

womble
sumber
14

Saya tidak pernah mengerti mengapa orang menggunakan ICMP, seperti yang dikatakan di atas hanya menyebabkan sakit kepala untuk diri sendiri dan orang lain. Anda dapat menentukan apakah sebuah host cukup mudah dan selama itu cukup terbatas karena tidak dapat digunakan sebagai DOS maka saya belum pernah mendengar alasan kuat untuk memblokirnya. (Jika seseorang dapat mengajukan alasan, silakan kirim)

Antitribu
sumber
5
Itu bagian dari kultus keamanan informasi. Orang-orang keamanan merasa bahwa mereka tidak perlu membenarkan hal-hal, karena manusia biasa tidak mungkin memahami implikasi keamanan. Di sisi lain, sakit kepala admin Jaringan & Sistem dapat dikaitkan dengan kemalasan biasa. Setelah semua, jika admin tahu apa yang sedang terjadi, hal-hal tidak akan pernah istirahat ...
Duffbeer703
Rasanya aneh bagi saya untuk mematikan alat diagnostik pada dasarnya demi itu; karena informasi yang mungkin diminati oleh penyerang kemungkinan diperoleh dengan anggapan Anda memiliki layanan lain yang berjalan di mesin. Kanan Anda; sepertinya sangat "kultus" y, jangan tanya lakukan saja.
Antitribu
6
Saya tidak pernah mengerti mengapa penulis buku firewall sepertinya benar-benar ketinggalan bahwa ICMP jauh lebih dari sekadar "ping" dan "traceroute", namun buku-buku dan blog-blog dan BAGAIMANA semuanya mengatakan "blokir ICMP."
Michael Graff
1
level dan level ini, jawaban Anda benar terpilih, dimasukkan dengan baik. Sebagian besar saya tahu ketika itu diblokir Anda tidak pernah bisa mengatakan apa yang salah dengan hal-hal yang terputus-putus, terutama ketika ada beberapa blok ICMP di sepanjang jalan.
Antitribu
8

Anda bisa mencoba membatasi icmp dengan cara itu tidak dapat digunakan sebagai serangan DOS. tetapi ada terlalu banyak alat pemecahan masalah seperti ping, mtr (saya lupa setara dengan windows), traceroute (tracert), yang menggunakan icmp. menjatuhkan mereka sepenuhnya adalah hal yang bodoh. Ini adalah cara yang baik untuk memeriksa apakah instance Anda sudah naik meskipun Anda tidak dapat melakukan telnet pada port apa pun.

--limit 10/second
untuk aturan icmp Anda (s) mungkin batas yang layak diberikan seberapa banyak komputer benar-benar dapat menangani.

xenoterracide
sumber
6

Inilah sudut pandang alternatif, dalam semangat apa yang akan disarankan teori keamanan. Poster-poster lain benar bahwa praktik keamanan sering kali terlalu bersemangat, tetapi ada dasar yang bagus untuk itu.

Teori keamanan umumnya bahwa Anda hanya mengaktifkan APA YANG ANDA BUTUHKAN. Hal-hal lain (yang bisa berguna - misalnya, respons ping) dapat digunakan oleh penyerang untuk membatasi sistem Anda, atau mungkin sebagai vektor serangan untuk beberapa kerentanan yang belum ditemukan.

Jadi, melihat jenis pesan ICMP, apa yang Anda BUTUHKAN untuk operasi sistem Anda yang normal dan benar?

  • echo reply (ping) - tidak banyak
  • tujuan tidak terjangkau - banyak informasi berguna di sini. Nonaktifkan ini dan Anda akan memutuskan akses ke server Anda untuk beberapa klien.
  • source quench - usang sejak 1995, dan tampaknya dihapus dari implementasi host sejak (paling lambat) 2005. tools.ietf.org/html/rfc6633#section-1.
  • redirect - hampir pasti tidak
  • iklan router & permintaan - tidak perlu jika Anda secara statis mengkonfigurasi rute Anda, dan dapat digunakan untuk DoS. Saya akan memblokirnya kecuali Anda tahu Anda membutuhkannya, dan jika Anda membutuhkannya, mungkin buat kode aturan untuk menerima info hanya dari router yang mungkin diketahui.
  • TTL terlampaui - tidak hanya untuk traceroute, memberi tahu Anda bahwa lalu lintas Anda tidak sampai ke tujuannya

...dan seterusnya. Jika Anda benar-benar ingin memahami ini, pelajari tentang berbagai jenis ICMP dan untuk apa mereka. The Artikel wikipedia adalah titik awal yang baik.

Dalam praktiknya, yang benar-benar jelek adalah pengalihan; jika Anda ingin melakukan sesuatu yang cepat dan berguna, blokir itu dan biarkan sisanya.

Saya akan menambahkan bahwa pelacakan koneksi IPtables akan memungkinkan paket ICMP kembali yang sesuai untuk koneksi aktif. Jadi, jika Anda menjalankan conntrack, Anda harus dapat memblokir sebagian besar ICMP inbound, selama Anda menerima paket-paket TERKAIT (sebelum Anda memblokir ICMP dalam aturan Anda).

Dan Pritts
sumber
2
Sebenarnya quench sumber sudah usang sejak 1995, dan tampaknya dihapus dari implementasi host sejak (paling lambat) 2005 :). tools.ietf.org/html/rfc6633#section-1 .
sourcejedi
jawabannya diperbarui, terima kasih. Jika aku berpikir sedikit lebih keras aku akan ingat itu, ya.
Dan Pritts
Saya pikir ICMP PING diperlukan untuk penemuan PMTU (yang digunakan banyak browser dan alat). Menolak itu seperti tidak sopan bagi pengguna Anda. Ping juga digunakan untuk banyak tujuan diagnostik, dan sebagian besar pemain besar mengizinkannya. Selain itu, ada sedikit manfaat dalam tidak mengizinkannya.
jjmontes
2
Paket gema (ping) tidak diperlukan untuk penemuan PMTU. Penemuan PMTU dilakukan dengan mengatur bit Don't Fragment (DF) pada paket keluar, dan tergantung pada ICMP Destination Unreachable - Fragmentasi pesan yang diperlukan datang dari router dengan MTUs link yang lebih kecil. Ping tentu saja berguna untuk tujuan diagnostik tetapi juga berguna untuk pengintaian jaringan dan berpotensi untuk DoS. Untuk semua yang Anda dan saya tahu ada bug remote-root laten di tumpukan ICMP di Linux. Jika standar Anda adalah "apakah saya perlu ini" jawabannya adalah "tidak."
Dan Pritts
1
(Perhatikan bahwa saya menulis dalam jawaban bahwa memblokir tujuan yang tidak dapat dijangkau akan merusak keadaan. Penemuan PMTU sebenarnya adalah apa yang saya pikirkan. :)
Dan Pritts
4

Ini adalah alat diagnostik yang berguna untuk memecahkan masalah konektivitas jaringan.

Ini juga memungkinkan Anda untuk menggunakan koneksi di tempat lain di internet yang menggunakan MTU lebih kecil daripada yang ada di jaringan Anda. Jika Anda mencoba mengirim paket ke suatu tempat yang terlalu besar dan tidak dapat difragmentasi, perangkat menjatuhkan paket dan mengirimkan paket ICMP fragmentasi yang diperlukan kembali ke pengirim. Jika Anda menjatuhkan semua paket ICMP, Anda kehilangan itu dan hal-hal aneh terjadi di jaringan Anda.

Pertanyaan sebenarnya adalah "mengapa memblokir ICMP?" Apa yang kamu dapat? Hanya memiliki aturan penyaringan yang baik di perbatasan Anda dan di depan aset Anda yang berharga.

chris
sumber
3

ping adalah alat diagnostik yang bagus, Anda akan benar-benar berharap Anda memilikinya suatu hari nanti. Saya menggunakan ini:

-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

Anda mungkin juga ingin mencekiknya.

rapi
sumber
8
Ini sangat tidak memadai untuk alasan yang orang lain tunjukkan ( ICMP jauh lebih dari sekedar ping ). Anda harus secara selektif memblokir pesan ICMP tertentu yang berpotensi berbahaya , dan memungkinkan pesan kontrol lainnya melalui tanpa gangguan.
voretaq7
2

Saat ini bahkan membatasi paket ICMP di sisi server dapat membuat sakit kepala pada serangan DDoS. Serangan sebagian besar dilakukan dengan mengirimkan permintaan ICMP jendela besar ke satu server dan jika server berusaha merespons masing-masing, coba tebak apa yang terjadi?

Hal utama yang kami miliki adalah server tablespeak yang mendapatkan paket buruk setiap hari, ada beberapa hari dalam dua bulan kami memiliki beberapa "freetime". Apa yang kami lakukan sepenuhnya dinonaktifkan / diblokir respons ICMP, kami tidak memiliki server DNS di server, tidak ada server NTP, tidak ada server mail, tidak ada server FTP, hanya dua apache dan timpeak. semua port yang tidak dibutuhkan untuk layanan mati. Kami berencana untuk memblokir bahkan ssh dan membiarkan hanya dua port terbuka. Hari ini ada 21r (!) Larangan permanen.

Situasinya adalah bahwa penyerang menggunakan sebagian besar penerobosan ICMP dan beberapa garis log yang sangat menarik dibahas dengan admin server dan mereka mengatakan bahwa mereka memiliki permintaan ICMP server, sehingga penyerang menggunakannya untuk membuat terowongan serangan melalui mereka dan menyerang kami. Kedengarannya aneh tapi itu benar.

Jika Anda tidak memerlukan diagnosa server Anda dan jika Anda dapat sepenuhnya memblokir permintaan atau memfilternya untuk menjatuhkan jendela besar misalnya, maka lakukanlah. Saya juga menyarankan Anda untuk sepenuhnya memblokir: Cina, Korea, Thailand, Turki karena sebagian besar Alamat IP berasal dari sana. Saya memiliki seluruh daftar inetnum negara-negara ini tetapi hampir setiap hari datang beberapa yang baru dari sana.

Saya katakan apa yang saya lakukan, jika Anda tidak setuju - jangan lakukan itu. Sederhana seperti itu. Semoga berhasil

Andrius Lukminas
sumber
0

Minimal, Anda harus mengizinkan untuk melewati icmp tipe 3 (tujuan tidak dapat dijangkau), 4 (sumber padam) dan 11 (waktu terlampaui). Semua tipe ini digunakan untuk menangani masalah jaringan dan tidak boleh disaring.

iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

(Jenis quench sumber saat ini sudah usang, tetapi tidak ada salahnya untuk membiarkan ini terbuka)

TV
sumber
-2

Saya mengizinkan lalu lintas ICMP dari intranet lokal, memblokirnya dari Internet. Dengan cara itu server saya semuanya tidak terlihat online (hanya merespons pada port SSH non standar).

iptables -I INPUT 7 -d 208.180.X.X -p icmp --icmp-type 8  -j DROP
iptables -I INPUT 8 -d 208.180.X.X -p icmp --icmp-type 0  -j DROP
iptables -I INPUT 9 -d 208.180.X.X -p icmp --icmp-type 11 -j DROP

Ini memasukkannya setelah loopback standar, ditetapkan, daftar putih LAN, daftar putih penyedia VOIP, dan ACCE port SSH port. Saya mengizinkan lalu lintas yang saya inginkan, dan kemudian melakukan yang terbaik untuk menjaga server tidak terlihat oleh seluruh dunia.

Dan
sumber
1
Saya pikir saya mengerti apa yang Anda coba katakan, tetapi tidak berkorelasi dengan tabel yang Anda tulis. Jika Anda menjatuhkan jenis ICMP tertentu, daripada apa yang terjadi pada yang tidak ditentukan ??? Saya akan menganggap Default-Allow, kalau tidak mengapa tentukan blok ketika itu akan intrinsik. Anda kemudian menyatakan "Saya mengizinkan lalu lintas yang saya inginkan", yang akan menunjukkan Default-Deny atau Default-Drop ... pada dasarnya jawaban Anda tidak konsisten, dan paling membingungkan.
JM Becker