Monitorar logins realizados via SSH [RESOLVIDO]

1. Monitorar logins realizados via SSH [RESOLVIDO]

Wagner
wagner31

(usa CentOS)

Enviado em 26/09/2017 - 10:48h

Estou com o seguinte problema, preciso monitorar os servidores da empresa, eu estava utilizando o script abaixo, até formatarmos o servidor de monitoração estava ok, ai depois ele não para de enviar email das autenticações do servidor de monitoração.

Eu preciso monitorar toda vez que o usuário loga nos servidores Linux, porém preciso que um IP específico seja excluído dessa lista para que não envie email (no caso o servidor de monitoração).

Pelo que percebi se 2 sessões estão abertas em um servidor Linux ele manda email das 2. mas não quero isso, somente da sessão que acabou de logar.

Quando qualquer IP fizer o logon na máquina ele deve enviar um email avisando, mas apenas quando loga e uma única vez.

Segue o script:


#!/bin/bash
to="alertas@email.com.br"
from="login@email.com.br"
subject="Login realizado no NOME_DO_SERVER"
IGNIP="/tmp/IP_IGNORE.txt" # IP EXCLUIDO DA MONITORAÇÃO

who|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$5,$4}' > /tmp/CONECTADOS.txt
if [ -s /tmp/CONECTADOS.txt ];then
while IFS=" " read -r user ip hora ;do
if ! grep -qx "^$user $ip $hora$" $IGNIP;then
mensagem="Usuario: $user realizou o login a partir do IP: $ip as: $hora"

#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject

$mensagem

EOF
echo "$user $ip $hora" >> $IGNIP
fi
done</tmp/CONECTADOS.txt
fi
#Fim do Script







  


2. Re: Monitorar logins realizados via SSH [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/09/2017 - 18:14h

Veja bem Wagner, no script abaixo (enviado p/ o meu e-mail)
#!/bin/bash
to="wagner@a.com.br"
from="login_server@a.com.br"
subject="Login realizado no SERVER146"
IGNIP="/tmp/IP_IGNORE.txt"

who|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$5,$4}'> /tmp/CONECTADOS.txt
if [ -s /tmp/CONECTADOS.txt ];then
while IFS=" " read -r user ip hora ;do
if ! grep -qx "^$ip$" $IGNIP;then
mensagem="Usuario $user realizou o login a partir do IP $ip as $hora"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject

$mensagem

EOF
#echo "$" >> $IGNIP
fi
done</tmp/CONECTADOS.txt
fi

Note que o condicional é negado,
if ! grep -qx "^$ip$" $IGNIP;then
Se não CASAR, dispara o e-mail.

MSO


3. Re: Monitorar logins realizados via SSH [RESOLVIDO]

Wagner
wagner31

(usa CentOS)

Enviado em 26/09/2017 - 18:28h

Marcelo,

eu adicionei o IP do servidor que quero bloquear, ai ele faz o comparativo e não manda desse mas manda das outras sessões então que estão conectadas certo?
uma outra duvida é, o arquivo IP_IGNORE.txt precisaria estar todo populado com as informações de usuário, ip e hora de min em min para que não mandasse mais?


4. Re: Monitorar logins realizados via SSH [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/09/2017 - 19:01h

wagner31 escreveu:

Marcelo, . . .


eu adicionei o IP do servidor que quero bloquear, ai ele faz o comparativo e não manda desse mas manda das outras sessões então que estão conectadas certo?
Certo, encontrando o IP no arquivo IGNORE_IP, o e-mail não é enviado.
E, no caso do envio do email,
O IP é adicionado no arquivo IGNORE_IP
o arquivo IP_IGNORE.txt precisaria estar todo populado com as informações de usuário, ip e hora de min em min para que não mandasse mais?
Essa atualização é feita pelo próprio script, qdo do envio do e-mail.
Resumindo:
Envia e-mail somente uma única vez!

MSO



5. Re: Monitorar logins realizados via SSH

Wagner
wagner31

(usa CentOS)

Enviado em 27/09/2017 - 11:04h

Desculpa minha ignorancia Marcelo, mas não entendi como funciona esse comparativo. Por que ele continua mandando o email do server que está para ser ignorado? no arquivo IP_IGNORE.txt

eu não deveria apenas comparar o IP na linha abaixo?

if ! grep -qx "^$ip$" $IGNIP;then


porque ai ele não mandaria nunca o email referente ao IP que não quero que mande. que estaria no arquivo IP_IGNORE.txt, certo?

o arquivo IP_IGNORE.txt contém os seguintes dados:


root 192.168.0.2 11:50 # -> IP que quero que seja ignorado e não mande email
root 192.168.0.4 11:53 # -> IP da minha máquina que quero que envie o email de aviso


porém uma vez nessa lista, nesse mesmo horário amanhã ele não enviará mais correto?

Outra dúvida é tenho 2 sessões logadas no server


[root@server146 tmp]# who
root pts/0 2017-09-27 11:33 (192.168.0.4)
root pts/1 2017-09-27 11:59 (192.168.0.5)


no caso quando o usuário do ip 192.168.0.5 loga, ele envia 2 emails, do final 4 e do 5.
seria possível ele enviar apenas da última sessão que acabou de conectar?



6. Re: Monitorar logins realizados via SSH

Wagner
wagner31

(usa CentOS)

Enviado em 27/09/2017 - 12:36h

Marcelo,

acho que consegui resolver todos os problemas, fiz algumas mudanças, se você puder dar uma olhada e ver se faz sentido tudo que fiz, segue o script:

#!/bin/bash
to="wagner@a.com.br"
from="login_server@a.com.br"
subject="Login realizado no SERVER"
IGNIP="/tmp/IP_IGNORE.txt"

who|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$5,$4}'| tail -1 > /tmp/CONECTADOS.txt # Adicionei o TAIL -1 para pegar só a última linha das sessões
if [ -s /tmp/CONECTADOS.txt ];then
while IFS=" " read -r user ip hora ;do
if ! grep -qx "^$ip$" $IGNIP;then # Coloquei só para comparar o IP que não quero que envie email
mensagem="Usuario $user realizou o login a partir do IP $ip as $hora"

