segunda-feira, 27 de janeiro de 2020

Alerta de conexão e desconexão de RDP

Como configurar para receber um alerta de e-mail quando alguém conectar e desconectar em uma sessão de TS (RDP)
São necessários 3 scripts

1. get_loggeduser.ps1 (responsável por pegar as informações da sessão)
echo $env:username
netstat -an | select-string ":3389" | select-string "ESTABLISHED"

2. sendmail_login.ps1 (responsável pelo envio de email

$SMTPServer = "smtp.office365.com"
$SMTPPort = "587"
$Username = "email@dominio.com.br" 
$Password = "suasenha" 
$to = "destino@dominio.com.br" 
$subject = "Sessao TS Conectada" 
$body = [IO.File]::ReadAllText("C:\scripts\rdp_alert\log\login.txt") 
$message = New-Object System.Net.Mail.MailMessage 
$message.subject = $subject
$message.body = $body
$message.to.add($to)
$message.from = $username

$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);
$smtp.EnableSSL = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);
$smtp.send($message)
write-host “Mail Sent”

3. login_rdp.bat (responsável pela execução dos PS)
@echo off
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command C:\scripts\rdp_alert\get_loggeduser.ps1" > C:\scripts\rdp_alert\log\login.txt
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command C:\scripts\rdp_alert\sendmail_login.ps1"
Pronto.. agora para funcionar você deve criar um agendamento no taskmanager quando no log Microsoft-Windows-TerminalServices-LocalSessionManager/Operational ocorrer os eventos no log 25 e 21 no logon ou 24 no logoff

Eu criei outros dois scripts para melhor identificação do alerta (logoff_rdp e sendmail_logoff.ps1), desta forma visualizo no próprio assunto do e-mail o que ocorreu.

fonte: https://www.virtualizationhowto.com/2015/03/receive-alerts-when-user-connects-or-disconnects-from-rdp/


Caso queira criptografar a senha no script, voce deve:

Rodar este script via powershell
$credential = Get-Credential 
$credential.Password | ConvertFrom-SecureString | Set-Content C:\scripts\rdp_alert\cryptpassword.pass

O mesmo irá criar um arquivo chamado cryptpassword.pass com o usuario e senha criptografado. agora substitua as seguintes linhas
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);

por estas linhas
$encrypted = Get-Content C:\scripts\rdp_alert\cryptpassword.pass | ConvertTo-SecureString
$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $encrypted);

fonte: https://interworks.com/blog/trhymer/2013/07/08/powershell-how-encrypt-and-store-credentials-securely-use-automation-scripts/