De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Ederson L. Corrêa
Data de Publicação: 13 de Janeiro de 2005
Sabemos que o ssh é uma forma de acesso remoto razoalvelmente segura, bem mais segura que nosso velho conhecido telnet.
Entretanto, na net encontram-se disponiveis diversos scripts de "brute force" para tentar se obter acesso pelo ssh, e como não faltam idiotas metidos a crackers para tentarem essas coisas, sempre é bom se cercar de todo o cuidado.
Aqui listarei algumas sugestões coletadas de várias fontes (agradecimentos especiais ao Alejandro Flores, que me deu boas idéias), que ajudam a aumentarmos nossa segurança.
1. Use senhas fortes: Não use senhas fáceis, muito menos pequenas, de preferência assimétricas e sem padrão (nada de "letra numero letra numero ..." ou "numero letra numero letra ...") e faça bom uso dos caracteres como @,#,$,&, ...;
2. Mude a porta do ssh: Só com isso minimizamos problemas com um ataque automatizado, ou ataques de script kiddies que não sabem mudar a porta do ssh no exploit que baixaram da internet. Isso pode ser feito através da opção 'Port' do /etc/ssh/sshd_config.
3. Bloqueie o acesso como usuário root: Assim, evita-se problemas de alguém conseguir quebrar a senha do root e já acessar com plenos poderes. Com isso, o 'atacante' teria que descobrir o login e password de um usuário e depois a senha do root. Isso pode ser feito adicionando 'PermitRootLogin no' no /etc/ssh/sshd_config.
4. Certifique-se de o sshd estar rodando com separação de privilegios: Dessa forma, o sshd cria um processo não privilegiado para tratar as conexões iniciais. Após sucesso na autenticação, cria um outro processo que tem os provilegios necessários. Isso é default no ssh, mas devemos garantir que NÃO exista uma linha com 'UsePrivilegeSeparation no' no /etc/ssh/sshd_config.
5. Permita acesso a apenas um usuário: Isso é possivel através da opção 'AllowUsers' do /etc/ssh/sshd_config. Bastaria acrescentar uma linha com 'AllowUsers nome_do_usuario_autorizado_a_logar_via_ssh'.
6. Crie um usário com o máximo de restrições possiveis e que você só use para o shh: Exemplos de restrições:
$ (aqui somos teste) $ su - elcorrea (aqui nos logamos como usuario elcorrea) Password: (password do elcorrea) $ (agora somos elcorrea) $ su - (aqui nos tornamos root) Password: (password do root) # (agora somos root)Assim, vemos que alguém teria que descobrir dois nomes de usuário e três senhas para conseguir se tornar root.
trap '' SIGINT SIGTERM ./eu.sh if [ -e sou_eu.txt ]; then echo "Acesso Autorizado" rm -f sou_eu.txt else echo "Acesso Negado" logout fi trap SIGINT SIGTERM
#!/bin/bash echo "Qual a senha do seu cartao?" read resp if [ "$resp" == "123456" ]; then touch sou_eu.txt fiE não se esqueça de torna-lo executavel: chmod +x eu.sh
7. Se possivel, limite os endereços IPs que podem acessar a maquina por ssh: Caso você sempre acesse a máquina através de um número limitado de maquinas, ou então somente internamente a rede, você pode limitar o acesso ao ssh a somente essas maquinas.
Isso pode ser feito de diversas formas, com regras no iptables, através da dupla /etc/hosts.allow e /etc/hosts.deny, e, o que eu acho mais fácil, através da opção AllowUsers na forma user@host.
Assim, suponhamos que eu sempre acesso a maquina remoatamente através de uma máquina de IP 10.0.0.5 e que eu criei o usuário 'teste' para acesso por ssh, assim eu acrescentaria uma linha com 'AllowUsers teste@10.0.0.5' no /etc/ssh/sshd_config, e limitaria o acesso a apenas esse usuário e de apenas essa maquina.
Se você não pode limitar os endereços, por qualquer razão, é bom utilizar um script que detecte uma tentaiva de acesso por brute force e que bloqueie o IP do atacante. Veja também um script desse tipo, criado pelo Mastah listado abaixo:
#!/bin/bash # Shellscript criado para bloquear os corriqueiros bruteforce probes # feitos para a porta do ssh. Pega as ultimas 20 tentativas ilegais na porta do ssh. # Verifica se voce já bloqueou o mané e se voce quer adicionar na regra do iptables. # Caso queira usar no crontab, é so mudar o valor da var $MODE pra "AUTO"... # Abracos, Mastah MODE="AUTO" #MODE="MANUAL" if [ -f /var/log/messages ] ; then ips=$(cat -n /var/log/messages | tail -n 20 | grep -i Illegal | grep -i sshd | awk -F" " {'print $11'}) attempts=1 for ip in $ips ; do lastip=$ip if [ "$lastip" == "$ip" ] ; then attempts=$(expr $attempts + 1) if [ $attempts -ge 5 ] ; then echo "Brute force SSHD attack detected from $ip" attempts=1 lastip="" blocked=$(iptables -L INPUT | grep -i $ip | grep -i DROP) if [ "$blocked" ] ; then echo "> Ip Already Blocked. Continuing with scan" echo " " else if [ $MODE == "MANUAL" ] ; then echo "> Do You Want to add this IP to INPUT DROP in IPTABLES rules? (y/n)" read resp if [ "$resp" == "y" ] ; then iptables -A INPUT -s $ip -j DROP echo "> IP $ip ADDED TO IPTABLES INPUT DROP ruleset" echo " " fi else iptables -A INPUT -s $ip -j DROP echo "> IP $ip ADDED TO IPTABLES INPUT DROP ruleset" echo " " fi fi fi fi done fi
Assim, utilizando apenas algumas dessas dicas já aumentamos enormemente a nossa segurança.
Caso não tenha ficado claro, todas as alterações mencionados aqui devem ser feitas na maquina que será acessada remotamente.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários