Weboldal keresés

Az Apache védelme a brute Force vagy DDoS támadásokkal szemben a Mod_Security és a Mod_evasive modulok használatával


Azok számára, akik a tárhelyszolgáltatással foglalkoznak, vagy ha saját szervereiket üzemeltetik, és kiszolgáltatják azokat az internetnek, a rendszere támadókkal szembeni védelmének kiemelt prioritást kell élveznie.

A mod_security (nyílt forráskódú behatolásészlelő és -megelőzési motor webes alkalmazásokhoz, amely zökkenőmentesen integrálódik a webszerverrel) és a mod_evasive két nagyon fontos eszköz, amelyek segítségével megvédhető a webszerver. nyers erő vagy (D)DoS támadások ellen.

A mod_evasive, ahogy a neve is sugallja, kikerülési képességeket biztosít támadás alatt, és ernyőként működik, amely megvédi a webszervereket az ilyen fenyegetésektől.

Ebben a cikkben megvitatjuk, hogyan telepíthetők, konfigurálhatók és használhatók fel az Apache-val együtt RHEL/CentOS 8 és 7 rendszeren. valamint a Fedora. Ezenkívül támadásokat szimulálunk annak ellenőrzésére, hogy a szerver megfelelően reagál-e.

Ez azt feltételezi, hogy LAMP szerver van telepítve a rendszerére. Ha nem, kérjük, olvassa el ezt a cikket, mielőtt továbblépne.

  • A LAMP Server telepítése CentOS 8 rendszeren
  • A LAMP verem telepítése az RHEL/CentOS 7 rendszerben

Az RHEL/CentOS 8/7 vagy Fedora vagy Fedora esetén a tűzfal helyett az iptables-t is be kell állítania alapértelmezett tűzfal-kezelőfelületként.. Ezt azért tesszük, hogy ugyanazt az eszközt használjuk a RHEL/CentOS 8/7 és a Fedora rendszerben.

1. lépés: Az Iptables tűzfal telepítése RHEL/CentOS 8/7 és Fedora rendszeren

A kezdéshez állítsa le és tiltsa le a tűzfalat:

systemctl stop firewalld
systemctl disable firewalld

Ezután telepítse az iptables-services csomagot az iptables engedélyezése előtt:

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

2. lépés: A Mod_Security és a Mod_evasive telepítése

Amellett, hogy a LAMP már be van állítva, engedélyeznie kell az EPEL-tárat is a RHEL/CentOS 8/7 rendszerben annak érdekében, hogy mindkét csomag telepítéséhez. A Fedora-felhasználóknak nem kell semmilyen repót engedélyezniük, mert az epel már része a Fedora Projectnek.

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

Amikor a telepítés befejeződött, mindkét eszköz konfigurációs fájljait megtalálja a /etc/httpd/conf.d helyen.

ls -l /etc/httpd/conf.d

Most, hogy integrálja ezt a két modult az Apache programmal, és betöltse őket indításkor, győződjön meg arról, hogy a következő sorok jelennek meg a mod_evasive.conf legfelső szintű szakaszában és mod_security.conf:

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

Vegye figyelembe, hogy a modules/mod_security2.so és a modules/mod_evasive24.so a relatív elérési út az /etc/httpd könyvtártól a forrásfájlig. a modulból. Ezt ellenőrizheti (és szükség esetén módosíthatja) az /etc/httpd/modules könyvtár tartalmának felsorolásával:

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

Ezután indítsa újra az Apache-ot, és ellenőrizze, hogy betölti-e a mod_evasive és a mod_security fájlokat:

systemctl restart httpd 	

Írja ki a betöltött statikus és megosztott modulok listáját.

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

3. lépés: Az alapvető szabálykészlet telepítése és a Mod_Security konfigurálása

Néhány szóban egy alapszabálykészlet (más néven CRS) útmutatást ad a webszervernek arról, hogyan viselkedjen bizonyos körülmények között. A mod_security fejlesztőcége ingyenes CRS-t biztosít az OWASP (Open Web Application Security Project) ModSecurity CRS néven, amely az alábbiak szerint tölthető le és telepíthető.

1. Töltse le az OWASP CRS-t egy erre a célra létrehozott könyvtárba.

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. Távolítsa el a CRS fájlt, és a mi kényelmünk érdekében módosítsa a könyvtár nevét.

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

3. Itt az ideje a mod_security beállításának. Másolja át a szabályokat tartalmazó mintafájlt (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example) egy másik fájlba, amely nem rendelkezik .example kiterjesztéssel:

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

és mondja meg az Apache-nak, hogy ezt a fájlt használja a modullal együtt. Ehhez illessze be a következő sorokat a webszerver fő konfigurációs fájljába: /etc/httpd/conf/httpd.conf. Ha úgy dönt, hogy kicsomagolja a tarballt egy másik könyvtárba, akkor az Include direktívák szerint kell szerkesztenie az elérési utat:

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

Végül azt javasoljuk, hogy hozzuk létre a saját konfigurációs fájlunkat a /etc/httpd/modsecurity.d könyvtárban, ahol elhelyezzük a testreszabott direktíváinkat (a nevet tecmint.confnak nevezzük). b> a következő példában), ahelyett, hogy közvetlenül módosítaná a CRS fájlokat. Ez lehetővé teszi a CRS-ek egyszerűbb frissítését az új verziók megjelenésekor.

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

A mod_security konfigurációs direktívák teljes magyarázó útmutatóját a SpiderLabs ModSecurity GitHub tárházában találja.

4. lépés: A Mod_Evasive konfigurálása

A mod_evasive a /etc/httpd/conf.d/mod_evasive.conf direktíváival van beállítva. Mivel a csomagfrissítés során nincsenek frissítendő szabályok, nincs szükségünk külön fájlra a testreszabott direktívák hozzáadásához, szemben a mod_security-vel.

Az alapértelmezett mod_evasive.conf fájlban a következő direktívák vannak engedélyezve (vegye figyelembe, hogy ez a fájl erősen kommentált, ezért az alábbi konfigurációs direktívák kiemelése érdekében töröltük a megjegyzéseket):

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

Az irányelvek magyarázata:

  • DOSHashTableSize: Ez a direktíva határozza meg a tevékenység IP-címenkénti nyomon követésére használt hash tábla méretét. Ennek a számnak a növelése gyorsabb keresést tesz lehetővé azokról a webhelyekről, amelyeket az ügyfél korábban felkeresett, de ha túl magasra van állítva, ez kihathat az általános teljesítményre.
  • DOSPageCount: Egy adott URI-hoz (például az Apache által kiszolgált bármely fájlhoz) intézett azonos kérések legitim száma, amelyet a látogató a DOSPageInterval intervallumon belül intézhet.
  • DOSSiteCount: Hasonló a DOSPageCount-hoz, de arra utal, hogy a DOSSiteInterval intervallumon belül összesen hány kérelmet lehet benyújtani a teljes webhelyhez.
  • DOSBlockingPeriod: Ha egy látogató túllépi a DOSSPageCount vagy DOSSiteCount által beállított korlátokat, a forrás IP-címe feketelistára kerül a DOSBlockingPeriod időtartama alatt. A DOSBlockingPeriod alatt az erről az IP-címről érkező kérések 403-as tiltott hibába ütköznek.

Nyugodtan kísérletezzen ezekkel az értékekkel, hogy webszervere a szükséges mennyiségű és típusú forgalmat kezelni tudja.

Csak egy kis figyelmeztetés: ha ezek az értékek nincsenek megfelelően beállítva, fennáll a veszélye annak, hogy blokkolja a jogos látogatókat.

Érdemes megfontolni más hasznos irányelveket is:

DOSEmailNotify

Ha van egy levelezőkiszolgálója és fut, akkor figyelmeztető üzeneteket küldhet az Apache-on keresztül. Vegye figyelembe, hogy az apache SELinux felhasználónak engedélyt kell adnia e-mailek küldésére, ha a SELinux kényszerítésre van állítva. Ezt futással megteheti

setsebool -P httpd_can_sendmail 1

Ezután adja hozzá ezt a direktívát a mod_evasive.conf fájlhoz a többi direktívával együtt:

