DDOS saldırılarından nginx koruması. Web sunucusunun DDOS saldırıları için Programlardan Korunması DDOS saldırılarından Nginx

Bir süre önce, Web sunucusunun kurulumu ve yapılandırması hakkında en son sürümler temelinde ayrıntılı bir makale yazdım. Orada, bunun Web Sunucusu Bölge Döngüsünden ilk makale olduğundan bahsediyorum. Bugün size basit ve dikenli olarak kendinizi basitten korumak demektir. dDOS. saldırılar.

Hemen burada oldukça uygun olmayan DDOS kelimesiyle ilgili bir rezervasyon yapacağım, ancak neden bahsettiğimizi ne kadar popüler açıklayamadım. Tam DDOS saldırısından, kendinizi web sunucusu kurulumunun bir parçası olarak koruyamazsınız. Sadece kanalın tamamı ile tıkanırsınız ve sunucu yanıt vermeyi bırakacaktır. Sunucu gücü, gelen istekleri işlemek ve filtrelemek için yeterli değilse, orada yapacaksınız. DDOS'a karşı tam teşekküllü koruma için, maddi maliyet maliyetleri olan tam teşekküllü fonlara ihtiyacınız vardır. Teori ile ilgili daha fazla bilgi için ayrı bir makalede okunur.

DDO'lara karşı korumanın kaynağın önemi için yeterli olması gerektiği anlaşılmalıdır. Eğer önemli kar getirmeyen kişisel bir blogunuz varsa, daha sonra DDOS'a karşı koruma için ödeme yaparsanız. Sadece bir süre uzanmak ya da kendi başınıza koruma yapmak yeterlidir. Genel olarak, bir veya başka bir yöntemin fizibilitesine karar vermek için koruma maliyetini ve bunun temelinde, koruma maliyetini ölçmek her zaman gereklidir.

Botların basit saldırılarına veya bazı küçük zararlılara ve paketlere karşı korunmak için tavsiyede bulunacağım, bu da sizin tarafınızdaki uygun eylemler olmadan web sitenizi veya sunucunuzu sorunsuzca koyabilirsiniz. İşte basit bir örnek. 2 metre, 8 gigs operatörü ve bir SSD diskindeki gemide çok zayıf değil.

Sunucu önceki makalemle yapılandırılmıştır, başlangıçta liderlik eden referans. Sunucuda, bazı içerikli WordPress sitesi dağıtılacaktır. Ve sunucunuzda Apache'den basit sınama, Web sunucusunun performansına kadar olan bir haşere sahibiz:

# AB -C 50 -N 30000 "https://hl.zeroxzed.ru/"

Sadece 50 paralel akış. Web sunucunuzda gördüklerimiz:

Çok hoş bir resim değil. Sunucu% 100 olarak yüklenir. Ve normalde istekleri işlerken ve genel olarak doğru çalışır. Yavaşlamıyor bile, ama yine de kötü. Ve eğer her birinde 3 sunucu ve 100 akış varsa? Sanal bir makinede farklı hosters uzaklıktan uzaklaşın ve DDOS saldırısını taklit ederek bu tür şeyleri çalıştırın.

Genel olarak, sunucunuzda hiçbir koruma yapmadıysanız, herhangi bir özel problem olmadan herhangi bir rahatsızlık verebilecek. Böyle bir "saldırı" dan zorunlu değildir. O zaman sana nasıl yapacağını söyleyeceğim.

Iptables kullanarak DDOS koruması

En basit saldırıya karşı korumak için, güvenlik duvarı kullanacağız - iptables., Modül çekirdeği ipset. Büyük IP ve kendi kendine yazılmış komut dosyalarını saklamak için. Güvenlik duvarı için, makalemi gör -. Burada durmayacağım.

IPSET SETUP sorusu Makaleme göre detaylı olarak düşündüm. Bu makaleyle doğrudan ilgili olduğu için malzemeyi görmenizi tavsiye ederim ve bunu tamamlar.

Bu nedenle, bir IP adresinden çok sayıda bağlantı ile DOS saldırılarına karşı basit korumamızı yaratmaya devam edeceğiz. Başlamak için, bize her IP adresinden gelen bağlantı sayısını gösterecek komutu kontrol edin:

# Netstat -NTU | AWK "(1 $)" | Grep -ve "(adres | sunucular | 127.0.0.1)" | Kesim -D: -F1 | Sırala | UNIQ -C | Sırala -n | SED "S / ^ [\\ t] * //"

Burada, huzurumuzun bir ihlalidir, patronu sunucumuzda organize etmeye çalışıyor. Şimdi, site ile 50'den fazla eşzamanlı bağlantı kuran herkesi engelleyecek bir komut dosyası çizin.

#! / Bin / sh netstat -ntu | AWK "(1 $)" | Grep -ve "(adres | sunucular | 127.0.0.1)" | Kesim -D: -F1 | Sırala | UNIQ -C | Sırala -n | SED "S / ^ [\\ t] * //" | AWK "(eğer (1\u003e 50 $) 1 $ yazdırırsa)"\u003e /root/ddos/much_conn.txt uyku 3 listesi \u003d $ (cat /root/ddos/much_conn.txt) IPNET için $ $ Liste do ipset -a much_conn yapmak $ iPNet bitti

Prensip olarak, burada yorum yapacak bir şey yok. En az çıkan bir bağlantıların bir listesini alır, ilk sütunu 50'den büyükse, IP adresinin kaydedildiği, dosyaya geçtiği ikinci sütunun sonucu.

Sonra, bu dosyayı okuyun ve tüm IP adreslerini Much_Conn adlı IPSET listesine ekleyin. Daha önce yaratmanız gerekir. Bunun, yukarıdaki bağlantının önündeki makalede detaylı olarak konuştum, ancak bir kez daha burada tekrar ediyorum:

# ipset -n much_conn iphash

Listenin içeriğini görüntüleyin komut olabilir:

# ipset -L much_conn

Artık, belirtilen IPSET listesinden tüm bağlantıların engelleneceği bir kural eklemeniz gerekir.

# iPtables -a giriş -m set - match-set much_conn src -j damla

Tam olarak, IPtables kurallarını yapılandırmadan önce Sunucu konsoluna erişiminizi kontrol etmek için sizi uyarmalıyım. Her şey olur, sadece yanlış yapabilirsiniz, kopyalayabilir ve ihtiyacınız olanı yapıştırın.

Hepsi, sunucuya kitle spam bağlantıları oluşturan herkesi engelledik. 50 bağlantılardaki limiti yerine düzeltilebilir, biri bir IP'den daha az bağlantı açarsa, azaltılması gerekebilir.

Söylemek istediğim tek an. Kendim, siteye geldiklerinde kaç bağlantıyı aradıklarını kontrol etmedim. Açıkça 50 olmadığından şüpheleniyorum, 30 bile değil, ama muhtemelen kontrol etmedim. Genel olarak, bu aracı kullandığınızda dikkatli olun.

Bu komut dosyası taçta tutulabilir ve her dakika çalıştırılabilir. Ama şahsen, bunu yapmazdım. Sunucu kaynaklarını izlemenizi ve sunucu yalnızca yeteneklerinin sınırında çalışırsa ve elle girdiyseniz ve birinin bağlantılarla spam edileceğinden emin olmanız durumunda benzer araçlar çalıştırmanızı öneririm. Bundan sonra, bir süre bu taç komut dosyası için sürdü. DDOS durduğunda, bağlantısını kesin.

Bir şekilde yasaklanmış, oradan bir gün için bağlı olmayanlar listesini otomatik olarak temizlemek güzel olurdu, ancak bu görevi büyük ölçüde karmaşıklaştırıyor. En azından bir günlük giriş listesine ihtiyacınız var, son temyiz zamanını kaydedin. Tüm bunları işleme, hesaplama. Genel olarak, görev çok zor olmasa da, önemsiz değil. Bunu yapmak istemedim.

Çok zarif olmasa da, bu soruna basit bir çözüm var. İle belirli bir ömür boyu kaydetme ile bir ipset listesi oluşturun zaman aşımı.. Örneğin, şöyle:

İpset -n much_conn iphash zaman aşımı 3600

Bu durumda, IPSET listesindeki IP depolanan IP kaydı 3600 saniye veya 60 dakika saklanır.

Bu örnekte, IPSET'i kullanmak için 1 IP adresi olan bu örnekte, bir nokta yok, derhal Iptables'in kendi araçlarını yasaklayabilirsiniz. IPSET, yalnızca bu liste en az yüzlerce satır olduğunda gereklidir. Birkaç düzine adres varsa, yeterince iPtables.

DDOS'a karşı korumak için web sunucusu günlük sunucusunun analizi

