Witam, ostatnio często takie ataki są wykonywanie, więc postanowiłem napisać skrypt który będzie go wykrywał.
Wymagane zależności: bash, IPTables (wymagana kompilacja kernela, jest standardowo w większości dystrybucji Uniksowych).
#!/bin/bash
# Ścieżka do iptables
IPTABLES=/sbin/iptables
# Łańcuch monitorujący (pierwsza reguła - ICMP, druga - SYN)
STATUS_CHAIN=ddos-stats
# Niebezpieczny poziom pakietów danego typu w procentach
HI_LEVEL=30
# Co robić, gdy poziomy zostaną przekroczone?
ICMP_ACTION=/bin/true
SYN_ACTION=/bin/true
# Czy jest STATUS_CHAIN?
$IPTABLES -L $STATUS_CHAIN -n 2>&1 > /dev/null
if [$? -gt 0];
then
echo "Nie ma łańcucha $STATUS_CHAIN!"
exit 1
fi
# Łączna liczba pakietów w łańuchu STATUS_CHAIN
TOTAL=`$IPTABLES -L $STATUS_CHAIN -vx | head -3 | tail -1 | awk '{print $1}'`
# Ilość pakietów ICMP
ICMP=`$IPTABLES -L $STATUS_CHAIN -vx | head -4 | tail -1 | awk '{print $1}'`
# Ilość pakietów SYN
SYN=`$IPTABLES -L $STATUS_CHAIN -vx | head -5 | tail -1 | awk '{print $1}'`
if [$TOTAL -gt 0];
then
# Policz wartości procentowe
ICMP_PER=$(($ICMP * 100 / $TOTAL))
SYN_PER=$(($SYN * 100 / $TOTAL))
# Podaj statystyki
echo "Razem: $TOTAL"
echo "ICMP: $ICMP, $ICMP_PER%"
echo "SYN: $SYN, $SYN_PER%"
# Czy przekroczono poziom pakietów ICMP?
if [$ICMP_PER -gt $HI_LEVEL];
then
echo "Duzy udział pakietów ICMP!"
# Dodatkowa akcja
$ICMP_ACTION
fi
# A może SYN?
if [$SYN_PER -gt $HI_LEVEL];
then
echo "Duży udział pakietów SYN!"
# Dodatkowa akcja
$SYN_ACTION
fi
else
echo "Brak pakietów."
fi
# Czyścimy liczniki pakietów
$IPTABLES -Z $STATUS_CHAIN 2>&1 > /dev/null