Protegendo o servidor SSH contra bruteforcing

13

Eu tenho um pequeno servidor SVN, o antigo dell optiplex rodando o debian. Eu não tenho essa alta demanda no meu servidor, porque é apenas um pequeno servidor SVN ... mas quero que seja seguro.

Acabei de renovar o meu servidor para um optiplex mais novo e melhor, e comecei a procurar um pouco no antigo servidor. Eu tirei depois de experimentar problemas. Quando eu verificar os logs, está cheio de tentativas de força bruta e de alguma forma alguém conseguiu entrar na minha máquina. Essa pessoa criou algum volume extra chamado "knarkgosse" com dois dirs "root" e "swap1" ou algo assim. Não sei realmente por que e o que eles fazem, mas com certeza querem impedir que isso aconteça novamente. Eu acho isso um pouco estranho, porque eu mudo minha senha em poucos meses, e as senhas são sempre letras e números aleatórios juntos ... não é fácil para a força bruta.

Eu sei que posso impedir que o root faça login e use sudoers ... e mude a porta SSH, mas o que mais posso fazer?

Então, tenho algumas perguntas:

  1. Como posso evitar o login por 5 minutos após a quantidade X de tentativas incorretas. Ou lento tenta depois de cada tentativa incorreta?

  2. Existe algum tipo de lista negra central à qual um servidor pode se conectar? Uma lista negra que controla os endereços IP que são "inseguros" e que nunca devem ter acesso?

  3. O que mais posso fazer para aplicar a segurança ao meu servidor?

Como eu disse anteriormente, estou executando o Debian 5 com Apache (problema de usuário do www-data?), svn, mysql, php, phpmyadmin, hudson. Ele está em uma rede doméstica com o encaminhamento de porta em 80, 443, 8080, 8180, 23 e 22.

    
por Paul Peelen 26.08.2010 / 22:27

12 respostas

17

Fail2ban e Batida no Porto deve atender a maioria das suas necessidades.

Alterar sua porta SSH e somente permitir autenticação baseada em chave também é recomendado.

Pode-se argumentar que você pode chegar a um ponto de retorno decrescente ao adicionar medidas de segurança adicionais, mas, novamente, cabe a você decidir quando está "suficientemente seguro".

Também é uma boa ideia não permitir login de raiz.

    
por 26.08.2010 / 22:49
7

Não há substituto para senhas seguras E autenticação de chaves. Dito isto, Fail2Ban é um ótima ferramenta para banir IPs de usuários que tentam autenticar muitas vezes. Também está disponível como um pacote pré-construído para a maioria das distros. Esteja avisado, você pode acidentalmente ser banido, por isso certifique-se de ter um IP de lista branca de recuperação também ou acesso fácil ao console ...

O Fail2Ban tem vários bons exemplos de como configurar tudo o que você pediu ... no entanto, ele não possui um repositório universal de endereços inválidos. Eu não acho que exista tal repositório em nenhum lugar devido à facilidade de obter outro IP (ataques dhcp renew / bot-net / etc ...). Eu também desabilitaria o login via ssh usando nomes de usuários comuns do tipo 'administrador' (root / admin / administrator / sysop / etc ..), já que estes são os mais comuns.

    
por 26.08.2010 / 23:14
5

Eu parei de ataques de força bruta com:

  • fail2ban
  • sshd.config:
    • SenhaAuthentication Não
    • PermitRootLogin Não
  • Limitando taxas de SSH Connect com o iptables ( link )
por 27.08.2010 / 00:10
4

Há várias boas sugestões oferecidas aqui. Eu respeitosamente sugiro que três coisas devem tornar isso relativamente seguro:

  1. Execute o sshd em uma porta alta aleatória. Os bots normalmente só vão depois da porta 22 e variações na porta 22 como 2222.
  2. Desative a autenticação baseada em senha na configuração do sshd:

UsePAM no

  1. Somente autentique com este site por meio de pares de chaves SSH pré-compartilhadas. Man em ssh-keygen para começar a usar a autenticação baseada em PKI.

Espero que isso ajude.

    
por 28.08.2010 / 02:06
1

Eu sempre fui um grande fã de CSF / LFD que pode Bloquear endereços IP de pessoas que tentam usar o bruteforce, o portscan e algumas outras opções. É basicamente um enorme perl-wrapper para tabelas IP, mas o arquivo de configuração não é difícil de ler e a documentação não é ruim.

    
por 26.08.2010 / 22:38
1

Você também pode olhar para o sshguard. Eu não usei isso, mas ouvi coisas boas.

Fontes:
link

link

link

"O Sshguard monitora os servidores de suas atividades de registro. Quando os logs mostram que alguém está fazendo uma coisa ruim, o sshguard reage bloqueando um pouco. Sshguard tem uma personalidade delicada: quando um tirano insiste em perturbar seu hospedeiro , reage mais firme e firme. "

    
por 26.08.2010 / 22:54
1