Tip sorguları farklı IP'den geldiğinde başka bir basit, ama yine de daha karmaşık bir DDOS saldırısı türü. Yani, basit botnet, belki birkaç ucuz VDS sunucularından elleriyle bile monte edildi. Eşzamanlı bağlantılar fazla olmayacak, ancak eğer ağır bir siteniz varsa ve bir saldırganın zayıf bir yerini (örneğin, bir arama) bulacaksa, siteyi koymak için yeterli olabilir.

İPTBables yoluyla yasaklanacağız ve yasak için adreslerin listesi Web sunucusu günlüklerinden çıkarılacak. Bunu yapmak için, web sunucusuna kayıt taleplerini etkinleştirilmelidir. Örneğin, Nginx'te bu, sanal bir ana bilgisayarın bu ayarından sorumludur:

Access_log /web/sites/hl.zeroxzed.ru/log/access.log main;

Tüm günlük dosyasını her seferinde analiz etmeyeceğiz. Bu işlemin kendisi Web sunucusunu ısıtır. LOG günlüğündeki son 1000 satırı alın ve HTTP 1.0, "GET / HTTP / 1.0" tarafından ana sayfa isteği gibi bir IP'den bir IP'den bağlantı sayısını göz önünde bulundurun. Botnet'in size saldırdığınız başka bir kalıcı özelliğini fark ederseniz, kullanın. Aynı kullanıcı aracısı veya başka bir şey olabilir. Saldırgan savunmasız bir yere düşerse, bu sayfanın adresi olacaktır.

# Tail -1000 /web/sites/hl.zeroxzed.ru/log/ssla-access.log | EGREP "GET / HTTP / 1.0" | AWK "(1 $ 'lık)" | Sırala -n | UNIQ -C.

Bu komutun sonucu yaklaşık olarak böyle bir liste olacaktır.

Bu durumda, biraz farklı bir durum kullandım ve sadece ana sayfaya dövülerek olanların bir listesini getirdim. Ama burada yasaklayabileceğiniz ihlalci görebilirsiniz.

Sitemize çok fazla istek gönderenleri otomatik olarak kilitlemek için önceki komut dosyasına benzer ve performans problemleri yaratıyoruz. Verimlilikle ilgili herhangi bir sorun yoksa bir kez daha tekrar ediyorum, ekstra hareketler yapmanızı tavsiye etmiyorum.

#! / Bin / sh tail -1000 /web/sites/hl.zeroxzed.ru/log/ssla-access.log | EGREP "GET / HTTP / 1.0" | AWK "(1 $ 'lık)" | Sırala -n | UNIQ -C | Sırala -n | Kuyruk -N100 | AWK "(eğer ($ 1\u003e 50) 1 $ yazdırırsa)"\u003e /root/ddos/much_gets.txt uyku 3 liste \u003d $ (cat /root/ddos/much_gets.txt) IPNET için IPNET için IPSET do ipset -a much_gets $ iPNet bitti

İşte daha önce olduğu gibi yaptık. Günlük dosyasındaki son 1000 satır için maskemizde 50'den fazla özdeş istek yapanlar yasağa gönderilir.

İstekleri filtreleyeceğiniz dizeye dikkat çekiyorum. Bu durumda, sadece bir örnek gösterdim. Gösterdiğim gibi formda alıp uygulayın. Teknik yetenekleri ve yaklaşımı gösteriyorum. Sistemi benim yerimdeki yapılandırmayı ve kalibre etmeniz gerekir. Bunu anlamak önemlidir ve kararı dikkatlice uygulayın. Sadece zarar verilecek.

IPSet'te ayrı bir liste oluşturmayı ve iPERS'ye ayrı bir kural eklemeyi unutmayın. Önceden var olan listeyi kullanabilir ve önceki örnekten Kural eklediğinizde, ancak her şeyi çözmenizi öneririm. Sonraki analiz için çok daha uygun.

DDOS saldırısı sırasında bu kuralı cron'a ekleyin ve her dakika gerçekleştirin. Saldırı tamamlandıktan sonra, komut dosyası kapatılabilir. Prensip olarak, sürekli olarak ayrılabilirsiniz, ancak burada dikkatlice düşünmeniz ve nasıl görünmesi gerektiğini tahmin etmeniz gerekir. Ana prensip zararlı değildir.

Yanlış referans ile banya botları

194.67.215.242 - - "Post /index.php http / 1.1" 200 913 " g0dfw4p1.ru."" Mozilla / 5.0 (Windows NT 6.0; RV: 34.0) Gecko / 20100101 Firefox / 34.0 "" - "

Doğru referans alanı, HTTP veya HTTPS'yi içermeli veya boş olmalıdır. Aksi takdirde, hata durumunu güvenle engelleyebilir veya iade edebilirsiniz. Bölümde yaklaşık bu tasarımı sanal ana konfigürasyona ekleyin sunucu ().

İf ($ http_referer! ~ * ^ ($ | Http: // | https: //)) (Dönüş 403;)

Bundan sonra, NGINX yapılandırmasını kontrol edin ve yeniden okuyun.

# Nginxt -t # nginx -s yeniden yükle

Belirli bir referansla bir çeşit bot çıkarırsanız, yasaklayabilirsiniz. Bunu yapmak için bir koşulu ekleyebilir veya değiştirebilirsiniz. Örneğin, şöyle:

İf ($ http_referer \u003d "https://bots.ru/dostanim_tebya.html") (Dönüş 403;)

Ek olarak, tüm bu botları, yukarıdaki örneklerde olduğu gibi iPtables'a yasaklamak için basit bir komut dosyası kullanarak yapabilirsiniz. Bu arada, derhal yasaklanabilirler, http isteklerini, örneğin Ngrep kullanmadan önce bile, örneğin Ngrep kullanmadan önce bile, ancak bu daha zor bir görevdir. Hepsi nasıl yapılacağını bilmiyor, orada nüanslar var ve her şey Nginx'e aşinadır. Bu yöntemi uygulamak çok zor olmayacak.

Nginx Modülleri ile DDOS Koruması - Limit_Conn ve Limit_Req

Sunucudaki yükü azaltmak için başka bir basit yol paylaşacağım ve NGINX modüllerini kullanarak Kısmen DDO'lara karşı kısmen koruyacağım - limit_conn. ve limit_req. Bunları yapılandırmak zor değil, kısmen ilk modülün sonucu, başlangıçta açıklanan ilk iki DDOS koruma yöntemi ile kesişecektir. Özelleştirmek daha basittir, bu nedenle bu yöntemlerle başa çıkmazsanız, bunu deneyebilirsiniz.

Bu modüllerin anlamı, birinin siteyle olan aynı anda izin verilen bağlantıların eşzamanlı miktarını ve zamanın birimi başına başka bir bağlantıyı sınırlandırmasıdır.

Örneğimde, siteye bir IP numarası 50'den eşzamanlı bağlantıların sayısını ve aynı anda 2'den fazla olmayan dinamik içeriğe eşzamanlı isteklerin sayısını kısıtlayacağım. Bu bir sıçrama çözülecek ( patlamak.) 5'e kadar sorgular. Bu sıçramayı nasıl anlayacağımı açıklayacağım, çünkü tam olarak ne anlama geldiğini hemen anlamadım.

Saniyede ayarlanan isteklerin sayısını aşarsak, onların yürütülmesi geciktirilir ve belirtilen hızla kuyruğa yerleştirilirler. Bu sıranın boyutu, patlamanın değerine eşittir. Kuyrukta yeterli alan olmayan tüm talepler bir hatayla tamamlanacaktır. Yani, eğer istekler saniyede 4'tür, daha sonra 2 derhal gerçekleştirilecek ve bir başkası sıraya girecektir. Ve eğer 10, daha sonra 2'si hemen gerçekleştirilecektir, 5 saniyede 2 parçanın yürütülmesi için bir kuyrukta olacak ve gerisi bir hatayla tamamlanacaktır.

Bu koşullara dayanarak, bağlantı kısıtlaması bağlamda kurulmalıdır. sunucuve uygun olandaki dinamik içeriğe erişim yer. Aynı zamanda, direktiflerin kullanacağı bölgelerin açıklaması yapılmalıdır. http..

DDOS saldırılarına karşı korunmak için belirlenmiş kısıtlamaların uygulanması için NGINX yapılandırmasına bir örnektir.

Http (... limit_conn_zone $ binary_remote_addr zone \u003d perip: 10m; limit_req_zone $ binary_remote_addr zone \u003d dinamik: 10m oran \u003d 2r / s; ... Sunucu (... Limit_conn Perip 50; ... Liman \\ \\ .php $ ( ... limit_req zone \u003d dinamik patlama \u003d 5 nodeley; ...))))

Bundan sonra Nginx'i yeniden başlatın ve sınırların nasıl çalıştığını kontrol edin. Yapılan dinamik istek sayısındaki limit, tarayıcıya çok hızlı bir şekilde F5'e basarak görülebilir. Eğer yeterince sapansanız, yakında bir resim göreceksiniz

ve günlükleri hatalarla giriş:

2017/11/30 15:25:26 9773 # 9773: * 51482 Sınırlama istekleri, fazlalık: 5.664 bölgeye göre "Dinamik", istemci: 195.91.248.43, sunucu: hl.zeroxzed.ru, istek: "GET / HTTP / 2.0 ", Ev sahibi:" hl.zeroxzed.ru ", yönlendirici:" https://hl.zeroxzed.ru/2013/03/15/featured-image-vertical/ "

Bağlantıların sayısındaki sınır aynı yardımcı programı kontrol edebilir abGirişte anlattım.

017/11/30 15:38:56 9773 # 9773: * 53938 Bölgeye göre sınırlayıcı bağlantıları "Perip", istemci: 94.142.141.246, Sunucu: hl.zeroxzed.ru, istek: "GET / WP içeriği / Yüklemeler / 2013 /03/the-dark-knight-rises.jpg http / 1.0, ev sahibi: "hl.zeroxzed.ru"

Testin belirli bir sayfada yapılmaması gerektiğini unutmayın, o zaman dinamik içeriğin performansını sınırlandırmak için, ancak başka bir şey için alınacağını unutmayın. Örneğin, örneğimde olduğu gibi, resimde.

Kısıtlamalar verilirken, arama botlarının bu kısıtlamalara girmeyeceğini kontrol etmeyi unutmayın. Varsayılan olarak, sitede artan bir yük oluşturmamaya çalışırlar. Arzu edilirse, Yandex Robot, Robots.txt ile belirtilebilir, sitenizi ne kadar hızlı tarayın. Ve Robot Google, Webmaster ile aynı şeyi yapabilir.

Sonuç

Web sunucusunu daha az basit DDOS saldırılarından daha az bir şımarıklıktan koruymanın en basit yollarını gözden geçirdim. Gelen kanal kanalını basitçe dolduracak ciddi bir saldırı, korumamızı bile fark etmeyecektir. Bununla birlikte, bu yöntemlerin bazı saldırıların yansımasıyla etkinliğinden emin olmak zorunda kaldım.

Hala yardımcı programdan bile korunmayan çok sayıda web sunucusu var. ab :) Neyinden bahsettiğimi biliyorum, çünkü bu tür sunucular işe rastlar. Ayrıca, internette ve cekette bulunabilecek her türlü bot ve basit program var, yükler için hazır olmayan cesur siteler.

Başka bir yol var, tanımladığım kadar basit ve yönlendirmeleri ve çerezleri anlamayan botlardan etkilidir. Onu tanımlamadım, çünkü kontrol edecek bir şey yok ve bir makale yazmaktan yoruldu, çok büyük oldu. Uzun zamandır yazıp düzenledim, farklı sunucularda komut dosyaları ve ayarları toplayıp bir zamanlar yaptığımı hatırladım. Sonra tüm bunları ayrı ayrı kontrol etti.

Korumanın özü, NGINX'in yardımıyla, kullanıcıya belirli bir çerezler verdik ve istenen sayfayı yönlendiririz. Bot çerezleri veya yönlendirmeyi anlamıyorsa, düşer. Normal kullanıcılar hiçbir şey farketmez. Belki daha sonra size bu yöntemden bahsediyorum ve bir makale ekleyeceğim. Bu arada. Makalelerdeki değerler hakkında yorumlara sevindim.

Çevrimiçi Linux kursu

Son derece erişilebilir ve güvenilir sistemlerin nasıl yapıldığını ve sürdüreceğini öğrenmek için bir arzunuz varsa, tanışmayı öneririm. Çevrimiçi Kurs "Yönetici Linux" Otus'ta. Kurs yeni başlayanlar için değildir, kabul için ağlar hakkında temel bilgilere ihtiyacınız var ve Linux'u sanal olarak yüklemek. Eğitim 5 ay sürer, ardından kursun başarılı mezunları ortaklardan gelen görüşmelerden geçebilecektir. Size bu kursu ne verecek?
  • Linux mimarisinin bilgisi.
  • Modern Yöntem ve Veri Analizi ve Veri İşleme Araçlarının Masterlenmesi.
  • Gerekli görevler için yapılandırmayı seçme, işlemleri yönetme ve sistemin güvenliğini sağlama yeteneği.
  • Sistem yöneticisinin ana çalışma aletlerinin bulundurulması.
  • Linux temelinde inşa edilen ağların dağıtım, ayarları ve bakımı özelliklerini anlamak.
  • Gelişmekte olan problemleri hızlı bir şekilde çözme ve istikrarlı ve kesintisiz bir sistem çalışması sağlama yeteneği.
Giriş testinde kendinizi kontrol edin ve yazılım programının daha fazlasını görün.

Habré'deki blogumuzda, sadece Cloud Project'imizin 1COUn'umuzun gelişimiyle ilgili değil, aynı zamanda bazı teknolojik görevlerin nasıl çözüleceğini de anlatıyoruz. 2015 yazında, NGINX Projesi Blogunda, Yardımı'nın DDOS saldırılarına nasıl dayanabileceği hakkında bir malzeme ortaya çıktı. Not bizim için ilginç görünüyordu, bu yüzden burada vurgularını veriyoruz.

Giriş: DDOS nedir

- "Bunu yansıtmak için hizmete dağıtılmış saldırı", genellikle çeşitli kaynaklardan gelen trafiğini bombalayarak, genellikle bir web sitesi, erişilemeyen bir hizmeti verme girişimidir. Sonuç olarak, ona hizmet eden sunucu, aşırı yüklenme ile başa çıkmadan normal şekilde çalışmaktan vazgeçer.

Bu işletmenin standart diyagramı, sisteme bu kadar yeni bağlantı ve istek tarafından "işkence etmek", böylece ağ akışıyla baş etmeyi durdurur veya bununla çalışması imkansız hale gelmiştir.

Özellikler DDOS saldırıları

Uygulama düzeyinde, DDOS saldırısı belirli bir sistemde güvenlik açıkları kullanabilen özel programlar (Botlar) tarafından yapılır. Örneğin, çok sayıda paralel bileşik kontrol ederek keskinleştirilmemiş bir sistem, çok sayıda bu "konektör" oluşturularak devre dışı bırakılabilir. Aktif durumda, zaman zaman onlara küçük hacimler arasında oturduklarında tutulabilirler. Başka bir seçenek, sistemi çok sayıda istekle doldurmak veya bu taleplerin yeterince ağır olmasıdır. Bu nedenle, fiili bağlantılarla ilgili değildir, bu nedenle botlar aracılığıyla, çok sayıda sorgu göndermek ve hızlı bir şekilde birçok yeni bağlantı oluşturmak çok kolaydır.

Aşağıda, tanınabilecekleri DDOS saldırılarının teknik özellikleri ve bunlarla başa çıkmak için:

  • Trafik genellikle saldırı için amaçlanan sabit sayıda IP adresinden gelir. Sonuç olarak, her bir adres, gerçek bir kullanıcının tipik olmayan anormal sayıda bağlantı ve sorgu yapar. Referans için: Her zaman benzer bir hizalama değildir, bir DDOS saldırısını gösterir. İleri (anonim) proxy kullanırken benzer eylemler gözlemlenebilir, çünkü sunucudaki IP adresi hizmet ettiği herhangi bir kullanıcıyı tanımlamak için kullanılır. Bununla birlikte, anonim bir proxy'den gelen olayların ve isteklerin sayısı, saldırı yaparken zamanlar daha az olacaktır.
  • Trafik üreten botlar hakkında, "Aşırı ısınma" sunucusu, bu trafiğin yoğunluğu gerçek kullanıcının üretebileceğinden çok daha yüksektir.
  • Kullanıcı aracısı istemci uygulama başlığı bazen standart dışı bir yapılandırmada görüntülenir.
  • Bazen bir saldırı referans başlığı tarafından tanınabilir.

DDOS saldırılarıyla mücadele etmek için nginx ve nginx plus özellikleri

Nginx ve Nginx Plus'ın birçok özelliği, DDOS saldırısı ile nasıl başa çıkılacağı soruları çözme konusunda paha biçilmez yardım sağlayabilir. İki yönde çalışır: gelen trafiğin yönetimi ve dahili sunucular tarafından dağıtımını kontrol ederek.
Sorgu Frekansı Sınırı
Gelen istek frekansını NGINX ve Nginx Plus üzerinden gerçek kullanıcıların değer özelliğine ayarlayabilirsiniz. Örneğin, kullanıcıların ana sayfanızı iki saniyede birleştirdiğine inanıyorsunuz. Ekipmanı bu frekansın bu frekansını sayfaya yapılandırabilirsiniz - dakikada 30.

Limit_req_zone $ binary_remote_addr zone \u003d bir: 10m rarate \u003d 30r / m; Sunucu (... konum /login.html (limit_req bölgesi \u003d bir; ...)))
Limit_req_zone yönergesi, belirli bir anahtar için ayarlanan istek sayısını kaydetmek için genel bir bellek bölgesini oluşturur. Bu durumda, bu bir istemci IP adresidir ($ Binary_Remote_addr). Block /Login.HTML'deki Limit_Req Direktifi bu bellek bölgesini ifade eder.

Bağlantı sayısının kısıtlanması
Bir müşterinin IP adresinden gelebilecek bağlantı sayısına kısıtlamalar getirebilirsiniz. Yine, gerçek bir kullanıcının değer özelliklerini takdir etmek. Örneğin, bir IP'den en fazla 10 gol veya sitenizin alanına / deposuna yükleyebilirsiniz.

Limit_Conn_Zone $ Binary_Remote_Addr Zone \u003d Addr: 10m; Sunucu (... Konum / Mağaza / (Limit_Conn Addr 10;)))
Önceki örnekte olduğu gibi, Limit_Conn_Zone Direktifi, belirli bir anahtar için talepleri depolamak için ortak bir bellek bölgesi oluşturur - $ binary_remote_addr istemci IP adresi. Sınır_conn Vücudun / Mağazada bu bellek bölgesini belirtir ve her istemci IP'den kısıtlama 10 bağlantısını ayarlar.

Yavaş bileşiklerin kapanması
Verileri çok nadiren gönderen bağlantıları kapatabilirsiniz; bu, ana hedeflerinin uzun süre boyunca açık olması ve yeni bileşikleri engelleyebilecek bir işaret olabilir. Bu tür bir saldırı programı slowloris denir. Client_Body_Timeout Direktifi, müşterinin vücudundaki kayıtlar arasındaki NGINX bekleme süresini kontrol eder. Client_header_Timeout Direktifi, başlıklar için aynı şeyi yapar. Varsayılan olarak, her iki durumda da 60 saniyedir. Aşağıdaki örnekte, bu aralık 5 saniye olarak ayarlanır.

Sunucu (Client_Body_Timeout 5S; Client_header_Timeout 5s; ...)

"Kara Listede" IP Adresleri Yapma
Saldırak için kullanılan ipi tanırsanız, onları reddi, nginx ve nginx plus yönergesini kullanarak "Kara Listeye" ekleyebilirsiniz. Bu adreslerden gelen taleplere artık yanıt vermez. Örneğin, saldırının 123.123.123.1 123.123.123.16 aracılığıyla Bölgeden 123.123.123.1'den geldiğini öğrenirseniz:

Yer / (Deny 123.123.123.0/28; ...)
Böyle bir adres varsa:

Yer / (inkar 123.123.123.3; inkar 123.123.123.5; inkar 123.123.123.7; ...)

İzin verilen bir IP adres listesi oluşturma
Sitenize veya başvurunuza erişimin önceden bilinen bir IP adres aralığı için açık olduğunu varsayalım. Yönergeleri İzin Ver ve Reddetme'yi kullanarak kaydedebilirsiniz. Örneğin, yalnızca yerel ağ adresleri tarafından erişim sağlayabilirsiniz.

Konum / (izin ver 192.168.1.0/24; hepsini reddet; ...)
Yüklü aralığın koşullarını karşılamayan IP adresleri engellenecektir.

Trafik atlamalarını önlemek için önbellekleme
NGINX ve NGINX Plus'ı yapılandırabilir, böylece saldırı sırasında trafik atlamalarını önbelleğe alma ve parametrelerine geçer, iade sorgularını görmezden gelirler. Bu, aşağıdaki seçeneklerle yapılabilir:

Proxy_Cache_USE_STALE'deki Güncelleme parametresi, Nginx'i önbelleğe güncelledikten sonra, yalnızca bir istek gönderilmeli ve dahili sunuculardan güncelleme alınana kadar müşteriler için bu tür nesnelere açık bir şekilde erişebilmelidir.

