No postfix, como posso permitir que apenas determinados usuários enviem e-mails como qualquer outro usuário?

4

A configuração padrão do meu servidor de e-mail usa a configuração reject_authenticated_sender_login_mismatch de smtpd_sender_restrictions para impedir que um usuário arbitrário A envie e-mail como usuário B (no campo FROM). Percebo que isso é genericamente uma boa política, porque mesmo uma conta de usuário comprometida basicamente abriria meu servidor de e-mail como uma retransmissão de spam.

No entanto, gostaria de permitir que usuários específicos (por meio de uma lista de permissões) enviem e-mails como qualquer usuário. Por exemplo, eu gostaria que meu servidor web se autenticasse como [email protected] , mas pudesse enviar e-mails em nome de [email protected] , [email protected] , etc.

Todos os outros usuários autenticados devem enviar apenas e-mails como eles mesmos.

Acho que estou no caminho certo com o arquivo /etc/postfix/sender-login-maps.cf , que atualmente contém:

dbpath=/home/user-data/mail/users.sqlite
query = SELECT permitted_senders
FROM (
    SELECT permitted_senders, 0 AS priority
    FROM aliases
    WHERE source='%s'
    AND permitted_senders IS NULL
    UNION
    SELECT email as permitted_senders, 2 AS priority
    FROM users
    WHERE email='%s'
    )
ORDER BY priority LIMIT 1;

Não sei como modificar isso para realizar o que eu quero.

    
por alexw 31.12.2015 / 18:00

1 resposta

1

Descobri como modificar a consulta em /etc/postfix/sender-login-maps.cf para permitir que qualquer usuário com privilégios "admin" (conforme definido na tabela users.sqlite ) enviasse e-mails como qualquer outro usuário no mesmo domínio:

SELECT permitted_senders
FROM (
    SELECT permitted_senders
    FROM (
        SELECT permitted_senders, 0 AS priority
        FROM aliases
        WHERE source='%s'
        AND permitted_senders IS NULL
        UNION
        SELECT email as permitted_senders, 2 AS priority
        FROM users
        WHERE email='%s'
        )
    ORDER BY priority LIMIT 1
    )
UNION
SELECT email as permitted_senders
FROM users
WHERE privileges="admin"
AND SUBSTR(email, INSTR(email, '@') + 1) = SUBSTR('%s', INSTR('%s', '@') + 1);

Então, basicamente, se [email protected] for definido como administrador (o que você pode fazer no banco de dados do usuário ou pela interface de configuração da conta), [email protected] poderá enviar e-mails como [email protected] , [email protected] , etc. Isso parece uma política razoável para mim.

    
por 03.01.2016 / 18:15

Tags