Você está na página 1de 6

Dicas avanadas de segurana para SSH

Colaborao: Rubens Queiroz de Almeida


Data de Publicao: 29 de junho de 2010
Este artigo foi traduzido e adaptado a partir do original, publicado no site
Linux.com, chamado Advanced SSH security tips and tricks, de autoria de
Anze Vidmar. A verso traduzida para o portugus foi originalmente
publicada no site SegurancaLinux.com.
Neste artigo irei demonstrar alguns truques simples para ajud-lo a aperfeioar a
segurana do seu servio SSH.
O arquivo de configurao do servidor SSH fica em /etc/ssh/sshd_conf. Voc precisar
reiniciar o servio SSH aps cada mudana que fizer no arquivo para que as alteraes
sejam efetivadas.

Tcnicas para melhoria da segurana do servio SSH


Alterar a porta em que o servidor SSH ouve
Por default, o servio SSH atende conexes na porta 22. Invasores usam software de scan
de portas para identificar se os computador est rodando o servio SSH. recomendvel
mudar esta porta para um valor acima de 1024, visto que a maioria dos scanners de
portas (inclusive o nmap), por default, no analisam portas altas.
Edite o arquivo /etc/ssh/sshd_config e procure por uma linha como:
Port 22

Altere o nmero da porta e reinicie o servio SSH:


# /etc/init.d/ssh restart

Permita apenas SSH protocolo 2


Existem duas verses do protocolo SSH. Usar apenas a verso 2 do protocolo SSH
muito mais seguro; a verso 1 do protocolo SSH est sujeita a problemas de segurana,
inclusive o ataque man-in-the-middle e ataques de insero.
Edite o arquivo /etc/ssh/sshd_config e procure por uma linha com o seguinte contedo:

Dicas avanadas de segurana para SSH

Protocol 2,1

Mude a linha para que especifique apenas a verso 2 do protocolo SSH.

Permita o login via SSH apenas para determinados usurios


Voc no deve permitir login do usurio root via SSH, pois um risco de segurana
grande e desnecessrio. Se um atacante consegue logar como root em seu sistema, ele
pode causar mais danos do que se conseguisse acesso como um usurio comum.
Configure seu servidor SSH de modo a impedir que o usurio root consiga fazer o login
diretamente. Encontre a linha abaixo:
PermitRootLogin yes

Mude o valor yes para no e reinicie o servio. Voc poder fazer o login como qualquer
outro usurio definido e mudar para o usurio root se precisar executar tarefas restritas
ao superusurio.
aconselhvel criar um usurio local sem nenhum privilgio no sistema usar este usurio
para fazer o login com SSH. Desta forma, nenhum prejuzo poder decorrer se a conta
deste usurio for comprometida. Ao criar este usurio certifique-se de que pertence ao
grupo wheel, de forma a que ele possa se tornar o superusurio.
Se voc deseja ter uma lista de usurios que so os nicos a poderem logar via SSH, voc
pode especificar estes usurios no arquivo de configurao sshd_config. Por exemplo,
digamos que eu queira permitir que os usurios anze, dasa e kimy possam logar via SSH.
Ao final do arquivo sshd_config adicione uma linha como abaixo:
AllowUsers anze dasa kimy

Criar um banner customizado para o SSH


Se voc quiser que qualquer usurio que se conecte atravs de seu servio SSH veja uma
mensagem especfica, voc pode criar um banner SSH customizado. Basta criar um
arquivo de texto (em meu exemplo este arquivo se chama /etc/ssh-banner.txt) e escrever
dentro dele qualquer mensagem que desejar; por exemplo:
*****************************************************************
* Este um servio SSH privado. No para voc estar aqui
*
* Por favor, saia imediatamente.
*
*****************************************************************

Permita apenas SSH protocolo 2

Ao terminar a edio, salve o arquivo. No arquivo sshd_conf, procure por uma linha que
diz:
#Banner /etc/issue.net

Descomente a linha e coloque o caminho para o seu banner SSH customizado.

Usando chave pblica DSA para autenticao


Ao invs de usar nomes de login e senhas para autenticao via SSH, voc pode usar
chaves pblicas DSA. Observe que voc pode ter tanto nomes de login e autenticao por
chaves pblicas DSA habilitados ao mesmo tempo.
Ter a autenticao por chaves pblicas DSA habilitadas torna o seu sistema a prova de
balas para ataques de dicionrio, porque voc no precisa de um nome de login e senha
para se logar no servio SSH. Ao invs disto, voc precisa de um par de chaves DSA -uma pblica e uma privada. Voc mantm a chave privada na sua mquina e copia a
chave pblica para o servidor. Quando voc quiser estabelecer uma sesso SSH, o
servidor verifica as chaves, e se elas baterem, voc recebe uma shell. Se as chaves no
baterem, voc desconectado.
Neste exemplo, a mquina pessoal (a partir da qual me conectarei ao servidor) station1
e a servidora server1. Em ambas as mquinas eu tenho o mesmo diretrio home; isto
no ir funcionar se os diretrios home so diferentes nas mquinas cliente e servidor.
Primeiro, voc precisa criar um par de chaves em sua mquina pessoal com o comando:
$ ssh-keygen -t dsa

Voc precisar especificar uma frase para sua chave privada, mas voc pode deix-la em
branco, o que no recomendvel. Um par de chaves gerado. Sua chave privada ser
gravada em ~/.ssh/id_dsa e sua chave pblica ser gravada em .ssh/id_dsa.pub.
A seguir, copie o contedo de ~/.ssh/id_dsa.pub para server1, para o arquivo
~/.ssh/authorized_keys. O contedo de ~/.ssh/id_dsa.pub deve ser algo como:
$ cat .ssh/id_dsa.pub
ssh-dss AAAAB3NzaC1kc3MAAACBAM7K7vkK5C90RsvOhiHDUROvYbNgr7YEqtrdfFCUVwMWcJYDusNG
AIC0oZkBWLnmDu+y6ZOjNPOTtPnpEX0kRoH79maX8NZbBD4aUV91lbG7z604ZTdrLZVSFhCI/Fm4yROH
Ge0FO7FV4lGCUIlqa55+QP9Vvco7qyBdIpDuNV0LAAAAFQC/9ILjqII7nM7aKxIBPDrQwKNyPQAAAIEA
q+OJC8+OYIOeXcW8qcB6LDIBXJV0UT0rrUtFVo1BN39cAWz5puFe7eplmr6t7Ljl7JdkfEA5De0k3WDs
9/rD1tJ6UfqSRc2qPzbn0p0j89LPIjdMMSISQqaKO4m2fO2VJcgCWvsghIoD0AMRC7ngIe6btaNIhBbq
ri10RGL5gh4AAACAJj1/rV7iktOYuVyqV3BAz3JHoaf+H/dUDtX+wuTuJpl+tfDf61rbWOqrARuHFRF0
Tu/Rx4oOZzadLQovafqrDnU/No0Zge+WVXdd4ol1YmUlRkqp8vc20ws5mLVP34fST1amc0YNeBp28EQi
0xPEFUD0IXzZtXtHVLziA1/NuzY= anze@station1.example.com

Criar um banner customizado para o SSH

Se o arquivo ~/.ssh/authorized_keys j existir, adicione o contedo do arquivo


~/.ssh/id_dsa.pub ao arquivo ~/.ssh/authorized_keys em server1. A nica coisa que resta
fazer definir as permisses de leitgura e gravao corretas para o arquivo
~/.ssh/authorized_keys em server1.
$ chmod 600 ~/.ssh/authorized_keys

Agora, configure o arquivo sshd_conf para usar as chaves de autenticao DSA.


Certifique-se de que as linhas a seguir esto descomentadas:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

Reinicie o servio. Se voc configurou tudo corretamente, voc deve poder efetuar
conexes SSH para o seu servidor e cair diretamente no seu diretrio home, sem a
necessidade de qualquer tipo de interao.
Se voc deseja habilitar apenas a autenticao DSA, certifique-se de descomentar e
alterar a linha PasswordAuthentication no arquivo sshd_config de yes para no:
PasswordAuthentication no

Se algum tentar se conectar ao seu servio SSH e no possuir uma chave pblica no
servidor, ele ser rejeitado sem ao menos ver o prompt de login, com o seguinte erro:
Permission denied (publickey)

Usando TCP Wrappers para permitir a conexo de hosts especficos


Esta tcnica til se voc deseja autorizar que apenas hosts especficos em uma rede se
conectem ao seu servio SSH, mas voc no quer usar ou estragar a sua configurao do
iptables. Ao invs disto, voc pode usar TCP wrappers; neste caso, o wrapper sshd.
Criarei uma regra para autorizar a conexo ao meu servio SSH apenas para hosts em
minha subrede local 192.168.1.0/24 e para o host remoto 193.180.177.13.
Por default, TCP Wrappers primeiro consultam o arquivo /etc/hosts.deny para ver quais
hosts no podem acessar qual servio. Em seguida, consultam o arquivo /etc/hosts.allow
para verificar se existe alguma regra que permite que determinados hosts se conectem a
servios especficos. Criarei uma regra como esta no arquivo /etc/hosts.deny:
sshd: ALL

Usando chave pblica DSA para autenticao

Isto significa que, por default, todos os hosts so proibidos de acessar o servio SSH.
Preciso fazer esta especificao, pois caso contrrio, todos os hosts teriam acesso ao
servio SSH, pois o TCP Wrappers primeiro consulta o arquivo hosts.deny e se no existir
nenhuma regra bloqueando o servio SSH, qualquer host poder se conectar.
Em seguida, crie uma regra em /etc/hosts.allow para autorizar apenas hosts especficos
(como definido anteriormente) a usar o servio SSH:
sshd: 192.168.1 193.180.177.13

Agora, apenas hosts da rede 192.168.1.0/24 e o host 193.180.177.13 podero acessar o


servio SSH. Todos os outros hosts sero desconectados antes mesmo de chegar ao
prompt de login, e recebero um erro como abaixo:
ssh_exchange_identification: Connection closed by remote host

Usando iptables para autorizar a conexo de hosts especficos


Uma alternativa ao TCP Wrappers (embora voc possa usar os dois ao mesmo tempo)
limitar o acesso ao servio SSH com iptables. Aqui est um exemplo simples de como
voc pode autorizar apenas um host especfico a se conectar usando o seu servio SSH:
# iptables -A INPUT -p tcp -m state --state NEW --source 193.180.177.13 --dport 22 -j ACCEPT

Certifique-se de que ningum mais tenha acesso ao servio SSH:


# iptables -A INPUT -p tcp --dport 22 -j DROP

Salve as suas novas regras e pronto.

SSH time-lock
Voc pode usar parmetros diferentes do iptables para limitar as conexes ao seu servio
SSH por perodos de tempo pr-determinados. Voc pode usar as diretivas /second,
/minute, / hour ou /day, em qualquer dos exemplos abaixo.
No primeiro exemplo, se o usurio fornece a senha errada, seu acesso ao servio SSH
bloqueado por um minuto, e o usurio s pode tentar um login por minuto a partir
daquele momento:

# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --lim
# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP

Usando TCP Wrappers para permitir a conexo de hosts especficos

Em um segundo exemplo, iptables configurado para permitir que apenas o host


193.180.177.13 se conecte ao servio SSH. Depois de trs tentativas mal sucedidas, o
iptables permitir apenas uma tentativa de login por minuto:

# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -m limit --li
# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP

Concluso
Estes recursos no so difceis de serem configurados, mas so tcnicas poderosas para
melhorar a segurana de seu servio SSH. um pequeno preo a ser pago para uma boa
noite de sono.

SSH time-lock