AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1150411
Accepted
user2690527
user2690527
Asked: 2023-12-26 23:30:50 +0800 CST2023-12-26 23:30:50 +0800 CST 2023-12-26 23:30:50 +0800 CST

Dovecot/Postfix: Como impor uma verificação de sintaxe inicial no nome do usuário antes de consultar o LDAP para autenticação?

  • 772

Eu tenho uma configuração Postfix/Dovecot e uso OpenLDAP como back-end de usuário/senha. Os usuários devem fazer login com seu endereço de e-mail totalmente qualificado como nome de usuário devido à hospedagem virtual e, portanto, a parte do domínio é necessária para autenticação, ou seja, os nomes de usuário têm a aparência <local-part>@<fqdn-domain>.

No entanto, existem ataques constantes que tentam autenticar com nomes de usuário sem parte de domínio. Como isso leva a um DN inválido dentro da consulta LDAP, meus logs recebem muitas mensagens de erro devido a um DN LDAP inválido.

Existe alguma opção de configuração que permita ao Dovecot impor algumas verificações de sintaxe iniciais no nome de usuário fornecido e, se isso falhar, o Dovecot abrevia o processo de autenticação com uma resposta de negação imediata em vez de consultar o servidor LDAP e depois falhar?

A configuração LDAP no Dovecot é

uris = ldapi://%2frun%2fopenldap%2fslapd.sock
auth_bind = yes
auth_bind_userdn = uid=%n,ou=users,o=%d,dc=my-host,dc=my-domain,dc=my-tld
base = ou=users,o=%d,dc=server,dc=my-host,dc=my-domain,dc=my-tld

Como você pode ver, minha configuração LDAP usa os chamados "pontos de junção" para fornecer diferentes sub-ramos no DIT para os diferentes domínios hospedados. (A o=%d-parte no DN.) De acordo com o Manual de configuração do Dovecot - Variáveis ​​do usuário , %destará vazio se o nome de usuário não tiver nenhuma parte do domínio após o @.

Quando um invasor tenta se autenticar com um nome de usuário incompleto, isso leva a mensagens de erro supérfluas em meus registros, como

Dec 26 16:25:54 server dovecot[24946]: auth: Error: ldap(root,187.205.80.184): ldap_bind() failed: Invalid DN syntax

Aqui, um invasor de 187.205.80.184 tentou se autenticar como usuário roote o Dovecot tentou procurar, uid=root,ou=users,o=,dc=my-host,dc=my-domain,dc=my-tldo que obviamente é inválido, porque não há nada depois o=.

ldap
  • 2 2 respostas
  • 47 Views

2 respostas

  • Voted
  1. Best Answer
    Esa Jokinen
    2023-12-27T00:41:58+08:002023-12-27T00:41:58+08:00

    Desde o Dovecot v2.2.33, você pode definir um domínio padrão usando condicionais :

    %{if;%d;eq;;example.com;%d}

    Isso é:

    • ifusar condicionais
    • %d valor 1 para comparar
    • eq operador : igualdade de string
    • valor vazio 2 para a comparação
    • example.comvalor resultante se a condição for true; quando %dé igual a string vazia (padrão)
    • %dvalor resultante se a condição for false; quando %destá definido (não vazio)

    Você pode usá-lo na configuração LDAP em vez de %d:

    uris = ldapi://%2frun%2fopenldap%2fslapd.sock
    auth_bind = yes
    auth_bind_userdn = uid=%n,ou=users,o=%{if;%d;eq;;example.com;%d},dc=example,dc=com
    base = ou=users,o=%{if;%d;eq;;example.com;%d},dc=example,dc=com
    
    • 1
  2. user2690527
    2023-12-27T17:34:05+08:002023-12-27T17:34:05+08:00

    Eu mesmo encontrei outra solução que não requer condicionais em variáveis ​​e, portanto, também funciona para versões mais antigas do Dovecot. No caso específico da %d-variable, as seguintes diretivas de configuração resolvem o problema

    auth_realms = <vhosted-dom-1> <vhosted-dom-2> ... <vhosted-domain-n>
    auth_default_realm = nowhere.notld
    

    A primeira linha é uma lista separada por espaços dos domínios de autenticação suportados. Dependendo do método de autenticação SASL escolhido pelo cliente, isso informa o cliente sobre os domínios de autenticação existentes. É claro que isso não impede que invasores com scripts (burros) ainda usem nomes de usuários sem uma parte de domínio. No entanto, é uma boa ideia ter essa configuração definida corretamente.

    A segunda linha define o domínio padrão (ou domínio no meu caso) que o Dovecot anexa automaticamente, se o cliente não fornecer um. Aqui eu configurei para o nome inventado nowhere.notld. O valor realmente não importa, só deve ser diferente de qualquer domínio real.

    Nota final: claro, isso não impede mensagens de log sobre falhas nas tentativas de autenticação. Mas tudo bem. No entanto, evita erros fatais do LDAP devido a DNs inválidos. Em vez disso, há avisos adequados do Dovevot sobre falhas nas autenticações.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve