Add-VpnConnection -Name "vpn.ksi.kiev.ua" -ServerAddress "vpn.ksi.kiev.ua" -TunnelType "L2tp" -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -SplitTunneling -L2tpPsk 'IPSECpass' -IdleDisconnectSeconds 7200 -RememberCredential
netsh interface ipv4 add route 192.168.88.0/24 vpn.ksi.kiev.ua
Set DHCP in AD infrastructure by psexe+cmd
For set DHCP in AD infrastructure
1) you have to create AD GPO with policy for computer startup config with script
@ECHO OFF >NUL
REM Start Script
For /F "TOKENS=2 DELIMS=," %%_ In ('"WMIC NICCONFIG GET InterfaceIndex,IPAddress /FORMAT:CSV | FIND /I "10.1.""') DO (SET MACAddress=%%~_)
netsh interface ipv4 set address %MACAddress% source=dhcp
netsh interface ipv4 set dnsservers %MACAddress% source=dhcp
TIMEOUT /T 10
echo [DHCP]%COMPUTERNAME% %USERNAME%>>\\bdc\Common\rep\info.txt
:end
REM End script
2) Or connect to client PC by psexec
PsExec.exe -h \\{IP or NAME} -u {.\user} -p {pass} cmd
-h means run cmd as Administrator
WMIC NICCONFIG GET InterfaceIndex,IPAddress
InterfaceIndex IPAddress
4
3 {"10.1.x.xx"}
2
netsh interface ipv4 set address 3 source=dhcp
netsh interface ipv4 set dnsservers 3 source=dhcp
OR
netsh interface ip show config
netsh interface ip set dns "Local Area Connection" dhcp
netsh interface ip set dns "Подключение по локальной сети" dhcp
Migrate DHCP server from 2016/2019 to 2016/2019
$OLDDHCPServer = "dc01.ksi.kiev.ua"
$NewDHCPServer = "dc.ksi.kiev.ua"
new-item C:\dhcp -type directory
Export-DhcpServer -ComputerName $OLDDHCPServer -Leases -File "C:\dhcp\OldDHCPConf.xml" –Verbose
new-item -Path \\$NewDHCPServer\c$\DHCP -type directory -Force
copy "C:\DHCP\OldDHCPConf.xml" \\$NewDHCPServer\c$\DHCP
Stop-Service DHCPServer
#-------------Connect to new destination server-------------------------------
Enter-PSSession -ComputerName $NewDHCPServer
Import-DhcpServer -Leases –File "C:\DHCP\OldDHCPConf.xml" -BackupPath "C:\DHCP\Backup\" –Verbose
Start-Service DHCPServer
Exchange queue
Нашел интересненькую выкладку https://www.dmosk.ru/miniinstruktions.php?mini=exchange-queue
get-queue
Get-Queue -Identity Submission
Get-Message -ResultSize unlimited
Powershell
Powershell позволит автоматизировать некоторые задачи по работе с очередями.
Просмотр
Синтаксис:
Get-Queue [-Filter Фильтр] [-Server Сервер] <Параметры запроса>
Пример:
Get-Queue | fl
Примеры использования
Отобразить очереди, в которых более 50-и писем.
Get-Queue -Filter { MessageCount -gt 50 }
Посмотреть сообщения для конкретной очереди:
Get-Queue -Identity mx\615820 | Get-Message
* где mx\615820 — идентификатор очереди, который мы смотрим командой Get-Queue.
Посмотреть все очереди на всех транспортных серверах:
Get-TransportServer | ForEach { Get-Queue -Server $_.Name }
Подробная информация об очереди:
Get-Queue -Identity mx\615820 | Format-List
* где mx\615820 — идентификатор очереди, который мы смотрим командой Get-Queue.
Подробная информация о письмах в очереди от определенного отправителя:
Get-Message -Filter { FromAddress -like "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript." } | Format-List
Список отправителей для определенной очереди:
Get-Queue mx\726931 | Get-Message -ResultSize Unlimited | Select FromAddress
Список получателей:
Get-Queue mx\726931 | Get-Message -ResultSize Unlimited -IncludeRecipientInfo | Select Recipients
Очистить очередь
Удалить сообщения в очереди:
Get-Queue -Identity mx\Poison | Get-Message -ResultSize unlimited | Remove-Message -WithNDR $False
* где mx\Poison — название очереди.
Удалить все сообщения:
Get-Queue | Get-Message -ResultSize unlimited | Remove-Message -WithNDR $False
Удалить сообщение по фильтру:
Get-Queue | Get-Message -ResultSize unlimited | Where {$_.Subject -eq "Тема письма"} | Remove-Message -WithNDR $False
Повторная отправка очереди
Выполняется с помощью командлета Retry-Queue:
Retry-Queue -Filter {Status -eq "Retry"}
* данная команда принудительно повторит отправку всех сообщений, у которых активен статус «Повторить».
Для повторной отправки из очереди подозрительных сообщений, сначала смотрим письма:
Get-Message -Queue Poison
И повторяем попытку отправки с использованием идентификатора письма:
Resume-Message mx\Poison\162514
* где mx\Poison\162514 — полный идентификатор сообщения (mx — сервер, Poison — очередь, 162514 — id письма).
Приостановка очереди
Выполняется командлетом Suspend-Queue:
Suspend-Queue mx\173625
Остановить отправку сообщений, которые находятся в очереди с более чем 500 писем:
Suspend-Queue -Filter {MessageCount -ge 500 -and Status -eq "Retry"}
Возобновить приостановленную очередь
Resume-Queue -Filter {Status -eq "Suspended"}
Почему письма висят в очереди
Помещение письма в очередь при отправке — обычный процесс в работе любого почтового сервера. Сообщения, которые успешно отправляются, сразу пропадают из очереди, но при возникновении проблем, система пытается совершить повторные попытки отправки, а письма могут долго висеть в этой очереди, пока не отправятся или не истечет установленный администратором срок.
Часто встречаемые проблемы, из-за которых письма висят в очереди
Причин, почему может не уходить почта довольно много. Проблема может быть на нашей стороне, стороне получателя, сбоев программного обеспечения, ошибок администрирования, агрессивного действия систем безопасности и много другое. Вот небольшой список часто возникающих проблем:
- 451 4.4.0 primary target ip address responded with... Ваш сервер не смог отправить сообщение на mx получателя (причина поясняется после with).
- 451 4.4.0 DNS query failed. Неудачная попытка при разрешении MX-записи в DNS. Выполните вручную nslookup с почтового сервера, чтобы убедиться в работоспособности запросов DNS.
- 450 4.7.1 Helo command rejected: Host not found. Получатель отказался принять от нашего сервера команду приветствия из-за того, что не может найти имя нашего сервера в DNS. Необходимо убедиться в правильности настройки последнего для соответствующей зоны (записи A и PTR).
- 451 4.7.0 Temporary server error. Please try again later. Как правило, ошибка связана с невозможностью разрешать записи в DNS. Ошибка может носить временный характер, а может возникнуть из-за неправильных настроек сети.
Время жизни сообщения в очереди
Посмотреть:
Get-transportserver MX | Select MessageExpirationTimeout
* где MX — имя транспортного сервера. По умолчанию, равен 2.00:00:00 (2 дня).
Поменять:
Set-TransportServer MX -MessageExpirationTimeout 3.00:00:00
* где MX — имя транспортного сервера.
Скрипт мониторинга очередей
Пример рабочего скрипта на Powershell:
Set-PSDebug -Off
$username = "dmosk\admin"
$password = cat C:\Scripts\password.txt | convertto-securestring
$threshold_count = 100
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://mx.dmosk.local/powershell -Credential $cred
Import-PSSession $session
function Send-Alert () {
$it = "Дмитрий <Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>"
$from = "Служба проверки очереди сообщений <Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.>"
$subject = "Необходимо проверить транспорт почты"
$bodyMessage = "Есть очереди, превышающие допустимое количество писем"
$enc = New-Object System.Text.utf8encoding
Send-MailMessage -to $it -from $from -Subject $subject-bodyAsHTML $bodyMessage -smtpServer mx.dmosk.local -Encoding $enc
}
Get-TransportServer | ForEach {
Retry-Queue -Filter {Status -eq "Retry"}
}
Start-Sleep -s 300
Get-TransportServer | ForEach {
Get-Queue -Server $_.Name -Filter { MessageCount -gt $threshold_count } | ForEach {
Send-Alert
echo 2
break
}
}
Что происходит:
- Подключаемся к серверу Exchange с логином admin и паролем, хэш которого хранится в файле C:\Scripts\password.txt (заранее создан командой read-host -assecurestring | convertfrom-securestring | out-file C:\Scripts\password.txt).
- Форсируем запуск повторной отправки сообщений для всех очередей со статусом «Повторить».
- Ждем 5 минут (300 секунд).
- Проходим по транспортным серверам и ищем очереди с длинной более 100 сообщений. Если находим, отправляем письмо администратору и выводим на экран 2.
* важно отметить, что в случае проблем с почтой, письмо администратору может и не прийти. Именно для этого мы также выводим статус 2. Его можно проверять системой мониторинга, например Zabbix.
Дополнительная информация
Типы очередей
Существуют следую очереди:
- Очереди доставки. Обычная очередь, содержащая письма для пересылки внешним и внутренним пользователям.
- Очередь передачи. Не обработанные службой транспорта сообщения, но полученные ею.
- Теневые очереди. Содержат копии отправляемых писем до момента подтверждения получения от mx-партнеров.
- Очередь подозрительных сообщений. Изолированные сообщения, которые Exchange посчитал, потенциально, опасными. Это могут быть письма, содержащие зловредный код, а может быть и ложное срабатывание из-за ошибки программного обеспечения.
- Сообщения с недостижимым местом назначения. Сообщения, которые не удалось доставить.
Где хранятся очереди Exchange
Очереди хранятся в базе данных ESE, которая находится в папке "%ExchangeInstallPath%TransportRoles\data\Queue":
* mail.que — основной файл с базой очередей; tmp.edb — временный файл для проверки схемы самой базы; trn.chk — контрольные точки для отслеживания записи в логах.
Со временем, файл mail.que может разрастись и занимать много места. Для полной чистки базы ее можно просто создать заново. Для этого открываем службы Windows - останавливаем Microsoft Exchange Transport (перестанет работать почта) - переименовываем папку Queue, в которой находятся файлы базы и снова запускаем службу транспорта. Папка и база очереди создастся снова.
Смена пути хранения очереди
Открываем на редактирование файл %ExchangeInstallPath%\Bin\EdgeTransport.exe.config (C:\Program Files\Microsoft\Exchange Server\V14\Bin\EdgeTransport.exe.config) и меняем значения ключей QueueDatabasePath и QueueDatabaseLoggingPath, например:
<add key="QueueDatabasePath" value="D:\Queue" />
<add key="QueueDatabaseLoggingPath" value="D:\Queue" />
* где QueueDatabasePath — папка хранения файлов очереди; QueueDatabaseLoggingPath — папка хранения файлов журналов очереди.
Zabbix UserParameter for disk status
Нашел классную статейку, перепечатываю себе на всякий случай
Перейдём к краеугольной теме Zabbix — теме использования пользовательских параметров UserParameter. С помощью UserParameter можно выполнить произвольную команду на машине с Zabbix агентом, а результат выполнения этой команды передать на Zabbix сервер для мониторинга. Рассмотрим простейший пример работы со своими параметрами.
На машине с агентом открыть конфигурационный файл zabbix_agentd.win.conf
, в конец файла дописать:UserParameter=diskstatus, wmic diskdrive get status
здесь:diskstatus
– имя нашего параметраwmic diskdrive get status
– команда, позволяющая узнать статус диска из SMART. Кстати, вместо команды можно указать путь к заранее подготовленному скрипту.
Можно также проверить, в каком виде данная команда возвращает результат выполнения, выполнив её в консоли:
C:\Users\user>wmic diskdrive get status
Status
OK
Сохраняем конфиг файл zabbix_agentd.win.conf
и перезапускаем Zabbix агент:c:\zabbix>zabbix_agentd.exe --stop
c:\zabbix>zabbix_agentd.exe --start
Далее можно переходить к добавлению параметра на сервере Zabbix. Но перед этим предлагаю убедиться, что обращение к параметру происходит корректно. Это необязательно на данном шаге, но поможет диагностировать проблемы с параметрами в будущем.
Подключаемся к серверу по ssh (по умолчанию для виртуальной машины Zabbix логин — appliance, пароль — zabbix) и выполняем команду:appliance@zabbix:~$ zabbix_get -s 192.168.11.51 -k "diskstatus"
здесь:-s
– это адрес хоста-k
– ключ (имя UserParameter)
Результат выполнения будет аналогичным, что и при выполнении команды в консоли Windows:Status
OK
На этом шаге мы убедились, что параметр задан верно и агент отдаёт результат выполнения серверу. Теперь можно продолжить настройку сервера Zabbix в браузере.
Переходим в раздел Items:
Нажимаем Create Item и заполняем поля:
здесь:Name
– произвольное имяKey
– точно такое же название UserParameter, что и в конфиге на агентеType of information
– то, как распарсит Zabbix ответ от агента; указываем текст, так как его отдаёт наш параметр.
Добавляем Item. Если ошибок нет, то мы увидим наш Item в состоянии Enable:
Возможно, в состояние Enable он перейдет через 30 секунд после создания – это интервал опроса агента по умолчанию.
Напоследок убедимся, что агент отдаёт результат выполнения команды:
Далее пишем тригер