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: