postfix 发信错误

原贴:http://coolerfeng.blog.51cto.com/133059/48317

postfix 发信错误


2007-10-30 15:26:27
 标签: postfix reject 

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://coolerfeng.blog.51cto.com/133059/48317
postfix发信reject
今天迁移了mail服务器,对新服务器进行了一段时间监控,发现日志中不断出现如下错误。
日志如下:
Oct 30 10:14:11 mail2 postfix/smtpd[10467]: NOQUEUE: reject: RCPT from unknown[10.10.8.2]:
553 5.7.1 < service@XXX.com.cn>: Sender address rejected: not owned by user
proto=ESMTP helo=<app101xxx.com.cn>
 
根据提示判断是app101这台服务器上配置的jspMail自动发信出现了问题
查看app上关于jspmail的配置发现mail from的邮件地址和smtpuser的用户不一致
,即用A用户验证,然后伪装成B用户发信。
如果用客户端发信,可以看到如下图
反复试验后发现注释postfix的main.cf
如下行后可以解决此问题
smtpd_sender_restrictions =
#       reject_sender_login_mismatch,
#       reject_authenticated_sender_login_mismatch,
#       reject_unauthenticated_sender_login_mismatch

不过总觉得不太好
参考 http://www.5dmail.net/html/2007-3-14/2007314195613.htm
得知是 postfix中限制认证用户使用的sender address 功能,默认其实都是注释掉的,晕
如果需要此功能,需要修改/etc/postfix/main.cf
smtpd_sender_restrictions =
        reject_sender_login_mismatch,
        reject_authenticated_sender_login_mismatch,
        reject_unauthenticated_sender_login_mismatch
smtpd_sender_login_maps = hash:/etc/postfix/sender_login_maps,
        mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
        mysql:/etc/postfix/mysql_virtual_alias_maps.cf
然后创建/etc/postfix/sender_login_maps
把需要验证的用户加进去
这里我们把mail from和smtpuser不一致的加进去即可。
格式为:A地址 A用户
这里为了让 service@xxx.com.cn可以被多个用户公用,用户之间逗号隔开
service@xxx.com.cn payment@xxx.com.cn, service@xxx.com.cn
其他用户可以不用添加,因为可以通过mysql来自动匹配。
#postmap sender_login_maps
#postfix reload
 
继续观察日志,发现类似错误不再出现。
 
后来又想到另一个解决办法,更简单
修改postfix的main.cf
mynetworks = 127.0.0.1, 10.10.8.0/24, 10.10.9.0/24
smtpd_sender_restrictions =
        permit_mynetworks,
        reject_sender_login_mismatch,
        reject_authenticated_sender_login_mismatch,
        reject_unauthenticated_sender_login_mismatch
smtpd_sender_login_maps =
#      hash:/etc/postfix/sender_login_maps,
        mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
        mysql:/etc/postfix/mysql_virtual_alias_maps.cf
 
这样内网的机器直接发送,不需要验证了。再观察一下日志,果然如此
Oct 30 16:52:14 mail2 postfix/smtpd[11110]: connect from unknown[10.10.8.6]
Oct 30 16:52:14 mail2 postfix/smtpd[11110]: 7A0B65E4433: client=unknown[10.10.8.6], sasl_method=LOGIN, sasl_username=payment@xxx.com.cn
Oct 30 16:52:14 mail2 postfix/cleanup[10889]: 7A0B65E4433: hold: header Received: from app105.chinabank.com.cn (unknown [10.10.8.6])??by mail.chinabank.com.cn (Postfix - By chinabank.com.cn) with ESMTP id 7A0B65E4433??for < guohui@cndns.com>; Tue, 30 Oct 2007 16:52:14 +080 from unknown[10.10.8.6]; from=< service@xxx.com.cn> to=< guohui@cndns.com> proto=ESMTP helo=<app105.xxx.com.cn>

