Como posso limitar tentativas de login sasl2 / pam_mysql com falha?

2

Eu tenho a configuração do Postfix servindo vários domínios virtuais em uma caixa do CentOS - e tudo funciona conforme o esperado. O login do cliente é autenticado por sasl2 (saslauthd) e pam_mysql. E quando uma tentativa de login falhar, o saslauthd reporta "saslauthd: pam_mysql - SELECT não retornou nenhum resultado."

No entanto, de vez em quando recebo ataques de dicionário e, embora esses ataques nunca tenham sido bem-sucedidos, gostaria de limitar as tentativas de sasl / pam_mysql.

Note que não quero limitar o número de sessões nem conexões do cliente. O objetivo é limitar o máximo de tentativas de login por e-mail.

Algumas, mas não limitadas a fontes que eu tentei

  • www.postfix.org/SASL_README.html#saslauthd_pam
  • www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html
  • Limitando logins SSH com falha
  • www.lehman.cuny.edu/cgi-bin/man-cgi?pam_sm_authenticate+3
por msantos 31.07.2013 / 14:27

1 resposta

1

O módulo PAM pam_tally2 (8) pode ser usado para negar acesso a uma conta após muitas tentativas de login com falha. o que parece exatamente o que você quer fazer. Se sua configuração atual estiver sendo autenticada por meio de PAM , isso deve funcionar bem.

Este artigo tem alguns exemplos de configuração .

Você mencionou que consultou o PAM SAG , que documentos pam_tally2 , mas você não disse por que isso não ajudou. Se você já consultou este módulo e decidiu que ele não atende às suas necessidades, ajudaria se você atualizasse sua pergunta para indicar por que as várias outras soluções não funcionaram.

Veja um exemplo usando os programas Cyrus SASL2 sasl2-sample-server e sasl2-sample-client .

Em /etc/pam.d/sample tenho:

auth        required    pam_tally2.so deny=3 unlock_time=300
auth        sufficient    pam_mysql.so config_file=/etc/pam_mysql.conf
auth        required      pam_deny.so

account required pam_mysql.so config_file=/etc/pam_mysql.conf

E /etc/pam_mysql.conf é assim:

users.database=pamuser
users.table=pamuser
users.db_user=pamuser
users.db_passwd=pamuser
users.user_column=user
users.password_column=password
users.password_crypt=plain
verbose=1

Eu tenho um banco de dados pamuser com uma tabela pamuser que se parece com isso:

mysql> select * from pamuser;
+------+----------+
| user | password |
+------+----------+
| lars | lars     |
+------+----------+

Em /etc/sasl2/sample.conf tenho:

pwcheck_method: saslauthd
mech_list: plain

Eu começo saslauthd assim:

saslauthd -a pam

Eu inicio sasl2-sample-server :

sasl2-sample-server -p 9999 -m plain -s sample

E eu tento autenticar usando sasl2-sample-client , primeiro usando a senha correta:

$ sasl2-sample-client -p 9999 localhost
receiving capability list... recv: {5}
plain
plain
please enter an authentication id: lars
please enter an authorization id: lars
Password: 
send: {5}
PLAIN
send: {1}
Y
send: {14}
lars[0]lars[0]lars
successful authentication
closing connection

Ótimo, isso funcionou. Agora vou digitar a senha errada três vezes ...

... tudo bem, foi rápido. Agora pam_tally2 mostra as falhas:

# pam_tally2
Login           Failures Latest failure     From
lars                3    07/31/13 12:17:00  unknown

E se eu fizer login usando a senha correta novamente, serei rejeitado:

$ sasl2-sample-client -p 9999 localhost
.
.
.
lars[0]lars[0]lars
authentication failed
closing connection

pam_tally2 registra o seguinte:

Jul 31 12:18:01 madhatter saslauthd[14122]: pam_tally2(sample:auth): user lars (1000) tally 4, deny 3

E o comando pam_tally2 mostra um aumento na contagem de falhas:

# pam_tally2
Login           Failures Latest failure     From
lars                4    07/31/13 12:18:01  unknown

E aí está, um exemplo completo de integração de pam_tally2 e pam_mysql . Se eu esperasse cinco minutos ou executasse pam_tally2 -u lars -r , seria possível fazer login novamente.

    
por 31.07.2013 / 15:19