DDoS Koruması: INetBase ve APF


Yazımız en son 21 Mayıs 2017 tarihinde güncellenmiş ve 197 defa okunmuş.

Sunucunuza gelen DDoS ataklarını engellemenin en güvenli yolu elbette donanımsal güvenlik duvarları. Fakat yine de yazılım bazlı DDoS Koruması modüllerle iyi işler çıkarılabiliyor. Bunlardan biri InetBase modülü. Bunun sadece ufak çaplı http flood gibi saldırılara karşı çözüm olabileceğini unutmayın.

Kurulum için izlememiz gereken adımlar ise şu şekilde. Öncelikle SSH ile root login olalım. Sonrasında uygulamamız gereken komutlarımız;

wget http://www.inetbase.com/scripts/ddos/install.sh
sh install.sh

Kurulumu yaptıktan sonra ayarlar için /usr/local/ddos/ddos.conf dosyasını açalım.

APF_BAN=0 (Eğer 0 olursa iptables ile 1 olursa apf ile banlar.)
NO_OF_CONNECTIONS=150 (150 bağlantıdan sonrasını banlar, 85 önerilir.)
BAN_PERIOD=600 (10 dakika içinde yukarıdaki sayı kadar bağlantı açanı banlar.)
[email protected] (Banlanma bilgilerinin gideceği mail adresi.)

Bu ayarlardan sonra aşağıdaki komutu konsola girerek birkaç düzenleme yapıyoruz.

netstat -tn --inet 2> /dev/null| grep ":80" | awk '/tcp[ ]*[0-9]+[ ]*[0-9]+[ ]+[^ ]+[ ]*[^ ]*/ { print $5; }' | cut -d":" -f1 | sort | uniq -c | sort -n

Sonrasında ddos.conf dosyasının en altına gözardı edilecek ip adreslerini ekleyebiliriz. (Google botları, local ip’ler gibi)

PROTECTED_IPS=( "192.168.1.10" "127.0.0.1" "10.0.10.0" "192.168.2.5" )

/usr/local/ddos/ddos.sh dosyası içinde aşağıdaki satırı bulun.

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST

Daha sonra bu satırın altındakileri silip aşağıdakileri yapıştıralım.

BAD_SYN_IP_LIST=`$TMP_FILE`
netstat -np | grep SYN_RECV | awk '{print $5}' | cut -d: -f1 | cut -d: -f1 | sort | uniq -c | \
sort -n| awk '{if ($1 > 4) print $2;}' > $BAD_SYN_IP_LIST
cat $BAD_SYN_IP_LIST
while read SYN_IP; do
$IPT -I INPUT -s $SYN_IP -j DROP ;
echo $SYN_IP>> $BANNED_IP_LIST
echo $SYN_IP>> $IGNORE_IP_LIST
done < $BAD_SYN_IP_LIST #DDOS Bolumu netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST
cat $BAD_IP_LIST
if [ $KILL -eq 1 ]; then
IP_BAN_NOW=0
while read line; do
CURR_LINE_CONN=$(echo $line | cut -d" " -f1)
CURR_LINE_IP=$(echo $line | cut -d" " -f2)
if [ $CURR_LINE_CONN -lt $NO_OF_CONNECTIONS ]; then
break
fi
IGNORE_BAN=`grep -c $CURR_LINE_IP $IGNORE_IP_LIST`
if [ $IGNORE_BAN -ge 1 ]; then
continue
fi
IP_BAN_NOW=1
echo "$CURR_LINE_IP with $CURR_LINE_CONN connections" >> $BANNED_IP_MAIL
echo $CURR_LINE_IP >> $BANNED_IP_LIST
echo $CURR_LINE_IP >> $IGNORE_IP_LIST
if [ $APF_BAN -eq 1 ]; then
$APF -d $CURR_LINE_IP
else
NOT_PROTECTED=1
for u in "${PROTECTED_IPS[@]}"; do
if [ $CURR_LINE_IP = $u ]; then
NOT_PROTECTED=0
break
fi
done

if [ $NOT_PROTECTED -eq 1 && $CURR_LINE_IP != ""]; then
$IPT -I INPUT -s $CURR_LINE_IP -j DROP
fi

fi
done < $BAD_IP_LIST
if [ $IP_BAN_NOW -eq 1 ]; then
dt=`date`
if [ $EMAIL_TO != "" ]; then
cat $BANNED_IP_MAIL | mail -s "IP addresses banned on $dt" $EMAIL_TO
fi
unbanip
fi
fi
rm -f $TMP_PREFIX.*

Boylelikle arka arkaya 4 sync paketi gönderen ip adresini banlıyorsunuz. Bu banlanan ip adresleri sizlere mail olarak gelecek. Banlanan tüm ip adreslerini boşaltmak için aşağıdaki komutu kullanabilirsiniz.

 iptables -F 

Eğer bu modülü kullanmaktan vazgeçerseniz, aşağıdaki komutlarla kaldırmanız mümkün.

wget http://www.inetbase.com/scripts/ddos/uninstall.ddos

sh uninstall.ddos

Teşekkürler.