Postfix - 限制域内的通信

sa1*_*125 2 postfix

我正在设置一个 postfix 云服务器,我想限制域内的通信。也就是说,用户只能与在电子邮件域中拥有地址的其他用户通信 - 不能传入或传出到其他域(如 Gmail、Hotmail 等)的邮件:

YES: joe@domain.com <----> jane@domain.com
NO:  joe@domain.com <----> jane@gmail.com
Run Code Online (Sandbox Code Playgroud)

有什么简单的方法可以做到这一点?我正在使用 postfix/快递。谢谢。


更新 - 如何做到这一点:

/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
Run Code Online (Sandbox Code Playgroud)

/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;
Run Code Online (Sandbox Code Playgroud)

测试:

$ postmap -q user@domain.com mysql:/etc/postfix/mysql-sender-login-maps.cf
Run Code Online (Sandbox Code Playgroud)

user@domain.com如果它存在于用户表中,则应返回,否则不返回任何内容。

如果您决定使用 pcre(apt-get install postfix-pcre在 Ubuntu 中),那么在/etc/postfix/sender-login-maps.pcre

/^(.*@domain.com)$/   ${1}
Run Code Online (Sandbox Code Playgroud)

测试:

$ postmap -q user@domain.com pcre:/etc/postfix/sender-login-maps.pcre
Run Code Online (Sandbox Code Playgroud)

如果user@domain.com域匹配,则应返回 ,如果不匹配则不返回。


最后,在/etc/postfix/recipient-access

!/@domain.com/ REJECT
Run Code Online (Sandbox Code Playgroud)

谢谢@NickW!

Nic*_*ckW 5

限制人们从外部发送到您的服务器的最简单方法是只允许通过 SASL 身份验证的人发送,然后定义smtpd_sender_restrictionsreject_sender_login_mismatch, reject只允许通过 SASL 身份验证的用户,并且仅当他们的 FROM 地址与他们的登录名匹配时。创建一个选择用户电子邮件作为授权地址的 SQL 查询非常简单。

你设置smtpd_recipient_restrictionscheck_recipient_access regexp:/etc/postfix/recipient-access,在里面recipient_access你会有类似的东西,!/@domain.com/ REJECT这意味着不是你的域的任何 TO/CC/BCC 地址都会被拒绝。

这不是一篇完整的文章,但它应该能让你走上正轨。