我正在设置一个 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!
限制人们从外部发送到您的服务器的最简单方法是只允许通过 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 地址都会被拒绝。
这不是一篇完整的文章,但它应该能让你走上正轨。
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |