Monitorar logins realizados via SSH [RESOLVIDO]

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

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 05/12/2016 - 17:55h

wagner31 escreveu:

msoliver escreveu:

Wagner, bom dia.
o "IP_SERVIDOR" é para eu definir qual IP não quero que ele gere a monitoração correto?
Correto.
Sim, ele "pega" os dados de CONECTADOS.txt, que tem os IP's e usuários que estão logados no momento em que o arquivo foi gerado.

A informação sempre vai existir ali dentro dele com os ips que logaram?
Não, a informação é referente aos IP's que estão logados.

Se o usuário permanecer logado, voce gostaria que enviasse o email somente uma vez?
Caso positivo, será necessário gerar um log dos "EMAIL's" enviados . . . e ignorar os mesmos . . .

No aguardo.
Marcelo


Bom dia Marcelo

gostaria que enviasse o email somente uma vez sim, é mais para controlar a hora do acesso e de qual maquina veio o login.
não teria como usar o script q eu utilizei mas colocando uma variavel que se for diferente desse IP que não quero que envie ele não envia?


Wagner, boa tarde.
Quanto ao seu script, ele acusa erros . . . .
Conforme citei na postagem de Nº 4.

Adequei o script para enviar o E-MAIL somente 01 vez, e com a hora do login . . .
Segue:
#!/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 $3,$1,$4}' > CONECTADOS.txt #GERA ARQUIVO
if [ -s CONECTADOS.txt ];then #SE O ARQUIVO FOR MAIOR QUE ZERO . . .
while IFS=" " read -r C01 C02 C03;do #PEGA "LINHA A LINHA" IP, LOGIN e HORA
if ! grep -q "^$C01$" $IGNIP;then #SE O "IP" NÃO FOR ENCONTRADO NO ARQUIVO $IGNIP, ENVIA EMAIL
mensagem="Usuario: $C02 realizou o login partir do IP: $C01 as: $C03"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject
$mensagem
EOF
echo "$C01" >> $IGNIP # ATUALIZA O ARQUIVO "IP_IGNORE.txt" . . .
fi
done<CONECTADOS.txt
fi

OBS.: Coloque o IP do SERVER, no ARQUIVO IP_IGNORE.txt
Testei aqui e envia somente um vez.

E não ESQUEÇA!
Se a resposta foi SATISFATóRIA, marque-a como A MELHOR.... :)


É isso . . .

Marcelo Oliver
[/quote]

Marcelo, não está mandando o email com IP do servidor que estiver no arquivo IP_IGONORE, porém ele está adicionando o IP da minha maquina quando logo no server, fazendo com que não envie o email informando o login da minha maquina no server....

quando voce faz a atualização do arquivo ele pega o ip da minha maquina e adiciona nele, qual a necessidade de fazer isso? pois ele está pegando o ip da minha maquina e colocando entre os Ip's que não quero receber o email, esto confuso.

quanto ao meu script ele funcionou aqui, porem fica enviando email toda vez que o servidor d monitoração loga nele.. e é isso que eu não queria.

segue o script como ficou

to="wagner@a.com.br"
from="login_server@a.com.br"
subject="URGENTE - Login realizado no SERVER163"
IGNIP="/var/log/IP_IGNORE.txt"
w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $3,$1,$4}' > /var/log/CONECTADOS.txt #GERA ARQUIVO
if [ -s /var/log/CONECTADOS.txt ];then #SE O ARQUIVO FOR MAIOR QUE ZERO . . .
while IFS=" " read -r C01 C02 C03;do #PEGA "LINHA A LINHA" IP, LOGIN e HORA
if ! grep -q "^$C01$" $IGNIP;then #SE O "IP" NÃO FOR ENCONTRADO NO ARQUIVO $IGNIP, ENVIA EMAIL
mensagem="Usuario: $C02 realizou o login partir do IP: $C01 as: $C03"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject
$mensagem
EOF
echo "$C01" >> $IGNIP # ATUALIZA O ARQUIVO "IP_IGNORE.txt" . . .
fi
done</var/log/CONECTADOS.txt
fi


OBS: mudei o EOF de lugar pois se eu deixasse ele na mesma linha, ficaria vermelho como o resto do comando abaixo dele.[/quote]
----------------------------------------------------------------
Wagner, veja bem,
Temos o ip do server, que devemos excluir do "envio de email", e também os que já foram enviados . . .
ao inves da VAR "IP_SERVER", coloco os IPs em $IGNIP.
A INCLUSãO do IP no $IGNIP, somente deve ocorrer após o envio do email.
ENVIE a SAIDA do COMANDO w, e assinale qual é a sua maquina

No aguardo,
Marcelo
[/quote]


Marcelo,

segue o resultado, esse ip é o da minha maquina, a minha dúvida é: se eu fechar a sessão e futuramente abrir novamente da minha máquina, ele não vai enviar o email avisando certo? (desculpe minha ignorancia Marcelo)


[root@server163 ~]# w
17:17:40 up 1:50, 1 user, load average: 0.15, 0.16, 0.14
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 172.16.3.4 16:47 4.00s 0.04s 0.00s w

[/quote]

Antes de qquer coisa, notei um ERRO no EOF.... Verifique ai ....

Pedi a saida de "w", somente para confirmar o formato.... tudo certo.
Wagner, voltei a fazer testes, e . . .
O email é enviado Somente uma vez e o IP é INCLUíDO no ARQUIVO $IGNIP, após o envio do email, tudo de acordo . . .
Se, deslogar e logar novamente . . . .
Não envia, pois, o IP já esta no ARQUIVO $IGNIP.
A lógica é simples, Busca pelo IP (da saida de "w") no arquivo $IGNIP,
SE o IP esta no ARQUIVO, não envia.....

Essa situação que vc citou, é interessante, (logoff login)
Para resolver isso, é simples....
Cadastrar em $IGNIP o usuário, IP e hora, e até mais eficiente, pois, um outro usuário pode logar por um IP que ja esta cadastrado em
IGNORED_IP, e não será enviado o EMAIL...

marcelo oliver



  


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

Wagner
wagner31

(usa CentOS)

Enviado em 05/12/2016 - 18:09h

Marcelo, desculpa sou leigo nessa parte ainda de scripts,
fiz oq vc falou adicionei os outros 2 campos com o "_" ainda para ele não ficar só o endereço.

172.16.3.4_root-18:03

#SEGUE O SCRIPT COMO FICOU

to="wagner@a.com.br"
from="login_server@.com.br"
subject="URGENTE - Login realizado no SERVER163"
IGNIP="/var/log/IP_IGNORE.txt"
w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $3,$1,$4}' > /var/log/CONECTADOS.txt #GERA ARQUIVO
if [ -s /var/log/CONECTADOS.txt ];then #SE O ARQUIVO FOR MAIOR QUE ZERO . . .
while IFS=" " read -r C01 C02 C03;do #PEGA "LINHA A LINHA" IP, LOGIN e HORA
if ! grep -q "^$C01$" $IGNIP;then #SE O "IP" NÃO FOR ENCONTRADO NO ARQUIVO $IGNIP, ENVIA EMAIL
mensagem="Usuario: $C02 realizou o login partir do IP: $C01 as: $C03"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject
$mensagem
EOF
echo "$C01"_"$C02"-"$C03" >> $IGNIP # ATUALIZA O ARQUIVO "IP_IGNORE.txt" . . .
fi
done</var/log/CONECTADOS.txt
fi


e quando logo no server ele está dando a seguinte mensagem:

No recipient addresses found in header 




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

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 05/12/2016 - 18:31h

wagner31 escreveu:

Marcelo, desculpa sou leigo nessa parte ainda de scripts,
fiz oq vc falou adicionei os outros 2 campos com o "_" ainda para ele não ficar só o endereço.

172.16.3.4_root-18:03

#SEGUE O SCRIPT COMO FICOU

to="wagner@a.com.br"
from="login_server@.com.br"
subject="URGENTE - Login realizado no SERVER163"
IGNIP="/var/log/IP_IGNORE.txt"
w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $3,$1,$4}' > /var/log/CONECTADOS.txt #GERA ARQUIVO
if [ -s /var/log/CONECTADOS.txt ];then #SE O ARQUIVO FOR MAIOR QUE ZERO . . .
while IFS=" " read -r C01 C02 C03;do #PEGA "LINHA A LINHA" IP, LOGIN e HORA
if ! grep -q "^$C01$" $IGNIP;then #SE O "IP" NÃO FOR ENCONTRADO NO ARQUIVO $IGNIP, ENVIA EMAIL
mensagem="Usuario: $C02 realizou o login partir do IP: $C01 as: $C03"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject
$mensagem
EOF
echo "$C01"_"$C02"-"$C03" >> $IGNIP # ATUALIZA O ARQUIVO "IP_IGNORE.txt" . . .
fi
done</var/log/CONECTADOS.txt
fi