DOSEmailNotify [email 

Ha ez az érték be van állítva, és a levelezőszerver megfelelően működik, egy e-mailt küld a megadott címre, amikor egy IP-cím feketelistára kerül.

DOSSystemCommand

Ehhez érvényes rendszerparancsra van szükség argumentumként,

DOSSystemCommand </command>

Ez az utasítás meghatároz egy parancsot, amelyet akkor kell végrehajtani, amikor egy IP-cím feketelistára kerül. Gyakran használják egy shell szkripttel együtt, amely tűzfalszabályt ad hozzá, hogy blokkolja az adott IP-címről érkező további kapcsolatokat.

Írjon egy shell szkriptet, amely kezeli az IP tiltólistát a tűzfal szintjén

Amikor egy IP-cím feketelistára kerül, blokkolnunk kell a jövőbeni kapcsolatokat. A következő shell-szkriptet fogjuk használni, amely végrehajtja ezt a feladatot. Hozzon létre egy scripts-tecmint nevű könyvtárat (vagy bármilyen tetszőleges nevet) a /usr/local/bin mappában, és egy ban_ip.sh nevű fájlt. abban a könyvtárban.

#!/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"

A DOSSystemCommand direktívánk a következőképpen szóljon:

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

A fenti sorban a %s a sértő IP-címet jelöli, ahogy azt a mod_evasive észlelte.

Adja hozzá az apache felhasználót a sudoers fájlhoz

Vegye figyelembe, hogy mindez nem fog működni, hacsak nem ad engedélyt az apache felhasználónak, hogy terminál és jelszó nélkül futtassa szkriptünket (és csak ezt a szkriptet!). Szokás szerint a(z) visudo beírásával rootként hozzáférhet az /etc/sudoers fájlhoz, majd hozzáadhatja a következő 2 sort az alábbi képen látható módon:

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

FONTOS: Alapértelmezett biztonsági házirendként a sudo csak terminálon futtatható. Mivel ebben az esetben a sudo-t tty nélkül kell használnunk, a következő képen kiemelt sort kell kommentálni:

#Defaults requiretty

Végül indítsa újra a webszervert:

systemctl restart httpd

4. lépés: DDoS-támadások szimulálása az Apache-on

Számos eszköz használható a szerver elleni külső támadás szimulálására. Csak keressen rá a google-ban a „tools for simulating ddos attacks” kifejezésre, hogy többet megtaláljon közülük.

Ne feledje, hogy Ön, és csak Ön felel a szimuláció eredményeiért. Eszébe se jusson, hogy szimulált támadást indítson egy olyan szerver ellen, amelyet nem a saját hálózatán üzemeltet.

Ha ugyanezt szeretné megtenni egy másik által üzemeltetett VPS-sel, akkor megfelelő módon figyelmeztetnie kell a tárhelyszolgáltatóját, vagy engedélyt kell kérnie ahhoz, hogy egy ilyen forgalmi áradat áthaladjon a hálózatán. A linux-console.net semmilyen módon nem felelős az Ön tetteiért!

Ezen túlmenően, ha egy szimulált DoS-támadást csak egy gazdagépről indítanak, az nem jelent valós támadást. Ennek szimulálásához egyszerre több kliensről kell megcéloznia a szervert.

Tesztkörnyezetünk egy CentOS 7 szerverből [IP 192.168.0.17] és egy Windows gazdagépből áll, amelyről a támadást indítjuk [IP 192.168.0.103]:

Kérjük, játssza le az alábbi videót, és kövesse a jelzett sorrendben felvázolt lépéseket egy egyszerű DoS támadás szimulálásához:

Ezután a sértő IP-t az iptables blokkolja:

Következtetés

Ha a mod_security és a mod_evasive engedélyezve van, a szimulált támadás hatására a CPU és a RAM ideiglenes használati csúcsot próbál ki csak néhány másodperccel azelőtt, hogy a forrás IP-címek feketelistára kerüljenek, és a tűzfal blokkolja őket. Ezen eszközök nélkül a szimuláció minden bizonnyal nagyon gyorsan leüti a szervert, és használhatatlanná teszi a támadás időtartama alatt.

Szeretnénk hallani arról, hogy tervezi-e (vagy használta már) ezeket az eszközöket. Mindig szeretettel várjuk az Ön véleményét, ezért ne habozzon megírni észrevételeit és kérdéseit, ha van ilyen, az alábbi űrlap segítségével.

Referencia hivatkozások

https://www.modsecurity.org/