İptables kullanırken DROP vs REJECT


Yanıtlar:


79

Genel bir kural olarak, diğer ucun bağlantı noktasının erişilemez olduğunu bilmesini istiyorsanız REJECT kullanın, insanların görmesini istemediğiniz ana bilgisayarlara bağlantı için DROP kullanın.

Genellikle, LAN’ınızdaki bağlantılar için tüm kurallar REJECT’i kullanmalıdır. İnternet için, Bazı sunuculardaki kimlikler haricinde, İnternet bağlantısı genellikle DROPPED'dir.

DROP kullanmak, bağlantının boş bir IP adresine görünmesini sağlar. Tarayıcılar boş görünen adresleri taramaya devam etmemeyi seçebilir. NAT'ın güvenlik duvarı üzerindeki bir bağlantıyı yeniden yönlendirmek için kullanılabileceği göz önüne alındığında, iyi bilinen bir hizmetin varlığı mutlaka bir adresin bir sunucunun varlığını göstermez.

Kimlik, SMTP hizmeti veren herhangi bir adrese iletilmeli veya reddedilmelidir. Bununla birlikte, SMTP servislerinin Ident-up'ların kullanımı kullanım dışı kalmıştır. Çalışan bir kimlik servisine de bağlı olan sohbet protokolleri var.

DÜZENLEME: DROP kurallarını kullanırken: - UDP paketleri düşürülecek ve davranış, hizmetsiz bir güvenlik duvarı portuna bağlanmakla aynı olacaktır. - TCP paketleri, üzerinde servisi olmayan açık bir portun cevap vereceği cevapla aynı ACK / RST'yi döndürür. Bazı yönlendiriciler kapalı olan sunucular adına ve ACK / RST ile yanıt verir.

REJECT kurallarını kullanırken, portun uygun olmadığını belirten bir ICMP paketi gönderilir.


5
Bu doğru değil. Kural "DROP" dese bile, sistem gelen pakete açık bir TCP SYN / ACK ile cevap verecektir. Bir paketi gerçekten düşürmek için, sistemin bir güvenlik duvarı kuralı olmayan bir TCP RST / ACK ile yanıtlaması gerekir. Bu nedenle, en iyi güvenlik duvarı kurulumu yalnızca seçilen bağlantı noktalarının iletildiği yerdir. DROP kuralınız güvenlik duvarınızın reklamını yapar ve bağlantı noktası tarayıcıları güvenlik duvarını kurduğunuzu bilir ve güvenlik duvarınızı yıkma ümidiyle sizi vurmaya devam eder.
Dagelf,

2
Demek istediğim şu ki, DROP yaparken TCP yığınının ilk etapta çalışan bir hizmetiniz olmadığı zamanki durumundan farklı davranması nedeniyle, bir şeyi güvenlik duvarına takıp takmadığınız, dışardan tespit edilebilir!
Dagelf

2
Farktan faydalanan botnetlerin olduğu ve bunun sonucunda limanlarınızı takip ettiği gerçeğini değiştirmez.
Dagelf

1
ne yaparsan yap, tutarlı ol. eğer saldırgan kullanılmayan bir port numarası alırsa ve bağlanmaya çalışırsa, özellikle engellediğiniz birini seçmiş gibi aynı cevabı almalıdır. farklı bir cevap vermek ona orada bir şey olduğunu söyler. Örneğin, kullandığı veritabanı sunucusunu, SQL enjeksiyonunu bu sunucuya uyarlayabildiğini belirlemek için farklı bir cevap veren mermiyi kullanabilir ...
user313114

5
@Dagelf, DROP'un yanıt gönderdiği bilgileri nereden alıyorsunuz? Bu büyük bir haber ve gözlemlediğim ve söylediğim her şeye karşı geliyor. Bu davranışı tanımlayan dokümantasyona bir bağlantınız var mı?
Score_Under

27

Aradaki fark, REJECT hedefinin kaynağa reddedilen bir yanıt göndermesi ve DROP hedefinin hiçbir şey göndermemesidir.

Bu, örneğin kimlik servisi için faydalı olabilir. REJECT kullanıyorsanız, istemcilerin zaman aşımını beklemelerine gerek kalmaz.

Bu konuda daha fazlası: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html


2
DROP hedefi hiçbir şey göndermez. Ayrıntılarla ilgileniyorsanız kabul edilen cevap hakkındaki yorumuma bakın ve konuyu kendiniz araştırın!
Dagelf

8

Genellikle, saldırganlardan belirli bağlantı noktalarına giden probları yok saymak istersiniz , bu nedenle 'bağlantı reddedildi'yi geri göndermek istemezsiniz. 'Bağlantı reddedildi' şu anlama gelir: 'burada bir sunucu var' ve muhtemelen daha fazla bilgi verir, oysa bir paketin bırakılması yazılım sürümleri, olası güvenlik açıkları ve hatta bir sunucunun sizi dinlemesi gerçeği hakkında ipucu vermez.

Yukarıdakiler, REJECT yerine DROP kullanmanın temel nedenlerinden biridir.


6
İptables kuralları olmadan, kapalı bir port varsayılan olarak REJECT olarak ayarlanmıştır. Her bağlantı noktasını DROP yapıyorsanız, bu iyi bir alternatiftir (ana makineniz aşağıya görünür) ancak yalnızca belirli bağlantı noktalarını DROP'a çeviriyorsanız, aslında REJECT'ten daha fazla bilgi veriyorsunuzdur. Birisi nmap gibi bir battaniye probu kullanıyorsa, paketleri bırakan belirli portlar "filtrelenmiş" olarak görünecektir; bu, orada sakladığınız bir servis olduğunu bildikleri anlamına gelir.
Raptor007

7

Burada pek çok çelişkili cevap görüyorum ve bu Google’a doğru anahtar kelimelerle yazılmış ilk makale; İşte doğru açıklama.
Çok basit:

DROP paketle hiçbir şey yapmaz. Bir ana bilgisayara iletilmez, yanıtlanmaz. IPtables'ın manpage paketi yere düştüğünü, yani paket ile hiçbir şey yapmadığını söylüyor.

REJECT, DROP'a bir paket geri gönderdiği için farklıdır, ancak cevap IP'de bir sunucudaymış gibi fakat bağlantı noktası dinleme durumunda değil. IPtables, TCP veya UDP ile ulaşılamayan bir ICMP hedef portu durumunda bir RST / ACK gönderir.


2
Benden +1, ancak cevaplar gerçekten aynı fikirde değil. Yanlış olan herkes, Dagelf dışında görebildiğim kadarıyla aynı fikirdeler.
MadHatter

Tamam, işte senin için küçük bir numara: "nmap localhost" yap. Şimdi "açık" olmayan herhangi bir bağlantı noktası seçin ... ve "hiçbir şey yapmayan" bir kural ekleyin, örneğin: "iptables -I INPUT -p tcp --dport 888 -j DROP". Şimdi tekrar "nmap localhost". Ne görüyorsun? ...
Dagelf

4

Makinenizin varlığını tamamen gizlemeye çalışıyorsanız -j DROP, uygundur. Örneğin, bunu bir kara liste uygulamak için kullanabilirsiniz.

Bir portun açık olduğu gerçeğini gizlemeye çalışıyorsanız, port açık değilse meydana gelebilecek davranışı taklit etmelisiniz:

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

Bir port tarayıcı çoğu reddettiğinde birkaç portun paketleri bıraktığını görürse, bırakılan paketlerin açık fakat gizli portlarda olduğunu varsayabilir.


Birkaç port açarsanız (yani 22, 25, 53, 80, 443) ve sonra diğer her şeyi DROP olarak açarsanız? Şimdi MySQL, PostgreSQL, SQLite veya Cassandra çalışıyor mu… tarayıcıyı söyleyemiyor, değil mi?
Alexis Wilke

@AlexisWilke Bu durumda, bağlantı noktası tarayıcısına verdiğiniz tek ek bilgi, varsayılan DROP ilkesine sahip bir tür güvenlik duvarına sahip olduğunuzdur.
Raptor007

0

Pek çok doğru cevaba rağmen, sadece iki sentim:

İşte ban sistemi kurallarına (firewall, IDS, vb.) İlişkin olarak kısa bir PoC FW.IDS-DROP-vs-REJECT .

kısaca:

  • DROP Tüm portları yasaklama durumunda (davetsiz misafir sunucu aşağıdaymış gibi gözüküyorsa) tekrarlayan davetsiz misafirler için kullanılabilir
  • REJECT --reject-with tcp-reset Çok portlu yasaklama için en iyi seçenek, çünkü gerçek bir kapalı liman gibi davranıyor
  • eğer bazı portlar cevap veriyorsa (davetsiz misafir ev sahibinin canlı olduğunu bilir) DROPve REJECT(olmadan tcp-reset) davetsiz misafirlere engelleyici bir şey olduğu konusunda bir sinyal gönderir (böylece gerekli veri sağlama umuduyla "saldırıya" devam etmesi için onu teşvik edebilir) bir noktada)

