4,151

(11 篇回复,发表在 iRedMail 技术支持)

没有集成 ExtMan。

ExtMail 的访问地址是:http://你的IP/extmail/

4,152

(11 篇回复,发表在 iRedMail 技术支持)

麻烦贴一下在 /var/log/httpd/error_log 里的错误信息可以么?以帮助我们分析问题所在。

我这里测试是没问题的,只是 Quota 的显示略有问题。

访问以下地址即可访问到:
http://你的 IP/cgi-bin/mailgraph.cgi

注:文档链接/补丁文件只有加入 iredmailsupport@ 的管理员才能访问。

访问以下页面了解如何加入 iredmailsupport@ 技术支持邮件列表:
http://www.iredmail.org/wiki/index.php/ … ss_Stories

Hi, all.

简述:

    PostfixAdmin 的登录页面存在安全隐患。

问题描述:

    PostfixAdmin 的登录页面(login.php)在登录失败时,会明确显示是用户名
    不存在,或用户名正确但密码错误。

    用户名错误时的提示信息(languages/cn.lang):
        - '登录失败, 请确认你是使用你的邮件地址登录!'

    用户名正确,但密码错误时的提示信息(languages/cn.lang):
        - '密码错误!'

    这样的错误提示信息,虽然对使用者友好,但却极易让破坏者据此猜测邮件
    系统的用户账号(包括管理员和普通用户)。

受影响的 iRedMail 版本:

    * 所有版本

修正方法:

    这里以 PostfixAdmin-2.2.1.1 版本为例。

    * 备份!备份!备份!

      将已有的 PostfixAdmin 目录整个备份。例如复制到 /root/ 目录下做一个
      备份:

        # cp -rfp /var/www/postfixadmin-2.2.1.1/ /root/postfixadmin-2.2.1.1.2008.10.28

    * 从文件下载区下载补丁(假设补丁下载到 /root 目录下):

        - 补丁文件名:
          postfixadmin-login-security-issue.patch

        - 下载区地址:
          http://groups.google.com/group/iredmailsupport/files/

    * 进入 PostfixAdmin 的根目录,在 Shell 命令行下打补丁:

        # cd /var/www/postfixadmin-2.2.1.1/
        # patch -p0 < /root/postfixadmin-login-security-issue.patch

      命令的输出为以下内容则表示补丁已经成功打上:

        patching file login.php
        patching file users/login.php
        patching file languages/en.lang
        patching file languages/cn.lang

备注:

    补丁中不包含繁体中文的翻译,所以繁体中文的用户除了打补丁以外,还需要
    手工编辑 PostfixAdmin 目录下的 'languages/tw.lang' 文件,在文件的中间
    加入以下翻译条目即可(将英文句子翻译为繁体中文即可):

    $PALANG['pLogin_incorrect'] = '<span class="error_msg">Username or password in not correct!</span>';

给大家带来不便,敬请谅解。

更多讨论请参考 PostfixAdmin-devel@ 邮件列表:
https://sourceforge.net/mailarchive/forum.php?thread_name=49057E07.3060806%40gmail.com&forum_name=postfixadmin-devel

-- 
Best regards.

- Open Source Mail Server Solution for RHEL/CentOS 5.x:
  http://code.google.com/p/iredmail/

目前 iRedMail-0.3.x/iRedOS-0.1.1 里集成的 ExtMail 是最新的 1.0.5 版本。

4,157

(41 篇回复,发表在 iRedMail 技术支持)

已经触发,并且发送了邮件出去了。

在上面贴的 sieve.log 的日志里,倒数第二行就是:

deliver(www@a.cn): Oct 28 19:30:49 Info: msgid=: saved mail to INBOX

msgid 为空,是因为它不经过 Postfix,直接有 deliver 程序生成。

最直接的证明就是用户已经收到 quota_warning 发送的邮件通知了。

4,158

(41 篇回复,发表在 iRedMail 技术支持)

OK.

在 dovecot.conf 中启用 'mail_debug = yes' 参数,并设置 quota_warning 如下(为了方便测试,我设置了多个 quota_warning):

plugin {
    quota_warning = storage=95%% /usr/bin/quota-warning.sh 95
    quota_warning2 = storage=80%% /usr/bin/quota-warning.sh 80
    quota_warning3 = storage=60%% /usr/bin/quota-warning.sh 60
    quota_warning4 = storage=40%% /usr/bin/quota-warning.sh 40
}

重启启动 dovecot 服务,立刻可以在屏幕上看到以下内容:

IQuota warning: bytes=9961472 (95%) messages=0 (0%) command=/usr/bin/quota-warning.sh 95
IQuota warning: bytes=8388608 (80%) messages=0 (0%) command=/usr/bin/quota-warning.sh 80
IQuota warning: bytes=6291456 (60%) messages=0 (0%) command=/usr/bin/quota-warning.sh 60
IQuota warning: bytes=4194304 (40%) messages=0 (0%) command=/usr/bin/quota-warning.sh 40

这时候往用户的邮箱里发邮件,达到任意一个之后,sieve 的投递日志里会出现类似的记录:

deliver(www@a.cn): Oct 28 19:30:49 Info: Loading modules from directory: /usr/lib64/dovecot/lda
deliver(www@a.cn): Oct 28 19:30:49 Info: Module loaded: /usr/lib64/dovecot/lda/lib10_quota_plugin.so
deliver(www@a.cn): Oct 28 19:30:49 Info: Module loaded: /usr/lib64/dovecot/lda/lib20_expire_plugin.so
deliver(www@a.cn): Oct 28 19:30:49 Info: Module loaded: /usr/lib64/dovecot/lda/lib90_cmusieve_plugin.so
deliver(www@a.cn): Oct 28 19:30:49 Info: auth input: www@a.cn
deliver(www@a.cn): Oct 28 19:30:49 Info: auth input: home=/home/vmail
deliver(www@a.cn): Oct 28 19:30:49 Info: auth input: sieve_dir=/var/www/sieve/a.cn/www/
deliver(www@a.cn): Oct 28 19:30:49 Info: auth input: quota_rule=*:bytes=10485760
deliver(www@a.cn): Oct 28 19:30:49 Info: auth input: maildir=a.cn/www/
deliver(www@a.cn): Oct 28 19:30:49 Info: Quota root: name= backend=maildir args=
deliver(www@a.cn): Oct 28 19:30:49 Info: Quota rule: root= mailbox=* bytes=10485760 (0%) messages=0 (0%)
deliver(www@a.cn): Oct 28 19:30:49 Info: Quota warning: bytes=9961472 (95%) messages=0 (0%) command=/usr/bin/quota-warning.sh 95
deliver(www@a.cn): Oct 28 19:30:49 Info: Quota warning: bytes=8388608 (80%) messages=0 (0%) command=/usr/bin/quota-warning.sh 80
deliver(www@a.cn): Oct 28 19:30:49 Info: Quota warning: bytes=6291456 (60%) messages=0 (0%) command=/usr/bin/quota-warning.sh 60
deliver(www@a.cn): Oct 28 19:30:49 Info: Quota warning: bytes=4194304 (40%) messages=0 (0%) command=/usr/bin/quota-warning.sh 40
deliver(www@a.cn): Oct 28 19:30:49 Info: maildir: data=//home/vmail/a.cn/www/:INDEX=//home/vmail/a.cn/www/
deliver(www@a.cn): Oct 28 19:30:49 Info: maildir++: root=//home/vmail/a.cn/www, index=, control=, inbox=//home/vmail/a.cn/www
deliver(www@a.cn): Oct 28 19:30:49 Info: cmusieve: /var/www/sieve/a.cn/www/.dovecot.sieve doesn't exist
deliver(www@a.cn): Oct 28 19:30:49 Info: cmusieve: Using sieve path: /home/vmail/.dovecot.sieve
deliver(www@a.cn): Oct 28 19:30:49 Info: cmusieve: Script not found: /home/vmail/.dovecot.sieve
deliver(www@a.cn): Oct 28 19:30:49 Info: msgid=: saved mail to INBOX
deliver(www@a.cn): Oct 28 19:30:49 Info: msgid=<92147a1047ac6d99f9bc0cdb5467421b@127.0.0.1>: saved mail to INBOX

在 /var/log/dovecot.log 里的日志如下:

dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Disconnected: Logged out bytes=365/1806
dovecot: Oct 28 19:31:08 Info: imap-login: Login: user=<www@a.cn>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Loading modules from directory: /usr/lib64/dovecot/imap
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Module loaded: /usr/lib64/dovecot/imap/lib10_quota_plugin.so
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Module loaded: /usr/lib64/dovecot/imap/lib11_imap_quota_plugin.so
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Module loaded: /usr/lib64/dovecot/imap/lib20_expire_plugin.so
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Module loaded: /usr/lib64/dovecot/imap/lib20_zlib_plugin.so
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Effective uid=2000, gid=2000, home=/home/vmail
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Quota root: name= backend=maildir args=
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Quota rule: root= mailbox=* bytes=10485760 (0%) messages=0 (0%)
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Quota warning: bytes=9961472 (95%) messages=0 (0%) command=/usr/bin/quota-warning.sh 95
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Quota warning: bytes=8388608 (80%) messages=0 (0%) command=/usr/bin/quota-warning.sh 80
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Quota warning: bytes=6291456 (60%) messages=0 (0%) command=/usr/bin/quota-warning.sh 60
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Quota warning: bytes=4194304 (40%) messages=0 (0%) command=/usr/bin/quota-warning.sh 40
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): maildir: data=//home/vmail/a.cn/www/:INDEX=//home/vmail/a.cn/www/
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): maildir++: root=//home/vmail/a.cn/www, index=, control=, inbox=//home/vmail/a.cn/www
dovecot: Oct 28 19:31:08 Info: IMAP(www@a.cn): Disconnected: Logged out bytes=23/104

4,159

(41 篇回复,发表在 iRedMail 技术支持)

原帖由 sxqw 于 2008-10-28 17:41 发表 http://www.iredmail.org/bbs/images/common/back.gif
过滤部分还要测试

能否贴一段 deliver 过程的debug日志,看看与我的有什么不同

谢谢


什么情况下的 debug?
在 Dovecot-1.1.5 里大幅度改进了对 error log 的提示信息,所以 1.1.5 里对发生的问题应该更容易定位才对。

4,160

(41 篇回复,发表在 iRedMail 技术支持)

原帖由 sxqw 于 2008-10-28 17:21 发表 http://www.iredmail.org/bbs/images/common/back.gif
使用dovecot目前还有 filter rule 方面的问题,以及fliter rule中调用外部程序的问题


如果是在服务器上进行全局范围的过滤,可以直接用 sieve 过滤语言来实现。如果要调用外部程序,则需要重新编译 Dovecot,加入 xexec 这个 plugin。

如果要让用户自定义 filter rule,则需要 managesieve 服务。客户端则通过使用支持 sieve 过滤的 webmail 程序,自定义 filter rule。
Dovecot 团队有 patch 可以实现提供 managesieve 服务。iRedMail 中以 pysieved 服务提供 managesieve 程序,并为 SquirrelMail 提供了 avelsieve 插件。

Roundcube 也有用于 managesieve 服务的插件,但是只能用在 roundcube-0.2-beta 及以上的版本。

非常感谢你的指导,在 svn 上已经看到了,只是参照这些设置 quota_warning  依然没反应。。。。。。   实在是有点郁闷


恐怕我帮不上忙了,我的测试很顺利 :L

4,161

(41 篇回复,发表在 iRedMail 技术支持)

你可以试试最新的 svn 版本,我已经集成了 Expire 插件和 quota_warning 的设置。

4,162

(41 篇回复,发表在 iRedMail 技术支持)

原帖由 sxqw 于 2008-10-28 16:05 发表 http://www.iredmail.org/bbs/images/common/back.gif
经过两天的观察基本明白 expire plugins  的触发条件
要用 roundcubemail 或 squirrelmail 等 imap 协议的 webmail
在这类webmail中删除了邮件才会触发 expire plugins 向 DB或SQL中写入数据
而使用 Extmail 这类直接读目录的webmail不会触发 expire plugins
不过还没看到执行 expire 操作


汗一个,原来你是用 ExtMail 来操作邮件的。因为 ExtMail 直接操作文件系统上的文件,和 Dovecot 一点关系都扯不上,所以 Dovecot 的东西当然不会被触发。

expire plugin 可以作用于 imap, pop3 协议,也可以用于 deliver 这个 Local Deliver Agent 程序,所以只要你使用 Dovecot 提供的 POP3, POP3S, IMAP, IMAPS,就会触发 expire 跟踪。

4,163

(41 篇回复,发表在 iRedMail 技术支持)

真的是怪事了。。。

我看你的配置似乎没问题,但是不知道为何你那里测试无法成功。 :L

4,164

(41 篇回复,发表在 iRedMail 技术支持)

你的 Dovecot 是 1.1.x 吧?

我按照官方文档操作的,具体的路径等信息有一些调整,但不影响。
配置正常工作。

4,165

(41 篇回复,发表在 iRedMail 技术支持)

quota_warning 设置在 dovecot.conf 里不生效?我这里是可以的。

建议打开 'mail_debug = yes' 调试参数,并且注意跟踪日志信息。

另外,可以试着这样:
1) 在 dovecot.conf 里将 quota_warning 脚本执行一个不存在的文件,例如:/tmp/non-exist.sh。
2)测试 quota;

如果超过 quota,正常情况下 dovecot 会去执行 /tmp/non-exist.sh,而因为这个文件不存在,它会在日志里报错,说执行脚本的退出状态值为 147(247还是147我给忘了)。
有这样的信息,表示 quota_warning 设置是生效的。这时候再用实际的脚本去测试。

4,166

(41 篇回复,发表在 iRedMail 技术支持)

关键是有清理过期数据吗?如删除配置文件中 Trash 邮箱里的数据


我刚启用这个插件,还得再等等才能告诉你结果。

另外,你测试  quota_warning  生效吗?


quota_warning 是生效的。

该补丁不是用于 iRedMail 环境的,纯技术探讨。

4,168

(41 篇回复,发表在 iRedMail 技术支持)

今天测试了一下,很顺利:

1)官方文档里的配置完全没问题;
2)按照官方文档,启用 expire 插件,并在 dovecot.conf 中设置 'mail_debug = yes',
   重新启动 dovecot 服务,可以看到调试信息里显示已经加载了 expire 插件。
3)执行 expire-tool 时没有不加 '--test' 参数,在 dict 里指定的目录下会生成 bdb 格式
   的数据库文件。
   注:即使不启用 expire plugin,这个命令也会生成这些文件。


SQL 存储的还没有测试,暂时也不打算测试。

PS:iRedMail-0.3.2(开发版本)中已经集成了对 expire 插件的支持。

4,169

(4 篇回复,发表在 iRedMail 技术支持)

有任何问题可以发到这里来咨询和讨论,希望 iRedMail 能帮助系统管理员快速部署功能强大的邮件服务器。:lol

4,170

(41 篇回复,发表在 iRedMail 技术支持)

我稍后测试,一会儿给你回复。不好意思

4,171

(41 篇回复,发表在 iRedMail 技术支持)

你的 Dovecot 版本是多少?是否方便将完整的/部分 dovecot.conf 贴上来呢?

注意:该补丁不是用于 iRedMail 环境的,纯技术探讨。

--- login.php   2007-12-29 20:32:33.000000000 -0500
+++ login.php.bak       2008-10-27 14:46:22.000000000 -0400
@@ -67,18 +67,23 @@
     {
         $row = db_array ($result['result']);
         $password = pacrypt ($fPassword, $row['password']);
-        $result = db_query (&quot;SELECT * FROM $table_admin WHERE username='$fUsername' AND password='$password' AND active='1'&quot;);
-        if ($result['rows'] != 1)
+
+        //$result = db_query (&quot;SELECT * FROM $table_admin WHERE username='$fUsername' AND password='$password' AND active='1'&quot;);
+        //if ($result['rows'] != 1)
+        if ($password != $row['password'])
         {
             $error = 1;
-            $tMessage = $PALANG['pLogin_password_incorrect'];
+            //$tMessage = $PALANG['pLogin_password_incorrect'];
+            $tMessage = $PALANG['pLogin_incorrect'];
             $tUsername = $fUsername;
         }
     }
     else
     {
         $error = 1;
+        //$tMessage = $PALANG['pLogin_username_incorrect'];
         $tMessage = $PALANG['pLogin_username_incorrect'];
+        $tMessage = $PALANG['pLogin_incorrect'];
     }
 
     if ($error != 1)

--- languages/en.lang   2007-12-29 05:42:09.000000000 +0800
+++ languages/en.lang.new       2008-10-27 14:45:01.000000000 +0800
@@ -24,6 +24,7 @@
 $PALANG['pLogin_username'] = 'Login (email)';
 $PALANG['pLogin_password'] = 'Password';
 $PALANG['pLogin_button'] = 'Login';
+$PALANG['pLogin_incorrect'] = '&lt;span class=&quot;error_msg&quot;&gt;Username or password is not correct!&lt;/span&gt;';
 $PALANG['pLogin_username_incorrect'] = '&lt;span class=&quot;error_msg&quot;&gt;Your login is not correct. Make sure that you login with your email address!&lt;/span&gt;';
 $PALANG['pLogin_password_incorrect'] = '&lt;span class=&quot;error_msg&quot;&gt;Your password is not correct!&lt;/span&gt;';
 $PALANG['pLogin_login_users'] = 'Users click here to login to the user section.';

4,173

(41 篇回复,发表在 iRedMail 技术支持)

iRedMail-0.3.0 及更高的版本中已经在 /etc/dovecot.conf 中预设了 expire 参数,但默认是禁用的。
用户只需要根据自己的需要,将它打开即可。

对于 expire 的时间,也可以自己做调整。

注:Dovecot expire plugin 在官方 wiki 上有详细的文档:
http://wiki.dovecot.org/Plugins/Expire

太阳每天都升起,但是在香格里拉懒懒地晒太阳,却异常地幸福...

真想再去一趟 :loveliness: