Mod_Security ve Mod_evasive Modüllerini Kullanarak Apache'yi Kaba Kuvvet veya DDoS Saldırılarına Karşı Koruyun


Barındırma işinde olanlar için veya kendi sunucularınızı barındırıyorsanız ve bunları İnternet'e açıyorsanız, sistemlerinizin saldırganlara karşı güvenliğini sağlamak yüksek bir öncelik olmalıdır.

mod_security (web sunucusuyla sorunsuz bir şekilde bütünleşen web uygulamaları için açık kaynaklı izinsiz giriş tespit ve önleme motoru) ve mod_evasive, bir web sunucusunu korumak için kullanılabilecek çok önemli iki araçtır kaba kuvvet veya (D)DoS saldırılarına karşı.

mod_evasive, adından da anlaşılacağı gibi, saldırı altındayken kaçınma yetenekleri sağlar ve web sunucularını bu tür tehditlerden koruyan bir şemsiye görevi görür.

Bu makalede, RHEL/CentOS 8 ve 7 üzerinde Apache ile birlikte nasıl kurulacağını, yapılandırılacağını ve devreye alınacağını tartışacağız. Fedora'nın yanı sıra. Ayrıca sunucunun buna göre tepki verdiğini doğrulamak için saldırıları simüle edeceğiz.

Bu, sisteminizde kurulu bir LAMP sunucusunun bulunduğunu varsayar. Değilse, devam etmeden önce lütfen bu makaleyi kontrol edin.

  • CentOS 8'e LAMP Sunucusu Nasıl Kurulur
  • RHEL/CentOS 7'de LAMP yığını nasıl kurulur

Ayrıca RHEL/CentOS 8/7 veya Fedora çalıştırıyorsanız varsayılan güvenlik duvarı ön ucu olarak firewalld yerine iptables'ı ayarlamanız gerekecektir. güçlü>. Bunu hem RHEL/CentOS 8/7'de hem de Fedora'da aynı aracı kullanmak için yapıyoruz.

Adım 1: Iptables Güvenlik Duvarını RHEL/CentOS 8/7 ve Fedora'ya Yükleme

Başlamak için güvenlik duvarını durdurun ve devre dışı bırakın:

systemctl stop firewalld
systemctl disable firewalld

Ardından iptables'i etkinleştirmeden önce iptables-services paketini yükleyin:

yum update && yum install iptables-services
systemctl enable iptables
systemctl start iptables
systemctl status iptables

Adım 2: Mod_Security ve Mod_evasive'i yükleme

Halihazırda bir LAMP kurulumuna sahip olmanızın yanı sıra, sırasıyla RHEL/CentOS 8/7'de EPEL deposunu da etkinleştirmeniz gerekecektir. Her iki paketi de yüklemek için. Fedora kullanıcılarının herhangi bir repoyu etkinleştirmesine gerek yok çünkü epel zaten Fedora Projesinin bir parçası.

yum update && yum install mod_security mod_evasive

--------------- CentOS/RHEL 8 --------------- 
dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm
dnf --enablerepo=raven-extras install mod_evasive

Kurulum tamamlandığında, her iki araca ilişkin yapılandırma dosyalarını /etc/httpd/conf.d adresinde bulacaksınız.

ls -l /etc/httpd/conf.d

Şimdi, bu iki modülü Apache ile entegre etmek ve başlatıldığında yüklemesini sağlamak için, mod_evasive.conf dosyasının üst düzey bölümünde aşağıdaki satırların göründüğünden emin olun. ve sırasıyla mod_security.conf:

LoadModule evasive20_module modules/mod_evasive24.so
LoadModule security2_module modules/mod_security2.so

modules/mod_security2.so ve modules/mod_evasive24.so'nin /etc/httpd dizininden kaynak dosyaya giden göreceli yollar olduğunu unutmayın. modülün. /etc/httpd/modules dizininin içeriğini listeleyerek bunu doğrulayabilir (ve gerekiyorsa değiştirebilirsiniz):

cd /etc/httpd/modules
pwd
ls -l | grep -Ei '(evasive|security)'

Ardından Apache'yi yeniden başlatın ve mod_evasive ve mod_security'i yüklediğini doğrulayın:

systemctl restart httpd 	

Yüklenen Statik ve Paylaşılan Modüllerin listesini boşaltın.

httpd -M | grep -Ei '(evasive|security)'				

Adım 3: Temel Kural Kümesini Kurma ve Mod_Security'yi Yapılandırma

Birkaç kelimeyle söylemek gerekirse, Temel Kural Seti (diğer adıyla CRS), web sunucusuna belirli koşullar altında nasıl davranılacağına ilişkin talimatlar sağlar. mod_security'in geliştirici firması, aşağıdaki gibi indirilip kurulabilen OWASP (Açık Web Uygulama Güvenliği Projesi) ModSecurity CRS adlı ücretsiz bir CRS sağlamaktadır.

1. OWASP CRS'yi bu amaç için oluşturulmuş bir dizine indirin.

mkdir /etc/httpd/crs-tecmint
cd /etc/httpd/crs-tecmint
wget -c https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O master

