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 / 1051911
Accepted
TRW
TRW
Asked: 2021-02-02 01:44:35 +0800 CST2021-02-02 01:44:35 +0800 CST 2021-02-02 01:44:35 +0800 CST

Dovecot Proxy com Lua ou?

  • 772

Eu criei um proxy Dovecot que envia usuários para back-ends específicos com base em seu domínio. O domínio A vai para o servidor A e o domínio B vai para o servidor B, etc. A lista de domínios não é estática, mas não muda muito. Isso funciona totalmente bem com um sql de driver passdb e uma instrução SQL simples como:

password_query = SELECT 
    NULL as password, 
    'y' as nopassword, 
    'y' as proxy, 
    NULL as destuser, 
    'y' as proxy_nopipelining, 
    host, 
    'y' as nodelay, 
    'y' as nologin, 
    'any-cert' as 'starttls' 
  FROM proxy_domain WHERE domain = '%d';

A configuração do dovecot contém:

passdb {
  args = /etc/dovecot/sql.conf
  driver = sql
}

userdb {
  args = static uid=5000 gid=5000 home=/dev/null
  driver = static
}

Meu "problema" não é realmente um problema - mas... Eu preciso instalar e executar um servidor Mysql/MariaDB apenas para este trabalho e acho que deve haver uma maneira mais fácil de resolver o host para um domínio específico. Uma instalação postfix paralela usa um mapa de transporte simples para fazer o mesmo trabalho. Eu não preciso de um servidor SQL para essa pesquisa simples.

Eu pensei sobre o passdb do Dovecot Lua ou o passdb estático , mas não consigo encontrar nenhum exemplo útil para combinar um domínio com um host com Lua ou como retornar todos os parâmetros necessários?

Então eu instalei o pacote debian dovecot-auth-lua.

Eu tentei com:

passdb {
  driver = lua
  args = file=/etc/dovecot/passdb.lua blocking=yes
  default_fields = password=NULL nopassword=y proxy=y destuser=NULL proxy_nopipelining=y nodelay=y nologin=y starttls=any-cert
}

O bloqueio aqui é necessário? É operação somente leitura, ou?

O roteiro Lua:

local database = "/etc/dovecot/backends"

function auth_passdb_lookup(req)
 for line in io.lines(database) do
   for domain, host in string.gmatch(line, "(.+)%s(.+)") do
     if (domain == req.domain) then
       return dovecot.auth.PASSDB_RESULT_OK, "host=" .. host
     end
   end
 end
 return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, ""
end

e, claro, o arquivo de backends com <domain> <host>por linha.

Mas eu tenho um erro no proxy

pam_unix(dovecot:auth): check pass; user unknown
pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=user@domain rhost=<my-ip>
pam(user@domain,ip,<id>): pam_authenticate() failed: Authentication failure (Password mismatch?)

O que isto significa? Não tenho certeza - mas é, porque eu retorno "NULL" em alguns deles. Quando eu removo os dois atributos passworde destusertem o mesmo efeito.

dovecot
  • 1 1 respostas
  • 270 Views

1 respostas

  • Voted
  1. Best Answer
    Richard Hayes
    2021-04-24T12:03:20+08:002021-04-24T12:03:20+08:00

    pam_authenticate significa que está tentando uma pesquisa de usuário do sistema, desative as pesquisas de pam comentando a inclusão de auth-system.conf.ext em 10-auth.conf.

    ps: você conseguiu fazer o LUA funcionar? Estou tentando algo semelhante.

    edit - fiz o meu funcionar adicionando esses campos nos campos de retorno da função de pesquisa passdb (NÃO campos de função de pesquisa userdb):

    return dovecot.auth.PASSDB_RESULT_OK, "password=pass proxy=y host=imap.domain.com [email protected] pass=anotherpass"

    • 0

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