Como usar o PAM para limitar tentativas de login com falha por IP?

5

Estou trabalhando em um processo que endurece a segurança do meu servidor contra as tentativas diárias de hackers que surgem no momento em que você anexa um servidor a um IP e dá a ele um nome de domínio. Eu chego em qualquer lugar de 1 a 8 tentativas de força bruta diariamente para acessar o SSH como raiz ou apenas força bruta tentando nomes diferentes e isso está em um servidor sem reputação pública (não está executando grandes sites, etc). Devido à maneira como tenho meu servidor SSH configurado, tenho certeza que essas tentativas também falharão, mas eu realmente não gosto de deixar as pessoas tentarem.

Eu também configurei a limitação da taxa de conexão para os serviços mais confidenciais, incluindo o SSH.

O que estou fazendo no momento:

Eu posso ver no meu auth.log que o PAM obtém o endereço IP remoto dos que tentam fazer o login e eu Atualmente, estou usando um script que analisa periodicamente essas tentativas malsucedidas e adiciona um bloco de IP ao firewall.

O que eu gostaria de fazer:

O que eu quero fazer é tornar este processo de proibição de IP muito mais rápido para responder. Isso é, em vez de esperar que o script de pesquisa o capte, eu quero que um módulo PAM conte sucessivas tentativas malsucedidas de um IP (não um serviço ou usuário) e execute alguma ação, como:

  • recusar todas as tentativas de login futuras desse IP
  • dispara um comando que adicionará uma regra ao firewall para banir completamente o IP

A pergunta:

Já existe um bom módulo PAM que pode tomar nota da autenticação com falha de IPs ou eu preciso escrever o meu próprio?

    
por couling 04.06.2012 / 16:26

3 respostas

6

O que eu recomendo é escalonar suas soluções de segurança. A segurança é melhor implementada em Camadas , e ter uma solução significa que você terá um Ponto único de falha .

O Fail2Ban, como afirmado acima por Jeff Ferland, é uma boa solução para o primeiro passo. Ele irá monitorar seus arquivos de log em busca de sinais de um ataque de força bruta, e pode ser configurado para ouvir geralmente contra o PAM.

Mas o que acontece se esse arquivo de log for perdido? permissões mudam? se o destino do arquivo de log mudar? se o fail2ban caiu? se uma atualização muda a maneira como você pretende que as coisas funcionem? o padrão de expressão regular deve ser atualizado? o que acontece se a unidade ou partição de destino do arquivo de log ficar cheia? O fail2ban se torna inútil.

  • Introducing libpam_shield

Existe um módulo PAM chamado pam_shield . isso não é apenas mais eficiente (operando diretamente na camada Login), ele usa um banco de dados de acesso rápido, que pode persistir durante as reinicializações.

usa menos memória e não requer um serviço em execução que pode falhar. pam_shield também pode ser configurado para trabalhar com sua tabela de roteamento, bem como com o IPTables.

Assim como o Fail2Ban, você dá um período de tempo para considerar o host para uma proibição. você fornece o máximo de tentativas que o host remoto pode fazer, e o período de tempo para bani-las.

Para que tudo funcione bem com o Fail2Ban, configure-os para 1,5 vezes o que está configurado no Fail2Ban. você também pode tornar o período de Banimento muito mais longo. Dessa forma, o fail2ban irá banir o usuário da primeira vez ... e se o banimento expirar, e ele for pego novamente, ele irá bani-lo por muito mais tempo na segunda vez.

Aqui está um link para a página de manual dos arquivos de configuração: shield.conf

  • Introducing pam_tally2

Você também pode considerar pam_tally2 para bloquear uma conta de usuário específica.

se uma conta de usuário estiver sendo especificamente segmentada , você precisará bloquear essa conta de usuário e impedir o login ou até que o ataque seja resolvido.

isso é útil especialmente em um servidor compartilhado, quando o ataque é originário de "dentro". quando não é possível bloquear o host local (por exemplo, 127.0.0.1).

Espero que isso ajude! Eu percebo que o post original é um pouco antigo agora, mas é muito importante implementar segurança em camadas ... e cobrir todas as suas bases! NÃO existe um pacote que você possa "apenas instalar" para tornar seu sistema seguro. nem mesmo Fail2Ban .

    
por 29.06.2014 / 00:03
3

Embora o PAM possa ser útil para logins de limitação de taxa e configuração de bloqueios ( como bloquear a conta de usuário do Linux após certas tentativas malsucedidas ), a melhor ferramenta para lidar com várias tentativas do mesmo IP é bloqueá-lo do tráfego de rede por ter várias tentativas sucessivas.

Então, para isso, a resposta não é um módulo PAM. Em vez disso, use fail2ban .

    
por 04.06.2012 / 16:32
3

Existe um módulo PAM que permite manter uma lista negra, chamada Lista negra do PAM Auto (pam_abl ). Até recentemente não tinha sido atualizado há algum tempo, mas tem um novo mantenedor que tem trabalhado ativamente nele novamente.

O módulo sempre fez o primeiro passo naquilo que você gostaria de fazer, isto é, ele proibirá futuras tentativas de login de um IP que falhou e foi banido. Essas tentativas passam pelo firewall e voltam ao PAM novamente.

Apesar de ainda não existir uma maneira integrada de interagir com o firewall a partir do próprio módulo, ele agora pode executar comandos arbitrários que também permitem a segunda etapa.

Eu corro um comando para adicionar um host banido em um ipset que eu configurei no meu firewall.

É assim que eu ligo de banir do PAM para o firewall:

Em /etc/pam.d/sshd :

auth       include      system-remote-login
auth       required     pam_abl.so config=/etc/security/pam_abl.conf

No arquivo pam_abl.conf :

host_clr_cmd=ipset del blacklist %h; logger clear host %h
host_blk_cmd=ipset add blacklist %h; logger block host %h

Que, imediatamente, adicione um host que falhe em que os critérios sejam bloqueados, adicionados a uma lista de ipset que eu bloqueei no iptables. Você também pode soltar o host diretamente no iptables assim:

host_blk_cmd=iptables --append INPUT --source %h --jump DROP; logger block host %h

Existem mais opções de configuração e a configuração do firewall, mas essa é a parte que impede que IPs banidos passem pelo firewall novamente.

    
por 13.03.2013 / 21:42