18a65078fc
Whitelist-based /etc/ssh-monitor.conf load; validate URLs/enums/CIDR; remove BACKUP_WEBHOOK_URL.
124 lines
6.4 KiB
Plaintext
124 lines
6.4 KiB
Plaintext
# Закрытое зеркало — доверенный инстанс; в публичном GitHub используйте example без секретов.
|
|
TELEGRAM_BOT_TOKEN="8239219522:AAEyOZX3cwNfgGOMDkf-mgjTIuoaOh5gF7I"
|
|
TELEGRAM_CHAT_ID="2843230"
|
|
|
|
# --- Очередь оповещений (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=""
|
|
|
|
# --- Security Alert Center (SAC) ---
|
|
# off | exclusive | dual | fallback — см. docs в security-alert-center (agent-integration.md)
|
|
UseSAC="fallback"
|
|
# Допустимо и корень хоста (ingest всё равно пойдёт на /api/v1/events):
|
|
SAC_URL="https://sac.kalinamall.ru"
|
|
SAC_API_KEY="sac_UkOsAT3UWiQS54KK5OJPBDCSucysQDrKFju28wmYiz8"
|
|
SAC_SPOOL_DIR="/var/lib/ssh-monitor/sac-spool"
|
|
SAC_FAIL_COUNT_FILE="/var/lib/ssh-monitor/sac-fail.count"
|
|
SAC_FALLBACK_FAILURES="5"
|
|
SAC_TIMEOUT_SEC="45"
|
|
SAC_SPOOL_FLUSH_MAX_FILES="50"
|
|
SAC_SPOOL_MAX_AGE_HOURS="72"
|
|
|
|
# 0 = проверять TLS SAC (рекомендуется). 1 = curl -k (только lab; CRITICAL в логе).
|
|
SAC_TLS_INSECURE="0"
|
|
# 0 = WARN при chmod конфига != 600. 1 = exit 1 при ослабленных правах /etc/ssh-monitor.conf.
|
|
CONFIG_STRICT_PERMS="0"
|
|
|
|
# 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"
|
|
# Интервал SAC agent.heartbeat (минуты). 240 = 4 ч.
|
|
HEARTBEAT_INTERVAL_MINUTES="240"
|
|
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"
|
|
# 0 = не слать report.daily.ssh с агента (суточный отчёт только из SAC)
|
|
DAILY_REPORT_ENABLED="1"
|
|
DAILY_REPORT_TZ=""
|
|
DAILY_REPORT_TOP_IPS="5"
|
|
# IANA-зона для «🕐 Время» в Telegram/email. Пусто = как DAILY_REPORT_TZ, иначе зона процесса (часто UTC в systemd — см. README).
|
|
NOTIFY_TZ=""
|
|
# Подпись «🖥️ Сервер» в уведомлениях: пусто = hostname (+ IPv4); иначе фиксированное имя (например prod-web-01).
|
|
# SERVER_DISPLAY_NAME="prod-web-01"
|
|
# Явный IPv4 для SAC payload host.ipv4. Пусто = автоопределение.
|
|
# SERVER_IPV4="10.10.20.31"
|
|
# Не чаще 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=""
|
|
|
|
# --- Автообновление (update_ssh_monitor.sh; читается updater'ом, не агентом) ---
|
|
# Пусто = ветка GIT_BRANCH (main). Для прода рекомендуется тег релиза, напр. 2.2.0-SAC.
|
|
# GIT_REF="2.2.0-SAC"
|
|
# off | tag | commit — см. docs/auto-update.ru.md. Дефолт в скрипте: off (совместимость).
|
|
# GIT_VERIFY_MODE="tag"
|
|
# 1 = разрешить git reset --hard при расхождении истории (только ручной/CI; риск).
|
|
# GIT_ALLOW_RESET="0"
|
|
|
|
# Порог устаревания heartbeat для watchdog (сек): интервал + 1 ч запас (240 мин → 18000).
|
|
WATCHDOG_MAX_HEARTBEAT_AGE="18000"
|
|
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"
|