在postfix中设置限制类,阻止接收和发送邮件到外部域。

大家好,在serverfault,

我运行了一个Debian Wheezy邮件服务器,上面有postfix和几个域名。

对于一个域名,我需要一些帐号无法收发电子邮件给外部世界,只能到同一个域名。 其他帐户和域名保持正常。

search网页我发现我可以用postfix限制类来做到这一点,所以我在postfix文档中find了一个指南: http : //www.postfix.org/RESTRICTION_CLASS_README.html

在postfix文档之后,我不能申请我的限制,当我重新启动postfix时,它给了我一个未使用的参数错误,错误如下:

/ usr / sbin / postconf:警告:/etc/postfix/main.cf:未使用的参数:local_only = check_recipient_access散列:/ etc / postfix / local_domains,拒绝

这里是限制类所在的main.cf的一部分:

smtpd_client_restrictions =

permit_mynetworks,

check_client_access哈希:/ etc / postfix / custom_check_client_access,

permit_sasl_authenticated,

reject_sender_login_mismatch,

reject_unknown_client,

reject_unauth_pipelining,

reject_rbl_client sbl.spamhaus.org,

smtpd_recipient_restrictions =

check_sender_access哈希:/ etc / postfix / restricted_senders,

permit_mynetworks,

permit_sasl_authenticated,

reject_unauth_destination,

reject_invalid_hostname,

reject_unauth_pipelining,

reject_non_fqdn_sender,

reject_unknown_sender_domain,

reject_non_fqdn_recipient,

reject_unknown_recipient_domain,

check_recipient_access hash:/ etc / postfix / protected_destinations,

check_policy_service inet:127.0.0.1:10023,

许可证

smtpd_restriction_classes = local_only

local_only = check_recipient_access散列:/ etc / postfix / local_domains,拒绝

smtpd_restriction_classes = insiders_only

insiders_only = check_sender_access哈希:/ etc / postfix / local_domains,拒绝

这是我的/ etc / postfix / protected_destinations文件:

[email protected] insiders_only

这是我的/ etc / postfix / restricted_senders文件:

[email protected] local_only

这是我的/ etc / postfix / local_domains文件:

mydomain.com确定

我无法弄清楚我做错了什么! 我无法看到互联网上的任何地方如何一起做两个限制类,所以smtpd_restriction_classes的语法可能是错误的。 另一件我怀疑是错误的是smtpd_recipient_restrictions的顺序,我不知道在哪里把check_sender_access和check_recipient_access。

如果你们可以帮我设立这个限制课,我会很感激。

谢谢你,乔凡尼

当定义一个新的限制类时,你基本上做的是告诉Postfix一个新的通用限制,可以像内置检查一样使用,例如“permit_mynetworks”。

这样做将需要您一次指定所有限制类,即

smtpd_restriction_classes = local_only, insiders_only insiders_only = ... local_only = ... 

这样做应该消除关于一个未使用参数的postconf警告。

至于在哪里放置限制:默认情况下,参数“smtpd_delay_reject”设置为“yes”,这意味着即使smtpd_(client | sender)_restrictions只会在“rctp to:<…>阶段。 出于这个原因,简单地折叠smtpd_recipient_restrictions中的所有限制一直是一个长期的build议。 在你的情况下,发件人“restrict01 @ …”应该只能发送到内部目的地,你可以使用这样的东西作为一个很好的起点:

 smtpd_recipient_restrictions = reject_non_fqdn_sender reject_non_fqdn_recipient reject_unlisted_sender reject_unlisted_recipient reject_unknown_sender_domain reject_unknown_recipient_domain check_sender_access hash:/etc/postfix/restricted_senders permit_mynetworks allow_sasl_authenticated reject_unauth_destination check_policy_service inet:127.0.0.1:10023 reject_rbl_client zen.spamhaus.org permit_auth_destination reject smtpd_restriction_classes = local_only local_only = check_recipient_access hash:/etc/postfix/local_domains, reject 

另外需要注意的是,在validation客户端证书之前,从访问映射中返回“OK”(可能是一个坏主意)。 因此,文件“/ etc / postfix / local_domains”应该包含一行

 example.com DUNNO 

这将强制受限制的发送者使用SASL进行身份validation,或者在$ mynetworks之内。 正如你所看到的,你可以逃脱一个限制类,并摆脱smtpd_(发件人|客户端)_restrictions。