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

Postfix - ограничить общение внутри домена

Я настраиваю облачный сервер postfix и хочу ограничить общение внутри домена. То есть пользователи могут общаться только с другими пользователями, которые владеют адресом в домене электронной почты - никаких входящих или исходящих сообщений в другие домены (например, Gmail, Hotmail и т. Д.):

YES: joe@domain.com <----> jane@domain.com
NO:  joe@domain.com <----> jane@gmail.com

Какой простой способ сделать это? Я использую postfix / courier. Спасибо.


ОБНОВЛЕНИЕ - как это сделать:

В /etc/postfix/main.cf:

# first rule makes sure users cannot sent to people outside the domain
# (check_recipient_access is the one you want)
smtpd_recipient_restrictions =
 check_recipient_access regexp:/etc/postfix/recipient-access, 
 permit_sasl_authenticated,
 permit_mynetworks,
 reject_unauth_destination,
 permit


# block sends from external users
# (who cannot be authenticated by the system)
smtpd_sender_restrictions =
 permit_sasl_authenticated,
 permit_mynetworks,
 reject_authenticated_sender_login_mismatch, 
 reject

# use mysql to find authenticated addresses
smtpd_sender_login_maps = mysql:/etc/postfix/mysql-sender-login-maps.cf
# (could also use pcre or some other method)
#smtpd_sender_login_maps = pcre:/etc/postfix/sender-login-maps.pcre

В /etc/postfix/mysql-sender-login-maps.cf:

user = dbuser
password = dbpassword
hosts = 127.0.0.1
dbname = dbname
# this will depend on your db/table structure
query = SELECT email FROM users WHERE email='%s' and enabled=1;

Тест с:

$ postmap -q user@domain.com mysql:/etc/postfix/mysql-sender-login-maps.cf

Должен вернуть user@domain.com если он существует в таблице пользователей, или ничего, если его нет.

Если вы решили использовать pcre (apt-get install postfix-pcre в Ubuntu), затем в /etc/postfix/sender-login-maps.pcre:

/^(.*@domain.com)$/   ${1}

Тест с:

$ postmap -q user@domain.com pcre:/etc/postfix/sender-login-maps.pcre

Должен вернуть user@domain.com если домен совпадает, или ничего, если нет.


Наконец, в /etc/postfix/recipient-access:

!/@domain.com/ REJECT

Спасибо, @NickW!

Самый простой способ ограничить отправку людей извне на ваш сервер - разрешить отправлять только людей, прошедших аутентификацию SASL, а затем определить smtpd_sender_restrictions так как reject_sender_login_mismatch, reject который будет разрешать только аутентифицированных пользователей SASL, и только если их адрес FROM совпадает с их именем для входа. Создать SQL-запрос, который выбирает электронную почту пользователя в качестве авторизованного адреса, довольно просто.

Вы бы настроили smtpd_recipient_restrictions так как check_recipient_access regexp:/etc/postfix/recipient-access, внутри recipient_access у тебя было бы что-то похожее на !/@domain.com/ REJECT Это означает, что любой адрес TO / CC / BCC, который не является вашим доменом, будет отклонен.

Это не полная запись, но она должна направить вас на верный путь.