97 lines
3.0 KiB
Bash
Executable File
97 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Logdateien für Protokollierung
|
|
LOGFILE="/var/log/ids.log"
|
|
BLOCKED_IPS="/var/log/blocked_ips.log"
|
|
|
|
# Netzwerkinterface anpassen
|
|
INTERFACE="eth0"
|
|
|
|
# Farben für Terminalausgabe
|
|
RESET="\e[0m"
|
|
RED="\e[31m"
|
|
GREEN="\e[32m"
|
|
YELLOW="\e[33m"
|
|
CYAN="\e[36m"
|
|
BOLD="\e[1m"
|
|
|
|
# Funktionen
|
|
function show_blocked_ips() {
|
|
echo -e "${CYAN}${BOLD}--- Blockierte IP-Adressen ---${RESET}"
|
|
if [ -f "$BLOCKED_IPS" ] && [ -s "$BLOCKED_IPS" ]; then
|
|
cat "$BLOCKED_IPS"
|
|
else
|
|
echo -e "${YELLOW}Keine blockierten IPs vorhanden.${RESET}"
|
|
fi
|
|
echo
|
|
}
|
|
|
|
function unblock_ip() {
|
|
local ip_to_unblock="$1"
|
|
if grep -q "$ip_to_unblock" "$BLOCKED_IPS"; then
|
|
echo -e "${GREEN}[INFO] Entferne Blockierung für IP: ${BOLD}$ip_to_unblock${RESET}"
|
|
iptables -D INPUT -s "$ip_to_unblock" -j DROP
|
|
sed -i "/$ip_to_unblock/d" "$BLOCKED_IPS"
|
|
echo "$(date): IP $ip_to_unblock wurde entsperrt." >> "$LOGFILE"
|
|
else
|
|
echo -e "${YELLOW}[WARNUNG] IP $ip_to_unblock ist nicht blockiert.${RESET}"
|
|
fi
|
|
}
|
|
|
|
# Banner
|
|
echo -e "${CYAN}${BOLD}--- Einfache IDS mit Bash ---${RESET}"
|
|
echo -e "${CYAN}Überwache Netzwerkverkehr auf Interface: ${BOLD}${INTERFACE}${RESET}"
|
|
echo
|
|
|
|
# Überwachungs-Dauerschleife
|
|
while true; do
|
|
tcpdump -i "$INTERFACE" tcp[tcpflags] == tcp-syn -nn -c 100 | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | while read count ip; do
|
|
if [ "$count" -gt 20 ]; then # Schwellenwert für verdächtigen Traffic
|
|
echo -e "${YELLOW}${BOLD}[WARNUNG]${RESET} ${RED}Verdächtiger Scan erkannt!${RESET}"
|
|
echo -e "${GREEN}IP-Adresse:${RESET} ${BOLD}$ip${RESET}"
|
|
echo -e "${GREEN}Paketanzahl:${RESET} ${BOLD}$count${RESET}"
|
|
echo "$(date): Verdächtiger Scan von IP $ip erkannt" >> "$LOGFILE"
|
|
|
|
# Prüfen, ob IP bereits blockiert ist
|
|
if ! grep -q "$ip" "$BLOCKED_IPS"; then
|
|
echo -e "${RED}${BOLD}[AKTION]${RESET} Blockiere IP ${BOLD}$ip${RESET}"
|
|
iptables -A INPUT -s "$ip" -j DROP
|
|
echo "$ip" >> "$BLOCKED_IPS"
|
|
echo "$(date): Blockiere IP $ip" >> "$LOGFILE"
|
|
else
|
|
echo -e "${CYAN}[INFO]${RESET} IP $ip ist bereits blockiert."
|
|
fi
|
|
echo
|
|
fi
|
|
done
|
|
done &
|
|
|
|
# Menü für Benutzer
|
|
while true; do
|
|
echo -e "${CYAN}${BOLD}--- Menü ---${RESET}"
|
|
echo "1) Blockierte IPs anzeigen"
|
|
echo "2) IP-Blockierung aufheben"
|
|
echo "3) Überwachungsprozess beenden"
|
|
echo -n "Wähle eine Option: "
|
|
read -r option
|
|
|
|
case "$option" in
|
|
1)
|
|
show_blocked_ips
|
|
;;
|
|
2)
|
|
echo -n "Gib die IP-Adresse ein, die entsperrt werden soll: "
|
|
read -r ip
|
|
unblock_ip "$ip"
|
|
;;
|
|
3)
|
|
echo -e "${RED}${BOLD}Beende Überwachungsprozess...${RESET}"
|
|
pkill -f "tcpdump -i $INTERFACE"
|
|
break
|
|
;;
|
|
*)
|
|
echo -e "${YELLOW}[WARNUNG] Ungültige Option. Bitte erneut versuchen.${RESET}"
|
|
;;
|
|
esac
|
|
done
|