Como melhorar, e muito, a segurança de um servidor ssh 4 passos (sem utilização de firewall)? Simples assim:
1. Desabilite o login da conta root. (PermitRootLogin no)
2. Desabilite logins baseados em usuário/senha. (PasswordAuthentication no) - Assim, a permissão de acesso ao servidor ssh será baseado em verificação de 'ssh keys'.
3. Coloque o serviço sshd para escutar em uma porta diferente da usual. (Port 9522, ex.)
4. Instale o DenyHosts!
O DenyHosts é uma ferramenta que bloqueia hosts que estão tentando efetuar
ataques de força bruta contra servidores SSH. Desenvolvido em Python por Phil Schwartz, o DenyHosts está atualmente na versão 2.6.
Pré-Requisitos (ambiente utilizado: Debian Etch - Kernel 2.6.18-4):
1.OpenSSH-Server compilado com suporte à TCP_WRAPPERS. Para saber se no seu caso o suporte foi habilitado, faça o seguinte teste:
Altere o arquivo /etc/hosts.deny e acrescente a seguinte linha no final do arquivo:
$ sshd: 127.0.0.1
Agora tente fazer uma conexão ssh em localhost, e se a resposta for algo como isto abaixo...:
[alberto@mybox:~]$ ssh localhost
ssh_exchange_identification: Connection closed by remote host
[alberto@mybox:~]$
...gotcha! Isso significa que o suporte à TCP_WRAPPERS está habilitado.
Ah, não se esqueça de remover a linha "sshd: 127.0.0.1" do arquivo /etc/hosts.deny!!!
2. Python v2.3 ou superior. (Eu usei a versão 2.4.4)
Instalando o DenyHosts
[alberto@mybox:~]$ wget http://ufpr.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz
[alberto@mybox:~]$ tar zxvf DenyHosts-2.6.tar.gz
Dentro do diretório criado existe um arquivo chamado setup.py. Este script automatiza o processo de instalação fazendo com que os arquivos sejam alocados em /usr/share/denyhosts/. Sendo assim, faça o seguinte:
[alberto@mybox:~]$ cd DenyHosts-2.6 && python setup.py install
Agora é só configurar:
Vou utilizar o próprio arquivo de configuração de exemplo:
[alberto@mybox:~]$ cd /usr/share/denyhosts
[alberto@mybox:/usr/share/denyhosts]$ cp denyhosts.cfg-dist denyhosts.cfg
As únicas opções que eu precisei alterar foram o caminho do arquivo de log que a ferramenta vai ler e o caminho do lock file/PID do DenyHosts (caminhos para ambiente Debian):
SECURE_LOG = /var/log/auth.log
LOCK_FILE = /var/run/denyhosts.pid
Para que possamos utilizar p DenyHosts como daemon, iremos precisar do script daemon-control. Novamente utilizando o script de modelo como base:
[alberto@mybox:/usr/share/denyhosts]$ cp daemon-control-dist daemon-control
Certifique-se de que os valores das opções DENYHOSTS_BIN, DENYHOSTS_LOCK E DENYHOSTS_CFG estejam assim (valores para Debian):
DENYHOSTS_BIN = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK = "/var/run/denyhosts.pid"
DENYHOSTS_CFG = "/usr/share/denyhosts/denyhosts.cfg"
Não alterei nenhuma outra opção do script daemon-control.
Agora, altere algumas permições:
[alberto@mybox:/usr/share/denyhosts]$ chown root daemon-control && chmod 770 daemon-control
Para finalizar, crie o link para que o DenyHosts seja executado automaticamente durante o boot:
[alberto@mybox:/usr/share/denyhosts]$ ln -s daemon-control /etc/init.d/denyhosts
[alberto@mybox:/usr/share/denyhosts]$ update-rc.d denyhosts defaults
Agora, let's start:
[alberto@mybox:~]$ /etc/init.d/denyhosts start
Pronto! Seu DenyHosts está funcionando e bloqueando os hosts que estiverem tentando atacar seu servidor ssh por brute force.
Faça um teste: Tente se conectar localmente por ssh com algum usuário inexistente por umas 5 vezes (valor padrão de DENY_THRESHOLD_INVALID) e depois verifique o arquivo /etc/hosts.deny ou o log do DenyHosts (/var/log/denyhosts) para ver o que acontece.
O arquivo de configuração /usr/share/denyhosts.cfg é muito simples e bem comentado. Vale a pena dar uma lida e aprimorar as suas configurações.
Comente, sugira, critique ou corrija.
That's all folks!
Nenhum comentário:
Postar um comentário