Jak wykryć atak DDoS (skrypt bash)


(system) #1

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