本文出自 “风吹云动” 博客,请务必保留此出处http://coolerfeng.blog.51cto.com/133059/48317

 
<think>好的,用户现在问的是如何配置Postfix发送邮件。之前他们问过如何在不配置个人邮箱的情况下使用SMTP,我推荐了第三方服务和本地测试服务器。现在用户可能已经决定使用自己的服务器,需要具体的Postfix配置步骤。 首先,我需要确认用户的使用场景。他们可能是在搭建自己的邮件服务器,用于应用发送邮件,比如网站的通知邮件。也可能是个人想学习邮件服务器的配置。由于Postfix是一个常见的MTA(邮件传输代理),配置起来有一定复杂性,需要分步骤讲解。 用户可能的需求包括:正确安装Postfix,配置基本的发送功能,确保邮件能被外部接收,避免进入垃圾箱,以及可能的DNS设置。他们可能对SPF、DKIM这些术语不太熟悉,所以需要简要说明这些的重要性。 接下来要整理配置步骤。首先安装Postfix,不同系统命令不同,需要区分Ubuntu和CentOS。然后主配置文件的修改,比如设置主机名、网络接口、邮箱大小限制等。DNS设置是关键,特别是MX记录、A记录和PTR反向解析,否则邮件可能被拒收。SPF和DKIM的记录也要指导用户添加,提高邮件的可信度。 然后测试部分,安装mailutils或mailx,发送测试邮件,检查日志。常见问题如端口25被封,可能需要联系ISP或改用端口587。安全配置方面,比如SASL认证和SSL证书,可能用户需要进一步的安全保障,但如果是内部使用,可能暂时不需要,但应该提到。 另外,用户可能遇到的问题包括配置错误导致邮件无法发送,或者邮件被标记为垃圾邮件。需要提醒检查日志,逐步排查。还要注意云服务商可能限制25端口,需要用户确认或更换端口。 最后,确保回答结构清晰,步骤明确,代码块正确使用格式。可能需要警告用户自行搭建邮件服务器的维护成本,比如维护信誉度、反垃圾邮件措施等,可能推荐结合第三方服务,但用户的问题明确是配置Postfix,所以重点还是在配置本身。</think>以下是配置Postfix邮件服务器的详细步骤: $$sudo\ apt-get\ install\ postfix\ mailutils \quad \text{(Ubuntu)}$$ $$sudo\ yum\ install\ postfix\ mailx \quad \text{(CentOS)}$$ --- ### **1. 基础配置** 修改主配置文件 */etc/postfix/main.cf*: ```properties # 设置邮件域名 myhostname = mail.yourdomain.com mydomain = yourdomain.com # 允许发送的网段(根据实际情况调整) mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24 # 限制邮件大小(单位:字节) message_size_limit = 104857600 # 启用IPv4监听 inet_protocols = ipv4 ``` --- ### **2. DNS配置** | 记录类型 | 值 | 作用 | |----------|------------------------|----------------------| | MX | mail.yourdomain.com | 邮件服务器指向 | | A | mail.yourdomain.com → [服务器IP] | 解析邮件服务器地址 | | PTR | [服务器IP] → mail.yourdomain.com | 反向解析(需联系ISP) | --- ### **3. 防垃圾邮件配置** ```properties # 添加SPF策略检查 smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination # 启用DKIM签名(需配合OpenDKIM) milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891 ``` --- ### **4. 测试与验证** ```bash # 发送测试邮件 echo "Test content" | mail -s "Test Subject" recipient@example.com # 查看发送日志 tail -f /var/log/mail.log # Ubuntu tail -f /var/log/maillog # CentOS ``` --- ### **常见问题处理** 1. **端口25被封** $$telnet\ yourdomain.com\ 25$$ 若不通,需联系ISP解封或改用端口587(需配置SASL认证) 2. **邮件进入垃圾箱** - 添加SPF记录: ```v=spf1 ip4:[你的服务器IP] ~all``` - 配置DKIM签名(推荐使用OpenDKIM) - 配置DMARC策略 --- ### **安全强化建议** ```bash # 启用SASL认证(用于外部发信) sudo postconf -e 'smtpd_sasl_type = dovecot' sudo postconf -e 'smtpd_sasl_path = private/auth' # 配置SSL证书 sudo postconf -e 'smtpd_use_tls=yes' sudo postconf -e 'smtpd_tls_cert_file=/etc/letsencrypt/live/yourdomain.com/fullchain.pem' sudo postconf -e 'smtpd_tls_key_file=/etc/letsencrypt/live/yourdomain.com/privkey.pem' ``` > **注意**:自建邮件服务器需维护IP信誉度,建议云服务器选择固定IP并提前在[Spamhaus](https://www.spamhaus.org/)等平台检查IP黑名单状态。商业场景建议结合Amazon SES/SendGrid等专业服务使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值