🔒 Windows: WinRM over HTTPS. Почему TrustedHosts="*" — это дыра
Боль: Вы управляете серверами через PowerShell Remoting (Enter-PSSession). Серверы не в домене (DMZ) или в другой рабочей группе.
Реакция админа: Set-Item WSMan:\localhost\Client\TrustedHosts -Value *. Перевод: "Я доверяю любому серверу, к которому подключаюсь. Если хакер перехватит DNS и подставит свой сервер, я отдам ему свои пароли".
Реакция архитектора: Настроить WinRM over HTTPS.
Это не про шифрование (WinRM и так шифруется по HTTP). Это про аутентификацию сервера. Вы должны быть уверены, что подключаетесь именно к SRV-01.
Настройка (на целевом сервере):
1. Создаем сертификат (если нет PKI):
2. Создаем HTTPS-листенер:
3. Открываем порт 5986:
Теперь подключаемся:
Если сертификат самоподписанный, на клиенте нужно один раз добавить его в доверенные или использовать -SkipCACheck (для тестов).
Взгляд архитектора: TrustedHosts — это костыль. HTTPS — это стандарт безопасности. В недоверенных сетях (DMZ, Cloud) вы обязаны проверять подлинность хоста.
#windows #powershell #security #winrm #https #sysadmin #гайд
Боль: Вы управляете серверами через PowerShell Remoting (Enter-PSSession). Серверы не в домене (DMZ) или в другой рабочей группе.
Реакция админа: Set-Item WSMan:\localhost\Client\TrustedHosts -Value *. Перевод: "Я доверяю любому серверу, к которому подключаюсь. Если хакер перехватит DNS и подставит свой сервер, я отдам ему свои пароли".
Реакция архитектора: Настроить WinRM over HTTPS.
Это не про шифрование (WinRM и так шифруется по HTTP). Это про аутентификацию сервера. Вы должны быть уверены, что подключаетесь именно к SRV-01.
Настройка (на целевом сервере):
1. Создаем сертификат (если нет PKI):
$Cert = New-SelfSignedCertificate -DnsName "srv-01.dmz.local" -CertStoreLocation Cert:\LocalMachine\My
2. Создаем HTTPS-листенер:
New-Item -Path WSMan:\localhost\Listener -Transport HTTPS -Address * -CertificateThumbprint $Cert.Thumbprint -Force
3. Открываем порт 5986:
New-NetFirewallRule -DisplayName "WinRM HTTPS" -Direction Inbound -LocalPort 5986 -Protocol TCP -Action Allow
Теперь подключаемся:
Enter-PSSession -ComputerName srv-01.dmz.local -UseSSL
Если сертификат самоподписанный, на клиенте нужно один раз добавить его в доверенные или использовать -SkipCACheck (для тестов).
Взгляд архитектора: TrustedHosts — это костыль. HTTPS — это стандарт безопасности. В недоверенных сетях (DMZ, Cloud) вы обязаны проверять подлинность хоста.
#windows #powershell #security #winrm #https #sysadmin #гайд
🪟 Windows: CLI-первенство. Управляем сервером без «тяжелых» окон
Коллеги, в 2026 году открывать RDP-сессию, чтобы просто проверить свободное место на диске или перезапустить службу — это признак дурного тона и лишняя нагрузка на канал связи. В условиях жестких требований безопасности каждое RDP-подключение — это лишнее окно в твою «цифровую крепость».
Техническая суть:
Практика:
Забудь про «Пуск -> Выполнить». Открывай терминал:
Зачем это нужно:
#windows #powershell #winrm #automation #sysadmin #admin_future
Коллеги, в 2026 году открывать RDP-сессию, чтобы просто проверить свободное место на диске или перезапустить службу — это признак дурного тона и лишняя нагрузка на канал связи. В условиях жестких требований безопасности каждое RDP-подключение — это лишнее окно в твою «цифровую крепость».
Техническая суть:
Используем PowerShell Remoting (WinRM) через CLI. Это позволяет выполнять команды на сотнях серверов одновременно, не видя перед собой ни одного рабочего стола.
Под капотом: WinRM работает через HTTP/HTTPS (порты 5985/5986). В 2026-м мы настраиваем его на работу по TLS 1.3 с авторизацией по сертификатам. Это безопаснее, быстрее и позволяет автоматизировать рутину через обычные текстовые команды.
Практика:
Забудь про «Пуск -> Выполнить». Открывай терминал:
# 1. Подключаемся к удаленному Server Core узлу (интерактивно)
Enter-PSSession -ComputerName "SRV-DB-01"
# 2. Магия: узнаем свободное место на дисках сразу на всей группе серверов
Invoke-Command -ComputerName "SRV-APP-01", "SRV-APP-02", "SRV-APP-03" -ScriptBlock {
Get-Volume | Select-Object DriveLetter, FileSystemLabel,
@{Name="FreeGB";Expression={[Math]::Round($_.SizeRemaining / 1GB, 2)}}
}
# 3. Перезапускаем службу только если она "висит"
Invoke-Command -ComputerName "SRV-PRINT-01" -ScriptBlock {
Restart-Service -Name "Spooler" -Force
}
Зачем это нужно:
Скорость и масштабируемость. Пока твой коллега ждет прогрузки графики в RDP, ты уже собрал отчет по всем серверам в сегменте и ушел пить кофе.
#windows #powershell #winrm #automation #sysadmin #admin_future
🔥3