ICMP'yi neden engellemiyorsunuz?


53

CentOS 5.3 sistemimde iptables kurulumumun neredeyse tamamlandığını düşünüyorum. İşte betiğim ...

# 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

Bağlam için, bu makine bir Sanal Özel Sunucu Web uygulaması ana bilgisayarıdır.

Bir önceki soruda Lee B "ICMP'yi biraz daha kilitlemem" gerektiğini söyledi. Neden sadece tamamen engellemiyorsunuz? Bunu yapsaydım ne olurdu (hangi kötü şey olurdu)?

ICMP'yi engellememem gerekirse, daha fazla nasıl kilitleyebilirim?


4
iptables -A INPUT -j DROP <yanlış (görüş), ilke olarak varsayılan ayarlarla aynı olan iptables -P INPUT DROP olarak ayarlamalısınız. DENİZCİLİKLE DENY.
xenoterracide

2
İcmp'ı engellemenin neden kötü bir fikir olduğunu öğrenin: security.stackexchange.com/a/22713/485
Rory Alsop

Yanıtlar:


117

ICMP, "traceroute" ve "ping" den çok daha fazla yol. Modern bir DNS sunucusunda, daha hızlı sorgulamak için farklı bir makinenin seçilmesine yardımcı olabilecek bir DNS sunucusu (ulaşılamaz bağlantı noktası) çalıştırdığınızda geri bildirim için kullanılır.

ICMP ayrıca, yukarıda belirtildiği gibi, MTU yolunu bulmak için kullanılır. Muhtemelen, işletim sisteminiz gönderdiği TCP paketlerinde "DF" yi (parçalama) ayarlar. Yol boyunca bir şey bu boyuttaki paketin üstesinden gelemezse, bir ICMP'nin "parçalanma gerekli" paketini geri almasını beklemektedir. Tüm ICMP'leri engellerseniz, makineniz temelde bir PMTU "kara deliği" tespit etmek için zaman aşımı kullanan ve hiçbir zaman doğru şekilde optimize etmeyecek olan diğer geri dönüş mekanizmalarını kullanmak zorunda kalacaktır.

Ek olarak, neden ICMP'yi engellemek istediğinizi kendinize sormalısınız. Burada özellikle neyi önlemeye çalışıyorsunuz? ICMP'nin ne için kullanıldığını anlamadığınız, oldukça yaygın olduğu açıktır. Tamamen anlamadığınız bir şeyi engellemekte çok dikkatli olurum.

Bunu öğrenmeyi daha da zorlaştırmak için, birçok yaygın güvenlik duvarı kitabı "ICMP engelle" diyor - yazarlarının hiçbir zaman bir RFC okumadığı veya böyle bir tavsiyeyi çevreleyen sorunları çözmek zorunda oldukları açık. Tüm ICMP’leri engellemek kötü bir tavsiyedir.

Şimdi, hız sınırlaması da zarar verebilir. Makineniz meşgulse veya olmasa bile, iyi miktarda ICMP trafiği alabilirsiniz. Web sunucum, muhtemelen PMTU'nun keşfi olan dakikada yaklaşık 10-100 ICMP paketi alıyor. Birisi sunucuma bir tür ICMP paketleri ile saldırmayı seçse bile, bu gerçekten büyük bir anlaşma değil. Makineniz bir TCP bağlantısı bile kabul ederse (ssh, http, mail, etc) şansı, ICMP'nin şimdiye kadar yanlış anlaşıldığından daha büyük bir saldırı vektörüdür.


4
Daha iyisini söyleyemezdim. +1
Massimo

9
Orada bir ICMP türü olabilir zararlı redirecttürü. Budur tek Hiç engelleme düşünmelisiniz ICMP türü.
Hubert Kario

2
@Hubert engelleme hakkında daha fazla tavsiye için link olsaydı çok yararlı olurdu redirect. Şimdi anlıyorum ki bunu düşünmeliyim, ama daha iyi durumda değilim - hala bir şekilde veya başka bir şekilde karar veremiyorum :) Risk mi değil mi?
RomanSt

