Aumentando a segurança com SendEmail
Conheço bem algumas das necessidades básicas de quem gerencia uma rede:
- Ficar informado sobre dados que entram e saem via internet;
- Consultar os logs de forma eficiente e com regularidade;
- Aplicar de modo construtivo as informações obtidas pelos logs; e
- Controlar e restringir o acesso do usuário administrativo (root).
Sei que apresentar soluções para todas as necessidades requer um pouco de estudo e bastante tempo para testes. Isso porque nem sempre uma ferramenta/aplicativo usado por um determinado gerente de redes vai ser igualmente eficiente para todos os outros interessados no assunto. E infelizmente, nesse post, não trarei uma “resposta mágica” para todos os nossos anseios. Mas uma coisa sei: o sendEmail pode fazer mais por você do que pode-se imaginar!
De modo simples quero me concentrar em um único ponto: “Controlar e restringir o acesso do usuário administrativo (root)”.
Para isso, vamos usar o sendEmail: que na verdade é simplesmente um cliente de email que usa protocolo SMTP para enviar mensagens via linha de comando. Mas afinal de contas: como aumentar a segurança com esta ferramenta?
Para se obter e usar o sendEmail é só seguir os padrões Unix like (Linux) usados em toda a Galáxia:
–> instalação manual/compilação –> tá aqui o binário do pacote <–
–> gerenciadores de pacote modernos: apt, yum, etc. Para quem usa distros Debian ou baseadas em Debian (Ubuntu, Knoppix, Xandros, etc) é só manter os repositórios regulares e usar o conhecido comando:
apt-get install sendEmail
* não se esqueça do “E” na palavra sendEmail
O.B.S: após a instalação do sendEmail via apt não há, inicialmente, necessidade da modificação de nenhum arquivo conf.(deixe tudo nativo).
Depois acesse seu sistema como root:
su
Vá até a pasta pessoal do usuário corrente (ou seja, do root):
cd ~
Agora liste todos os arquivos ocultos:
ls -a
Nossos alvos são os seguintes arquivos:
.bashrc
(arquivo que é lido e carregado durante a entrada do usuário no sistema)
.bash_logout
(arquivo que é lido e carregado durante saída do usuário do sistema)
.bash_history
(arquivo que “reserva” os últimos comandos executados pelo corrente usuário no terminal)
Caso os arquivos citados não existam é só criá-los que automaticamente de tornam funcionais:
touch .bash_history
ou
touch .bash_logout
Vamos ao comando direcionado para o sendEmail:
sendEmail -f nome_do_host_a_ser_monitorado@seu.dominio -t seu_usuario@seu.email -u "Alerta: Entrada de root por `who | cut -d"(" -f2 | cut -d")" -f1`" -m "Acesso por root em host_alvo 192.168.X.X" -a /home/arquivo -s protocolo_envio@seu_email:porta_usada -xu usuário_do_seu_email -xp senha_do_seu_email 1> /dev/tty7
Explicando os parâmetros:
-f
–> endereço daquele que envia o email (exemplo: proxy@minha_empresa.com.br)
-t
–> endereço daquele que receberá o email (exemplo: ziraldocardoso@gmail.com)
-u
–> título da mensagem (aqui existe o comando who
adicional que envia o IP da máquina que logou por SSH, por exemplo. Não modifique se deseja manter essa função).
-m
–> a mensagem em si (exemplo: Acesso por root em proxy IP 192.168.2.101
)
-a
–> arquivo para anexar. Especifique um anexo se desejar (usado no logout. As 35 linhas finais do .bash_history
são anexadas)
-s
–> protocolo para envio de mensagem seguido de : porta. Cada webmail tem as suas próprias especificações. É só olhar nas opções do Yahoo, Gmail ou outro e liberar o recebimento por aplicativo de envio automático (Thunderbird, MS Outlook, etc). (exemplo: smtp.minha_empresa.gov.br:25
)
-xu
–> seu nome de usuário do webmail que vai receber o email (exemplo: ziraldo@gmail.com ou somente ziraldo)
-xp
–> sua senha de usuário do webmail
1> /dev/tty7
–> redirecionamento da saída de tela para outro terminal. Não é algo elegante ter sempre uma descrição de envio de email pelo sendmail toda vez que se entra ou sai do sistema. E outra, um possível invasor não precisa saber que o admin está sendo notificado de sua invasão. (Você pode usar outro recurso se desejar)
Agora é só incluir essa “parafernália” no final do arquivo .bashrc
para notificação de login via email. Use seu editor de texto preferido e retire o parâmetro para anexo (-a). Exemplo:
sendEmail -f nome_do_host_a_ser_monitorado@seu.dominio -t seu_usuario@seu.email -u "Alerta: Entrada de root por `who | cut -d"(" -f2 | cut -d")" -f1`" -m "Acesso por root em host_alvo 192.168.X.X" -s protocolo_de _envio@seu_email:porta_usada -xu usuário_do_seu_email -xp senha_do_seu_email 1> /dev/tty7
Para o logout usa-se um recurso um pouco diferente: vamos anexar o arquivo .bash_history
ao email enviado. É muito interessante poder saber quais foram os últimos comandos executados no terminal. Sei que qualquer invasor que se preze apaga o .bash_history
e não executa “exit
” (comentário feito por Thiago Finardi). Mas eu insisto nisso… Sabe o porquê? Porque na minha sala de TI trabalham várias pessoas que executam diversos comandos em diferentes terminais. Caso haja algum problema e eu não esteja no trabalho, posso dar imediato suporte porque os últimos comandos foram enviados para o meu email. 😀 (fica frio, chefe!)
Edite o .bash_logout
e na última linha inclua:
sh /home/saida.bash_history
*o nome do arquivo e o caminho podem variar de acordo com sua necessidade.
Crie o arquivo referenciado no local especificado acima:
touch /home/saida.bash_history
Crie um arquivo que em breve será usado como anexo:
touch /home/resumo.bash_history
*o nome do arquivo e o caminho podem variar de acordo com sua necessidade.
Agora edite o arquivo saida.bash_history
conforme o exemplo:
tail -n 35 /root/.bash_history > /home/resumo.bash_history
sendEmail -f nome_do_host_a_ser_monitorado@seu.dominio -t seu_usuario@seu.email -u "Alerta: Entrada de root por `who | cut -d"(" -f2 | cut -d")" -f1`" -m "Acesso por root em host_alvo 192.168.X.X" -a /home/resumo.bash_history -s protocolo_envio@seu_email:porta_usada -xu usuário_do_seu_email -xp senha_do_seu_email 1> /dev/tty7
*o comando tail
usado acima serve para exportar as últimas 35 linhas do .bash_history
para o resumo.bash_history
que servirá de anexo para o logout.
Considerações finais:
Teste quantas vezes for necessário até ter certeza do funcionamento. Suprima a parte “1> /dev/tty7
” durante a fase de implantação para que você possa observar todas as saídas de tela e ter certeza do funcionamento do sendEmail. Use sempre o comando exit
para o logout e consequente execução do arquivo .bash_logout
. Digo ainda que a pior parte é fazer os servidores do Yahoo, bol, Gmail, etc não rejeitarem o email enviado pelo sendEmail. Por causa disso acabei por usar um email organizacional não tão bom, mas que recebe tudo tranquilamente.
fontes:
man sendEmail
- http://caspian.dotconf.net/menu/Software/SendEmail/
- http://www.vivaolinux.com.br
- http://www.centraldolinux.org