Postfix + Dovecot com backend do MySQL: senhas md5-hashed e autenticação CRAM-MD5

2

Minha pergunta

What are the risks of switching from MD5 to CRAM-MD5 passwords in the database, especially considering the following, and how to approach that for an existing installation (provided I know the plain text passwords)?

Com (mudando para) CRAM-MD5,

  1. para criptografia / verificação, o PostfixAdmin precisa reverter para uma ferramenta externa ( doveadm pw ) na criação do usuário e para alterações de senha , para que a senha em texto claro apareça, pelo menos em breve, na lista de processos 1
  2. Estou possivelmente introduzindo uma nova dependência (a mesma ferramenta)
  3. Incerto se outras ferramentas (de terceiros) podem lidar com isso

O item 2 pode não ser um grande negócio, já que eu não planejo substituir o Dovecot (e mesmo que ele tenha documentado os caminhos de migração IMHO). O item 3 não é grande coisa ainda (como não tenho conhecimento de tais ferramentas). Nos bastidores, há também o SASL, que, o IIRC, faz essa parte de seu trabalho com a ajuda do Dovecot novamente (por exemplo, smtpd_sasl_type=dovecot na configuração do Postfix). Mas pode ser que eu tenha perdido alguma coisa - seja mais problema ou outra opção.

Alguma dica? O que você recomendaria (além de uma configuração completamente diferente)?

TL; DR (fundo)

Estou no meio de uma configuração de um novo servidor de e-mail, usando Dovecot, Postfix, PostfixAdmin, Sieve, alguns componentes adicionais - todos conectados com o MySQL como backend (seguindo apenas este tutorial em alemão ). Eu tenho tudo instalado e funcionando até agora, mas, em seguida, notei que oferece apenas PLAIN e LOGIN para autenticação IMAP. Não é grande coisa para conexões locais (por exemplo, o web mail Roundcube na mesma máquina) e outras "conexões criptografadas" (HTTPS / IMAPS / POP3S / SMTPS) - mas temo que alguns usuários usará conexões não criptografadas, que eu não quero desabilitar completamente (há situações em que elas podem ser necessárias).

Então eu habilitei o CRAM-MD5 e o DIGEST-MD5 no Dovecot - o que obviamente não funcionou: o PostfixAdmin armazena as senhas no banco de dados usando seu procedimento MD5 interno, e assim o Dovecot não pode combiná-las (veja meu resposta aqui para detalhes). O que basicamente me deixa com 3 opções, uma delas nem sendo assim:

  • deixando como está (com os riscos descritos acima)
  • mudando para senhas de texto simples no banco de dados (ai, não, não vai fazer)
  • mudando para senhas CRAM-MD5 no banco de dados

Atualizar

A partir da investigação dos "participantes", aqui está uma comparação de possibilidades:

                    PwdStore MD5         PwdStore CRAM-DM5
Webmail (Roundcube)

Client/Server       HTTPS only (HTTP requests would be upgraded, so PLAIN = OK)
IMAP                PLAIN                PLAIN / CRAM-MD5 (internal)²
SMTP                PLAIN                PLAIN / CRAM-MD5 (internal)²

Native Clients (connecting to Postfix/Dovecot)

IMAP³               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
SMTP³               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
POP3³               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
IMAPS               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
SMTPS               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5
POP3S               PLAIN / LOGIN        PLAIN / LOGIN / CRAM-MD5

PostfixAdmin
Create/Update       MD5 (internal)       CRAM-MD5 (via dovecotadm)⁴

1: Acabei de verificar as fontes e encontrei o seguinte em postfixadmin/functions.inc.php na linha 928:
Use proc_open call to avoid safe_mode problems and to prevent showing plain password in process table
Portanto, esse contra-argumento parece cair.

2: roundcube/program/lib/Roundcube/rcube_imap_generic.php linha 90ff, em function authenticate()

3: PLAIN / LOGIN normalmente desabilitado em conexões não criptografadas

4: Poderia ser reescrito usando o código do Roundcube , já que ambos são escritos em PHP - mas PostfixAdmin

    
por Izzy 11.08.2015 / 21:31

1 resposta

3

Como eu não tenho respostas, eu me experimentei e finalmente fiz a mudança - que correu bem. A vantagem é, como declarado inicialmente, ter pelo menos CRAM-MD5 disponível para autenticação em transporte não criptografado, se o transporte criptografado não estiver disponível (sim, isso acontece) - além de tornar a migração do servidor antigo mais suave para aqueles que já usam CRAM-MD5 lá. Além disso, eu não vi efeitos colaterais ainda - embora possa demorar um pouco para que eles apareçam:)

Portanto, para os interessados, veja os passos a seguir:

  • Dovecot: altere default_pass_scheme de MD5-CRYPT para CRAM-MD5 no seu /etc/dovecot/dovecot-mysql.conf (ou o arquivo correspondente que você está usando) e, em seguida, adicione cram-md5 a auth_mechanisms in /etc/dovecot/dovecot.conf
  • Postfix: No meu caso, o Postfix usa o Dovecot para autenticação via SASL ( smtpd_sasl_type=dovecot ) - então nada a fazer aqui
  • PostfixAdmin:
    • Primeiro, faça o login no PostfixAdmin WebIF e mantenha-se logado - ou você não conseguirá fazer isso depois que a configuração for alterada:)
    • as alterações em config.inc.php : $CONF['encrypt'] = 'md5crypt'; devem ser alteradas para $CONF['encrypt'] = 'dovecot:CRAM-MD5'; . Verifique também $CONF['dovecotpw'] = "/usr/sbin/doveadm pw"; - por ex. no Debian Wheezy, doveadm reside em /usr/bin e, portanto, requer que essa configuração seja ajustada
    • Agora vá para o PostfixAdmin WebIf (onde você ainda está logado) e atualize as senhas do usuário: navegue até "Virtual lists", role até "Mailboxes", clique no link "edit" para cada caixa de correio e lá armazene a "nova senha" (isso significa que você precisa saber suas senhas - ou definir "algumas" senhas e fazer com que sejam atualizadas posteriormente. Não há como "converter" a senha existente, até onde eu saiba). Repita o mesmo para os administradores por meio da "Lista de administradores" - ou eles / você não conseguirão fazer login novamente
  • Reinicie os serviços de email. Basicamente, deve ser suficiente reiniciar o Dovecot e, talvez, o Postfix.

Concluído. Agora você pode verificar se tudo ainda está funcionando. No meu caso foi: Roundcube ainda era capaz de auth PLAIN - e um cliente remoto agora era capaz de usar o CRAM-MD5. Caso resolvido, para mim.

    
por 14.08.2015 / 15:36