umbau SSH und kommentare
This commit is contained in:
+76
-19
@@ -1,12 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
#############################################
|
||||
# 🔐 CONFIG
|
||||
#############################################
|
||||
|
||||
# Telegram Bot Token (⚠️ später besser auslagern!)
|
||||
TOKEN="8101319618:AAHboFVVgmLPccJB0MDr_R2g0K90hkGqkRw"
|
||||
CHAT_ID="581059353"
|
||||
|
||||
# Alle überwachten Hosts
|
||||
PIS=("192.168.178.2" "192.168.178.3" "192.168.178.5" "localhost")
|
||||
|
||||
# Datei zur Speicherung des letzten Checks
|
||||
STATE_FILE="/home/kai/.ssh-monitor-lastcheck"
|
||||
|
||||
|
||||
#############################################
|
||||
# 🧠 INITIALISIERUNG
|
||||
#############################################
|
||||
|
||||
# Falls keine State-Datei existiert → jetzt erstellen
|
||||
if [ ! -f "$STATE_FILE" ]; then
|
||||
date --iso-8601=seconds > "$STATE_FILE"
|
||||
fi
|
||||
@@ -14,31 +27,69 @@ fi
|
||||
LAST_CHECK=$(cat "$STATE_FILE")
|
||||
NOW=$(date --iso-8601=seconds)
|
||||
|
||||
|
||||
#############################################
|
||||
# 🔧 SSH WRAPPER (WICHTIG FÜR CRON)
|
||||
#############################################
|
||||
|
||||
SSH_OPTS="-o ConnectTimeout=5 \
|
||||
-o StrictHostKeyChecking=accept-new \
|
||||
-o BatchMode=yes \
|
||||
-o UserKnownHostsFile=/home/kai/.ssh/known_hosts"
|
||||
|
||||
|
||||
#############################################
|
||||
# 🔁 HAUPTSCHLEIFE ÜBER ALLE HOSTS
|
||||
#############################################
|
||||
|
||||
for PI in "${PIS[@]}"
|
||||
do
|
||||
if [ "$PI" == "localhost" ]; then
|
||||
LOG=$(journalctl -u ssh --since "$LAST_CHECK" --no-pager)
|
||||
HOST=$(hostname)
|
||||
else
|
||||
LOG=$(ssh -o ConnectTimeout=5 \
|
||||
-o StrictHostKeyChecking=accept-new \
|
||||
-o UserKnownHostsFile=/home/kai/.ssh/known_hosts \
|
||||
kai@$PI \
|
||||
"journalctl -u ssh --since \"$LAST_CHECK\" --no-pager")
|
||||
|
||||
HOST=$(ssh -o ConnectTimeout=5 \
|
||||
-o StrictHostKeyChecking=accept-new \
|
||||
-o UserKnownHostsFile=/home/kai/.ssh/known_hosts \
|
||||
kai@$PI hostname)
|
||||
#########################################
|
||||
# 🏠 LOKALER HOST (kein SSH nötig)
|
||||
#########################################
|
||||
if [ "$PI" == "localhost" ]; then
|
||||
|
||||
LOG=$(journalctl -u ssh --since "$LAST_CHECK" --no-pager 2>/dev/null || true)
|
||||
HOST=$(hostname)
|
||||
|
||||
else
|
||||
|
||||
#########################################
|
||||
# 🌐 REMOTE HOST VIA SSH
|
||||
#########################################
|
||||
|
||||
LOG=$(ssh $SSH_OPTS kai@$PI \
|
||||
"journalctl -u ssh --since \"$LAST_CHECK\" --no-pager" 2>/dev/null || true)
|
||||
|
||||
HOST=$(ssh $SSH_OPTS kai@$PI hostname 2>/dev/null || echo "$PI")
|
||||
fi
|
||||
|
||||
FAILS=$(echo "$LOG" | grep "Failed password" | wc -l)
|
||||
|
||||
#############################################
|
||||
# 🚨 ANALYSE: FAILED LOGINS
|
||||
#############################################
|
||||
|
||||
if [ -n "$LOG" ]; then
|
||||
FAILS=$(echo "$LOG" | grep "Failed password" | wc -l)
|
||||
else
|
||||
FAILS=0
|
||||
fi
|
||||
|
||||
|
||||
#############################################
|
||||
# 📊 DETAILS ZU ANGREIFERN
|
||||
#############################################
|
||||
|
||||
if [ "$FAILS" -gt 0 ]; then
|
||||
|
||||
IPS=$(echo "$LOG" | grep "Failed password" \
|
||||
| awk '{print $(NF-3)}' \
|
||||
| sort | uniq -c | sort -nr)
|
||||
| awk '{print $(NF-3)}' \
|
||||
| sort | uniq -c | sort -nr)
|
||||
|
||||
#########################################
|
||||
# 📡 TELEGRAM ALERT
|
||||
#########################################
|
||||
|
||||
MESSAGE="🚨 SSH Angriff erkannt!
|
||||
Host: $HOST ($PI)
|
||||
@@ -48,9 +99,15 @@ Top Angreifer:
|
||||
$IPS"
|
||||
|
||||
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
|
||||
-d chat_id="$CHAT_ID" \
|
||||
-d text="$MESSAGE"
|
||||
-d chat_id="$CHAT_ID" \
|
||||
-d text="$MESSAGE" >/dev/null
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
echo "$NOW" > "$STATE_FILE"
|
||||
|
||||
#############################################
|
||||
# 💾 STATE UPDATE
|
||||
#############################################
|
||||
|
||||
echo "$NOW" > "$STATE_FILE"
|
||||
Reference in New Issue
Block a user