Files
2026-04-17 09:01:34 -05:00

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