e quando logo no server ele está dando a seguinte mensagem:

No recipient addresses found in header 



Wagner,
Muito boa a sua iniciativa de tentar!!!! Tente sempre, assim que aprendi....
172.16.3.4_root-18:03
Foram usados dois SEPARADORES, "_" e "-"
E não alterou o "grep" . . . Erro comum . . . No script é "tudo ligado", Um detalhe alterado..... muda tudo

Fiz aqui, testei e funcionou!!!
Fiz LOGOFF e LOGIN, mandou a mensagem.
Segue:
#!/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

Alterei o nome das variáveis "no while", fica mais fácil o entendimento.

Att.
Marcelo Oliver



16. Re: Monitorar logins realizados via SSH

Wagner
wagner31

(usa CentOS)

Enviado em 05/12/2016 - 18:47h

msoliver escreveu:

wagner31 escreveu:

Marcelo, desculpa sou leigo nessa parte ainda de scripts,
fiz oq vc falou adicionei os outros 2 campos com o "_" ainda para ele não ficar só o endereço.

172.16.3.4_root-18:03

#SEGUE O SCRIPT COMO FICOU

to="wagner@a.com.br"
from="login_server@.com.br"
subject="URGENTE - Login realizado no SERVER163"
IGNIP="/var/log/IP_IGNORE.txt"
w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $3,$1,$4}' > /var/log/CONECTADOS.txt #GERA ARQUIVO
if [ -s /var/log/CONECTADOS.txt ];then #SE O ARQUIVO FOR MAIOR QUE ZERO . . .
while IFS=" " read -r C01 C02 C03;do #PEGA "LINHA A LINHA" IP, LOGIN e HORA
if ! grep -q "^$C01$" $IGNIP;then #SE O "IP" NÃO FOR ENCONTRADO NO ARQUIVO $IGNIP, ENVIA EMAIL
mensagem="Usuario: $C02 realizou o login partir do IP: $C01 as: $C03"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject
$mensagem
EOF
echo "$C01"_"$C02"-"$C03" >> $IGNIP # ATUALIZA O ARQUIVO "IP_IGNORE.txt" . . .
fi
done</var/log/CONECTADOS.txt
fi


e quando logo no server ele está dando a seguinte mensagem:

No recipient addresses found in header 



Wagner,
Muito boa a sua iniciativa de tentar!!!! Tente sempre, assim que aprendi....
172.16.3.4_root-18:03
Foram usados dois SEPARADORES, "_" e "-"
E não alterou o "grep" . . . Erro comum . . . No script é "tudo ligado", Um detalhe alterado..... muda tudo

Fiz aqui, testei e funcionou!!!
Fiz LOGOFF e LOGIN, mandou a mensagem.
Segue:
#!/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

Alterei o nome das variáveis "no while", fica mais fácil o entendimento.

Att.
Marcelo Oliver


Marcelo agora deu certo, só precisei fazer uma mudança no script dar um "enter" entre o assunto e a mensagem ficando assim:

Subject:$subject

$mensagem

EOF


dessa forma ele trouxe o conteúdo no corpo do email, obrigado mais uma vez Marcelo, não é a primeira vez q vc me ajuda aqui... abraços




17. Re: Monitorar logins realizados via SSH

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 05/12/2016 - 19:01h

wagner31 escreveu:

msoliver escreveu:

wagner31 escreveu:

Marcelo, desculpa sou leigo nessa parte ainda de scripts,
fiz oq vc falou adicionei os outros 2 campos com o "_" ainda para ele não ficar só o endereço.

172.16.3.4_root-18:03

#SEGUE O SCRIPT COMO FICOU

