Назад | Перейти на главную страницу

В postfix, как я могу разрешить только определенным пользователям отправлять почту как любой другой пользователь?

В конфигурации моего почтового сервера по умолчанию используется reject_authenticated_sender_login_mismatch Установка из smtpd_sender_restrictions для предотвращения отправки произвольным пользователем A электронной почты от имени пользователя B (в поле FROM). Я понимаю, что в целом это хорошая политика, потому что даже одна взломанная учетная запись пользователя может открыть мой почтовый сервер как ретранслятор спама.

Однако я хотел бы разрешить конкретный пользователей (через белый список) для отправки почты как любой пользователь. Например, я хотел бы, чтобы мой веб-сервер аутентифицировал себя как x@example.com но затем можно будет отправлять электронную почту от имени user1@example.com, user2@example.com, и т.д.

Все остальные аутентифицированные пользователи должны иметь возможность отправлять электронную почту только от себя.

Я думаю, что нахожусь на правильном пути с /etc/postfix/sender-login-maps.cf файл, который в настоящее время содержит:

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;

Я не уверен, как изменить это, чтобы добиться того, что я хочу.

Я понял, как изменить запрос в /etc/postfix/sender-login-maps.cf чтобы разрешить любому пользователю с правами администратора (как определено в users.sqlite table) для отправки электронной почты как любой другой пользователь в том же домене:

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);

В общем, если x@example.com установлен как администратор (что вы можете сделать в базе данных пользователей или через интерфейс конфигурации вашей учетной записи), затем x@example.com будет разрешено отправлять почту как user1@example.com, user2@example.comи т.д. Мне это кажется разумной политикой.