#!/bin/bash
#
clear;
# Kollar om användaren är Admin
if ["$=(whoami)" != 'root']; then
echo "Du måste va root";
exit 1;
fi
# Basic Config variablar
AccessLog = "/usr/local/apache/logs/access_log";
whiteList = "~/.whiteList_log";
syn_limit = "10";
_SYNFlood(){
_Exit;
# Kollar hur många öppna SYN anslutningar som är öppna
syn=$(netstat -nap | grep SYN | wc -l)
if [$syn -gt $syn_limit]; then
echo -e "Möjlig Synflood attack";
fi
# Så länge antalet SYN anslutningar per ip
# överstiger deklarerat värde så
# blockeras EN ny ipadress för varje loop
while [$syn -gt $syn_limit]
do
# Returerar IP'n med flest öppna SYN anslutningar
IP=$(netstat -ntu | awk '{print $1}' | cut -d: -f1 | sort | uniq -c | sort -n);
# kollar om IP'n är trusted (whitelistad)
if [!grep $IP $whiteList]; then
# anropar funktionen block() med en parameter (ip address),
_Block $IP;
fi
done
}
_HTTPFlood(){
_Exit;
}
_ICMPFlood(){
_Exit;
}
# funktion som blockar en ip address med null route metoden, minst resource
# åtgång när man behöver det som mäst =).
#
# Eftersom iptables använder sig av threads och cpu kraft
# för att hantera alla requests, så kan en flaskhals uppstå vilket kan leda till
# en total server krash om Botnet(et) är tillräckligt stort.
_Block(){
route add $1 reject;
}
_Exit(){
if [$1 -eq q]; then
exit 1;
fi
}
echo -e "DefaceIT v1.0";
echo -e "Gymnasie arbete 2015 - Dennis Mårtenson";
echo -e "Skydd mot 3 vanliga Ddos attack vecktorer och attack typer";
echo -e "(1). SYNflood - lager 4 OSI modellen";
echo -e "(2). HTTP GET - lager 7 OSI modellen";
echo -e "(3). UDP - lager 3 OSI modellen";
echo -e "(4). Avsluta";
echo -e "Välj metod: ";
read metod;
case "$metod" in
1) echo -e "aktiverar Anti-SYN Flood";
sleep 3;
_SYNFlood
;;
2) echo -e "aktiverar Anti-HTTP Flood";
sleep 3;
_HTTPFlood;
;;
3) echo -e "aktiverar Anti-UDP Flood";
sleep 3;
_ICMPFlood;
;;
4) echo -e "Avslutar";
_SYNFlood "q";
sleep 1;
_HTTPFlood "q";
sleep 1;
_ICMPFlood "q";
sleep 1;
exit 1;
;;
esac