SSH / SSHD - Como definir tentativas máximas de login?

17

Qual é a maneira mais fácil de configurar o máximo de tentativas de login em um ambiente LAMP (sshd instalado via yum)? Existe um pacote ou regra de firewall simples?

John Himmelman
fonte
@ Hippy Obrigado, tentei pesquisar, mas infelizmente existem muitas perguntas / tópicos com nomes inadequados.
John Himmelman

Respostas:

11

Eu uso Fail2ban ; Eu usei Denyhosts no passado e funciona muito bem também. Eu sou a favor do Fail2ban agora porque é mais configurável e mais capaz de gerenciar o monitoramento de vários serviços diferentes - por exemplo, a página de login do seu sshd e seu aplicativo da web simultaneamente (desde que você registre falhas).

Outro método que você pode considerar é implementar uma regra LIMIT iptables; Infelizmente, não posso ajudá-lo com isso, a menos que você queira instalar o Shorewall e, em seguida, eu simplesmente aponto para a excelente documentação desse site sobre como configurar uma regra LIMIT para limitar a capacidade de alguém para brutal -force seu servidor.

Kromey
fonte
Devo acrescentar que o Fail2ban está disponível nos repositórios de muitas distribuições, portanto é fácil instalá-lo; Eu não vi Denyhosts em nenhum, mas isso não significa que não esteja em alguns, nem que não tenha sido adicionado desde a última vez que verifiquei.
Kromey
Eu enfrentei o problema de que fail2ban da v0.8.14 não funcionava corretamente com o comando iptables-multiport. E esse é um problema conhecido com o utilitário fail2ban resolvido em novas versões ... Aqui está a descrição: github.com/fail2ban/fail2ban/issues/798 Portanto, acredito apenas nos mecanismos de segurança desenvolvidos no software do servidor, nem nos utilitários de terceiros ...
George Gaál
44

Não gosto de usar ferramentas de terceiros. Por isso, usei uma combinação de configurações ssh e de firewall. Com a solução a seguir, um invasor pode produzir exatamente 3 logins de falha em 2 minutos ou ele será bloqueado por 120 segundos.

1) Adicione a seguinte linha a /etc/ssh/sshd_config

MaxAuthTries 1

Isso permitirá apenas 1 tentativa de login por conexão. Reinicie o servidor ssh.

2) Adicione as seguintes regras de firewall

Crie uma nova cadeia

iptables -N SSHATTACK
iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
iptables -A SSHATTACK -j DROP

Bloqueie cada endereço IP por 120 segundos, o que estabelece mais de três conexões em 120 segundos. No caso da quarta tentativa de conexão, a solicitação é delegada à SSHATTACKcadeia, responsável por registrar o possível ataque ssh e, por fim, elimina a solicitação.

iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK

3) Veja as entradas de log de possíveis ataques ssh em /var/log/syslog

Dec 27 18:01:58 ubuntu kernel: [  510.007570] Possible SSH attack! IN=eth0 OUT= MAC=01:2c:18:47:43:2d:10:c0:31:4d:11:ac:f8:01 SRC=192.168.203.129 DST=192.168.203.128 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30948 DF PROTO=TCP SPT=53272 DPT=1785 WINDOW=14600 RES=0x00 SYN URGP=0
Meu nome é
fonte
2
Impressionante! mas eu tenho um problema, um cara / bot na França não configurou suas ferramentas de hackers corretamente, então ele continua efetuando login, mesmo que seu tráfego caia. O resultado, meus logs são preenchidos com dados a cada segundo desse cara. Alguma maneira de contornar isso?
Smarties89
2
Para pessoas menos experientes como eu: as linhas do iptables são digitadas no prompt do bash, não inseridas em um arquivo em algum lugar.
Andrew Swift
4

Não há um pacote específico associado ao SSH para configurar isso. No entanto, você pode instalar o CSF, que é o ConfigServer & Firewall.

CSF

Duas alterações de configuração que eu sugiro que seriam feitas no arquivo: / etc / ssh / sshd_config

Limite o número máximo de conexões não autenticadas que o servidor ssh manipulará ao mesmo tempo. Quanto menor, mais difícil é para as crianças de script fazerem tentativas de cracking paralelas e coordenadas com várias conexões. edite sshd_config e altere MaxStartups do padrão de "10" para "3:50:10". Os valores separados por dois pontos dizem ao servidor ssh para "permitir que 3 usuários tentem efetuar login ao mesmo tempo e descartar aleatoriamente e cada vez mais tentativas de conexão entre 3 e o máximo de 10". Nota: isso deve ser aumentado em servidores com um número substancial de usuários ssh válidos que efetuam login.

  • Padrão : MaxStartups 10
  • MaxStartups 3:50:10

Reduza o tempo máximo permitido para efetuar login com êxito antes de desconectar. O padrão de 2 minutos é muito tempo para manter aberta uma tentativa de conexão não autenticada (veja acima); 30 segundos é tempo mais do que suficiente para fazer login:

  • Padrão : LoginGraceTime 2m
  • LoginGraceTime 30
Brendan
fonte
3

Eu uso essas regras do IPTables para isso:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 --rttl  --name SSH -j DROP

Isso permitirá apenas 4 pacotes TCP / SYN para a porta 22 de um endereço IP em 5 minutos. Se fizer mais tentativas, a porta estará fechada até 5 minutos.

timkofu
fonte
O que é necessário editar?
timkofu
Praticamente o mesmo que: -A INPUT -p tcp -m tcp --dport 22 -m limit --limit 48/hour -j ACCEPT.
Alix Axel
Eu fiz esses dois comandos iptables no Debian Jessie, mas ainda consigo ver as tentativas de login SSH a cada 2 segundos a partir do mesmo endereço IP. Alguma ideia?
Alexey Ozerov
1

existe uma opção que você pode colocar no seu arquivo sshd_config para o servidor:

 MaxAuthTries
         Specifies the maximum number of authentication attempts permitted per
         connection.  Once the number of failures reaches half this value, additional 
         failures are logged.  The default is 6.
mdpc
fonte
Útil (especialmente quando combinado com outras sugestões já feitas), mas realmente não resolve o problema por si só, pois é trivial para alguém continuar se conectando novamente.
Kromey