diff --git a/Deploy-LoginMonitor.ps1 b/Deploy-LoginMonitor.ps1 index d9e75f5..d274c98 100644 --- a/Deploy-LoginMonitor.ps1 +++ b/Deploy-LoginMonitor.ps1 @@ -175,6 +175,16 @@ try { Write-DeployLog "Deploy: корень дистрибутива: $shareRoot" + $settingsLocal = Join-Path $InstallRoot 'login_monitor.settings.ps1' + $settingsExampleShare = Join-Path $shareRoot 'login_monitor.settings.example.ps1' + if (-not (Test-Path -LiteralPath $settingsLocal) -and (Test-Path -LiteralPath $settingsExampleShare)) { + if (-not (Test-Path -LiteralPath $InstallRoot)) { + New-Item -ItemType Directory -Path $InstallRoot -Force | Out-Null + } + Copy-Item -LiteralPath $settingsExampleShare -Destination $settingsLocal -Force + Write-DeployLog "Создан login_monitor.settings.ps1 из example (при следующих обновлениях не перезаписывается)." + } + if (-not (Test-Path -LiteralPath $sourceScript)) { Write-DeployLog "ОШИБКА: на шаре нет файла: $sourceScript" exit 0 diff --git a/Docs/deploy-netlogon-publish.md b/Docs/deploy-netlogon-publish.md index 4e7e72c..73e386e 100644 --- a/Docs/deploy-netlogon-publish.md +++ b/Docs/deploy-netlogon-publish.md @@ -22,6 +22,7 @@ - `Install-DomainMonitors.ps1` - `Deploy-DomainMonitors.ps1` - `exchange_monitor.settings.example.ps1` +- `login_monitor.settings.example.ps1` ## Запуск diff --git a/Docs/deploy-rdp-login-monitor.md b/Docs/deploy-rdp-login-monitor.md index 1a9f6d9..818304e 100644 --- a/Docs/deploy-rdp-login-monitor.md +++ b/Docs/deploy-rdp-login-monitor.md @@ -14,7 +14,8 @@ | Файл | Назначение | |------|------------| -| `Login_Monitor.ps1` | Основной скрипт (токен/chat id plain или DPAPI в параметрах). | +| `Login_Monitor.ps1` | Основной скрипт (логика мониторинга; без локальных секретов). | +| `login_monitor.settings.example.ps1` | Образец настроек на шаре (Telegram, SMTP, 4740). | | `version.txt` | **Одна строка** — номер версии пакета на шаре (см. раздел «Версии» ниже). | | `Deploy-LoginMonitor.ps1` | Установщик: сравнивает версию, копирует монитор, вызывает `-InstallTasks`, при необходимости запускает процесс монитора. | @@ -36,13 +37,31 @@ Лог: **`C:\ProgramData\RDP-login-monitor\Logs\deploy.log`**. +## Локальные настройки: `login_monitor.settings.ps1` + +На каждом компьютере: **`C:\ProgramData\RDP-login-monitor\login_monitor.settings.ps1`**. + +- Секреты и параметры сайта (Telegram, SMTP, **4740**, `$IgnoreAdvapiNetworkLogonSourceIps`) — **только** в этом файле. +- Образец в репозитории и на шаре: **`login_monitor.settings.example.ps1`**. +- **`Deploy-LoginMonitor.ps1`** **не перезаписывает** `login_monitor.settings.ps1` при обновлении скрипта. +- Если файла нет, Deploy **один раз** копирует example → settings (дальше правки только локально). + +```powershell +$root = 'C:\ProgramData\RDP-login-monitor' +Copy-Item '\\B26\NETLOGON\RDP-login-monitor\login_monitor.settings.example.ps1' ` + (Join-Path $root 'login_monitor.settings.ps1') +notepad (Join-Path $root 'login_monitor.settings.ps1') +``` + +DPAPI: **`Encrypt-DpapiForRdpMonitor.ps1`** — строки Base64 в settings. + ## Опционально: `ignore.lst` Файл **`C:\ProgramData\RDP-login-monitor\ignore.lst`** — подавление отдельных алертов **4624/4625/4740**. Синтаксис — в **[README.md](../README.md)** (раздел 7) и **`ignore.lst.example`**. Deploy с шары **`ignore.lst` не копирует**. ## Опционально на КД: блокировки AD (4740) -Включается только если монитор запущен на КД с именем **`$LockoutMonitorDomainController`**. Параметры задаются **локально** на этом КД после деплоя (`$NetBiosDomainName`, `$ExchangeIisLogPath`, …). +Включается только если монитор запущен на КД с именем **`$LockoutMonitorDomainController`**. Параметры задаются в **`login_monitor.settings.ps1`** на этом КД (`$NetBiosDomainName`, `$ExchangeIisLogPath`, …). ## Heartbeat и watchdog @@ -109,9 +128,9 @@ powershell.exe -NoProfile -ExecutionPolicy Bypass -File "\\B26\NETLOGON\RDP-logi ## Безопасность -- Ограничьте ACL на шару (в скрипте могут быть секреты). -- DPAPI: **`Encrypt-DpapiForRdpMonitor.ps1`** -- Внутренний git: не пушить секреты в публичный GitHub +- Ограничьте ACL на шару (в example/settings могут быть секреты для домена B26). +- DPAPI: **`Encrypt-DpapiForRdpMonitor.ps1`** (значения в **`login_monitor.settings.ps1`**) +- Внутренний git (git.kalinamall.ru): доверенный; секреты допустимы в **`login_monitor.settings.example.ps1`** ## UNC и ExecutionPolicy diff --git a/Encrypt-DpapiForRdpMonitor.ps1 b/Encrypt-DpapiForRdpMonitor.ps1 index b5030a8..998fd60 100644 --- a/Encrypt-DpapiForRdpMonitor.ps1 +++ b/Encrypt-DpapiForRdpMonitor.ps1 @@ -1,5 +1,6 @@ # Запуск: от администратора на ТОМ ЖЕ компьютере, где будет Login_Monitor.ps1. -# Результат (Base64) вставьте в $TelegramBotTokenProtectedB64 / $TelegramChatIDProtectedB64 / $MailSmtpPasswordProtectedB64. +# Результат (Base64) вставьте в login_monitor.settings.ps1 или exchange_monitor.settings.ps1: +# $TelegramBotTokenProtectedB64 / $TelegramChatIDProtectedB64 / $MailSmtpPasswordProtectedB64. param( [Parameter(Mandatory = $true)][string]$PlainText ) diff --git a/Login_Monitor.ps1 b/Login_Monitor.ps1 index 10fcadd..62a4df4 100644 --- a/Login_Monitor.ps1 +++ b/Login_Monitor.ps1 @@ -21,16 +21,18 @@ Add-Type -AssemblyName System.Security $p=[Text.Encoding]::UTF8.GetBytes('<токен>') [Convert]::ToBase64String([Security.Cryptography.ProtectedData]::Protect($p,$null,'LocalMachine')) - Полученную строку вставьте в $TelegramBotTokenProtectedB64 (и аналогично для chat id). + Полученную строку вставьте в $TelegramBotTokenProtectedB64 в login_monitor.settings.ps1 (и аналогично для chat id). + Локальные настройки (секреты, КД, SMTP): C:\ProgramData\RDP-login-monitor\login_monitor.settings.ps1 + (образец login_monitor.settings.example.ps1). Файл настроек не перезаписывается при автообновлении скрипта. #> [CmdletBinding()] param( - [string]$TelegramBotToken = "8239219522:AAEyOZX3cwNfgGOMDkf-mgjTIuoaOh5gF7I", - [string]$TelegramChatID = "2843230", - [string]$TelegramBotTokenProtectedB64 = "", - [string]$TelegramChatIDProtectedB64 = "", - [string]$MailSmtpPasswordProtectedB64 = "", + [string]$TelegramBotToken = '', + [string]$TelegramChatID = '', + [string]$TelegramBotTokenProtectedB64 = '', + [string]$TelegramChatIDProtectedB64 = '', + [string]$MailSmtpPasswordProtectedB64 = '', [switch]$Watchdog, [switch]$InstallTasks, [switch]$SkipScheduledTaskMaintenance @@ -72,7 +74,7 @@ $script:MonitorSingletonLockStream = $null # строки ниже, если правки «мелкие» и вы не хотите менять отображаемую версию в логах). # Рекомендация: при значимых релизах меняйте и $ScriptVersion, и version.txt одинаково; при только # исправлениях на шаре — достаточно поднять patch в version.txt (например 1.3.0.1). -$ScriptVersion = "1.5.10" +$ScriptVersion = "1.5.11" # Логи (все под InstallRoot) $LogFile = Join-Path $script:InstallRoot "Logs\login_monitor.log" @@ -146,21 +148,17 @@ $ExcludedComputerPatterns = @( ) # Узкое исключение "шумовых" сетевых логонов (LogonType=3) от конкретных источников. -# Пример: Proxmox Mail Gateway / LDAP sync, которые периодически создают 4624 с LogonProcessName=Advapi. -$IgnoreAdvapiNetworkLogonSourceIps = @( - "192.168.160.57" -) +# IP-список — в login_monitor.settings.ps1 ($IgnoreAdvapiNetworkLogonSourceIps). +$IgnoreAdvapiNetworkLogonSourceIps = @() $IgnoreAdvapiNetworkLogonProcessContains = "Advapi" # Блокировка учётной записи AD (Security 4740) + IP клиента из логов IIS ActiveSync. -# Мониторинг включается только если скрипт запущен на узле, имя которого совпадает с $LockoutMonitorDomainController. -# Конфигурация домена B26 / DC3 — внутренний дистрибутив (git.kalinamall.ru). Не пушить этот файл в публичный GitHub. -$LockoutMonitorDomainController = "K6A-DC3" -$NetBiosDomainName = "B26" -$ExchangeIisLogPath = "\\fifth.kalinamall.ru\c$\inetpub\logs\LogFiles\W3SVC1" -$ExchangeServerHostForIisExclude = "" +# Параметры КД/IIS — в login_monitor.settings.ps1. +$LockoutMonitorDomainController = '' +$NetBiosDomainName = '' +$ExchangeIisLogPath = '' +$ExchangeServerHostForIisExclude = '' $ExchangeIisLogTailLines = 5000 -# Окно поиска IP в IIS: только строки за N минут до события 4740 (локальное время сервера IIS). $ExchangeIisLogMinutesBeforeLockout = 30 # Агрегация неудачных входов Security 4625 (вариант C: два порога). Автоблокировка IP не выполняется. @@ -176,16 +174,24 @@ $FailedLogonRateLimitIpThreshold = 12 $FailedLogonRateLimitIpCooldownSeconds = 300 # Очередь оповещений: telegram, email (или tg, mail). Пусто = авто: настроенные каналы, порядок telegram → email. -$NotifyOrder = "tg" -$MailSmtpHost = "" +# Переопределение — в login_monitor.settings.ps1. +$NotifyOrder = 'tg' +$MailSmtpHost = '' $MailSmtpPort = 587 -$MailSmtpUser = "" -$MailSmtpPassword = "" -$MailFrom = "" -$MailTo = "" +$MailSmtpUser = '' +$MailSmtpPassword = '' +$MailFrom = '' +$MailTo = '' $MailSmtpStartTls = $true $MailSmtpSsl = $false +$script:LoginMonitorSettingsFile = Join-Path $script:InstallRoot 'login_monitor.settings.ps1' +$script:LoginMonitorSettingsLoaded = $false +if (Test-Path -LiteralPath $script:LoginMonitorSettingsFile) { + . $script:LoginMonitorSettingsFile + $script:LoginMonitorSettingsLoaded = $true +} + # ============================================ # ИНИЦИАЛИЗАЦИЯ # ============================================ @@ -793,6 +799,11 @@ if (-not (Test-Administrator)) { exit 1 } Write-Log "Скрипт запущен с правами администратора, версия $ScriptVersion" +if ($script:LoginMonitorSettingsLoaded) { + Write-Log "Настройки: login_monitor.settings.ps1 загружен." +} else { + Write-Log "Предупреждение: login_monitor.settings.ps1 не найден — Telegram/SMTP/4740 не настроены (скопируйте login_monitor.settings.example.ps1)." +} Invoke-RdpMonitorProcessMigrationAndRelaunch Lock-RdpMonitorSingleInstance diff --git a/README.md b/README.md index dc7c815..6339484 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,12 @@ PowerShell-набор для мониторинга входов в Windows с - `RDP-Login-Monitor-Watchdog` (контроль процесса каждые 5 минут). - Доменная доставка и обновления: **`Deploy-LoginMonitor.ps1`** + **`version.txt`** с шары `NETLOGON`. После успешного деплоя в приветственном сообщении (Telegram/Email) может появиться отметка об обновлении (файл **`deploy_last_update.txt`** рядом с логами). - Документация по развёртыванию: **[Docs/README.md](Docs/README.md)** (RDP-монитор, Exchange, NETLOGON). -- **`Encrypt-DpapiForRdpMonitor.ps1`** — опционально для подготовки DPAPI-строк токена/chat id и пароля SMTP (`$MailSmtpPasswordProtectedB64`). +- **`Encrypt-DpapiForRdpMonitor.ps1`** — опционально для подготовки DPAPI-строк токена/chat id и пароля SMTP (`$MailSmtpPasswordProtectedB64` в файле настроек). +- **Локальные настройки RDP-монитора:** **`login_monitor.settings.ps1`** в каталоге установки (образец **`login_monitor.settings.example.ps1`**). При автообновлении **`Login_Monitor.ps1`** с шары файл настроек **не перезаписывается** (как **`exchange_monitor.settings.ps1`** для Exchange). ## Что изменилось (важное) +- **Локальные настройки RDP-монитора** вынесены в **`login_monitor.settings.ps1`** (образец **`login_monitor.settings.example.ps1`**). При автообновлении **`Login_Monitor.ps1`** с шары секреты и параметры КД **не слетают**. Deploy при отсутствии settings создаёт файл один раз из example на шаре. - **Кодировка `.ps1`**: в репозитории добавлены `.editorconfig` и `.gitattributes`, чтобы `*.ps1` по умолчанию сохранялись как **UTF-8 with BOM** и с **CRLF** (это сильно снижает “кракозябры” и ошибки парсинга PowerShell). - **Кодировка логов**: `login_monitor.log` / `watchdog.log` пишутся как **UTF-8 с BOM** (и при необходимости BOM добавляется к уже существующему файлу), чтобы в **FAR/старых просмотрщиках** не было ситуации “в консоли нормально, а в файле РЈРІРµ…” из‑за неверной авто-кодировки. - **`auditpol` на русской Windows**: настройка/проверка аудита опирается на категорию **`Вход/выход`** и подкатегории **`Вход в систему` / `Выход из системы`** (ожидается строка **`Успех и сбой`**). Это устраняет ошибки вида `0x00000057` из‑за несуществующего на RU ОС имени `Logon`. @@ -28,8 +30,9 @@ PowerShell-набор для мониторинга входов в Windows с - `C:\ProgramData\RDP-login-monitor\` 2. Скопируйте в неё как минимум: - `Login_Monitor.ps1` - - (для доменного развёртывания отдельно на шаре) `Deploy-LoginMonitor.ps1` и `version.txt`. -3. Откройте `Login_Monitor.ps1` и задайте каналы оповещений: + - `login_monitor.settings.example.ps1` → переименуйте в **`login_monitor.settings.ps1`** и задайте параметры (см. п. 3) + - (для доменного развёртывания отдельно на шаре) `Deploy-LoginMonitor.ps1`, `version.txt` и `login_monitor.settings.example.ps1` +3. Настройте **`C:\ProgramData\RDP-login-monitor\login_monitor.settings.ps1`** (не редактируйте секреты в `Login_Monitor.ps1` — они перезапишутся при деплое): - **Telegram:** `$TelegramBotToken` / `$TelegramChatID` или `...ProtectedB64` - **Email (SMTP):** `$MailSmtpHost`, `$MailFrom`, `$MailTo`, `$MailSmtpPort` (по умолчанию 587), при необходимости `$MailSmtpUser` / `$MailSmtpPassword` (или `$MailSmtpPasswordProtectedB64` через DPAPI), `$MailSmtpStartTls` / `$MailSmtpSsl` - **Порядок:** `$NotifyOrder` — пусто = авто (Telegram → Email, только настроенные); иначе `telegram,email` или `email` и т.п. (допускаются `tg`, `mail`) @@ -37,7 +40,7 @@ PowerShell-набор для мониторинга входов в Windows с 5. Логи и служебные файлы будут в: - `C:\ProgramData\RDP-login-monitor\Logs\` 6. (Опционально) Подавление части алертов по списку — см. раздел **«7) ignore.lst»** ниже. -7. (Опционально) Мониторинг блокировок AD на КД — **`$LockoutMonitorDomainController`** (короткое имя узла, на котором **установлен и запущен** монитор), **`$NetBiosDomainName`**, **`$ExchangeIisLogPath`**, **`$ExchangeIisLogMinutesBeforeLockout`** (по умолчанию 30), **`$ExchangeIisLogTailLines`** (по умолчанию 5000), **`$ExchangeServerHostForIisExclude`**. В оповещении: пользователь из 4740 и IP из IIS за окно до блокировки. В **`ignore.lst`** префикс **`4740:`** или **`all:`** — см. **`ignore.lst.example`**. +7. (Опционально) Мониторинг блокировок AD на КД — в **`login_monitor.settings.ps1`**: **`$LockoutMonitorDomainController`** (короткое имя узла, на котором **установлен и запущен** монитор), **`$NetBiosDomainName`**, **`$ExchangeIisLogPath`**, **`$ExchangeIisLogMinutesBeforeLockout`** (по умолчанию 30), **`$ExchangeIisLogTailLines`** (по умолчанию 5000), **`$ExchangeServerHostForIisExclude`**. В оповещении: пользователь из 4740 и IP из IIS за окно до блокировки. В **`ignore.lst`** префикс **`4740:`** или **`all:`** — см. **`ignore.lst.example`**. 8. Heartbeat: при отсутствии обновления **`Logs\last_heartbeat.txt`** дольше **`$HeartbeatStaleAlertMultiplier` × `$HeartbeatInterval`** (по умолчанию 2×1 ч) — оповещение в Telegram/Email. ## 2) Ручной запуск @@ -90,6 +93,7 @@ powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\ProgramData\RDP-logi - **`Install-DeployScheduledTask.ps1`** — helper для периодического запуска **`Deploy-LoginMonitor.ps1`** с шары (см. **[DEPLOY.md](DEPLOY.md)**). - **`Watchdog_RDP_Monitor.ps1`** и **`Install-ScheduledTasks.ps1`** — **альтернативная** схема с отдельным watchdog-файлом и путями по умолчанию **`D:\Soft`**. Для новых установок рекомендуется встроенный режим **`-Watchdog`** в **`Login_Monitor.ps1`** и задачи **`RDP-Login-Monitor`** / **`RDP-Login-Monitor-Watchdog`**. - **`ignore.lst.example`** в репозитории — образец файла **`ignore.lst`** для подавления отдельных уведомлений Security (см. раздел 7). +- **`login_monitor.settings.example.ps1`** — образец **`login_monitor.settings.ps1`** (Telegram, SMTP, 4740, локальные IP-исключения). Deploy при первой установке может создать `login_monitor.settings.ps1` из example автоматически. ## 7) Подавление уведомлений Security: `ignore.lst` @@ -138,7 +142,7 @@ powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\ProgramData\RDP-logi ### Примеры и поставка - Расширенные примеры строк — в **`ignore.lst.example`** в корне репозитория (скопируйте на сервер как **`ignore.lst`** и отредактируйте). -- **`Deploy-LoginMonitor.ps1`** этот файл **не копирует**: правила обычно разные на каждой машине; при необходимости создайте `ignore.lst` вручную или через вашу систему конфигурации. +- **`Deploy-LoginMonitor.ps1`** **`ignore.lst`** и **`login_monitor.settings.ps1`** **не копирует и не перезаписывает** — правила и секреты локальны; при отсутствии settings Deploy создаёт его один раз из **`login_monitor.settings.example.ps1`** на шаре. ## Ключевые слова (для поиска репозитория) diff --git a/README_eng.md b/README_eng.md index 43b6425..2a7fc29 100644 --- a/README_eng.md +++ b/README_eng.md @@ -11,7 +11,8 @@ PowerShell toolkit for monitoring Windows logons with Telegram and/or Email (SMT - `RDP-Login-Monitor-Watchdog` (process health check every 5 minutes). - Domain delivery and upgrades: **`Deploy-LoginMonitor.ps1`** + **`version.txt`** on a share such as `NETLOGON`. After a successful deploy, the startup notification may include an update note (file **`deploy_last_update.txt`** next to logs). - Deployment docs: **[Docs/README.md](Docs/README.md)** (RDP monitor, Exchange, NETLOGON). -- **`Encrypt-DpapiForRdpMonitor.ps1`** — optional helper to prepare DPAPI-protected Base64 for the bot token / chat id and SMTP password (`$MailSmtpPasswordProtectedB64`). +- **`Encrypt-DpapiForRdpMonitor.ps1`** — optional helper to prepare DPAPI-protected Base64 for the bot token / chat id and SMTP password (`$MailSmtpPasswordProtectedB64` in the settings file). +- **RDP monitor local settings:** **`login_monitor.settings.ps1`** in the install directory (template **`login_monitor.settings.example.ps1`**). When **`Login_Monitor.ps1`** is auto-updated from the share, the settings file is **not overwritten** (same pattern as **`exchange_monitor.settings.ps1`** for Exchange). ## Notable behavior @@ -28,8 +29,9 @@ PowerShell toolkit for monitoring Windows logons with Telegram and/or Email (SMT - `C:\ProgramData\RDP-login-monitor\` 2. Copy at least: - `Login_Monitor.ps1` - - (for domain rollout on a share) `Deploy-LoginMonitor.ps1` and `version.txt`. -3. Edit `Login_Monitor.ps1` and configure notification channels: + - `login_monitor.settings.example.ps1` → rename to **`login_monitor.settings.ps1`** and configure (see step 3) + - (for domain rollout on a share) `Deploy-LoginMonitor.ps1`, `version.txt`, and `login_monitor.settings.example.ps1` +3. Configure **`C:\ProgramData\RDP-login-monitor\login_monitor.settings.ps1`** (do not put secrets in `Login_Monitor.ps1` — they are overwritten on deploy): - **Telegram:** `$TelegramBotToken` / `$TelegramChatID` or `...ProtectedB64` - **Email (SMTP):** `$MailSmtpHost`, `$MailFrom`, `$MailTo`, `$MailSmtpPort` (default 587), optionally `$MailSmtpUser` / `$MailSmtpPassword` (or `$MailSmtpPasswordProtectedB64` via DPAPI), `$MailSmtpStartTls` / `$MailSmtpSsl` - **Order:** `$NotifyOrder` — empty = auto (Telegram → Email, configured channels only); otherwise `telegram,email`, `email`, etc. (`tg`, `mail` are accepted) @@ -37,7 +39,7 @@ PowerShell toolkit for monitoring Windows logons with Telegram and/or Email (SMT 5. Logs and auxiliary files: - `C:\ProgramData\RDP-login-monitor\Logs\` 6. (Optional) Suppress some Security alerts via **`ignore.lst`** — see **section 7** below. -7. (Optional) AD account lockout monitoring on a DC — **`$LockoutMonitorDomainController`** (short hostname of the machine **where the monitor is installed and running**), **`$NetBiosDomainName`**, **`$ExchangeIisLogPath`**, **`$ExchangeIisLogMinutesBeforeLockout`** (default 30), **`$ExchangeIisLogTailLines`** (default 5000), **`$ExchangeServerHostForIisExclude`**. Alerts include the user from event **4740** and client IPs from IIS within the time window before lockout. In **`ignore.lst`** use prefix **`4740:`** or **`all:`** — see **`ignore.lst.example`**. +7. (Optional) AD account lockout monitoring on a DC — in **`login_monitor.settings.ps1`**: **`$LockoutMonitorDomainController`** (short hostname of the machine **where the monitor is installed and running**), **`$NetBiosDomainName`**, **`$ExchangeIisLogPath`**, **`$ExchangeIisLogMinutesBeforeLockout`** (default 30), **`$ExchangeIisLogTailLines`** (default 5000), **`$ExchangeServerHostForIisExclude`**. Alerts include the user from event **4740** and client IPs from IIS within the time window before lockout. In **`ignore.lst`** use prefix **`4740:`** or **`all:`** — see **`ignore.lst.example`**. 8. Heartbeat: if **`Logs\last_heartbeat.txt`** is not updated for longer than **`$HeartbeatStaleAlertMultiplier` × `$HeartbeatInterval`** (default 2×1 h) — alert via Telegram/Email. ## 2) Manual run @@ -90,6 +92,7 @@ For domain deployment from a share you do not configure the scheduler on clients - **`Install-DeployScheduledTask.ps1`** — helper to run **`Deploy-LoginMonitor.ps1`** from a share on a schedule (see **[DEPLOY.md](DEPLOY.md)**). - **`Watchdog_RDP_Monitor.ps1`** and **`Install-ScheduledTasks.ps1`** — **alternate** layout with a separate watchdog script and default paths under **`D:\Soft`**. For new installs, prefer the built-in **`-Watchdog`** in **`Login_Monitor.ps1`** and tasks **`RDP-Login-Monitor`** / **`RDP-Login-Monitor-Watchdog`**. - **`ignore.lst.example`** in the repo is a template for **`ignore.lst`** to suppress selected Security notifications (see section 7). +- **`login_monitor.settings.example.ps1`** — template for **`login_monitor.settings.ps1`** (Telegram, SMTP, 4740, local IP exclusions). Deploy may create `login_monitor.settings.ps1` from the example on first install. ## 7) Suppressing Security alerts: `ignore.lst` @@ -138,7 +141,7 @@ Explicit **User** / **Workstation** / **Ip** kinds only compare their respective ### Examples and deployment - See **`ignore.lst.example`** in the repo; copy it to the server as **`ignore.lst`** and edit. -- **`Deploy-LoginMonitor.ps1`** does **not** copy this file — rules are usually host-specific; create **`ignore.lst`** manually or via your configuration tooling. +- **`Deploy-LoginMonitor.ps1`** does **not** copy or overwrite **`ignore.lst`** or **`login_monitor.settings.ps1`**; if settings are missing, Deploy creates them once from **`login_monitor.settings.example.ps1`** on the share. ## Keywords (for discovery) diff --git a/login_monitor.settings.example.ps1 b/login_monitor.settings.example.ps1 new file mode 100644 index 0000000..c21384e --- /dev/null +++ b/login_monitor.settings.example.ps1 @@ -0,0 +1,41 @@ +<# +.SYNOPSIS + Локальные настройки Login_Monitor.ps1 +.DESCRIPTION + Скопируйте в C:\ProgramData\RDP-login-monitor\login_monitor.settings.ps1 + и при необходимости отредактируйте. Файл login_monitor.settings.ps1 не перезаписывается + при автообновлении Login_Monitor.ps1 с шары (Deploy-LoginMonitor.ps1). + При первой установке Deploy может создать login_monitor.settings.ps1 из этого example автоматически. +#> + +# --- Telegram (или DPAPI Base64 через Encrypt-DpapiForRdpMonitor.ps1) --- +$TelegramBotToken = '8239219522:AAEyOZX3cwNfgGOMDkf-mgjTIuoaOh5gF7I' +$TelegramChatID = '2843230' +# $TelegramBotTokenProtectedB64 = '' +# $TelegramChatIDProtectedB64 = '' + +# --- Email (опционально) --- +$NotifyOrder = 'tg' +# $MailSmtpHost = 'smtp.example.com' +# $MailSmtpPort = 587 +# $MailSmtpUser = '' +# $MailSmtpPassword = '' +# $MailFrom = 'monitor@example.com' +# $MailTo = 'admin@example.com' +# $MailSmtpStartTls = $true +# $MailSmtpSsl = $false +# $MailSmtpPasswordProtectedB64 = '' + +# --- Узкое исключение шумовых сетевых логонов (LogonType=3, Advapi) --- +$IgnoreAdvapiNetworkLogonSourceIps = @( + '192.168.160.57' +) + +# --- Блокировка учётной записи AD (4740) + IP из IIS ActiveSync --- +# Мониторинг включается только на КД с именем $LockoutMonitorDomainController. +$LockoutMonitorDomainController = 'K6A-DC3' +$NetBiosDomainName = 'B26' +$ExchangeIisLogPath = '\\fifth.kalinamall.ru\c$\inetpub\logs\LogFiles\W3SVC1' +$ExchangeServerHostForIisExclude = '' +$ExchangeIisLogTailLines = 5000 +$ExchangeIisLogMinutesBeforeLockout = 30 diff --git a/update-rdp-monitor.ps1 b/update-rdp-monitor.ps1 index f3b7af6..23c9afe 100644 --- a/update-rdp-monitor.ps1 +++ b/update-rdp-monitor.ps1 @@ -28,7 +28,8 @@ $DistFiles = @( 'Notify-Common.ps1', 'Install-DomainMonitors.ps1', 'Deploy-DomainMonitors.ps1', - 'exchange_monitor.settings.example.ps1' + 'exchange_monitor.settings.example.ps1', + 'login_monitor.settings.example.ps1' ) function Write-UpdateLog { diff --git a/version.txt b/version.txt index 400084b..d8c5e72 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.6.7 +1.6.8