balthild 发表于 2015-10-07 19:55

如何禁止postfix在未经过sasl认证的情况下发信

本帖最后由 balthild 于 2015-10-07 21:07 编辑

环境:Debian 7.9 wheezy, Postfix 2.9,Cyrus-SASL,

目的是搭建一个纯虚拟用户的邮件服务器,而且仅允许可以登录的虚拟用户收发信。

在telnet 连接25端口后,EHLO 后输出的有 250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5 这样一行,SASL认证进测试可以正常登陆

但是,即使没有登录(没有AUTH LOGIN这一步),也可以执行 MAIL FROM: , RCPT TO: ,并且发信

这是我的配置文件中相关的内容:smtpd_sender_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    warn_if_reject,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    reject_unauth_pipelining,
    permit

smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_invalid_hostname,
    reject_non_fqdn_hostname,
    reject_unknown_sender_domain,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unauth_pipelining,
    reject_unauth_destination,
    permit

smtpd_sasl_security_options = noanonymous相关的教程都说这样配置能启用SASL认证发信,却无一提到如何禁止匿名发信。并且,无论baidu、google,都无法寻找到相关的配置方法

我还搜索了Postfix官方的配置文件描述文档中所有和anonymous有关的选项,都没找到明确禁止不登录直接发信的配置选项

所以来发帖问一下,如何配置才能使得postfix不允许(包括且不仅限于telnet中)未登录的发信行为?

woxizishen 发表于 2015-10-10 08:00

{:qq18:}配置正确sasl 就可以防止匿名发信了和你上面一堆问题。

自己这个没配置正确而已,你最后加了一个permit,我佩服你
smtpd_recipient_restrictions

balthild 发表于 2015-10-10 21:39

回复 2# woxizishen


    原来是这样啊,感谢版主的回复

    那 smtpd_sender_restrictions 最后的 permit 需不需要也去掉?

balthild 发表于 2015-10-12 14:01

回复 2# woxizishen


    我尝试了一下您说的,去掉了permit,但是还是可以不登录而直接服务器内部互相发邮件,只是向外发送被禁止了。

    我查了一下,发现收信是在不登录的情况下连接服务器自身的SMTP类内部发信,但是我尝试了其他邮箱的SMTP,比如QQ邮箱,发现它是没有登录无法操作的。请问,如果想要达到这种效果,需要如何配置?

laozhu168 发表于 2015-10-12 15:21


smtpd_sasl_security_options = noanonymous   这一句就是禁止采取匿名登陆方式的,这个问题可能出在Cyrus-SASL,你可以参考一下这个帖子:
http://bbs.chinaunix.net/forum.php?mod=redirect&goto=findpost&ptid=816661&pid=5676301&fromuid=24035263

woxizishen 发表于 2015-10-12 18:03

回复 4# balthild

permit_mynetworks

你登陆到邮件服务器的那个电脑网段是不是允许的? 自己看下mynetworks

balthild 发表于 2015-10-12 21:24

本帖最后由 balthild 于 2015-10-12 21:29 编辑

回复 6# woxizishen


    不是,我的 mynetwork = 127.0.0.1,而我是在家里直接 telnet SMTP的

balthild 发表于 2015-10-12 21:28

回复 5# laozhu168


    感觉不太可能是库或者程序自身的问题。我先后在Debian 7.9 wheezy 上 apt-get安装 和 CentOS 6.5上 yum 安装,测试都是这样的问题。不过没有尝试过编译安装。

woxizishen 发表于 2015-10-13 07:59

回复 8# balthild

不想多说,你的sasl验证就是没配置正确,配置正确的你在家里绝对不可能直接登录到服务器发邮件,一定得先经过sasl验证,才允许你发邮件,否则你的邮件服务器配置的就是OPEN RELAY.

1.要想postfix支持sasl
1.实现的smtp认证功能需要在编译postfix时编译进sasl支持(先确认你安装的postfix版本是否支持sasl      postconf –a)

2.并在main.cf中将smtpd_sasl_auth_enable设置为yes启动sasl认证

balthild 发表于 2015-10-13 13:13

回复 9# woxizishen


两次在不同的服务器上配置,用的 postfix 都是 apt-get/yum 软件源的版本,而不是手动编译的

postconf -a 输出:
cyrus
dovecot


也确定 smtpd_sasl_auth_enable = yes

现在的问题是,telnet连接SMTP后,不经登陆可以向 同一服务器内的 邮箱账户发送邮件, 但确实无法向外部邮箱发送,说明这个邮件服务器不是 open relay.

比如我配置的邮箱域名是 sora.hk(以虚拟域方式配置),存在邮箱账户 admin@ sora.hk,于是我连接上SMTP后可以任意向 admin@ sora.hk 发送邮件,而且 mail from: 可以任意填写以伪造发件人。我的目的现在是想要阻止这种情况。
页: [1] 2
查看完整版本: 如何禁止postfix在未经过sasl认证的情况下发信