Jose Carlos Oliveira: Como melhorar a segurança do ssh
Sabemos que o ssh é uma forma de acesso remoto razoavelmente segura, bem mais segura que nosso velho conhecido telnet.
Entretanto, na net encontram-se disponíveis 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.
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 privilégios: 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 privilégios 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 é possível 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 usuário com o máximo de restrições possíveis e que você só use para o ssh: Exemplos de restrições: - Não o inclua em nenhum outro grupo além do users; - Edite o /etc/ftpusers e acrescente o nome desse usuário. Assim bloqueamos o acesso dele ao ftp. - Evite que ele possa se tornar root (adicione uma linha com 'root:nome_usuario_do_ssh:DENY' no /etc/suauth). Assim, voce deverá se tornar outro usuário e ai sim se tornar root. Exemplo, suponhamos que 'teste' seja o usuario criado para o acesso por ssh, e que 'elcorrea' seja um outro usuário cadastrado na máquina, assim para se tornar root estando logado com teste teríamos que fazer: $ (aqui somos teste)
- Utilize algum programa pós-login para efetuar um 'challenge' para certificar de que você é você mesmo. Essa foi uma grande idéia do Alejandro. O que ele quis dizer é para criarmos um programa ou script que faz uma pergunta, a qual pode ser um gerador de caracteres baseado na hora ou uma simples pergunta de caráter pessoal, que só você saberia responder. E caso o usuário erre ou tente fechar o programa/script (ctrl+c) a sessão é fechada. Um exemplo bem simplista seria:
- Crie (ou edite acrescentando no inicio) um .bash_profile para o usuário do ssh com o seguinte conteúdo:
trap '' SIGINT SIGTERM > ./eu.sh
echo "Acesso Autorizado" rm -f sou_eu.txt
E não se esqueça de torna-lo executável: chmod +x eu.sh
7. Se possível, 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.
Assim, suponhamos que eu sempre acesso a maquina remotamente 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 em 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 tentativa de acesso por brute force e que bloqueie o IP do atacante. Veja também um script desse tipo (http://www.vivaolinux.com.br/scripts/verFonte.php?codigo=656&arquivo=dtct), criado pelo Mastah