Я настраиваю облачный сервер 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, который не является вашим доменом, будет отклонен.
Это не полная запись, но она должна направить вас на верный путь.