-5

Evet, DROP kullanmak anlamsız. REJECT kullanın.

Kural "DROP" dese bile, sistem hala çalışan bir SYN'ye TCP RST / ACK ile cevap verir - bu, hizmet vermeyen bağlantı noktalarının varsayılan davranışıdır. (tcpdump ve diğerleri bunu kaydetmez.)

Bir servis çalışıyorsa, SYN, TCP SYN / ACK ile karşılanır.

DROP, bir TCP SYN / ACK ile normal olarak yanıt vermediğinden, bunun yerine bir RST / ACK ile yanıt vermediğinden, DROP kuralınız güvenlik duvarınızın reklamını yapar ve bağlantı noktası tarayıcıları güvenlik duvarını kurduğunuzu bilir ve sizi ümitlere sokmaya devam eder Güvenlik duvarını yıkma.

Bu şimdi nmap örneğin "kapalı" yerine "filtrelenmiş" olarak rapor edebilir:

$ 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

Bu nedenle, yalnızca "görünmez" güvenlik duvarı kurulumu, özel bir cihazın aygıtlarınız arasında oturduğu ve yalnızca seçici olarak bağlantı noktalarını ilettiği bir kurulumdur.

Temel tarayıcılarla gerçekten uğraşmak istiyorsanız, TCP Penceresini 0'a ayarlayan TARptcp bağlantılarını ayarlayabilirsiniz, böylece bağlantı açıldıktan sonra hiçbir veri aktarılmayabilir, bağlantıyı kapatma istekleri göz ardı edilerek tarayıcının beklemesi gerekir. emin olmak isterse bağlantı zaman aşımının gerçekleşmesi için. Ancak bir saldırganın bunu tespit etmesi ve zaman aşımını çok kısa tutması çok önemlidir.

Her şey düşünüldüğünde, muhtemelen sadece REJECT kullanarak ya da sunucunuz ve internet arasında özel bir port yönlendirme cihazı takıyor olmanız en iyi yoldur.

Ya da yalnızca İnternet'e bakan makinelerde güvenlik duvarı gerektirmeyen hizmetler çalıştırarak.

Genel olarak REJECT web sunucuları için en iyisidir, çünkü hangi hizmetin erişmeye çalıştığı her ne olursa olsun (muhtemelen sizden daha sık), hızlı bir şekilde yanıt alır ve kullanıcılar veya diğer hizmetler bir ağ kesintisi olup olmadığını merak etmeyi beklemez.


5
Bu cevap yanlış. Tcpdump ile DROP kuralının sistemin HERHANGİ bir cevap göndermemesine neden olacağı - beklendiği gibi kolayca gösterilebilir. Ve "Bir paketi gerçekten düşürmek için, sistemin bir TCP RST / ACK ile yanıtlaması gerekiyor" ifadesi bir şeyi yanıtlamanın açık bir şekilde "gerçekten bir paketi bırakma" olduğu anlamına gelmez. Bir paketi "gerçekten düşürdüyseniz", sadece cevap vermezsiniz ve bu açıkça DROP kuralının etkisidir.
Juliane Holzt

3
Bir DROPsorun çıkacak iddia için bir kaynak sağlayabilir misiniz SYN/ACK? Bunu makinelerimde hiç görmedim.
motobói

2
@Dagelf Yazınız "DROP (aka DENY, BLACKHOLE) Bir paketin geçmesini yasakla. Cevap yok." Diyor.
JeanT

Normal yanıtı göndermez, ancak ne olursa olsun açıklandığı gibi gönderir.
Dagelf

3
Bağladığınız belge " DROP ... Yanıt gönder " dır ve gördüğüm kadarıyla, DROPgeri dönen talebinizi desteklemez SYN/ACK. Ben de bu davranışı hiçbir versiyonunda görmedim iptables. Talebinizi destekleyen bir kaynağınız varsa, onu görmek çok yararlı olacaktır; şüphesiz, henüz yaptığım paket dökümleri talebinizi desteklemiyor.
MadHatter
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.