Files
ssh-monitor/ssh-monitor.conf.example
T
ssh-monitor 2cf6c145ab Add ENABLE_IP_BAN mode switch
Introduce ENABLE_IP_BAN in config and script.
When set to 0, ssh-monitor works in monitor-only mode (alerts without ipset/iptables bans).
2026-04-16 12:13:27 +10:00

95 lines
5.0 KiB
Plaintext

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/email
# скрипт сразу завершится с ошибкой в stderr: «Не настроен ни один канал отправки оповещений» (код 1),
# в том числе при --check-config и --dry-run. Сначала настройте Telegram или SMTP ниже.
BACKUP_WEBHOOK_URL=""
# --- Очередь оповещений (NOTIFY_ORDER) ---
# CSV: telegram, email (или сокращения tg, mail).
# При каждом событии скрипт ПЫТАЕТСЯ ОТПРАВИТЬ ВО ВСЕ перечисленные каналы по порядку (не только в первый успешный).
# Неудача одного канала не отменяет отправку в остальные; подробности — в LOG_FILE (WARN по каналам).
#
# Пустая строка NOTIFY_ORDER="" = авто: в цепочку NOTIFY_CHAIN попадают ТОЛЬКО реально настроенные каналы,
# порядок по умолчанию: telegram → email (см. критерии «настроен» в README, раздел про каналы).
#
# Если после сборки цепочки каналов список ПУСТ (ни один канал не настроен, либо в NOTIFY_ORDER только
# неизвестные токены), скрипт НЕ запускает мониторинг и выходит с ошибкой:
# Не настроен ни один канал отправки оповещений
#
# Примеры явной очереди:
# NOTIFY_ORDER="telegram,email"
# NOTIFY_ORDER="telegram"
# NOTIFY_ORDER="email"
NOTIFY_ORDER=""
# 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"
# 1 = мониторинг + автобан IP (нужен ipset). 0 = только мониторинг и уведомления (логины, неудачи, sudo, logind и т.д. — без ipset/iptables).
ENABLE_IP_BAN="1"
# 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/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"
# --- ipset (скрипт в этой папке): имена наборов и лимит элементов. Пусто в конфиге = значения по умолчанию из скрипта.
# IPSET_NAME_V4="ssh_monitor_ban"
# IPSET_NAME_V6="ssh_monitor_ban_v6"
# IPSET_MAXELEM="1048576"
# Окно и порог для уведомления о возможном массовом брутфорсе (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"