Aki üzemeltet webservert és több látogatott oldal is elérhető róla, azt előbb vagy utóbb meg fogják találni ellenséges szándékkal is. Ez többnyire a webserver, esetlegesen róla üzemeltetett oldalak hiányosságait kihasználó, vagy a kiszolgáló leterhelésére irányuló próbálkozásokban fog kimerülni. A hiányosságok kivédése érdekében mindig a legfrissebb (stable) programokat használjuk, és ne hagyjunk visszaélésre alkalmas lehetőségeket. Erre nem is akarok külön kitérni.
Ami most engem is utol ért az terhelésre irányuló támadás. Ekkor egy, vagy több hostról annyi lekérdezést küldenek a webszervernek, hogy az felemészti a lehetőségeit, és ezért más számára lassan, vagy egyáltalán nem lesz elérhető. Az ilyen támadások kivédésére az Apache webserver alapból nem sok lehetőséget ad. Viszont én találtam két lehetőséget is.
Az első részletesen bemutatva megtalálható a Linux Howto között, vagy itt.
A második a Linux csomagszűrőjével (esetemben iptables) megoldott csatlakozások korlátozása. Ezt a tippet a már ismertetett Linux iptables Zsebkönyvben találtam:
Az első egy ip alapú korlátozás. Ha tíznél kevesebb vagy azzal egyenlő számú egyidejű HTTP kapcsolatot szeretnénk C osztályú hálózatokkal megegyező méretű hálózatokból (24 hálózati bit, 8 állomásbit), az alábbi szabállyal dobhatjuk el a korlátot túllépő kapcsolatkezdeményező (SYN) csomagokat:
iptables -A INPUT -p tcp --sync --dport 80 -m limit --ipliit-above 10 --iplimitt-mask 24 -j REJECT
A második pedig másodpercenkénti 10 („pinget”) visszhangkérést fogad el, ha több jön pedig eldobja azokat:
iptables -A INPUT -p icmp --icmp-type ping -m limit --limit 10/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type ping -m limit !--limit 10/s -j DROP
Ezen szabályok szabadon módosítva tetszőleges korlátozást alakíthatnak ki számunkra. Fontos megjegyeznem, hogy a REJECT visszautasítja a csomagot és erről icmp-n keresztül értesítést küld. Míg a DROP nem. Ezért a REJECT-et belső hálózaton belüli szabályoknál szoktuk használni, a pontosabb hibafelderítés érdekében, míg a DROP-ot a külső hálózatokra.