Yönlendirme ICMP mesajı, ana bilgisayara (yönlendiriciler hiçbir zaman onları kabul etmemelidir) böyle bir alt ağ veya ana bilgisayarın farklı bir ağ geçidinde (genellikle daha hızlı bir yönlendirici tarafından) mevcut olduğunu söyler. En azından RFC1122'nin söylediği bu.
Hubert Kario

2
Linux'ta yönlendirmelerin varsayılan olarak yoksayıldığına inanıyorum. Ama evet, bunu filtrelemek daha iyi.
Fox,

26

ICMP, çeşitli teşhis (örneğin, ping, traceroute) ve ağ kontrolü (örneğin PMTU keşfi) işlevleri için kullanılır. ICMP'nin ayrım gözetmeden engellenmesi, diğer insanlara her türlü mide ekşimesi neden olur ve ne yaptığınızı tam olarak bilmiyorsanız, onu yalnız bırakmalısınız.


14

İnsanların ICMP'yi neden saatli tuttuğunu anlamadım, yukarıda da belirtildiği gibi, yalnızca sizin ve başkalarının başını ağrıtsın. Bir sunucunun yeterince kolay olup olmadığını ve DOS olarak kullanılmayacak kadar sınırlı olduğu sürece, onu engellemek için hiçbir zorlayıcı sebep duymadım. (Birisi bir sebep bulabilirse lütfen gönderin)


5
Bilgi güvenliği kültünün bir parçası. Güvenlik görevlileri bazı şeyleri haklı çıkarmaya gerek duymadıklarını düşünüyor, çünkü sadece ölümlüler güvenlik sonuçlarını anlayamıyorlar. Öte yandan, Ağ ve Sistem yönetici baş ağrıları düz tembelliğe bağlanabilir. Sonuçta, eğer yöneticiler neler olup bittiğini bilselerdi, işler asla
bozulmazdı

benim için teşhis araçlarını öldürmek bana garip geliyor; Bir saldırganın ilgileneceği bilgiler, makinede çalışan başka bir hizmetiniz olduğunu varsayarsak büyük olasılıkla elde edilebilir. Haklısın; çok "kült" y gibi görünüyor, sorgulama sadece yapmayın.
Antitribu

6
Güvenlik duvarı kitaplarının yazarlarının neden ICMP’nin “ping” ve “traceroute” den çok daha fazla olduğunu ve henüz kitap ve bloglar ile NASIL-TO'ların hepsinin “ICMP engelle” dediğini anlamadıklarını anlamadım.
Michael Graff,

1
Bu seviyeler ve seviyeler, cevabınız doğru oy kullandı, iyi ifade edildi. Çoğunlukla engellendiğinde, aralıklı olaylarda neyin yanlış gittiğini, özellikle de yol boyunca birden fazla ICMP bloğu olduğunda hiçbir zaman tam olarak söyleyemeyeceğinizi biliyorum.
Antitribu

8

Sadece icmp sınırlamasını deneyerek DOS saldırısı olarak kullanılamaz. ancak icmp kullanan ping, mtr (windows denkini unuturum), traceroute (tracert) gibi çok fazla sorun giderme aracı var. onları tamamen bırakmak sadece aptalca. Herhangi bir bağlantı noktasında telnet alamamanıza rağmen örneğinizin çalışıp çalışmadığını kontrol etmek için iyi bir yoldur.

--limit 10/second
icmp kurallarınıza göre, bir bilgisayarın gerçekte ne kadarını kaldırabildiği göz önüne alındığında, muhtemelen makul bir sınırlamadır.


6

Güvenlik teorisinin önerebileceği bir ruh hali ile işte alternatif bir bakış açısı. Diğer posterler, güvenlik uygulamalarının genellikle aşırı kıskanç olduğu konusunda haklıdır, ancak çoğunun iyi bir temeli vardır.

Güvenlik teorisi genel olarak sadece SİZE NE İHTİYACINIZI etkinleştirdiğinizi gösterir. Diğer şeyler (faydalı olabilecek - örneğin, ping yanıtları) sisteminizi genişletmek için bir saldırgan tarafından ya da keşfedilmemiş bazı güvenlik açığı için bir saldırı vektörü olarak kullanılabilir.

Öyleyse, ICMP mesaj türlerine bakarak, sisteminizin normal ve doğru çalışması için Neye ihtiyacınız var?

  • yankı yanıtı (ping) - çok değil
  • hedef ulaşılamaz - burada birçok yararlı bilgi var. Bunu devre dışı bıraktığınızda, bazı istemciler için sunucunuza erişimi keseceksiniz.
  • kaynak su verme - 1995'ten beri kullanımdan kaldırıldı ve görünüşe göre (en geç) 2005'ten beri ana bilgisayar uygulamalarından kaldırıldı. tools.ietf.org/html/rfc6633#section-1.
  • yönlendirme - neredeyse kesinlikle değil
  • yönlendirici reklamı ve talep etme - rotalarınızı statik olarak yapılandırmanız ve DoS için kullanmanız gerekmez. İhtiyacın olduğunu bilmediğin sürece engellerdim ve ihtiyacın olursa, belki de bilinen olası yönlendiricilerden bilgi almak için bir kural koyarsın.
  • ttl aşıldı - yalnızca traceroute için değil, trafiğinizin hedefine ulaşamadığını söyler

...ve bunun gibi. Bunu gerçekten anlamak istiyorsanız, gidip çeşitli ICMP türlerini ve ne işe yaradıklarını öğrenin. Wikipedia makale iyi bir başlangıç noktasıdır.

Uygulamada, gerçekten çirkin olan yönlendirmedir; hızlı ve kullanışlı bir şey yapmak istiyorsanız, bunu engelleyin ve gerisine izin verin.

IPtables bağlantı izlemesinin aktif bağlantılar için uygun iade ICMP paketlerine izin vereceğini eklerdim. Bu yüzden, bir konsantre çalıştırıyorsanız, RELATED paketleri kabul ettiğiniz sürece (ICMP'yi kural kümenizde engellemeden önce) gelen çoğu ICMP'yi gelen engelleyebilmelisiniz.


2
Aslında kaynak su verme 1995'ten beri kullanımdan kaldırıldı ve görünüşe göre (en geç) 2005'ten beri ana bilgisayar uygulamalarından kaldırıldı :). tools.ietf.org/html/rfc6633#section-1 .
kaynakjedi

Cevap güncellendi, teşekkürler. Biraz daha sert düşünseydim bunu hatırlardım, ahh.
Dan Pritts,

ICMP PING'in PMTU keşfi için gerekli olduğunu düşünüyorum (birçok tarayıcı ve aracın kullandığı). Buna izin vermemek, kullanıcılarınız için kibar olmamak gibidir. Ping ayrıca birçok tanı amaçlı kullanılır ve çoğu büyük oyuncu buna izin verir. Ayrıca, buna izin vermeme konusunda çok az fayda var.
jjmontes

2
PMTU keşfi için yankı (ping) paketleri gerekli değildir. PMTU keşfi, giden paketlerde Fragment Don't (DF) biti ayarlanarak yapılır ve ICMP Hedef Ulaşılamaz'a bağlıdır - Parçalanma, daha küçük bağlantı MTU'larına sahip yönlendiricilerden gelen mesajlara ihtiyaç duydu. Ping, tanı amaçlı kesinlikle kullanışlıdır, ancak ağ keşif ve potansiyel olarak DoS için de faydalıdır. Hepimiz ve hepimiz için Linux'taki ICMP yığında gizli bir uzak kök hatası olduğunu biliyorum. Standartınız "buna ihtiyacım var mı" ise, cevap "hayır" dır.
Dan Pritts,

