Zeitstempel, Cron-sicheres SSH
Zeitstempel pro Alarm vorher: kein Zeitpunkt jetzt: exakte Event-Zeit Cron-sicheres SSH BatchMode (kein Hängen) known_hosts sauber genutzt accept-new für neue Nodes
This commit is contained in:
+11
-20
@@ -4,14 +4,11 @@
|
|||||||
# 🔐 CONFIG
|
# 🔐 CONFIG
|
||||||
#############################################
|
#############################################
|
||||||
|
|
||||||
# Telegram Bot Token (⚠️ später besser auslagern!)
|
|
||||||
TOKEN="8101319618:AAHboFVVgmLPccJB0MDr_R2g0K90hkGqkRw"
|
TOKEN="8101319618:AAHboFVVgmLPccJB0MDr_R2g0K90hkGqkRw"
|
||||||
CHAT_ID="581059353"
|
CHAT_ID="581059353"
|
||||||
|
|
||||||
# Alle überwachten Hosts
|
|
||||||
PIS=("192.168.178.2" "192.168.178.3" "192.168.178.5" "localhost")
|
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"
|
STATE_FILE="/home/kai/.ssh-monitor-lastcheck"
|
||||||
|
|
||||||
|
|
||||||
@@ -19,7 +16,6 @@ STATE_FILE="/home/kai/.ssh-monitor-lastcheck"
|
|||||||
# 🧠 INITIALISIERUNG
|
# 🧠 INITIALISIERUNG
|
||||||
#############################################
|
#############################################
|
||||||
|
|
||||||
# Falls keine State-Datei existiert → jetzt erstellen
|
|
||||||
if [ ! -f "$STATE_FILE" ]; then
|
if [ ! -f "$STATE_FILE" ]; then
|
||||||
date --iso-8601=seconds > "$STATE_FILE"
|
date --iso-8601=seconds > "$STATE_FILE"
|
||||||
fi
|
fi
|
||||||
@@ -29,7 +25,7 @@ NOW=$(date --iso-8601=seconds)
|
|||||||
|
|
||||||
|
|
||||||
#############################################
|
#############################################
|
||||||
# 🔧 SSH WRAPPER (WICHTIG FÜR CRON)
|
# 🔧 SSH SETTINGS (CRON SAFE)
|
||||||
#############################################
|
#############################################
|
||||||
|
|
||||||
SSH_OPTS="-o ConnectTimeout=5 \
|
SSH_OPTS="-o ConnectTimeout=5 \
|
||||||
@@ -39,14 +35,14 @@ SSH_OPTS="-o ConnectTimeout=5 \
|
|||||||
|
|
||||||
|
|
||||||
#############################################
|
#############################################
|
||||||
# 🔁 HAUPTSCHLEIFE ÜBER ALLE HOSTS
|
# 🔁 HAUPTSCHLEIFE
|
||||||
#############################################
|
#############################################
|
||||||
|
|
||||||
for PI in "${PIS[@]}"
|
for PI in "${PIS[@]}"
|
||||||
do
|
do
|
||||||
|
|
||||||
#########################################
|
#########################################
|
||||||
# 🏠 LOKALER HOST (kein SSH nötig)
|
# 🏠 LOCAL HOST
|
||||||
#########################################
|
#########################################
|
||||||
if [ "$PI" == "localhost" ]; then
|
if [ "$PI" == "localhost" ]; then
|
||||||
|
|
||||||
@@ -56,7 +52,7 @@ do
|
|||||||
else
|
else
|
||||||
|
|
||||||
#########################################
|
#########################################
|
||||||
# 🌐 REMOTE HOST VIA SSH
|
# 🌐 REMOTE HOST
|
||||||
#########################################
|
#########################################
|
||||||
|
|
||||||
LOG=$(ssh $SSH_OPTS kai@$PI \
|
LOG=$(ssh $SSH_OPTS kai@$PI \
|
||||||
@@ -67,31 +63,26 @@ do
|
|||||||
|
|
||||||
|
|
||||||
#############################################
|
#############################################
|
||||||
# 🚨 ANALYSE: FAILED LOGINS
|
# 🚨 ANALYSE (sauber gefiltert)
|
||||||
#############################################
|
#############################################
|
||||||
|
|
||||||
if [ -n "$LOG" ]; then
|
FAILS=$(echo "$LOG" | grep "Failed password for" | wc -l)
|
||||||
FAILS=$(echo "$LOG" | grep "Failed password" | wc -l)
|
|
||||||
else
|
|
||||||
FAILS=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
#############################################
|
#############################################
|
||||||
# 📊 DETAILS ZU ANGREIFERN
|
# 🚨 ALERT LOGIC
|
||||||
#############################################
|
#############################################
|
||||||
|
|
||||||
if [ "$FAILS" -gt 0 ]; then
|
if [ "$FAILS" -gt 0 ]; then
|
||||||
|
|
||||||
IPS=$(echo "$LOG" | grep "Failed password" \
|
EVENT_TIME=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
|
IPS=$(echo "$LOG" | grep "Failed password for" \
|
||||||
| awk '{print $(NF-3)}' \
|
| awk '{print $(NF-3)}' \
|
||||||
| sort | uniq -c | sort -nr)
|
| sort | uniq -c | sort -nr)
|
||||||
|
|
||||||
#########################################
|
|
||||||
# 📡 TELEGRAM ALERT
|
|
||||||
#########################################
|
|
||||||
|
|
||||||
MESSAGE="🚨 SSH Angriff erkannt!
|
MESSAGE="🚨 SSH Angriff erkannt!
|
||||||
|
Zeit: $EVENT_TIME
|
||||||
Host: $HOST ($PI)
|
Host: $HOST ($PI)
|
||||||
Fehlversuche: $FAILS
|
Fehlversuche: $FAILS
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user