Files
ssh-monitor/ssh-monitor.conf.example

125 lines
6.6 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Закрытое зеркало — доверенный инстанс; в публичном 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"
# Таймаут curl к SAC (health + ingest). При burst ingest на сервере — 6090; см. docs/sac-ingest.ru.md
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"