Proxy_cache_key tarafından tanımlanan anahtar genellikle yerleşik varyasyonlardan oluşur (varsayılan anahtar, $ program $ Proxy_host $ Request_uri'nin üç varyasyonu vardır). Değer $ query_string içeriyorsa, nadir bir sorgu hatları gönderen saldırı fazla önbelleğe almaya neden olabilir. Acil bir ihtiyaç yoksa, bu seçeneği anahtarı içermesi önerilmez.

Kilit sorgusu
Aşağıdaki istek türlerini engellemek için Nginx ve Nginx Plus'ı yapılandırabilirsiniz:
  • Risk altında olabilecek belirli bir URL'ye sorgular.
  • Kullanıcı ajan başlığının normal müşteri trafiğiyle eşleşmeyen bir değeri olduğu istekleri.
  • Referans başlığının saldırı ile ilgili olarak tanımlanabileceği istekleri.
  • Diğer başlıkların şüpheli göründüğü talepler.
Örneğin, saldırının URL /FOO.php'de hedeflendiğine karar verirseniz, sayfadaki tüm istekleri engelleyebilirsiniz:

Yer /foo.php (hepsini reddetmek;)
DDOS saldırılarının kullanıcı aracısı başlıklarında bir foo veya çubuk değeri olduğunu öğrenirseniz, bunları engelleyebilirsiniz:

Yer / (eğer ($ http_user_agent ~ * foo | Bar) (Dönüş 403;) ...)
Aynı prensipte, bir saldırı tehdidini gösteren değerleri olan diğer başlıklarla çalışabilirsiniz.

İç Sunuculara Bağlantı Bağlantıları
Nginx ve Nginx Plus aynı anda, iç sunucuların kendilerine izin verdiğinden çok sayıda bağlantı ile kontrol edilebilir. NGINX PLUS kullanarak, dahili sunucuların her birine bağlantı sayısını sınırlayabilirsiniz. Siteye hizmet veren grubun iki iç sunucusuna bağlantı sayısını sınırlamak istediğinizi varsayalım.

UpStream Web Sitesi (Sunucu 192.168.100.1:80 Max_Conns \u003d 200; Server 192.168.100.2:80 Max_Conns \u003d 200; Sıra 10 zaman aşımı \u003d 30s;)
Max_conns parametresi, her sunucu için NGINX Plus tarafından açık olan maksimum bağlantı sayısını ayarlar. Kuyruk direktifi, tüm grup sunucuları sınırlarını aşarsa, kuyruktaki istek sayısını sınırlar. Aynı satırda, zaman kuyruğunda sıraya kaydedilir - 30 saniye.

Aralık tabanlı saldırı
Aralık fonksiyonu başlığının çok büyük bir değerle gönderildiği bir saldırı seçeneği vardır, bu da tampon taşmasını sağlayabilir. Nginx ve Nginx Plus'ın bu tür bir saldırı ile nasıl başa çıktığını bulmak için okumanızı tavsiye ederiz.
Büyük indirmelerle nasıl yönetilir
DDOS saldırıları genellikle kritik bir önyükleme seviyesine yol açar. Nginx ve Nginx Plus'ın nasıl öğretileceğini ve bu sorunla başa çıkabileceğini okuyun, yapabilirsiniz.

DDOS saldırı tespiti

Şimdiye kadar, DDOS saldırılarının etkilerini yumuşatmak için Nginx ve Nginx Plus'ı nasıl kullanabileceğinizi tartıştık. Ancak bu sunucuları kullanarak saldırıyı tespit etmek mümkün müdür? Nginx Plus durum modülü, dahili sunucular üzerinden dağıtılan ayrıntılı metrik trafik kayıtları sağlar. Bu araç, anormal trafik durumunu tanımanıza izin verir. NGINX Plus, sisteminin mevcut durumunun grafiklerinin görüntülendiği, Site Yönetimi paneli işlevinin işlevine sahiptir (örneğin burada bir örnek görüntülenebilir: demo.nginx.com/status.html). Aynı göstergeler API üzerinden mevcuttur, kendi veya üçüncü taraf izleme sistemlerine gömülebilir ve sıradışı koşulları uyarmak için zaman içinde trafiği izleyebilirler.

Özet

Nginx ve Nginx Plus, DDOS saldırılarının nasıl durdurulacağı soruları çözme konusunda paha biçilmez yardım sağlayabilir. Aynı zamanda, NGINX Plus, görünümlerini uyarmak için bu tür saldırılara karşı korumak için ek özelliklere sahiptir.

Site geliştirmedeki bir miktar para yardımcı olabilir ve tercüme edebilirsiniz.



Ubuntu işletim sisteminde çalışan NGIX Web sunucusunun korunmasını düşünün (prensipte - herhangi bir Linux).

Sel fikrine dayanan iki tür DOS / DDOS-saldırı vardır, yani mağdurların mağdurları çok sayıda pakete sahip.

Sel farklıdır: ICMP Sel, Snel, UDP-Sel ve HTTP Sel. Modern DOS Botları, tüm bu saldırıları aynı anda kullanabilir, bu yüzden her birinden yeterli koruma ile ilgilenmelisiniz.

  • İcmp sel
  • Bant genişliğini tıkanmanın ilkel yöntemi ve ICMP Echo (PING) için Talepler Talepleri içindeki monoton parselinde ağ yığını üzerinde yük oluşturma yöntemi. Trafik akışlarını her iki yönde de analiz ederek tespit edilir: ICMP taşkın saldırısı sırasında neredeyse aynıdır. Neredeyse ağrısız bir mutlak koruma yöntemi, ICMP yankı isteklerine verilen yanıtları devre dışı bırakmaya dayanır:

    kaydet ve Uygula:

    Sudo sysctl -p.
  • Sülük
  • Yaygın yollardan biri sadece iletişim kanalını puanlamak için değil, aynı zamanda işletim sistemi ağ yığını artık yeni bağlantı istekleri alamadığında böyle bir duruma girin.
    Mevcut olmayan bir dönüş adresi ile SYN paketinden çok sayıda eşzamanlı TCP bağlantısını başlatma girişimine dayanarak. Birkaç kez cevap ACK paketini erişilemez bir adrese göndermek için, çoğu sistem kuyruğa tanımlanamayan bir bağlantı kurar. Ve sadece N-TH'den sonra, bağlantı kapalıdır.
    ACK paket akışı çok büyük olduğundan, sıra tamamen tamamlanır ve çekirdek yeni bir bağlantı açmaya çalışmayı reddetti.
    En akıllı dos botları, yalnızca hayati bağlantı noktalarını açmak için istekleri göndermek için saldırıya başlamadan önce sistemi analiz eder. Böyle bir saldırıyı tanımlarım: Hizmetlerden birine bağlanmayı denemek için yeterli.

    Savunma olayları genellikle şunları içerir:
    Artan sıra "yarı açık" TCP bağlantıları,
    Kesinti zamanını "yarı açık" bileşiklerin azaltılması,
    TCP Syncookies Mekanizmasını Açma,
    Bir IP'den belirli bir bağlantı noktasına kadar maksimum "yarı açık" bağlantı sayısının kısıtlanması "

  • Udp sel
  • Olağan bant genişliği tırmanma yöntemi. Çeşitli UDP hizmetlerinin limanlarında UDP paketlerinin sonsuz öncülüğüne dayanarak. Bu tür hizmetleri dış dünyadan keserek kolayca elimine ederek ve limiti Ağ Geçidi tarafındaki DNS sunucusuna birim zaman başına bağlantı sayısına ayarlayın:

    Iptables -i Giriş -P UDP - PRIT 53 -J DROP -M IPLIMIT --PLIMIT-Yukarıdaki 1

    Büyük olasılıkla çekirdeği isyan etmeniz gerekir. Ama çoktan .......

  • Http sel
  • Selleme en popüler yöntemlerinden biri. Web sunucusunu yüklemek için 80. bağlantı noktasına sonsuz gönderilmeye dayanarak, diğer tüm istekleri işleyememektedir.
    Selin amacının, web sunucusunun kökü olmadığı, ancak kaynak yoğun görevlerini yerine getiren veya veritabanıyla çalışan komut dosyalarından biri olur. Her durumda, başlangıç \u200b\u200bsaldırısının göstergesi, Web sunucusu günlüklerinin anormal derecede hızlı bir şekilde büyümesine hizmet edecektir.
    HTTP-Sel Kontrol Yöntemleri, saldırının etkisini azaltmak ve ayrıca çeşitli teknikleri kullanarak dos-botları ekranlamak için bir Web sunucusu ve veritabanını ayarlamaktadır.

    İlk olarak, aynı anda veritabanına maksimum bağlantı sayısını artırmanız gerekir.
    İkincisi, Apache Web Sunucusuna kolay ve üretken bir Nginx'i yüklemek için, istekleri önbelleğe alır ve statik verir. Bu, yalnızca DOS saldırılarının etkisini azaltmayacak, ancak sunucunun büyük yüklere dayanmasına izin verecek olan "olması gerekir" listesinden bir çözümdür.
    Örneğin:

    Nano /etc/nginx/nginx.conf.
    # Kullanılan maksimum dosya sayısını arttırın
    worker_rlimit_nofile 8192;
    ## iş akışlarının sayısı, çekirdek sayısına koymak önerilir.
    işçi_processes 1;
    # Verimlilikteki artışa yol açan GETTIMEOFDAY SYSTEM ARAMASI () sayısını azaltır
    Timer_Resolution 100ms;
    # Direktifi, iş akışlarının önceliğini -20 ila 20 (negatif bir sayı daha yüksek öncelik anlamına gelir).
    Worker_priority -5;

    etkinlikler (
    # Maksimum bağlantı sayısını arttırın
    Worker_connections 2048;
    # Bileşik işleme için etkili bir epoll yöntemi kullanın
    Epoll kullanın;
    }
    http (
    # SendFile ()'yı etkinleştirin. SendFile () kullanarak sistem çağrıları kaydeder, veri kopyalamanın sayısını azaltır
    Sendfile açık;
    Çıkış_buffers 2 64K;

    gzip açık;
    gzip_min_length 1100;
    GZIP_BUFFERS 64 8K;
    gzip_comp_level 3;
    gzip_http_version 1.1;
    Gzip_proxied herhangi biri;
    GZIP_TYPES Metin / Düz Uygulama / XML Uygulaması / X-JavaScript Metin / CSS;
    # Canlı bağlantıların kapatılmasında zaman aşımını kapatın
    KeepAlive_Timeout 0;
    # Yanıt başlığında Nginx sürümünü vermeyin
    Server_tokens kapalı;
    # Zamanları düşür
    reset_timedout_connection açık;
    Direktif, oturumların durumunun depolandığı bölgeyi açıklar. Oturum değerleri belirli bir değişken tarafından belirlenir.
    limit_req_zone $ binary_remote_addr zone \u003d bir: 10m oran \u003d 1r / s;

    sunucu (
    80 varsayılan olarak dinleyin;
    server_name localhost;

    access_log /var/log/nginx/localhost.access.log;

    yer / (
    Kök / var / www /;
    dizin index.html index.htm index.php;
    Open_file_cache max \u003d 1024 inaktif \u003d 600s;
    Open_file_cache_valid 2000s;
    Open_file_cache_min_uses 1;
    open_file_cache_rors açık;
    }
    Konum \\ \\ .php $ (
    Limit_Req zone \u003d bir patlama \u003d 5;
    Fastcgi_pass Unix: //tmp/php5-fpm.sock;
    Fastcgi_index index.php;
    Fastcgi_param script_filename / var / www $ fastcgi_script_name;
    fastcgi_params dahil;
    Fastcgi_hide_header "önbellek kontrolü";
    }
    Konum ~ /.ht (
    HEPSİNİ İNKAR ETMEK;
    }
    Max sona ermesi; # Dikkat !!! Bu dize süresi doluyor!
    Add_header Son değiştirilmiş $ Sent_http_expires;
    }


    Gerekirse, bir adresden eşzamanlı bağlantıların sayısını sınırlayan NGNX Module NGX_HTTP_LIMIT_REQ_MODULE'yi kullanabilirsiniz. Kaynak-yoğun komut dosyaları, gecikmeleri kullanarak botlardan korunabilir, "Click Me", çerezleri ve "insanlığı" kontrol etmeyi amaçlayan diğer teknikler yazıyor.

    Sistemdeki DDOS-Storm'un çöküşü sırasında umutsuz bir pozisyona girmemek için, bunları böyle bir duruma iyice hazırlamak gerekir:

    1. Harici ağa doğrudan erişimi olan sunucular, basit ve ham bir uzaktan bir yeniden başlatma için hazırlanmalıdır (SSHD Rus demokrasisinin babasını kurtarır). Büyük avantaj, ana kanalın bir stabbard durumunda sunucuya erişebileceğiniz, ikinci, idari, ağ arayüzünün varlığı olacaktır.
    2. Sunucuda kullanılan yazılım (yazılım) her zaman güncel olmalıdır. Tüm delikler bozulur, güncellemeler yüklenir (bu arada, birçok kişinin takip etmemesi için basit bir tavsiye). Servislerdeki DOS saldırılarından korunacaktır.
    3. İdari kullanıma yönelik tüm tüm dinleme ağ hizmetleri, kendilerine erişememesi gereken her şeyden güvenlik duvarı tarafından gizlenmelidir. Sonra saldırgan onları DOS saldırısı veya grutorlar için kullanamayacak.
    4. Sunucuya (en yakın yönlendirici) yaklaşımlarda, bir trafik analizi sistemi kurulmalı (yardım için netflow), bu da başlangıç \u200b\u200bsaldırısını öğrenmenize ve zamanında önlemek için önlemler almanızı sağlar.

    Örneği on saniye içinde tekrarlayın

    Kaydet ve Uygula:

    Sudo sysctl -p.

    Bu konuda gösterilen tüm teknikler, makinenin kaynaklarını harcamak niyetinde olan DDOS saldırılarının etkinliğini azaltmayı amaçlamaktadır.
    Selden, kanal çöpünü puanlayan, kendisini savunmak neredeyse imkansızdır ve tek doğru olanı, ancak her zaman mümkün olmayan bir yöntem "anlamın saldırısını mahrum etmek".
    Elinizde gerçekten geniş bir kanalınız varsa, küçük bir botnet trafiğini kolayca kaçırır, ardından% 90 saldırının sunucunuzdan korunmasını düşünün. Korumak için daha sofistike bir yol var.
    Farklı ana kanallara bağlı birçok yinelenen sunucu içeren dağıtılmış bir bilgisayar ağının organizasyonuna dayanır.
    Hesaplama gücü veya kanal bant genişliği sona erdiğinde, tüm yeni istemciler başka bir sunucuya yönlendirilir (veya yuvarlak robin prensibindeki sunucularda "smear").
    Bu neredeyse gerçek dışı doldurmak için çok pahalı, ancak çok kalıcı bir yapıdır.
    Başka bir veya daha az etkili bir karar, Pahalı Cisco Trafik Anomali Dedektörü ve Cisco Guard satın almaktır.
    Bir pakette çalışmak, başlangıç \u200b\u200bsaldırısını bastırabilirler, ancak öğrenme ve analiz koşullarına dayanan diğer çözümler gibi, arızadır.
    Bu nedenle, bu tür bir koruma üzerine onbinlerce para kazanıp çıkarmayacağınızı düşünmelisiniz.

    "Sansürlü, başladı. Ne yapmalı?"

    Ana şey panik değil. "Isıtılmış" botların saldırısının derhal başlangıcından önce, paketlerin akışını saldıran makineye aşamalı olarak arttırır. Anı yakalamak ve aktif eylemlere başlamak önemlidir. Doğru şebekeye bağlı yönlendiricinin bu daimi izlenmesinde yardımcı olacaktır (NetFlow grafik analizi). Sunucu kurbanında, saldırının başlangıcını uygun yollarla belirlemek mümkündür.

    Sn-sel'in varlığı kolayca ayarlanır - "yarı açık" TCP bağlantılarının sayısını sayar:

    Değerler, ortalamadan birkaç kez daha yüksek, düşünmek için zemin verir. Sonra, bağlantı isteklerinin gittiği IP adreslerinin listesini görüntüleyin:

    ETH1 arayüzünün var olduğundan emin olun. Kolay kontrol edin - ifconfig. Bu durumda sizin yerini alır.

    Gösterge, bir bağlantı noktasına (örneğin, bir Web sunucusu kökü veya belirli bir CGI betiği) amaçlanan farklı IP'lerden paketlerin büyük bir monotonluğunun (ve yararlı bilgiler içermez).
    Sonunda, IP adreslerinden düşmeye başlayarak (yönlendiricinizde yaparsanız daha fazla etkili olacak):

    Bu size bazı olasılıklar (çok küçük; genellikle, sağlayıcı / ana bilgisayara bağlı oturum-sunucu günlükleri ile birlikte, kütük, çekirdek, güvenlik duvarı ve IP listesine) ile iletişime geçmek için kullanmanız gereken kaynak IP adresi ayarlanmıştır. tanımlanan adresler).
    Çoğu, elbette, bu mesajı yoksay (ve trafiğin ödemesiyle olan barındırma da mutlu olacak - DOS saldırısı karlarını getirecek) veya sadece sunucunuzu kapatır. Ancak her durumda, mutlaka yapılmalıdır - DDO'lara karşı etkili koruma sadece gövde kanallarında mümkündür. Yalnız, sunucu kaynaklarının tükenmesini amaçlayan küçük saldırılarla başa çıkacaksınız, ancak az ya da çok ciddi bir DDOS "Ohm'dan önce savunmasız olacaktır.

    Her şeyi buradan kopyalamanıza ve yapılandırmaya girmenize gerek yok. Önce kontrol edin, parametre zaten tanımlanmış ve yeniden tanımlamaya değer. Örneğin

    cat /etc/sysctl.conf | grep net.ipv6.conf.lo.disable_ipv6

    İki sunucu göndereceğiz: Frontend (filtre sunucusunun rolünü yürütecektir: Nginx, Iptables, NaxSi \\ moducurity, Fail2ban vb.) Ve arka uç (koruyucu web uygulaması). Bu yazıda, pratik olarak Frontend Sunucusu tarafından kötü amaçlı trafik filtreleme örnekleri açıklanacaktır.

    1. OS optimize etmek

    İlk şey, Ağır yükler için ön cephe sunucusundaki işletim sistemini optimize ediyor. /Etc/sysctl.conf dosyasını düzenleyin:

    ## RAM'in optimizasyonu
    kernel.shmmax \u003d xxx
    Kernel.shmall \u003d xxx

    ## Mesaj çıkışı alt sisteminin optimizasyonu
    Kernel.msgmnb \u003d 65536.
    Kernel.msgmax \u003d 65536.

    ## Takas ile çalışmanın optimizasyonu
    vm.swappiness \u003d 10.
    vm.dirty_ratio \u003d 40.
    vm.dirty_background_ratio \u003d 5.

    ## Dosyalarla çalışma alt sisteminin optimizasyonu ("Çok fazla açık dosya düzeltmesi")
    Fs.file-max \u003d 2097152

    ## ağ alt sistemi optimizasyonu
    net.ipv4.ip_forward \u003d 1.
    net.core.somaxconn \u003d 65535
    net.netfilter.nf_conntrack_max \u003d 10000000.
    net.netfilter.nf_conntrack_tcp_loose \u003d 0.
    net.netfilter.nf_conntrack_tcp_timeout_established \u003d 1800.
    net.netfilter.nf_conntrack_tcp_timeout_close \u003d 10.
    net.netfilter.nf_conntrack_tcp_timeout_close_wait \u003d 10.
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait \u003d 20.
    net.netfilter.nf_conntrack_tcp_timeout_last_ack \u003d 20.
    net.netfilter.nf_conntrack_tcp_timeout_syn_recv \u003d 20.
    net.netfilter.nf_conntrack_tcp_timeout_syn_sent \u003d 20.
    net.netfilter.nf_conntrack_tcp_timeout_time_wait \u003d 10.
    net.IPV4.TCP_CONGESTION_CONTROL \u003d HYBLA
    net.ipv4.tcp_slow_start_after_idle \u003d 0.
    Net.ipv4.ip_local_port_range \u003d 1024 65000
    net.ipv4.ip_no_pmtu_disc \u003d 1.
    net.ipv4.route.flush \u003d 1.
    net.ipv4.route.max_size \u003d 8048576.
    net.ipv4.icmp_echo_ignore_broadcasts \u003d 1.
    net.ipv4.icmp_ignore_bogus_error_responses \u003d 1.
    net.IPV4.TCP_MEM \u003d 65536 131072 262144
    net.ipv4.udp_mem \u003d 65536 131072 262144
    net.IPV4.TCP_RMEM \u003d 4096 87380 33554432
    Net.IPV4.UDP_RMEM_MIN \u003d 16384.
    net.IPV4.TCP_WMEM \u003d 4096 87380 33554432
    Net.IPV4.UDP_WMEM_MIN \u003d 16384.
    net.ipv4.tcp_max_tw_buckets \u003d 1440000.
    net.IPV4.TCP_TW_RECYCLE \u003d 0.
    net.ipv4.tcp_tw_reuse \u003d 1.
    net.IPV4.TCP_MAX_ORPHANS \u003d 400000.
    net.IPV4.TCP_WINDOW_SCALING \u003d 1.
    net.IPV4.TCP_RFC1337 \u003d 1.
    net.ipv4.tcp_syncookies \u003d 1.
    net.ipv4.tcp_synack_retries \u003d 1.
    net.ipv4.tcp_syn_retries \u003d 2.
    net.ipv4.tcp_max_syn_backlog \u003d 16384.
    net.IPV4.TCP_TIMESTAMPS \u003d 1.
    net.IPV4.TCP_SACK \u003d 1.
    net.IPV4.TCP_FACK \u003d 1.
    net.IPV4.TCP_ECN \u003d 2.
    net.ipv4.tcp_fin_timeout \u003d 10.
    net.ipv4.tcp_keepalive_time \u003d 600.
    net.ipv4.tcp_keepalive_intvl \u003d 60.
    net.ipv4.tcp_keepalive_probes \u003d 10.
    net.ipv4.tcp_no_metrics_save \u003d 1.
    net.ipv4.conf.all.Accept_redirects \u003d 0.
    net.ipv4.conf.all.send_redirects \u003d 0.
    net.ipv4.conf.all.Accept_source_route \u003d 0.
    net.ipv4.conf.all.rp_filter \u003d 1.

    Kernel.shmmax ve Kernel.shmall parametrelerinin değerleri RAM hacmine göre hesaplanır. Saymak için, komut dosyasını kullanabilirsiniz:

    #! / Bin / Bash # Basit shmsetup script place_size \u003d `GetConf page_size` phys_pages \u003d` GetConf _Phys_Pages` shmall \u003d `expr $ phys_pages / 2` shmmax \u003d` expr $ shmall \\ * $ page_size` echo kernel.shmmax \u003d $ shmmax yankı kernel.shmall \u003d $ shmall

    Bu parametreler, sistemin çalışmasını yüksek yükler için optimize eder. Değişikliklerin uygulanması "systl -p" komutu veya yeniden başlatılması ile yapılır.

    2. İPTA'lar.

    AŞAĞIDAKİ AŞAĞIDAKİ ARKADAŞLARA ATAĞIYOR

    ## Geçersiz paketleri engelleme
    Iptables -a girişi -i Eth0 -M Conntrack - UtState Geçersiz -J Bırak
    ## SYN bayrağına sahip olmayan yeni paketleri engelleme
    Iptables -a girişi -i eth0 -p TCP! --Syn -M ConnTrack - CCTState New -J Bırak
    ## Standart olmayan MSS değerlerini engelleme
    Iptables-O giriş -i ETH0 -P TCP -M CONTRACK - UCTSTATE YENİ -M TCPMSS! --MSS 536: 65535 -J Bırak
    ## parçalanmış paketleri engelleme
    Iptables -a girişi -i eth0 -f -j bırak
    ## Yanlış TCP bayraklı paketleri engelleme
    Iptables -a Giriş -i Eth0-P TCP --TCP-Flags Fin, Syn, RST, PSH, ACK, URG NOT -J Bırak
    Iptables -a Giriş -i ETH0-P TCP --TCP-Flags Fin, SYN Fin, Syn -j Bırak
    Iptables -a girişi -i Eth0-P TCP --TCP-Flags Syn, RST SYN, RST -J Bırak
    Iptables -a Giriş -i Eth0-P TCP --TCP-Flags Syn, Fin Syn, Fin -J Bırak
    Iptables -a girişi -i Eth0-P TCP --TCP-Flags Fin, RST Fin, RST -J Bırak
    Iptables -a Giriş -i Eth0-P TCP --TCP-Flags Fin, ACK Fin -J Bırak
    Iptables -a Giriş -i ETH0-P TCP --TCP-Flags ACK, URG URG -J Bırak
    Iptables -a Giriş -i Eth0-P TCP --TCP-Flags ACK, Fin Fin -J Bırak
    Iptables -a girişi -i Eth0-P TCP --TCP-Flags ACK, PSH PSH -J Bırak
    Iptables -a girişi -i eth0 -p TCP --TCP-Flags Tüm tüm -J Bırak
    Iptables -a girişi -i Eth0-P TCP --TCP-Flags Hepsi hiçbiri -J Bırak
    Iptables -a girişi -i eth0 -p TCP --TCP-Flags Tüm yüzgeçleri, PSH, URG -J Bırak
    Iptables -a Giriş -i Eth0-P TCP --TCP-Flags Tüm Syn, Fin, PSH, URG -J Bırak
    Iptables -a Giriş -i Eth0-P TCP --TCP-Flags Tüm Syn, RST, ACK, Fin, Urg -J Bırak
    ## alışveriş limanları
    Iptables -n Port Tarama
    Iptables -a Port Tarama -P TCP - TCP-Flags Syn, ACK, Fin, RST RST -M Sınırı --Limit 1 / s --Limit-Patch 2 -J dönüş
    Iptablessa Port Tarama -J Bırak

    Web sunucusuyla bağlantı sayısını sınırlıyoruz:

    Iptables -a girişi -i Eth0 -O ETH1 -P TCP --SYN -M Multiport - Ports 80,443 -M Connlimit --Connlimit-Yukarıdaki 30 --Connlimit-maske 32 -J Bırak
    Iptables -a girişi -i Eth0 -O ETH1-P TCP -M Multiport - Ports 80,443 -J kabul

    Kurallar, her harici adres için saniye başına ayarlanan oturum sayısını sınırlayacaktır. Web uygulamasının türüne bağlı olarak değer ayrı ayrı seçilir. Kural olarak, daha fazla birleşme için 30 değer yeterli olacaktır.

    3. nginx

    3.1 Blok Yedekli Temyiz

    Sunucuya aşırı erişimi sınırlayacak şekilde, ön menteki sunucudaki Nginx'i yapılandırırsınız. VHOST dosyasını düzenleyin:

    # Nano / etc / Nginx / Sit-Enabled / Frontend

    Limit_Req_zone $ Binary_Remote_addrzone \u003d Site: 10m oran \u003d 10r / s;
    Sunucu (
    Dinle 80;
    Server_name sitesi;
    ...
    }
    yer / (
    Proxy_pass ...
    ...
    Limit_Req Zone \u003d Site Burs \u003d 20;
    limit_req_log_level hatası;
    limit_req_status 503;
    ...
    }

    Böylece, NGINX, saniyede 10'dan fazla istek (parametre hızı) olan arka uç sunucuya müşteri erişimine devam edecektir. Aşırı temyizler kuyrukta biriktirilecek ve proxy, temyizlerin "havuzu" olarak serbest bırakılır. Temyiz sayısı 20 (patlama parametresi) değerini aşıyorsa, cephede NGINX, havuz serbest bırakılıncaya kadar 503 hata vermeye başlayacaktır.

    3.2 şüpheli kullanıcıları engelle

    Kural olarak, meşru kullanıcıları kullanmayan usagents'ı engelleyeceğiz:

    # Nano /etc/nginx/nginx.conf.

    $ Http_user_agent $ bad_useragent ()
    / Etc / nginx / bad_useragents dahil;
    }

    # Nano / etc / nginx / bad_useragents

    ~ * nmap 1;
    ~ * nikto1 1;
    ~ * Wikto 1;
    ~ * SF 1;
    ~ * SQLMAP 1;
    ~ * BSQLBF 1;
    ~ * Acunetix 1;
    ~ * HAVIJ 1;
    ~ * AppScan 1;
    ~ * wpscan 1;
    ~ * MJ12Bot 1;
    ~ * Apacheebench 1;
    ~ * WordPress 1;
    ~ * Dirbuster 1;
    ~ * perl 1;
    ~ * Phpstorm 1;
    ~ * python 1;
    ~ * W3AF 1;
    ~ * Whatweb 1;
    ~ * Arachni 1;
    ~ * Xspider 1;
    ~ * Hydra 1;
    ~ * Kovazyonlar 1;
    ~ * OpenVAS 1;
    ~ * Visionutils 1;
    ~ * Synapse 1;
    ~ * Http_request2 1;
    ~ * GülzleHttp 1;
    ~ * Paros 1;
    ~ * Synapse 1;
    ~ * Python-urllib 1;

    Ayrı olarak, kullanıcı aracısı "WordPress" nin dikkatine değer. Korunan Web uygulaması CMS WordPress kullanmazsa veya "geri izleme" ve "ping-geri" işlevselliğinin kullanılması planlanmaz (büyük olasılıkla), kullanıcı aracısına yapılan istekleri engellemek, saldırıları engellemenizi sağlar WordPress'te böyle bir işlevselliğin uygulanmasının özelliklerini kullanarak. Bu tür saldırıların özelliklerini incelemek için olabilir.

    Bu basit kuralların uygulanması, web sitesinin DDOS-saldırılarına karşı minimum maliyetlerle yüksek kaliteli koruma sağlayacaktır.

    S. Diğer cepheler sunucu hizmetlerinin iyi korunmasının ve bir saldırganın uzaktan erişim (örneğin, SSH veya FTP) almasına izin vermeyeceğinden emin olun.

    Uçuk: Alternatif olarak, Nemesida WAF serbest - tamamen serbest, dinamik bir nginx modülü formunda sunulan, depodan yüklenmiş ve güncellenmiş, derleme gerektirmez, daha önce yüklü Nginx'e birkaç dakika içinde bağlanır. waf.penestit.ru/about/2511

    Bunun gibi oturabilirsin, kimseye dokunmazsın, sonra hizmetlerin yavaş çalıştığını, sitelerin yavaş çalıştığını söyleyip söylüyorsunuz, siteler 2-3 dakika açık 504 hatası üretmeyi başardı.
    Kaktüslerde üzgün tırmanmak ve var:

    Aşağıda olanları anlamanıza yardımcı olacak komutlar olacak ve tam olarak DDO'lar.

    İlk olarak, hangi günlüklerin bizim için en iyi komut çıktısını okumacağı ve PS ekibinin nasıl kullanılacağını açıkladığı detaylı olarak makaleyi okumanızı öneririm. Hepsi, hangi ana bilgisayarların saldırdığımızı ve sunucuda hangi darboğazların bulunduğunu anlamak bizim için yararlı olacaktır.

    Hangi takımlar ve ne belirleyebiliriz?

    Başlamak için, Apache işlemlerinin çalıştırılmasının numarasını görebilirsiniz. 20-30'dan fazla 20-30'dan fazla ise, bir şey öyle değil.

    Debian'daki Apache süreçlerinin sayısına bakıyoruz:

    PS AUX | GREP Apache | WC -L.

    CentOS'daki Apache işlemlerinin sayısına bakıyoruz:

    PS AUX | Grep httpd | WC -L.

    Bu komut sunucuya bağlantı sayısını görebiliriz:

    CAT / PROF / NET / IP_CONNTRACK | WC -L.

    Ayrıca, sunucuya sunucuya geldiği gösterge, 80 veya 443 bağlantı noktasındaki bağlantı sayısı olarak hizmet verebilir. İşte bu numarayı gösterebilecek takımlar:

    Netstat -na | GREP: 80 | WC -L Netstat -na | GREP: 443 | WC -L.

    Syn olarak hala çok çeşitli DDOD var. Aşağıda, aynı 80 ve 443 bağlantı noktalarının SYN taleplerinin sayısını belirlemenizi sağlayan bir komuttur:

    Netstat -na | GREP: 80 | GREP SYN | Sırala | Daha fazla netstat -na | GREP: 443 | GREP SYN | Sırala | Daha

    Ve bu komut, SYN isteği sayısını gösterir:

    Netstat -n -t | Grep syn_recv | WC -L.

    Aşağıdaki komut, etki alanının en çok hangi alanın çoğunu anlamamıza izin verecektir:

    Tcpdump -npi eth0 port alanı

    Şimdi her IP'den kaç tane istek geldiğini görelim. Bu komut tüm bağlantı noktalarını gösterir:

    Netstat -ntu | AWK "(1 $)" | Kesim -D: -F1 | Sırala | UNIQ -C | Sırala -NR | Daha

    benzer komutlar:

    Netstat -anp | GREP "TCP \\ | UDP" | | AWK "(1 $)" | Kesim -D: -F1 | Sırala | UNIQ -C | Sırala -N Netstat -Antu | AWK "5 $ ~ /: / (bölünmüş (5, A,": "); IPS [A] ++) ucu (için (IP'ler için), IPS, IP |" sırala -K1 -NR ")"

    Bu komut, yalnızca 80 bağlantı noktasına yapılan istek sayısını gösterir:

    Netstat -ntu | GREP ": 80 \\" | AWK "(1 $)" | Kesim -D: -F1 | Sırala | UNIQ -C | Sırala -NR | Daha

    Bu komut, 80 port için tüm istekleri gösterir, yani, yani, yani "Basitleştirilmiş" ancak "en eksiksiz" çıktı seçeneği:

    Netstat -na | GREP: 80 | Sırala | UNIQ -C | Sırala -NR | Daha

    En aktif IP'nin hesaplanması, BT isteklerinden hangi bağlantı noktalarının gittiğine de bakabilir. Örneğin, örneğin, IP 127.0.0.1 ikame edilir:

    Netstat -na | GREP 127.0.0.1

    Bu arada, Apache'da sunucu durumuyla yapılandırılmadıysanız, bu sunucunun durumu CLI'da görüntülenebilir:

    Apachectl durumu.

    Log dosyaları

    Global Apache günlükleri, Debian, genellikle orada:

    • /var/log/apache2/error.log.
    • /var/log/apache2/access.log.
    • /var/log/httpd/error.log.
    • /var/log/httpd/access.log.

    Global Nginx günlükleri var:

    /var/log/nginx/error.log.
    /var/log/nginx/access.log.

    Ayrıca, ana bilgisayarlar yapılandırılmışsa, sanal ana bilgisayarların günlüklerini görüntülemeyi unutmayın. Önünde "büyüdüğü" en büyük kütükle ilgileneceğiz.

    Bu günlüklerde bir anomalide arama yapmak gereklidir, yani kullanıcı ajanları olmayan (veya aynı), aynı IP'den çok sayıda istek, sanal bir ana bilgisayar belirlemeden, vb.

    Belirli IP'yi siteye istek sayısıyla tanımlamak için bu komutu yapabilirsiniz:

    Cat Access.log | AWK "(1 $ 'lık)" | Sırala | UNIQ -C.

    Ayrıca, logtop yardımcı programını kullanarak IP grubu ile istek üzerine istatistikler de alabilirsiniz.

    Başlamak için, bu yardımcı programı yükleyin:

    APT-GET Kurulum Git Libncurses5-dev Uthash-dev GCC # Doğru operasyon için paketleriniz yoksa git git clone https://github.com/julienpalard/logtop.git

    Ve şimdi istatistik alacağız:

    Kuyruk -f Access.log | AWK ("1 $ 'lık baskı; fflush ();") | Logtop.

    Aşağıdaki komut, popüler kullanıcı ajanlarını tanımlamamıza yardımcı olacaktır:

    Cat Access.log | Awk -f \\ "" (6 $) "| Sırala | UNIQ -C | Sırala -n

    Nasıl engellenir?

    Her neyse, Iptables'u durdurmalısınız. Büyük olasılıkla, özellikle ne olduğunu bilmiyorsanız, yapılandırılamaz. Daha önce, zaten nasıl kullanılacağı hakkında bir makale yazdım: "", bu yüzden sorunu burada ve şimdi sorunu çözmek için gerekli komutları vereceğim.

    Bu nasıl mümkün olduğu belirli bir IP'den 80 bağlantı noktası için TCP isteklerini engelle:

    Iptables -a Giriş -P TCP - Dokuma 80 -S 12.34.56.78 -J Bırak

    Bu böyle belirli bir IP'den tüm bağlantı noktaları için sorguları engelle:

    Iptables -a girişi -S 12.34.56.78 -J Bırak

    Listeyi görüntüle zaten engellendi Bu takımları verebiliriz:

    Iptables -L -n.

    Iptables -L -N --line numaraları

    İhtiyacımız olursa belirli bir IP'yi engellemek için çıkarın, bu komutu kullanabilirsiniz

    Iptables -D giriş -S 1.2.3.4 -J Bırak

    ya da mümkün kuralları numarasına göre silinOnun İPTABA'ları gözden geçirdikten sonra -NN -N -Line-Numbers komutunu:

    Iptables -D Giriş 6

    Tüm kuralları silmek için, Takımı kullanabilirsiniz:

    Iptables -f.

    DDOS'a karşı korumak için bazı önleme ...

    Bizi düşünmemiş botlardan koruyabilecek bazı kurallar vardır. Sunucuya bir yük oluşturur.

    Bir sonraki komutu yükleriz 80 bağlantı noktasında bir IP'den maksimum bağlantı sayısı:

    Iptables -a Giriş -P TCP - Doktor 80 -M Connlimit --Connlimit-Yukarıdaki 128 -J Damla Iptables-O giriş -P TCP - PROTS 80 -J Kabul

    Aynı I yapabilirsin. dNS için.:

    Iptables -a Giriş -P UDP - PROTS 53 -M CONNLIMIT --CONNLIMIT-Yukarıdaki 16 -J Damla Iptables-O giriş -P UDP - Dokuma 53 -J Kabul

    İPTBables'daki aşağıdaki kural, ismimizden bir ipucu önleyecektir. Kural olarak, DDOS sırasında, açılmamış bir bağlantıdaki yüklü SYN ve ACK bayrağına sahip bir paket alırız (bu bayrakların yalnızca SYN paketine cevabı vardır). Bu, birisinin adımızdan başka bir Syn Host Host gönderdiğini ve cevap bize geldiğini göstermektedir.
    Bu kurala göre, ev sahibimiz bir RST paketi ile cevap verecektir, saldırıya uğramış ana bilgisayar bağlantıyı kapattıktan sonra.

    Iptables -i Giriş -M ConnTrack - CCTState Yeni, Geçersiz -P TCP - TCP-Flags Syn, ACK SYN, ACK -J Reddetme --Reject - TCP-Reset

    Iptables-Save\u003e /etc/iptables.Rules

    Başka ne yapabilirim?

    Çekirdeğin "çıkışı" bir kısmını önlemez, Apache ve Nginx'in (değer ise) iyi bir şekilde ayar yapılması, ARAIL2BAN, MOD_EVASIVE, ModSecurity gibi saldırılara karşı korumak için ek modüller ve paketler koyun.

    Ancak bunların hepsi yakında yazılacak diğer makalelerin konuları ...

    Konuya devam ediyor:
    Akıllı telefon

    Minitool Güç Veri Kurtarma Serbest Sürümü, verileri kurtarmak için tasarlanmış kullanımı kolay bir programdır. Minitool Güç Veri Kurtarma ile çalışmak için ...