DenyHosts Adicionando segurança para SSH
E ai galera, aqui eu vou abordar a instalação do denyhosts que é uma ferramenta que monitora os logins mal sucedidos no /var/log/auth.log e adiciona o ip do atacante no /etc/hosts.deny então o nosso controle é por tcpwrappers.
Vamos também
Vamos instalar o denyhosts para efetuar bloqueios de tentativas de acesso ao ssh mal sucedidas
aptitude install denyhosts -y
Agora vamos acertar a configuração dele
vim /etc/denyhosts.conf [...] #Aqui abaixo estamos definindo qual arquivo de log que ele vai analisar para efetuar os bloqueios SECURE_LOG = /var/log/auth.log [...] #O bloqueio vai ser efetuado por tcpwrappers HOSTS_DENY = /etc/hosts.deny [...] #Quando vamos liberar o ip do bloqueio, como não definimos nada ele nunca vai sair do bloqueio PURGE_DENY = #Agora vamos definir qual serviço que vamos monitorar em nosso caso sshd BLOCK_SERVICE = sshd #Quantas tentativas vamos esperar para bloquear uma tentativa de acesso com usuário invalido DENY_THRESHOLD_INVALID = 1 #Quantas tentativas vamos esperar para bloquear o acesso mal sucedidas com um usuário existente no /etc/passwd, fora o root DENY_THRESHOLD_VALID = 3 #Quantas tentativas vamos esperar para bloquear o acesso mal sucedido com o usuário root DENY_THRESHOLD_ROOT = 1 [...] #Aqui vamos definir o endereço email do usuário que vai receber a notificação de bloqueio ADMIN_EMAIL = douglas@douglasqsantos.com.br #Aqui vamos definir o servidor smtp SMTP_HOST = mail.douglasqsantos.com.br #Caso deseje utilizar autenticação podemos utilizar para usuário SMTP_USERNAME=douglas@douglasqsantos.com.br #Caso deseje utilizar autenticação podemos utilizar para senha SMTP_PASSWORD=SENHA #Agora podemos especificar quem esta enviando a mensagem SMTP_FROM = DenyHosts <denyhosts@douglasqsantos.com.br> #Agora podemos definir o assunto da mensagem SMTP_SUBJECT = DenyHosts Report [...] #Agora podemos definir se o sistema vai gerar alertas no Syslog SYSLOG_REPORT=YES
Agora vamos mandar reiniciar o daemon do denyhosts
/etc/init.d/denyhosts restart
Podemos visualizar os logs do denyhosts da seguinte forma
tail -f /var/log/denyhosts 2013-01-15 11:24:10,219 - prefs : INFO WORK_DIR: [/var/lib/denyhosts] 2013-01-15 11:24:10,220 - denyhosts : INFO restricted: set([]) 2013-01-15 11:24:10,221 - denyhosts : INFO launching DenyHosts daemon (version 2.6)... 2013-01-15 11:24:10,227 - denyhosts : INFO DenyHosts daemon is now running, pid: 13601 2013-01-15 11:24:10,227 - denyhosts : INFO send daemon process a TERM signal to terminate cleanly 2013-01-15 11:24:10,227 - denyhosts : INFO eg. kill -TERM 13601 2013-01-15 11:24:10,229 - denyhosts : INFO monitoring log: /var/log/auth.log 2013-01-15 11:24:10,229 - denyhosts : INFO sync_time: 3600 2013-01-15 11:24:10,229 - denyhosts : INFO purging of /etc/hosts.deny is disabled 2013-01-15 11:24:10,229 - denyhosts : INFO denyhosts synchronization disabled
Agora vamos ajustar algumas coisas no sshd
vim /etc/ssh/sshd_config [...] #Vamos mudar a porta padrão de 22 para por exemplo 34276 Port 34276 [...] #O protocolo deve sempre ser o 2 Protocol 2 [...] #Aqui vamos definir que a conexão vai ser cortada se o cliente ficar inativo por 2 minutos LoginGraceTime 2m [...] #Vamos desativar o login como root, utilize um usuário comun para efetuar login no servidor depois utilize "su -" para passar para root PermitRootLogin no [...] #Nunca permita login via ssh sem senha então deixe como abaixo PermitEmptyPasswords no #depois de 3 tentativas não autenticadas, 50% das conexões do IP são recusadas e quando o número de de tentativas #chegar a 6 todas as tentativas de conexões do IP serão recusadas. MaxStartups 3:50:6 [...] #As linhas abaixo podem ser inseridas no final do arquivo #Vamos definir quais grupos podem efetuar login via ssh, aqui podemos separar os grupos por espaço AllowGroups sudo #Podemo tambem definir quais usuários podem efetuar login via ssh, aqui o padrão é user@host para utilizar por usuário descomente a linha abaixo. #AllowUsers douglas@* #Vamos tirar o Banner default do Debian DebianBanner no #Podemo definir quais grupos não podem efetuar login via ssh, aqui podemos separar os grupos por espaço, para utilizar descomente a linha abaixo #DenyGroups desenvolvimento #Podemo tambem definir quais usuários não podem efetuar login via ssh, aqui o padrão é user@host para utilizar por usuário descomente a linha abaixo. #DenyUsers nerso #Vamos limitar a quantidade máxima de conexões ssh no servidor para 2 MaxSessions 2
Agora vamos reiniciar o servidor ssh
/etc/init.d/ssh restart
Agora vamos tentar efetuar uma conexão com um usuário que não esteja no grupo sudo
ssh jose@10.101.0.25 jose@10.101.0.25's password: Permission denied, please try again.
Agora vamos analisar os logs de erros
tail -f /var/log/auth.log Jan 15 11:56:19 debian25 sshd[19705]: User jose from 10.101.0.1 not allowed because none of user's groups are listed in AllowGroups Jan 15 11:56:19 debian25 sshd[19705]: Failed none for invalid user jose from 10.101.0.1 port 46786 ssh2 Jan 15 11:56:20 debian25 sshd[19705]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.101.0.1 user=jose Jan 15 11:56:22 debian25 sshd[19705]: Failed password for invalid user jose from 10.101.0.1 port 46786 ssh2
A primeira linha do log já nos informa que o usuário não consegue acesso pois ele não pertence aos grupos listados em AllowGroups.
Agora vamos ver os logs do denyhosts
tail -f /var/log/denyhosts [...] 2013-01-15 11:56:01,931 - denyhosts : INFO new denied hosts: ['10.101.0.254', '10.101.0.1'] 2013-01-15 11:56:31,995 - denyhosts : INFO new denied hosts: ['10.101.0.254', '10.101.0.1']
Porém se eu precisar deixar algum endereço habilitado a conectar no servidor não importando se vai dar erro ou não ex minha lan podemos liberar ela em /var/lib/denyhosts/allowed-hosts
vim /var/lib/denyhosts/allowed-hosts 10.101.0.0/24
Neste caso estou liberando a minha rede inteira para o acesso ao servidor.