TELEGRAM_BOT_TOKEN="replace_with_telegram_bot_token" TELEGRAM_CHAT_ID="replace_with_telegram_chat_id" # Резервный webhook, если ВСЕ каналы из NOTIFY_CHAIN не смогли доставить сообщение (JSON {"text":"..."}). # ВАЖНО: BACKUP_WEBHOOK_URL НЕ заменяет основной канал — без хотя бы одного из telegram/zabbix/email # скрипт сразу завершится с ошибкой в stderr: «Не настроен ни один канал отправки оповещений» (код 1), # в том числе при --check-config и --dry-run. Сначала настройте Telegram, Zabbix или SMTP ниже. BACKUP_WEBHOOK_URL="" # --- Очередь оповещений (NOTIFY_ORDER) --- # CSV: telegram, zabbix, email (или сокращения tg, zbx, mail). # При каждом событии скрипт ПЫТАЕТСЯ ОТПРАВИТЬ ВО ВСЕ перечисленные каналы по порядку (не только в первый успешный). # Неудача одного канала не отменяет отправку в остальные; подробности — в LOG_FILE (WARN по каналам). # # Пустая строка NOTIFY_ORDER="" = авто: в цепочку NOTIFY_CHAIN попадают ТОЛЬКО реально настроенные каналы, # порядок по умолчанию: telegram → zabbix → email (см. критерии «настроен» в README, раздел про каналы). # # Если после сборки цепочки каналов список ПУСТ (ни один канал не настроен, либо в NOTIFY_ORDER только # неизвестные токены), скрипт НЕ запускает мониторинг и выходит с ошибкой: # Не настроен ни один канал отправки оповещений # # Примеры явной очереди: # NOTIFY_ORDER="telegram,zabbix,email" # NOTIFY_ORDER="telegram" # NOTIFY_ORDER="zabbix" # NOTIFY_ORDER="email" NOTIFY_ORDER="" # Zabbix trapper (zabbix_sender). Нужны ZABBIX_SERVER и ZABBIX_HOST_NAME. ZABBIX_SERVER="" ZABBIX_HOST_NAME="" ZABBIX_ALERT_KEY="ssh.monitor.alert" ZABBIX_SEQ_KEY="ssh.monitor.seq" # В Zabbix уходит короткий plain-текст (второй аргумент notify_send); 0 = не урезать длину. ZABBIX_ALERT_MAX_BYTES="0" # Последний ssh.monitor.seq на диске — после перезапуска счётчик не сбрасывается. ZABBIX_SEQ_STATE_FILE="/var/log/ssh_monitor_zabbix_seq" # SMTP (python3). Для авто-режима почты нужны MAIL_SMTP_HOST, MAIL_FROM, MAIL_TO. MAIL_SMTP_HOST="" MAIL_SMTP_PORT="587" MAIL_SMTP_USER="" MAIL_SMTP_PASSWORD="" MAIL_FROM="" MAIL_TO="" MAIL_SMTP_STARTTLS="1" MAIL_SMTP_SSL="0" LOG_FILE="/var/log/ssh_monitor.log" LAST_HEARTBEAT_FILE="/var/log/last_heartbeat.txt" LAST_REPORT_FILE="/var/log/last_daily_report.txt" LAST_SSH_CHECK_FILE="/var/log/last_ssh_check" LAST_SUDO_CHECK_FILE="/var/log/last_sudo_check" LAST_SECURITY_EVENTS_FILE="/var/log/last_security_events_check" LAST_LOGIND_CHECK_FILE="/var/log/last_logind_check" BAN_LIST_FILE="/var/log/ssh_bans.txt" # systemd-logind: 1 = включено, 0 = выключено ENABLE_LOGIND_MONITOR="1" LOGIND_NOTIFY_NEW="1" LOGIND_NOTIFY_REMOVED="0" LOGIND_NOTIFY_FAILED="1" # 1 = не дублировать Telegram для SSH-сессий logind (Type=ssh или Service=*sshd*; см. README) LOGIND_SKIP_REMOTE="1" DAILY_REPORT_HOUR="9" # IANA-зона для «9:00» и календарной даты отчёта; пусто = как у команды date (обычно локаль сервера, см. timedatectl) DAILY_REPORT_TZ="" DAILY_REPORT_TOP_IPS="5" # IANA-зона для «🕐 Время» в Telegram/Zabbix/email. Пусто = как DAILY_REPORT_TZ, иначе зона процесса (часто UTC в systemd — см. README). NOTIFY_TZ="" # Не чаще 1 успешного SSH (Accepted) в Telegram на пару user+IP за N секунд (разные port в журнале). 0 = только дедуп внутри одного прохода. SSH_ACCEPT_NOTIFY_DEDUP_SEC="5" BAN_TIME="3600" MAX_ATTEMPTS="3" BAN_CHECK_INTERVAL="60" MONITOR_INTERVAL="10" # Окно и порог для уведомления о возможном массовом брутфорсе (journalctl) BRUTE_WINDOW_SEC="900" BRUTE_MIN_FAILS="30" BRUTE_NOTIFY_COOLDOWN_SEC="3600" # Директория для textfile collector Prometheus (node_exporter). Пусто — отключено. PROMETHEUS_TEXTFILE_DIR="" # JSON-снимок состояния на каждой итерации (timestamp, hostname, dry_run). Пусто — отключено. HEALTHCHECK_STATUS_FILE="" WATCHDOG_MAX_HEARTBEAT_AGE="5400" WATCHDOG_LOG_FILE="/var/log/ssh_monitor_watchdog.log" WATCHDOG_SERVICE_NAME="ssh-monitor.service" WATCHDOG_NOTIFY_ON_RECOVERY="0" WHITELIST_IPS="127.0.0.1,10.0.0.5" WHITELIST_SUBNETS="10.0.0.0/24,192.168.1.0/24"