2. CRS dosyasının etiketini kaldırın ve size kolaylık sağlamak için dizinin adını değiştirin.

tar xzf master
mv owasp-modsecurity-crs-3.2.0 owasp-modsecurity-crs

3. Şimdi mod_security'yi yapılandırmanın zamanı geldi. Kuralları içeren örnek dosyayı (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example), .example uzantısı olmayan başka bir dosyaya kopyalayın:

cd owasp-modsecurity-crs/
cp crs-setup.conf.example crs-setup.conf

ve Apache'e, web sunucusunun ana yapılandırma dosyası /etc/httpd/conf/httpd.conf dosyasına aşağıdaki satırları ekleyerek bu dosyayı modülle birlikte kullanmasını söyleyin. Tarball'ı başka bir dizinde açmayı seçtiyseniz, Include yönergelerini izleyerek yolları düzenlemeniz gerekecektir:

<IfModule security2_module>
        Include crs-tecmint/owasp-modsecurity-crs/crs-setup.conf
        Include crs-tecmint/owasp-modsecurity-crs/rules/*.conf
</IfModule>

Son olarak, özelleştirilmiş yönergelerimizi yerleştireceğimiz /etc/httpd/modsecurity.d dizini içinde kendi yapılandırma dosyamızı oluşturmamız önerilir (bu dosyaya tecmint.confCRS dosyalarını doğrudan değiştirmek yerine aşağıdaki örnekte b> seçeneğini kullanın. Bunu yapmak, yeni sürümler yayınlandıkça CRS'lerin daha kolay yükseltilmesine olanak tanıyacaktır.

<IfModule mod_security2.c>
	SecRuleEngine On
	SecRequestBodyAccess On
	SecResponseBodyAccess On 
	SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream 
	SecDataDir /tmp
</IfModule>

mod_security yapılandırma direktiflerinin eksiksiz açıklayıcı kılavuzu için SpiderLabs'ın ModSecurity GitHub deposuna başvurabilirsiniz.

Adım 4: Mod_Evasive'i Yapılandırma

mod_evasive, /etc/httpd/conf.d/mod_evasive.conf dosyasındaki yönergeler kullanılarak yapılandırılır. Paket yükseltme sırasında güncellenecek hiçbir kural olmadığından, özelleştirilmiş yönergeler eklemek için mod_security'in aksine ayrı bir dosyaya ihtiyacımız yok.

Varsayılan mod_evasive.conf dosyasında aşağıdaki yönergeler etkindir (bu dosyanın yoğun şekilde yorumlandığını unutmayın, bu nedenle aşağıdaki yapılandırma yönergelerini vurgulamak için yorumları çıkardık):

<IfModule mod_evasive24.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
</IfModule>

Direktiflerin açıklaması:

  • DOSHashTableSize: Bu yönerge, IP adresi bazında etkinliği takip etmek için kullanılan karma tablosunun boyutunu belirtir. Bu sayının arttırılması, müşterinin geçmişte ziyaret ettiği sitelerin daha hızlı aranmasını sağlayacaktır, ancak çok yüksek bir değere ayarlanması durumunda genel performansı etkileyebilir.
  • DOSPageCount: Belirli bir URI'ye (örneğin, Apache tarafından sunulan herhangi bir dosyaya) DOSPageInterval aralığı boyunca bir ziyaretçi tarafından yapılabilecek özdeş isteklerin yasal sayısı.
  • DOSSiteCount: DOSPageCount'a benzer, ancak DOSSiteInterval aralığı boyunca sitenin tamamına kaç genel istek yapılabileceğini belirtir.
  • DOSBlockingPeriod: Bir ziyaretçi DOSSPageCount veya DOSSiteCount tarafından belirlenen sınırları aşarsa, kaynak IP adresi DOSBlockingPeriod süresi boyunca kara listeye alınacaktır. DOSBlockingPeriod sırasında, bu IP adresinden gelen tüm istekler 403 Forbidden hatasıyla karşılaşacaktır.

Web sunucunuzun gerekli miktarda ve türde trafiği işleyebilmesi için bu değerlerle denemeler yapmaktan çekinmeyin.

Yalnızca küçük bir uyarı: Bu değerler doğru şekilde ayarlanmazsa yasal ziyaretçilerin engellenmesi riskiyle karşı karşıya kalırsınız.

Ayrıca diğer yararlı yönergeleri de dikkate almak isteyebilirsiniz:

DOSEmailBildirimi

Çalışan bir posta sunucunuz varsa Apache aracılığıyla uyarı mesajları gönderebilirsiniz. SELinux zorunlu kılacak şekilde ayarlanmışsa Apache kullanıcısına SELinux'a e-posta gönderme izni vermeniz gerekeceğini unutmayın. Bunu çalıştırarak yapabilirsiniz

setsebool -P httpd_can_sendmail 1

Daha sonra bu yönergeyi diğer yönergelerle birlikte mod_evasive.conf dosyasına ekleyin:

DOSEmailNotify [email 

Bu değer ayarlanmışsa ve posta sunucunuz düzgün çalışıyorsa, bir IP adresi kara listeye alındığında belirtilen adrese bir e-posta gönderilecektir.

DOSSistemKomutu

Bunun argüman olarak geçerli bir sistem komutuna ihtiyacı var,

DOSSystemCommand </command>

Bu yönerge, bir IP adresi kara listeye alındığında yürütülecek komutu belirtir. Genellikle, söz konusu IP adresinden gelen diğer bağlantıları engellemek için bir güvenlik duvarı kuralı ekleyen bir kabuk komut dosyasıyla birlikte kullanılır.

IP'nin kara listeye alınmasını güvenlik duvarı düzeyinde yöneten bir kabuk komut dosyası yazın

Bir IP adresi kara listeye alındığında, gelecekte bu adresten gelecek bağlantıları engellememiz gerekir. Bu işi gerçekleştiren aşağıdaki kabuk betiğini kullanacağız. /usr/local/bin dizininde scripts-tecmint (veya istediğiniz ad) adında bir dizin ve ban_ip.sh adında bir dosya oluşturun. o dizinde.

#!/bin/sh
IP that will be blocked, as detected by mod_evasive
IP=$1
Full path to iptables
IPTABLES="/sbin/iptables"
mod_evasive lock directory
MOD_EVASIVE_LOGDIR=/var/log/mod_evasive
Add the following firewall rule (block all traffic coming from $IP)
$IPTABLES -I INPUT -s $IP -j DROP
Remove lock file for future checks
rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"

DOSSystemCommand yönergemiz şu şekilde olmalıdır:

DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"

Yukarıdaki satırda %s, mod_evasive tarafından tespit edilen rahatsız edici IP'yi temsil eder.

Apache kullanıcısını sudoers dosyasına ekleyin

Apache kullanıcısına komut dosyamızı (ve yalnızca o komut dosyasını!) terminal ve şifre olmadan çalıştırma izni vermediğiniz sürece tüm bunların işe yaramayacağını unutmayın. Her zamanki gibi, /etc/sudoers dosyasına erişmek için root olarak visudo yazabilir ve ardından aşağıdaki resimde gösterildiği gibi aşağıdaki 2 satırı ekleyebilirsiniz:

apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
Defaults:apache !requiretty

ÖNEMLİ: Varsayılan güvenlik politikası olarak sudo'yu yalnızca bir terminalde çalıştırabilirsiniz. Bu durumda sudo'yu tty olmadan kullanmamız gerektiğinden, aşağıdaki resimde vurgulanan satırın yorumunu yapmamız gerekir:

#Defaults requiretty

Son olarak web sunucusunu yeniden başlatın:

systemctl restart httpd

Adım 4: Apache'de DDoS Saldırılarının Simülasyonu

Sunucunuza yönelik harici bir saldırıyı simüle etmek için kullanabileceğiniz çeşitli araçlar vardır. Bunlardan birkaçını bulmak için Google'da "ddos saldırılarını simüle etmeye yönelik araçlar" araması yapabilirsiniz.

Simülasyonunuzun sonuçlarından yalnızca sizin sorumlu tutulacağınızı unutmayın. Kendi ağınızda barındırmadığınız bir sunucuya saldırı simülasyonu başlatmayı aklınızdan bile geçirmeyin.

Aynısını başkası tarafından barındırılan bir VPS ile yapmak isterseniz, barındırma sağlayıcınızı uygun şekilde uyarmanız veya böyle bir trafik akışının kendi ağlarından geçmesi için izin istemeniz gerekir. linux-console.net hiçbir şekilde eylemlerinizden sorumlu değildir!

Ayrıca, yalnızca bir ana bilgisayardan simüle edilmiş bir DoS saldırısı başlatmak, gerçek hayattaki bir saldırıyı temsil etmez. Bunu simüle etmek için sunucunuzu aynı anda birden fazla istemciden hedeflemeniz gerekir.

Test ortamımız bir CentOS 7 sunucusundan [IP 192.168.0.17] ve saldırıyı başlatacağımız bir Windows ana bilgisayarından [IP 192.168.0.103<) oluşur.]:

Basit bir DoS saldırısını simüle etmek için lütfen aşağıdaki videoyu oynatın ve belirtilen sırayla belirtilen adımları izleyin:

Daha sonra rahatsız edici IP iptables tarafından engellenir:

Çözüm

mod_security ve mod_evasive etkinken, simüle edilen saldırı CPU ve RAM'in geçici bir kullanım zirvesi denemesine neden olur kaynak IP'lerin kara listeye alınmasından ve güvenlik duvarı tarafından engellenmesinden yalnızca birkaç saniye önce. Bu araçlar olmadan simülasyon kesinlikle sunucuyu çok hızlı bir şekilde çökertecek ve saldırı süresince onu kullanılamaz hale getirecektir.

Bu araçları kullanmayı planlayıp planlamadığınızı (veya geçmişte kullanıp kullanmadığınızı) öğrenmek isteriz. Sizden her zaman haber almayı sabırsızlıkla bekliyoruz; bu nedenle, varsa yorumlarınızı ve sorularınızı aşağıdaki formu kullanarak bırakmaktan çekinmeyin.

Referans Bağlantıları

https://www.modsecurity.org/