#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject

$mensagem

EOF
echo "$user $ip $hora" >> $IGNIP # Não entendi para que adicionar essas informações no arquivo IP_IGNORE.txt
fi
done</tmp/CONECTADOS.txt # Não entendi o porque desse comando depois do done
fi

#Fim do Script



7. Re: Monitorar logins realizados via SSH [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/09/2017 - 20:29h

wagner31 escreveu:

Marcelo,

acho que consegui resolver todos os problemas, fiz algumas mudanças, se você puder dar uma olhada e ver se faz sentido tudo que fiz, segue o script:

#!/bin/bash
to="wagner@a.com.br"
from="login_server@a.com.br"
subject="Login realizado no SERVER"
IGNIP="/tmp/IP_IGNORE.txt"

who|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$5,$4}'| tail -1 > /tmp/CONECTADOS.txt # Adicionei o TAIL -1 para pegar só a última linha das sessões
if [ -s /tmp/CONECTADOS.txt ];then
while IFS=" " read -r user ip hora ;do
if ! grep -qx "^$ip$" $IGNIP;then # Coloquei só para comparar o IP que não quero que envie email
mensagem="Usuario $user realizou o login a partir do IP $ip as $hora"

#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject

$mensagem

EOF
echo "$user $ip $hora" >> $IGNIP # Não entendi para que adicionar essas informações no arquivo IP_IGNORE.txt
fi
done</tmp/CONECTADOS.txt # Não entendi o porque desse comando depois do done
fi

#Fim do Script


Wagner, estou na correria . . .
Dei uma verificada e notei que tem erros de comando e de lógica . . . .
Qto a pegar somente a ultima linha, discordo plenamente . . . .
Se, vários logarem, só pegará o ultimo . . .
Se não me engano, no script de DEZ/2016, comentei todas as linhas . . . .
Verifique lá se esclarece as suas dúvidas.
Att.:
Marcelo Oliver



8. Re: Monitorar logins realizados via SSH

Wagner
wagner31

(usa CentOS)

Enviado em 28/09/2017 - 10:47h

msoliver escreveu:

wagner31 escreveu:

Marcelo,

acho que consegui resolver todos os problemas, fiz algumas mudanças, se você puder dar uma olhada e ver se faz sentido tudo que fiz, segue o script:

#!/bin/bash
to="wagner@a.com.br"
from="login_server@a.com.br"
subject="Login realizado no SERVER"
IGNIP="/tmp/IP_IGNORE.txt"

who|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$5,$4}'| tail -1 > /tmp/CONECTADOS.txt # Adicionei o TAIL -1 para pegar só a última linha das sessões
if [ -s /tmp/CONECTADOS.txt ];then
while IFS=" " read -r user ip hora ;do
if ! grep -qx "^$ip$" $IGNIP;then # Coloquei só para comparar o IP que não quero que envie email
mensagem="Usuario $user realizou o login a partir do IP $ip as $hora"

#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject

$mensagem

EOF
echo "$user $ip $hora" >> $IGNIP # Não entendi para que adicionar essas informações no arquivo IP_IGNORE.txt
fi
done</tmp/CONECTADOS.txt # Não entendi o porque desse comando depois do done
fi

#Fim do Script


Wagner, estou na correria . . .
Dei uma verificada e notei que tem erros de comando e de lógica . . . .
Qto a pegar somente a ultima linha, discordo plenamente . . . .
Se, vários logarem, só pegará o ultimo . . .
Se não me engano, no script de DEZ/2016, comentei todas as linhas . . . .
Verifique lá se esclarece as suas dúvidas.
Att.:
Marcelo Oliver



Marcelo o úlitmo script que vc me mandou em 2016 foi esse abaixo:

#!/bin/bash
to="destino@a.com.br"
from="remetente@a.com.br"
subject="URGENTE - Login realizado no SERVER"
IGNIP="IP_IGNORE.txt"

w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$3,$4}' > CONECTADOS.txt
if [ -s CONECTADOS.txt ];then
while IFS=" " read -r user ip hora ;do
if ! grep -qx "^$user $ip $hora$" $IGNIP;then
mensagem="Usuario: $user realizou o login a partir do IP: $ip as: $hora"
#TESTANDO
#echo "$mensagem"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject
$mensagem
EOF
echo "$user $ip $hora" >> $IGNIP
fi
done<CONECTADOS.txt
fi


As mudanças que fiz foram as seguintes:

antigo
w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$3,$4}' 

novo
who|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$5,$4}'| tail -1 
Troquei pois o w não me traz o nome do usuário completo, porém ele traz o IP entre parênteses mas eu adicionei dessa forma dentro do arquivo IP_IGNORE.txt e preciso só da última sessão aberta na máquina para enviar o email quando tem mais de 1 ele manda email de cada sessão, por exemplo, se houver 2 sessões conectadas e uma terceira conectar ele vai mandar 3 emails no momento que a ultima conectar.

antigo
if ! grep -qx "^$user $ip $hora$" $IGNIP;then 

novo
if ! grep -qx "^$ip$" $IGNIP;then 

Deixei para comparar só o IP do server que não quero que seja enviado email quando logar.


9. Re: Monitorar logins realizados via SSH [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/09/2017 - 12:25h

wagner31 escreveu:

msoliver escreveu:

wagner31 escreveu:

Marcelo,

acho que consegui resolver todos os problemas, fiz algumas mudanças, se você puder dar uma olhada e ver se faz sentido tudo que fiz, segue o script:

#!/bin/bash
to="wagner@a.com.br"
from="login_server@a.com.br"
subject="Login realizado no SERVER"
IGNIP="/tmp/IP_IGNORE.txt"

who|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$5,$4}'| tail -1 > /tmp/CONECTADOS.txt # Adicionei o TAIL -1 para pegar só a última linha das sessões
if [ -s /tmp/CONECTADOS.txt ];then
while IFS=" " read -r user ip hora ;do
if ! grep -qx "^$ip$" $IGNIP;then # Coloquei só para comparar o IP que não quero que envie email
mensagem="Usuario $user realizou o login a partir do IP $ip as $hora"

#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject

$mensagem

EOF
echo "$user $ip $hora" >> $IGNIP # Não entendi para que adicionar essas informações no arquivo IP_IGNORE.txt
fi
done</tmp/CONECTADOS.txt # Não entendi o porque desse comando depois do done
fi

#Fim do Script


Wagner, estou na correria . . .
Dei uma verificada e notei que tem erros de comando e de lógica . . . .
Qto a pegar somente a ultima linha, discordo plenamente . . . .
Se, vários logarem, só pegará o ultimo . . .
Se não me engano, no script de DEZ/2016, comentei todas as linhas . . . .
Verifique lá se esclarece as suas dúvidas.
Att.:
Marcelo Oliver



Marcelo o úlitmo script que vc me mandou em 2016 foi esse abaixo:

#!/bin/bash
to="destino@a.com.br"
from="remetente@a.com.br"
subject="URGENTE - Login realizado no SERVER"
IGNIP="IP_IGNORE.txt"

w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$3,$4}' > CONECTADOS.txt
if [ -s CONECTADOS.txt ];then
while IFS=" " read -r user ip hora ;do
if ! grep -qx "^$user $ip $hora$" $IGNIP;then
mensagem="Usuario: $user realizou o login a partir do IP: $ip as: $hora"
#TESTANDO
#echo "$mensagem"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject
$mensagem
EOF
echo "$user $ip $hora" >> $IGNIP
fi
done<CONECTADOS.txt
fi


As mudanças que fiz foram as seguintes:

antigo
w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$3,$4}' 

novo
who|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$5,$4}'| tail -1 
Troquei pois o w não me traz o nome do usuário completo, porém ele traz o IP entre parênteses mas eu adicionei dessa forma dentro do arquivo IP_IGNORE.txt e preciso só da última sessão aberta na máquina para enviar o email quando tem mais de 1 ele manda email de cada sessão, por exemplo, se houver 2 sessões conectadas e uma terceira conectar ele vai mandar 3 emails no momento que a ultima conectar.

antigo
if ! grep -qx "^$user $ip $hora$" $IGNIP;then 

novo
if ! grep -qx "^$ip$" $IGNIP;then 

Deixei para comparar só o IP do server que não quero que seja enviado email quando logar.


Wagner,
/tmp/CONECTADOS.txt, tendo somente uma linha:
who|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $1,$5,$4}'| tail -1 > /tmp/CONECTADOS.txt
Vai enviar somente um E-MAIL.

msoliver







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts