==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.0
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):MySQL
- 使用的 Linux/BSD 发行版名称及版本号:centos6.5
- 与您的问题相关的日志信息:
====
张工,您好!
我现在用roundcube版本1.0.4存在一个高危的安全漏洞,我想请问下我能直接单独将roundcube升级到iredmail 0.9.6中roundcube -1.2.3。如果可以,我拿roundcube官网源码替换后有什么要注意的吗?

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

Sender: <jcx@domain.com>

The following addresses had delivery problems

<user@abc.net> : Reply from mail.abc.com[1.2.3.4]:
        >>> RCPT TO:<user@abc.net>
        <<< 504 5.5.2 <sendmail>: Helo command rejected: need fully-qualified hostname

张工,有一个客户发邮件(domain.com)给我的邮箱(abc.com),但是投递失败提示退信并报了上面的错误。
1.首先我查了下论坛里的信息,说明是用户验证失败导致。
2.其次我也查了些资料,原本是希望通过在我的邮件服务器中添加白名单想规避这个问题,
   smtpd_helo_restrictions = check_helo_access hash:/etc/postfix/Mail_helos
  但是不能解决这个问题

在此基础上,希望张工帮我解答下下面几个问题

1.导致该问题发生,是因为客户邮件服务器配置问题还是我的邮件服务器配置问题?问题大概出在哪里?
2.如果我想要通过白名单的方式来规避这个问题,我该怎么调整我的配置?

这个imap uid存在哪里的,我应该是没有动过这块东西的

张工,我已经完成域名的切换了,但是有个问题想请教下,在客户端切换域名(账号密码什么的都不用改)的时候,有些用户重复收取之前保留在邮件服务器的邮件。我想问下,客户端邮件和服务器邮件判定同步是什么机制,什么情况下才会导致这种重复收取。

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.0
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):MySQL
- 使用的 Linux/BSD 发行版名称及版本号:CentOS6.5
- 与您的问题相关的日志信息:
====
张工,我的邮件服务器有一个域名domain1.com,并且做了domain2.com alias domain1.com。我现在想实现一个功能,使外部的用户发邮件给域名domain2.com时系统能够自动回复邮件给用户。不知道张工有什么思路,怎么能够捕捉到这些邮件让系统自动回复。

我的一个设想,是不是新增一个类似iredapd的服务分析每个邮件的收件人而实现这个功能。但不确定能否可行,还是有其他的更好的实现方式,请张工指教。

张工,我想请问下通过修改数据库的方式更新域名后关于dkim的几个问题
1.dkim设置需要更新吗(amavisd中有关于dkim的配置)?
2.如果dkim需要更新,需要重新生成吗?生成后如何让系统应用新的dkim?
3.如果不需要更新,那有什么要注意的吗?

你的意思是vmail.alias_domain配置对登录是无效的,用户仍然需要使用原来的域名domain1.com作为登录名是吗

或者换一种思路,还是通过vmail.alias_domain配置为domain2.com解析至domain1.com。
若后期需要取消domain1.com的使用,直接在公网上取消domain1.com的MX记录,只保留domain2.com的MX记录这种方式是否可行

具体需要改哪些内容,不知道有没有文档可以参考或者张工可以指点下。

张工,如果我现在是想要用域名domain2.com替换域名domain1.com。你是建议我重新搭一套iredmail(我现在使用的是0.9.0版本,搭建的时候是升级到最新版本吗?)将邮件数据迁移过去还是在现有的iredmail环境中修改配置文件和数据库实现。

我这边没有找到web上配置alias domain的地方,是不是需要手动在vmail.alias_domain表中手动插入一条domain2.com解析到domain1.com域名的记录即可。

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.0
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):MySQL
- 使用的 Linux/BSD 发行版名称及版本号:CentOS 6.5
- 与您的问题相关的日志信息:无
====
张工,你好!
我现在有这样的一个需求,不知道该怎么处理。公司新申请的一个域名,现在邮件系统需要启用新的域名,但是老的域名也需要继续使用。
例:邮件系统中用户aaa有个aaa@domain1.com的账号,现在需要添加一个新的域名domain2.com
1.现在希望用户无论发邮件给aaa@domain1.com或aaa@domain2.com这个账号时,用户aaa都可以收到其他用户发送的邮件。
2.随着时间的推移,domain1.com的域名逐渐淘汰,设置后用户只能通过aaa@domain2.com账号发送邮件给aaa,而aaa@domain1.com账号失效。
请问张工有没有好的设置方法或者可参考的文档。

问题已解决,谢谢!

已经找到分数无法提高的原因,是由于amavisd配置中设置成了不检查自己的域名。
但是测试后还是发现下面的脚本有问题,header :value "ge" :comparator "i;ascii-numeric" "X-Spam-Score" "1"这个条件仍然不正确,还是不太明白如何写判断条件判断分数
if allof (
    not header :matches "X-Spam-Score" "-*",
    header :value "ge" :comparator "i;ascii-numeric" "X-Spam-Score" "1")
{
    fileinto "Junk";
    stop;
}

普通发邮件时的打分项只有下面这些
X-Spam-Status: No, score=-2.9 tagged_above=-999 required=6.2
    tests=[ALL_TRUSTED=-1, BAYES_00=-1.9] autolearn=ham

我在local.cf中增加了这样一条配置
score ALL_TRUSTED 6.0000
但是发邮件时分值仍然没有提高

这是我参考了http://wiki2.dovecot.org/Pigeonhole/Sieve/Examples写的脚本
require ["fileinto","comparator-i;ascii-numeric","variables","relational"];

if allof (
    not header :matches "X-Spam-Score" "-*",
    header :value "ge" :comparator "i;ascii-numeric" "X-Spam-Score" "1")
{
    fileinto "Junk";
    stop;
}
前面我调成了分数小于0时进入junk邮箱不生效,不确定是不是因为sieve不支持负数的比较,我现在想调成大于1的比较,但是不知道该如何设置spamassasin才能将打分提高。

张工,我想通过配置全局参数将X-Spam-Score分数大于10的邮件投递到垃圾邮箱,在/var/vmail/sieve/dovecot.sieve配置以下脚本,但是没有效果,不知道是不是我的代码写的有问题,该如何定位。
dovecot.conf中sieve_before = /var/vmail/sieve/dovecot.sieve参数已启用
下面是我做了个分数小于0的测试,但是不成功。
require "fileinto";
require "comparator-i;ascii-numeric";
if header :value "lt" :comparator "i;ascii-numeric" "X-Spam-Score" "0"
{
    fileinto "Junk";
    stop;
}
或者
require "fileinto";
if header :value "lt" "X-Spam-Score" "0"
{
    fileinto "Junk";
    stop;
}

反垃圾邮件阈值问题

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

张工,请教下几个关于垃圾邮件阈值设置的问题

下面是 amavisd.conf配置文件中目前的几个阈值设置
$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 4.2;  # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.9;  # triggers spam evasive actions (e.g. blocks mail)
$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent
$sa_crediblefrom_dsn_cutoff_level = 18; # likewise, but for a likely valid From

1.amavisd中有上面4个阈值,其中sa_kill_level_deflt和sa_dsn_cutoff_level的阈值认为没有生效,我理解分数大于6.9时邮件应该被阻塞,大于10时邮件发送失败,但是用户仍然能收到分数大于6.9以上的垃圾邮件(用户能收到的其中一个原因是我注释了sieve_before = /var/vmail/sieve/dovecot.sieve),不知道是不是这两个阈值没有生效?

2.我现在想实现5以上的分数,打上[SPAM]标记,10以上邮件直接投递到服务器junk邮箱,初步设想是下面这么配置:
$sa_tag_level_deflt  = 5.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 10;  # add 'spam detected' headers at that level
然后启用sieve_before的投递规则
但是对于$sa_kill_level_deflt和$sa_dsn_cutoff_level这些参数该怎么配置,会有什么影响吗?

3.如果我想新增一个阈值,比如说7.5-10的分数投递到一个邮箱中该如何配置?是dovecot匹配规则中就能实现分数范围判断后投递还是说需要在amavisd配置7.5-10分数区间内新增另外一个标签,再由dovecot去判断这个标签来分类?

请张工依次帮我解答这三个问题,谢谢!

张工:首先您提供的这份文档我在提问前就已经看过,但是我仍有以下几个疑问。
1.我理解建立反垃圾邮件白名单而使系统不对白名单的邮件域名扫描是通过使用iredapd建立是否正确?
2.根据我上面发的帖子,我对配置白名单方法的理解是否正确?
3.您提供文档的白名单管理是通过wblist_admin.py脚本实现,但是这个脚本是在iredapd1.7以后的版本,我用的是iredapd1.6的版本,1.6的版本该如何管理?是否要升级到1.7版本才能真正意义上的使用白名单?
3.1我现在使用python amavisd_wblist.py --list命令查看时会报以下错误:
Traceback (most recent call last):
  File "amavisd_wblist.py", line 41, in <module>
    from libs import SMTP_ACTIONS, sqllist, utils
ImportError: No module named libs
3.2如果需要升级iredapd来解决白名单管理的问题,那升级iredapd有哪些注意事项?
请张工帮忙解惑,谢谢!

==== 必填信息。没有填写将不予回复 ====
- iRedMail 版本号:0.9.0,iredapd:1.6.0
- 使用哪个数据库存储用户帐号(OpenLDAP,MySQL,PostgreSQL):MySQL
- 使用的 Linux/BSD 发行版名称及版本号:CentOS6.5
- 与您的问题相关的日志信息:
====
张工:因为现在反垃圾邮件spamassassin会将一些正常邮件标记为垃圾邮件(打上[SPAM]标签),我想通过增加反垃圾邮件白名单,使spamassassin不对白名单里的域进行反垃圾邮件扫描。我想请问下这个要怎么做。

是否是通过启用amavisd_wblist.py插件来实现,如果是,我查看了下脚本中写的说明文档,但是对配置上还是有些疑惑:
# How to use this plugin:
#
# *) Enable `@lookup_sql_dsn` in Amavisd config file.
#
# *) Set Amavisd lookup SQL database related parameters (amavisd_db_*) in
#    iRedAPD config file `settings.py`, and enable this plugin.
#
# *) Enable iRedAPD in Postfix `smtpd_recipient_restrictions`.
#
# *) Enable this plugin in iRedAPD config file (/opt/iredapd/settings.py).
# *) Restart both iRedAPD and Postfix services.

1.Enable `@lookup_sql_dsn` in Amavisd config file.

# @lookup_sql_dsn =
#   ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'user1', 'passwd1'],
#     ['DBI:mysql:database=mail;host=host2', 'username2', 'password2'],
#     ["DBI:SQLite:dbname=$MYHOME/sql/mail_prefs.sqlite", '', ''] );
# @storage_sql_dsn = @lookup_sql_dsn;  # none, same, or separate database
# @storage_redis_dsn = ( {server=>'127.0.0.1:6379', db_id=>1} );
# $redis_logging_key = 'amavis-log';
# $redis_logging_queue_size_limit = 300000;  # about 250 MB / 100000

...

@lookup_sql_dsn = @storage_sql_dsn;
我在我的amavisd.conf文件中找到两处关于lookup_sql_dsn参数的内容,是要把以下配置前的注释都去掉吗?但是数据库、账号和密码应该对应填什么?是否是填写第二步中对应的amavisd_db_name、amavisd_db_user、amavisd_db_password
# @lookup_sql_dsn =
#   ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'user1', 'passwd1'],
#     ['DBI:mysql:database=mail;host=host2', 'username2', 'password2'],
#     ["DBI:SQLite:dbname=$MYHOME/sql/mail_prefs.sqlite", '', ''] );

2.Set Amavisd lookup SQL database related parameters (amavisd_db_*) in iRedAPD config file `settings.py`, and enable this plugin.

plugins = ["reject_null_sender", "amavisd_message_size_limit", "amavisd_wblist", "sql_alias_access_policy"]

...

# For Amavisd policy lookup
amavisd_db_server = "127.0.0.1"
amavisd_db_port = "3306"
amavisd_db_name = "amavisd"
amavisd_db_user = "amavisd"
amavisd_db_password = "xxxx"

以上是settings.py文件中的默认参数,是否还需要做其他操作?

3.Enable iRedAPD in Postfix `smtpd_recipient_restrictions`.

smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/MYRules/Mail_recipients,reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unlisted_recipient, check_policy_service inet:127.0.0.1:7777, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

以上是main.cf文件中smtpd_recipient_restrictions参数的配置,是否需要调整

4.Enable this plugin in iRedAPD config file (/opt/iredapd/settings.py).

这个是否是对应着第二步的plugins = ["reject_null_sender", "amavisd_message_size_limit", "amavisd_wblist", "sql_alias_access_policy"],还是有其他什么需要配置。

5.Restart both iRedAPD and Postfix services.

配置完后我要如何新增并管理我的白名单?

叶嘉文 写道:

这个是一天的发件量
messages

  33856   received
  68043   delivered
    149   forwarded
    215   deferred  (602  deferrals)
    599   bounced
   1020   rejected (1%)
      0   reject warnings
      0   held
      0   discarded (0%)

目前部分垃圾邮件已经标识出来,并打上SPAM的标签。但是垃圾邮件并没有进入垃圾邮箱,是因为现在的垃圾邮件机制就是打上标签而不进入垃圾邮箱吗?

这是垃圾邮件是标记,但并没有进入垃圾邮箱
X-Spam-Flag: YES
X-Spam-Score: 7.488
X-Spam-Level: *******
X-Spam-Status: Yes, score=7.488 tagged_above=2 required=6.2
    tests=[BAYES_99=3.5, BAYES_999=0.2, HTML_FONT_FACE_BAD=0.981,
    HTML_MESSAGE=0.001, NO_RDNS_DOTCOM_HELO=0.823,
    RCVD_FAKE_HELO_DOTCOM=1.189, RDNS_NONE=0.793, URIBL_BLOCKED=0.001]
    autolearn=no

这个是一天的发件量
messages

  33856   received
  68043   delivered
    149   forwarded
    215   deferred  (602  deferrals)
    599   bounced
   1020   rejected (1%)
      0   reject warnings
      0   held
      0   discarded (0%)

目前部分垃圾邮件已经标识出来,并打上SPAM的标签。但是垃圾邮件并没有进入垃圾邮箱,是因为现在的垃圾邮件机制就是打上标签而不进入垃圾邮箱吗?

张工,我已经根据你给的参考文档里调整了。调整后队列里堵了很多其他域发来的邮件(大部分应该是垃圾邮件),但这也同时影响了部分自己域发的邮件堵在队列里。我想了解下这个邮件在队列里的处理原理,因为我前面是做了自己域发的邮件不做过滤的策略,队列中是不是会优先处理自己域发的邮件,还是根据max_server数量并行按照队列顺序一个个处理。

发送邮件是用(587端口+TLS),服务器本身有30G的内存
下面是配置文件中的部分配置信息
master.cf
# 20161028 Fix incorrect setting which treats external sender as internal user
submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o content_filter=smtp-amavis:[127.0.0.1]:10026

# Use dovecot deliver program as LDA.
dovecot unix    -       n       n       -       -      pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${domain} -m ${extension}

smtp-amavis unix -  -   -   -   4  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20
   
amavisd.conf

...

# COMMONLY ADJUSTED SETTINGS:
# 20161012
@bypass_virus_checks_maps = (1);  # controls running of anti-virus code
# @bypass_spam_checks_maps  = (1);  # controls running of anti-spam code
# $bypass_decode_parts = 1;         # controls running of decoders&dearchivers

$max_servers = 2;            # num of pre-forked children (2..30 is common), -m
$daemon_user  = 'amavis';    # (no default;  customary: vscan or amavis), -u
$daemon_group = 'amavis';    # (no default;  customary: vscan or amavis), -g

...

$policy_bank{'ORIGINATING'} = {  # mail supposedly originating from our users
  originating => 1,  # declare that mail was submitted by our smtp client
  allow_disclaimers => 1,  # enables disclaimer insertion if available
  # notify administrator of locally originating malware
  virus_admin_maps => ["virusalert\@$mydomain"],
  spam_admin_maps  => ["virusalert\@$mydomain"],
  warnbadhsender   => 1,
  # forward to a smtpd service providing DKIM signing service
  # 20161028 Fix incorrect setting which treats external sender as internal user
  # forward_method => 'smtp:[127.0.0.1]:10027',

  # force MTA conversion to 7-bit (e.g. before DKIM signing)
  smtpd_discard_ehlo_keywords => ['8BITMIME'],

  # 20161012
  # don't perform spam/virus/header check.
  bypass_spam_checks_maps => [1],
  bypass_virus_checks_maps => [1],
  bypass_header_checks_maps => [1],

  bypass_banned_checks_maps => [1],  # allow sending any file names and types
  terminate_dsn_on_notify_success => 0,  # don't remove NOTIFY=SUCCESS option
};

...

关于阻塞分析具体需要怎么做,还请张工指教。

启用反垃圾邮件功能,过滤垃圾邮件,但因之前反垃圾反病毒功能影响邮件发件效率,因此希望能高效实现反垃圾功能,具体要求如下:
1.启用反垃圾邮件功能,无需启用反病毒功能;
==》已做调整:
# 取消病毒扫描功能,去掉以下参数前的注释,以下参数是amavisd.conf中的全局变量
@bypass_virus_checks_maps = (1);  # controls running of anti-virus code
2.限制仅扫描外部邮件;
==》已做调整:
a).参考文章http://www.iredmail.com/docs/disable.spam.virus.scanning.for.outgoing.mails.html以达到仅扫描来自外部邮件的功能。
b).参考文章http://www.iredmail.com/docs/upgrade.iredmail.0.9.2-0.9.3.html#amavisd-fix-incorrect-setting-which-treats-external-sender-as-internal-修复amavisd不区分外部用户bug。
做了以上变更后,邮件服务器发件效率仍然很低,很多发送请求均阻塞在邮件队列中,过很久才能完成发送。现在又关闭了邮件反垃圾邮件功能,希望寻求更高效的反垃圾解决方案。