2024. április 24., szerda

Gyorskeresés

Útvonal

Cikkek » Számtech rovat

Védekezés DDOS támadáskor

  • (f)
  • (p)
Írta: |

Pár napja rettentően lelassult a Debian Linuxon futó Apache webszerverem. Újraindítás...

[ ÚJ TESZT ]

Pár napja rettentően lelassult a Debian Linuxon futó Apache webszerverem. Újraindítás után 1 perccel az error logban ez volt:

server reached MaxClients setting, consider raising the MaxClients setting

Eszembe se jutott növelni a MaxClients értékét (nem warez site-ról van szó). Az access.log-ban semmi rendkívüli nem volt. A szerverben 2 giga ram van, az kb. 1,5 gigával több a szükségesnél. A winchesterek rendben, a raid tömb egészséges, a 150 giga helynek a 10%-a foglalt, úgyhogy tovább vizsgáltam az Apache-ot.

A webszerver status információihoz a /etc/apache2/apache2.conf-ban ki kell szedni a # jeleket innen:

<IfModule mod_status.c>
#
# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
</Location>
</IfModule>

Az apache újraindítása után
apache2ctl status
paranccsal láthatjuk, mi történik:

25 requests currently being processed, 10 idle workers

C_W_WCC_C_C_KK_CC.C_..__CKCKCC..KKCWC._CC.......................
................................................................
................................................................
................................................................

A betűk az aktív kapcsolatok állapotát jelzik. Új kapcsolatok érkezhetnek az aláhúzással vagy ponttal jelölt "helyekre".
Az apache indítása után egyre több és több R betű jelent meg (R: reading request), 100 körül már nem tudtam megnézni a weboldalam.

Nézzük meg, milyen IP címekről kapcsolódnak a 80-as portunkra:

netstat -tn|grep ':80'|tr -s ' '|cut -d' ' -f5|cut -d':' -f1

A paranccsal egy csomó IP címet kaptam. Gondoltam, a rosszak nem csak 1 kapcsolatot indítanak, úgyhogy a listát rendeztem és megszámoltam, az egyes IP-k hányszor fordulnak elő, majd még egy rendezés a lista végére tette a legaktívabb támadókat:

netstat -tn|grep ':80'|tr -s ' '|cut -d' ' -f5|cut -d':' -f1|sort|uniq -c|sort -n

A cél a támadó gépek IP-jének kizárása iptables-szel. Ha túl sok a gép és változik a lista, egyszerűbb, ha az egész hálózatukat zárjuk ki.

Legyen a badboys.tx fájlban a támadók IP címe, soronként 1 darab.

Az egyes IP-ket felügyelő ISP-knek kiosztott tartományt megtudhatjuk a whois parancs kimenetének 'inetnum:' soraiból:

cat badboys.txt|xargs -n 1 whois|grep 'inetnum:'|cut -d':' -f2|sed -e 's/^ *//' |\
sort|uniq > badranges.txt

(rövidebben)

A végén a sort|uniq kiszűri az ismétlődéseket. Én egy ilyen listát kaptam (a közbülső sorokat kihagytam a listából, azért van benne "..."):

220.150.0.0 - 220.150.255.255
221.172.0.0 - 221.175.255.255
...
90.200.0.0 - 90.203.255.255
90.37.138.0 - 90.37.138.255

Mivel az iptables ilyen tartományokkal nem dolgozik, át kell alakítani a sorokat, erre jó az ipcalc parancs:

cat badranges.txt |xargs -L 1 ipcalc -nb |grep '/' > badnets.txt

És az eredmény a badnets.txt fájlban:

220.150.0.0/16
221.172.0.0/14
...
90.200.0.0/14
90.37.138.0/24

Nincs más hátra mint végső búcsút venni a támadóktól:

for i in `cat badnets.txt`; do
iptables -A INPUT -s $i -j DROP
done

Még írtam az érintett ISP-knek, küldtem egy listát a támadó gépekről, az ilyesmi sosem árt.

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.