Segurança no ssh.
segunda-feira, 26 de novembro de 2007
Segurança no ssh.
O SSH é um serviço muito interessante e útil no mundo linux, praticamente todo servidor em que se deseje a administração remota é preciso estar rodando este serviço, pois bem, apenas um dia depois que liberei este serviço no firewall de 2 servidores SuSe encontrei centenas de linhas de tentativas de logins invalidos no /var/log/messages, ou seja são varios ataques de força bruta através do ssh, então começei a pesquisar de como se proteger destes ataques e acabei montando a seguinte estratégia:
Antes de iniciar voce pode verificar se ha alguma tentativa destes ataques em seu servidor, listando as ultimas 500 linhas do arquivo de log de sua distribuição, para isto use o comando tail, abaixo listo 3 exemplos que abrange 6 distribuições diferentes:
Rhedhat ou Fedora:
tail -n500 /var/log/secure | more
Mandrake, FreeBSD ou OpenBSD:
tail -n500 /var/log/auth.log | more
SuSe:
tail -n500 /var/log/messages | more
1 - Altere a porta default do ssh, para isto edit o arquivo /etc/ssh/sshd_config e descomente a linha
#Port 22
Altere-a para 2222, por exemplo, embora seja óbvio que os atacantes tentem portas que não a default mas a simples alteração da porta reduz drasticamente os ataques de força bruta. Logo que descobri os ataques imediatamente me veio a mente de trocar a porta como medida emergencial e assim o fiz, o primeiro ataque só surgiu apos aprox 72 horas, quando estava na 22 os ataques eram constantes durante todo o dia.
Obs.: Não se esqueça de reconfigurar seu firewall fechando a 22 e abrindo a nova porta.
2 - Use senhas fortes para os usuarios, uma estrategia para uma senha forte que seja fácil de ser lembrada é pensar em algo que voce goste muito ou odeia e associar a um numero que seja significativo para voce (separados por um ponto), claro que vai depender do contexto de cada um mas posso citar como exemplo:
whiskychivas.12anos
chocolateamargo.2007
volkswagennewbeatle.2008
Voce pode também desabilitar o acesso via senha e permitir somente via chave publica, mas não uso esta abordagem porque torna-se complexo acessar o servidor com equipamentos de terceiros
3 - Desabilite o login do root, nos logs que pesquisei não havia nenhuma tentativa de logar com o root mas é claro que um ou outro ataque vai acabar fazendo este tipo de tentativa então acho prudente desabilitar o login como root no ssh, para isto volte ao arquivo /etc/ssh/sshd_config e descomente a linha onde se lê "PermitRootLogin yes" e altere-a para "PermitRootLogin no"
4 - Limite as conexoes
Ataques via ssh são espécies de flood onde o agressor tenta logar ao servidor com nomes/senhas provavelmente extraidos de dicionarios, por repetidas vezes sucessivamente. Se o servidor estiver protegido por um firewall usando iptables é fácil e rápido criar uma regra para que as conexoes não passam ultrapassar um determinado numero de vezes em um determinado tempo, reduzindo drasticamente a possibilidade de sucesso de um destes ataques, para ver mais detalhes a respeito consultei este link: http://starbridge.org/spip/spip.php?article22 de onde também retirei o exemplo abaixo que limita a 3 por minuto as tentativas de login a porta 2222, isto será praticamente imperceptivel para usuários legítimos.
iptables -I INPUT -p tcp --dport 2222 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 2222 -i eth0 -m state --state NEW -m recent \
--update --seconds 600 --hitcount 2 -j DROP
5 - Instale ferramentas contra atques de força bruta.
Existem várias ferramentas para esta finalidade: DenyHost, SSHDFilter, pam_abl, Brute-Force Detection, SSHGuard, etc. etc, no momento estou tentando instalar o primeiro da lista (DenyHost) mas com certeza isto é assunto para um novo artigo neste blog.
Para usuários do NXServer:
Se voce usa o NXServer, precisará configura-lo para a nova porta do sshd, edit o arquivo /usr/NX/etc/server.cfg e descomente a linha onde se lê: SSHDPort = "22" e altere para a porta que vc escolheu
Posted by Cosmo Verbal 18:51