1
(Hedefe ulaşılamayan mesajların engellenmesinin bir şeyleri
bozacağını cevabında

4

Ağ bağlantısı sorunlarını çözmek için kullanışlı bir tanı aracıdır.

Ayrıca, İnternet'teki başka bir yerde, ağınızdakinden daha küçük MTU'lar kullanan bağlantıları kullanmanıza izin verir. Çok büyük ve parçalanamayan bir yere bir paket göndermeyi denerseniz, cihaz paketi düşürür ve gerekli paketi gönderene geri gönderen bir ICMP parçalama gönderir. Tüm ICMP paketlerini bırakırsanız, bunları kaybedersiniz ve ağınızda garip şeyler olur.

Asıl soru "neden ICMP'yi engelle?" Ne kazanıyorsun? Sınırınızda ve değerli varlıklarınızın önünde iyi filtreleme kurallarına sahip olmanız yeterli.


3

ping güzel bir teşhis aracıdır, gerçekten bir gün olmasını dilersiniz. Bunları kullanıyorum:

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

ayrıca onu boğmak isteyebilirsiniz.


8
Bu, başkalarının belirttiği nedenlerden dolayı oldukça yetersizdir ( ICMP sadece ping'den çok daha fazlasıdır ). Belirli, potansiyel olarak zararlı ICMP mesajlarını seçmeli olarak engellemeli ve diğer kontrol mesajlarına test edilmeden izin vermelisiniz.
voretaq7

2

Günümüzde bile ICMP paketlerini sunucu tarafında sınırlamak DDoS saldırılarında baş ağrısı yaratabilir. Çoğunlukla tek bir sunucuya büyük pencere ICMP istekleri göndererek yapılan saldırılar ve sunucu her birine yanıt vermeye çalışıyorsa, ne olacağını tahmin edin?

Her gün kötü paketler alan bir takım konuşmacı sunucumuz olan ana şey, iki ay içinde birkaç "boş zaman" geçirdiğimiz birkaç gündü. Yaptığımız şey tamamen devre dışı bırakılmış / engellenmiş ICMP yanıtları, sunucuda DNS sunucumuz yok, NTP sunucumuz yok, posta sunucumuz yok, FTP sunucumuz yok, sadece iki apache ve takım konuşmamız var. Hizmetler için gerekli olmayan tüm bağlantı noktaları kapalıdır. Ssh'yi bile bloke etmeyi ve sadece iki portu açık bırakmayı planlıyoruz. Bugün 21k (!) Daimi yasak var.

Durum, saldırganların çoğunlukla ICMP tünellerini kullanması ve sunucu yöneticileriyle gerçekten ilginç birkaç günlük satır hakkında konuşulması ve sunucu ICMP isteklerinin açık olduğunu söylediler; Kulağa tuhaf geliyor ama bu doğru.

Eğer sunucunuzun teşhisine ihtiyacınız yoksa ve istekleri tamamen engelleyebiliyorsanız ya da örneğin büyük pencereler bırakmak için onları filtreleyebiliyorsanız, o zaman yapın. Ayrıca tamamen engellemenizi öneriyorum: Çin, Kore, Tayland, Türkiye çünkü IP Adreslerinin çoğu oradan geliyor. Bu ülkelerin hepsine ait inetnum listelerim vardı ama hemen hemen her gün oradan yeni yerler geliyor.

Yaptığımı söylüyorum, eğer kabul etmezsen - yapma. Bu kadar basit. İyi şanslar


0

En azından, icmp tip 3'ü (hedef ulaşılamaz), 4 (kaynak su verme) ve 11 (zaman aşıldı) geçmesine izin vermelisiniz. Bu türlerin tümü ağ problemleriyle uğraşmak için kullanılır ve filtrelenmemelidir.

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

(Kaynak söndürme türü şu anda kullanımdan kaldırılmıştır, ancak bunun açılması için zarar vermez)


-2

ICMP trafiğine yerel intranetten izin veriyorum, İnternetten engelliyorum. Bu şekilde sunucum çevrimiçi olarak görünmez ancak çevrimiçi değil (yalnızca standart olmayan bir SSH bağlantı noktasında yanıt veriyor).

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

Bu, standart geri döngü kurulduktan sonra, LAN beyaz listesi, VOIP sağlayıcısı beyaz listesi ve SSH bağlantı noktası ACCEPT'lerini ekler. İstediğim trafiğe izin veriyorum ve ardından sunucuyu dünyanın geri kalanı için görünmez kılmak için elimden geleni yapıyorum.


1
Sanırım ne demeye çalıştığını anlıyorum ama yazdığın tablolarla bağdaşmıyor. Bıraktığınız belirli ICMP türlerini belirtirseniz, belirtilmemiş olanlara ne olur? Default-Allow'u kabul edecektim, aksi halde neden gerçek olacağı bir blok belirtildi. Daha sonra "İstediğim trafiğe izin veriyorum" ifadesini belirtirsiniz; bu, Varsayılan Reddet veya Varsayılan Düşüşü gösterir ... temelde cevabınız tutarsız ve en iyi şekilde kafa karıştırıcıdır.
JM Becker
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.