Eu tenho um servidor SSH conectado à Internet na porta padrão e nunca tive problemas.

  • tcp_wrappers (ou seja, hosts.allow hosts.deny) para SSH .. Eu não acho que há um SSH lá fora que não tem suporte compilado nele
  • iptables isso em conjunto com tcp_wrappers eliminou cerca de 99% das minhas tentativas aleatórias de varredura de porta / bruteforce .. o único problema é que você precisa saber de onde você vai se conectar para permitir esses intervalos de IP / IP ... Eu simplesmente fiz uma pesquisa em provedores populares em minha área para ver seus intervalos de IP e permitir que eles ... a maioria das varreduras parece vir de países distantes:)
  • PermitRootLogin sem senha (ou seja, somente pares de chaves RSA / DSA que são criptografados com uma frase secreta) funciona maravilhosamente para tarefas automatizadas .. quando eu logro para interagir eu obviamente uso minha conta (regular) que é configurada com sudo acessar
  • sudoers
  • atualizações constantes .. Eu atualizo esta caixa frequentemente com todas as atualizações críticas / de segurança
  • alterações de senha / senha
  • execute o chkrootkit de vez em quando para ver se tenho algum problema ... (há vários por aí que executam essa função)

espero que ajude!

    
por 27.08.2010 / 00:18
1

Existe uma maneira melhor de fazer isso, usar o fail2ban significa que você precisa adicionar um aplicativo e ele opera na camada de aplicativo.

Se você usar o iptables, ele será mais eficiente, pois opera na camada de rede e não é necessário instalar um aplicativo extra.

Use o link do módulo iptables

iptables -N SSHSCAN
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent --set --name SSH
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-level info --log-prefix "SSH SCAN blocked: "
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
iptables -A SSHSCAN -j ACCEPT
    
por 27.08.2010 / 17:52
0

Uma opção (a ser usada em adição a outras medidas de segurança) é que o sshd ouça em uma porta diferente de 22. Eu não tentei por conta própria, mas ouvi dizer que reduz o número de ataques de força bruta por bots.

Devo enfatizar que isso não é uma segurança real, apenas reduz o número de ataques automatizados de força bruta. Muito trabalho para verificar todas as portas, eu acho.

    
por 26.08.2010 / 23:19
0

Algo que não é mencionado aqui e realmente deveria limitar o acesso via firewall. Isso não se adequa a todas as situações, mas se você estiver se conectando ao host a partir de um local consistente com um IP estático, poderá bloquear o SSH totalmente, exceto para esse IP. Isso garantirá que intrusos não possam entrar. Como mencionei, isso nem sempre se adequa a todas as situações, especialmente se o seu IP é dinâmico e muda com frequência.

    
por 27.08.2010 / 00:25
0

DenyHosts, link , é um bom projeto com o qual tive sorte. Se você configurar o denyhosts para sincronizar, ele fará o download de novos IPs para adicionar a uma lista de proibição que teve que forçar a força de outros sistemas usando o denyhosts. Também expira IPs que não tentaram a força bruta por um tempo.

Usar autenticação de chave pública e desabilitar o registro de senhas é provavelmente a melhor coisa que você pode fazer. Derrota quaisquer ataques de força bruta.

    
por 27.08.2010 / 16:59
0

O que foi eficaz para mim:

  1. Como outros já disseram, nenhum login root, PasswordAuthentication configurado como no (somente login com chaves) em sshd_config

  2. Apenas um ou dois usuários têm permissão para efetuar login via ssh e eles têm nomes quase obscuros que não estão na lista de nomes de usuário da ferramenta de força bruta comum (ou seja, não "admin" ou "apache" ou "web" ou "johnny")

  3. Regras de firewall restritivas (basicamente, tudo está bloqueado, mas minha porta de serviço e ssh). Eu até mesmo restringi o ping, para afastar os scans mais grosseiros (para o desgosto do meu parceiro).

  4. No meu host, restringi o acesso a alguns endereços IP específicos, mas parece que isso não é uma opção para você. Certamente não posso fazer isso sozinho em todos os nossos anfitriões. Você também pode querer olhar para "port-knocking".

  5. E o meu favorito: o módulo de resposta ativa da OSSEC para bloquear uma série de condições de força bruta e alertas sobre outros erros também. Ele detecta x logins inválidos em um determinado período de tempo e bloqueia (por meio de um comando iptables firewall-drop) por um determinado período de tempo. Eu estou bloqueando por cerca de 12 horas agora por diversão. :)

Uma coisa que faço aqui para ter certeza de que não estou bloqueando muito a coisa errada, é que em /etc/ossec.conf, eu configuro a resposta ativa para um nível alto (que não existe na configuração padrão) ) e, em seguida, passar pelo sshd_rules.xml e definir as regras que eu quero bloquear para esse nível e modificar os limites para o bloco versus alerta, conforme necessário.

Se você estiver usando o Apache, também poderá bloquear coisas que violem as regras do apache. Eu não bloqueio isso apenas por causa do problema NAT, eu quero pensar em bloquear uma universidade inteira ou algo assim. :) Além disso, você pode escrever regras personalizadas para bloquear determinadas condições em arquivos de log, o que pode ser muito útil.

    
por 12.10.2010 / 15:48