| Server IP : 119.195.102.159 / Your IP : 216.73.217.134 Web Server : nginx/1.18.0 System : Linux picell 5.15.0-181-generic #191-Ubuntu SMP Fri May 22 19:09:02 UTC 2026 x86_64 User : altablue ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/altablue/ |
Upload File : |
#!/bin/bash
# ============================================================
# π¨ λ±κΈλ³ ν
λ κ·Έλ¨ μλ¦Ό μμ€ν
# μλ² λ°°ν¬ κ²½λ‘: /home/altablue/telegram_notify.sh
#
# μ¬μ©λ²:
# ./telegram_notify.sh "CRITICAL" "μλ²κ° ν΄νΉλΉνμ΅λλ€!"
# ./telegram_notify.sh "WARNING" "μμ¬μ€λ¬μ΄ νμΌ λ°κ²¬"
# ./telegram_notify.sh "INFO" "μΌμΌ μ€μΊ μλ£"
#
# λ±κΈ:
# CRITICAL (π΄) - μ¦κ° λμ νμ (λ°±λμ΄ λ°κ²¬, νμΌ λ³μ‘° λ±)
# WARNING (π‘) - μ£Όμ νμ (μμ¬ νμΌ, λΉμ μ μ κ·Ό λ±)
# INFO (π΅) - μ λ³΄μ± (μ€μΊ μλ£, μμ€ν
μν λ±)
# ============================================================
# μ€μ νμΌ λ‘λ
CONFIG_FILE="/etc/security-watchdog/config"
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
# ν΄λ°±: μ§μ μ€μ (보μ μν - μ κ±°λ¨)
else
echo "β μ€μ νμΌμ μ°Ύμ μ μμ΅λλ€: $CONFIG_FILE" >&2
echo " μ€μΉ: sudo /home/altablue/deploy_security.sh" >&2
exit 1
fi
# ββ μΈμ μ²λ¦¬ ββββββββββββββββββββββββββββββββββββββ
LEVEL="${1:-INFO}"
MESSAGE="${2:-λ©μμ§ μμ}"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# ββ λ±κΈλ³ μ΄λͺ¨μ§ λ° ν€λ βββββββββββββββββββββββββ
case "$LEVEL" in
CRITICAL)
EMOJI="π΄π¨"
HEADER="κΈ΄κΈ λ³΄μ κ²½κ³ "
;;
WARNING)
EMOJI="π‘β οΈ"
HEADER="보μ κ²½κ³ "
;;
HIGH)
EMOJI="π πΆ"
HEADER="λμ μν νμ§"
;;
INFO)
EMOJI="π΅βΉοΈ"
HEADER="보μ μλ¦Ό"
;;
HEALTH)
EMOJI="π"
HEADER="μλ² μν"
;;
DAILY)
EMOJI="π"
HEADER="μΌμΌ 보μ λ³΄κ³ μ"
;;
*)
EMOJI="π"
HEADER="μλ¦Ό"
;;
esac
# ββ λ©μμ§ ν¬λ§·ν
βββββββββββββββββββββββββββββββββ
FORMATTED="${EMOJI} <b>${HEADER}</b>
ββββββββββββββββββββ
π₯οΈ μλ²: ${SERVER_NAME:-AltaBlue}
π μκ°: ${TIMESTAMP}
ββββββββββββββββββββ
${MESSAGE}"
# ββ Rate Limiting (flock κΈ°λ° λμ μ κ·Ό 보νΈ) ββββββ
LOCK_FILE="/tmp/.telegram_notify.lock"
RATE_GLOBAL="/tmp/.telegram_rate_global"
(
# μ κΈ νλ (μ΅λ 5μ΄ λκΈ°)
flock -w 5 200 || {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] β οΈ μ κΈ νλ μ€ν¨ (λ€λ₯Έ μλ¦Ό μ μ‘ μ€)" >&2
exit 1
}
# κΈλ‘λ² μλ μ ν (μ΅μ 1μ΄ κ°κ²©)
if [ -f "$RATE_GLOBAL" ]; then
LAST_SEND=$(cat "$RATE_GLOBAL" 2>/dev/null || echo 0)
NOW=$(date +%s)
DIFF=$((NOW - LAST_SEND))
if [ "$DIFF" -lt 1 ]; then
sleep 1
fi
fi
# ββ μ€λ³΅ μλ¦Ό λ°©μ§ ββββββββββββββββββββββββββββ
COOLDOWN=${ALERT_COOLDOWN:-300}
MSG_HASH=$(echo "$MESSAGE" | md5sum | cut -d' ' -f1)
COOLDOWN_FILE="/tmp/.telegram_cooldown_${MSG_HASH}"
if [ -f "$COOLDOWN_FILE" ]; then
LAST_ALERT=$(cat "$COOLDOWN_FILE" 2>/dev/null || echo 0)
NOW=$(date +%s)
if [ $((NOW - LAST_ALERT)) -lt "$COOLDOWN" ]; then
# CRITICAL λ±κΈμ μΏ¨λ€μ΄ 무μ
if [ "$LEVEL" != "CRITICAL" ]; then
exit 0
fi
fi
fi
# ββ λ©μμ§ μ μ‘ βββββββββββββββββββββββββββββββ
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
"https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="${FORMATTED}" \
-d parse_mode="HTML" 2>&1)
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | sed '$d')
# μ μ‘ νμμ€ν¬ν κΈ°λ‘
date +%s > "$RATE_GLOBAL"
if [ "$HTTP_CODE" = "200" ]; then
date +%s > "$COOLDOWN_FILE"
exit 0
else
# μ μ‘ μ€ν¨ μ λ‘κ·Έ κΈ°λ‘
LOG_DIR="${LOG_DIR:-/home/altablue/logs}"
mkdir -p "$LOG_DIR"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ν
λ κ·Έλ¨ μ μ‘ μ€ν¨ (HTTP $HTTP_CODE): $BODY" >> "${LOG_DIR}/telegram_errors.log"
# μ¬μλ (1ν)
sleep 2
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d text="${FORMATTED}" \
-d parse_mode="HTML" >/dev/null 2>&1
exit 1
fi
) 200>"$LOCK_FILE"