to="wagner@a.com.br"
from="login_server@.com.br"
subject="URGENTE - Login realizado no SERVER163"
IGNIP="/var/log/IP_IGNORE.txt"
w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $3,$1,$4}' > /var/log/CONECTADOS.txt #GERA ARQUIVO
if [ -s /var/log/CONECTADOS.txt ];then #SE O ARQUIVO FOR MAIOR QUE ZERO . . .
while IFS=" " read -r C01 C02 C03;do #PEGA "LINHA A LINHA" IP, LOGIN e HORA
if ! grep -q "^$C01$" $IGNIP;then #SE O "IP" NÃO FOR ENCONTRADO NO ARQUIVO $IGNIP, ENVIA EMAIL
mensagem="Usuario: $C02 realizou o login partir do IP: $C01 as: $C03"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject
$mensagem
EOF
echo "$C01"_"$C02"-"$C03" >> $IGNIP # ATUALIZA O ARQUIVO "IP_IGNORE.txt" . . .
fi
done</var/log/CONECTADOS.txt
fi


e quando logo no server ele está dando a seguinte mensagem:

No recipient addresses found in header 



Wagner,
Muito boa a sua iniciativa de tentar!!!! Tente sempre, assim que aprendi....
172.16.3.4_root-18:03
Foram usados dois SEPARADORES, "_" e "-"
E não alterou o "grep" . . . Erro comum . . . No script é "tudo ligado", Um detalhe alterado..... muda tudo

Fiz aqui, testei e funcionou!!!
Fiz LOGOFF e LOGIN, mandou a mensagem.
Segue:
#!/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

Alterei o nome das variáveis "no while", fica mais fácil o entendimento.

Att.
Marcelo Oliver

acho que está quase agora Marcelo, ele envia o email mas sem nada no corpo, só o assunto.


Faça o teste, vai mostrar na TELA:

#!/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 -e " To:$to\n From:from\n Assunto:$subject\n MENSAGEM:mensagem\n"
#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


mso



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

Wagner
wagner31

(usa CentOS)

Enviado em 05/12/2016 - 19:03h

msoliver escreveu:

wagner31 escreveu:

msoliver escreveu:

wagner31 escreveu:

Marcelo, desculpa sou leigo nessa parte ainda de scripts,
fiz oq vc falou adicionei os outros 2 campos com o "_" ainda para ele não ficar só o endereço.

172.16.3.4_root-18:03

#SEGUE O SCRIPT COMO FICOU

to="wagner@a.com.br"
from="login_server@.com.br"
subject="URGENTE - Login realizado no SERVER163"
IGNIP="/var/log/IP_IGNORE.txt"
w|awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{print $3,$1,$4}' > /var/log/CONECTADOS.txt #GERA ARQUIVO
if [ -s /var/log/CONECTADOS.txt ];then #SE O ARQUIVO FOR MAIOR QUE ZERO . . .
while IFS=" " read -r C01 C02 C03;do #PEGA "LINHA A LINHA" IP, LOGIN e HORA
if ! grep -q "^$C01$" $IGNIP;then #SE O "IP" NÃO FOR ENCONTRADO NO ARQUIVO $IGNIP, ENVIA EMAIL
mensagem="Usuario: $C02 realizou o login partir do IP: $C01 as: $C03"
#Notifica via e-mail
cat <<EOF | sendmail -t
From:$from
To:$to
Subject:$subject
$mensagem
EOF
echo "$C01"_"$C02"-"$C03" >> $IGNIP # ATUALIZA O ARQUIVO "IP_IGNORE.txt" . . .
fi
done</var/log/CONECTADOS.txt
fi


e quando logo no server ele está dando a seguinte mensagem:

No recipient addresses found in header 



Wagner,
Muito boa a sua iniciativa de tentar!!!! Tente sempre, assim que aprendi....
172.16.3.4_root-18:03
Foram usados dois SEPARADORES, "_" e "-"
E não alterou o "grep" . . . Erro comum . . . No script é "tudo ligado", Um detalhe alterado..... muda tudo

Fiz aqui, testei e funcionou!!!
Fiz LOGOFF e LOGIN, mandou a mensagem.
Segue:
#!/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

Alterei o nome das variáveis "no while", fica mais fácil o entendimento.

Att.
Marcelo Oliver

acho que está quase agora Marcelo, ele envia o email mas sem nada no corpo, só o assunto.


Faça o teste, vai mostrar na TELA:

#!/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 -e " To:$to\n From:from\n Assunto:$subject\n MENSAGEM: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


mso


Marcelo agora deu certo, só precisei fazer uma mudança no script dar um "enter" entre o assunto e a mensagem ficando assim:

Subject:$subject

$mensagem

EOF


dessa forma ele trouxe o conteúdo no corpo do email, obrigado mais uma vez Marcelo, não é a primeira vez q vc me ajuda aqui... abraços



  
01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts