修订历史 | ||
---|---|---|
修订 1.2.6 | 2004-03-30 | 修订者: ldl |
添加了细微的补充和更正到 amavisd-new,修正了 freshclam 的 cronjob-time | ||
修订 1.2.5 | 2004-03-28 | 修订者: ldl |
添加了防病毒和垃圾邮件方法(amavisd-new、spamassassin、clamav),更新了 cyrus-imapd 部分的更新说明,添加了限制 imapd 管理员访问的说明。 | ||
修订 1.2.4 | 2003-11-30 | 修订者: ldl |
来自英文校对的输入,用户输入的细微更正和增强,更新了 HOWTO 中提到的软件 | ||
修订 1.2.3 | 2003-03-24 | 修订者: ldl |
来自用户输入的一些细微更正和增强,更新了 HOWTO 中提到的软件 | ||
修订 1.2.2 | 2003-02-14 | 修订者: ldl |
修复了大量的语法和错别字。 对 pam_mysql Makefile 进行了一些更正 | ||
修订 1.2.1 | 2003-02-12 | 修订者: ldl |
非官方测试版本:添加了大量的修复和更新。 添加了 OpenSSL 和更多 pam 相关的内容。 | ||
修订 1.2.0 | 2002-10-16 | 修订者: ldl |
添加了大量用户请求,更新了 HOWTO 中提到的软件 | ||
修订 1.1.7 | 2002-10-15 | 修订者: ldl |
添加了 Michael Muenz 关于 SMTP AUTH 的提示,更正了 ca-cert 相关的错误,改进了 SGML 代码(更多元数据),更新了文档中提到的软件。 | ||
修订 1.1.6 | 2002-06-14 | 修订者: ldl |
将 sasl_mech_list: PLAIN 添加到 imapd.conf,添加了 web-cyradm 邮件列表,为 web-cyradm 添加了更多内容 | ||
修订 1.1.5 | 2002-06-11 | 修订者: ldl |
添加了新的 SQL 查询来初始化 web-cyradm,以在 MySQL 数据库中具有完整的数据完整性,mysql-mydestination.cf 据报告运行正常。 | ||
修订 1.1.4 | 2002-05-15 | 修订者: ldl |
添加了 /etc/services 中需要的内容的描述。 另一个 pam_mysql 编译的修复,更新了软件版本。 | ||
修订 1.1.3 | 2002-05-08 | 修订者: ldl |
为 web-cyradm 添加了更多描述,修复了 saslauthdb-socket 的错误路径,修复了 com_err.h 的错误位置,保护了 TLS/SSL 私钥。 | ||
修订 1.1.2 | 2002-04-29 | 修订者: ldl |
为 Redhat 用户添加了如何安装 init 脚本的描述。 | ||
修订 1.1.1 | 2002-04-29 | 修订者: ldl |
修复了配置 cyrus-IMAP 中的错误(禁用了未使用的 kerberos 身份验证) | ||
修订 1.1.0 | 2002-04-28 | 修订者: ldl |
初步支持从源代码构建 cyrus,放弃了 Cyrus 的二进制安装,因为配置已随 Release 2.1.x 更改 | ||
修订 1.0.2 | 2002-04-25 | 修订者: ldl |
添加了 sieve 和正确的发件人处理的基本描述,对数据库相关内容进行了细微修复,为“mydestination”添加了 mysql-lookup,修复了构建具有 mysql 支持的 postfix 的错误。 | ||
修订 1.0.1 | 2002-04-07 | 修订者: ldl |
为编译 pam_mysql 添加了一个重要的修复 | ||
修订 1.0.0 | 2002-04-07 | 修订者: ldl |
初始版本 |
cyrus 部分仅对 Cyrus-IMAP 2.1.x 和 Cyrus-SASL 2.1.x 有效。 如果您计划使用 Cyrus-IMAP 2.0.x,请查阅本 HOWTO 的已弃用版本 1.0.x。
我强烈建议您升级到 Cyrus 版本 2.1.x。 如果您这样做,您将能够更好地从用户社区获得有价值的支持
首先,我要感谢所有发送问题和建议的人,这些问题和建议使本文档的进一步开发成为可能。 这向我表明,分享知识是正确的方法。 我鼓励您向我发送更多建议,只需给我写一封电子邮件<luc at delouw.ch>
关于如何设置不同的邮件系统,有不同的方法。 大多数可用的文档都与 Sendmail、procmail、WU-IMAPd 及其同类相关。 这些软件包非常好,但不幸的是,它们的用户管理非常不灵活。
长期以来,我一直在测试替代的 MTA,如 qmail、postfix 和 exim,以及 IMAP/POP 服务器,如 Cyrus、vpopmail、Courier IMAP 等。
最终,从我的角度来看,Postfix/Cyrus 的组合似乎是最灵活且性能最佳的解决方案。
所有这些软件组合都有一个共同点:几乎没有文档描述这些软件包如何相互协作。 为了安装这些软件,需要花费大量精力来获取使所有软件运行所需的所有信息。
本文档受 Luc de Louw 于 2002 年、2003 年、2004 年版权所有 (c),并根据下述 Linux 文档项目 (LDP) 许可条款分发。
除非另有说明,Linux HOWTO 文档均由其各自的作者拥有版权。 Linux HOWTO 文档可以完整或部分地以任何物理或电子媒介复制和分发,只要所有副本都保留此版权声明即可。 允许并鼓励商业再分发; 但是,作者希望收到任何此类分发的通知。
所有翻译、衍生作品或包含任何 Linux HOWTO 文档的聚合作品都必须受此版权声明的约束。 也就是说,您不得从 HOWTO 生成衍生作品,并对其分发施加额外限制。 在某些条件下可以授予对这些规则的例外; 请通过以下地址联系 Linux HOWTO 协调员。
简而言之,我们希望通过尽可能多的渠道促进信息的传播。 但是,我们确实希望保留 HOWTO 文档的版权,并希望收到任何重新分发 HOWTO 的计划的通知。
如果您有任何问题,请联系<linux-howto at metalab.unc.edu>
对于本文档的内容不承担任何责任。 使用本文档中的概念、示例和其他内容,风险自负。 由于这是本文档的新版本,因此可能存在错误和不准确之处,这些错误和不准确之处当然可能会对您的系统造成损害。 请谨慎操作,尽管这种情况极不可能发生,但作者不对其承担任何责任。
除非另有特别说明,否则所有版权均由其各自的所有者持有。 在本文档中使用某个术语不应被视为影响任何商标或服务标记的有效性。
对特定产品或品牌的命名不应被视为认可。
强烈建议您在进行重大安装之前备份系统,并定期进行备份。
Martynas Bieliauskas<martynas at inet.lt>提出了关于如何仅将 cyrus 管理员限制为 localhost 的好主意。
Michael Muenz<m.muenz at maxonline.de>感谢他对 SMTP 身份验证的帮助
Ron Wheeler<rwheeler at artifact-software.com>感谢他对可读性编辑的帮助
感谢以下友善人士:< discuss at tldp.org>感谢他们对我在编写 HOWTO 方面的支持。
非常欢迎对本文档提出反馈。 没有您的投稿和意见,本文档将不复存在。 请将您的补充、评论和批评发送到以下电子邮件地址<luc at delouw.ch>.
请理解,我不想再在本文档中添加与 Cyrus-IMAP 2.0.x 相关的内容。
Postfix 致力于实现快速、易于管理和安全,同时又足够与 sendmail 兼容,以免让现有用户感到不安。 因此,外部具有类似 sendmail 的风格,但内部完全不同。 | ||
--www.postfix.org |
看起来是不是很 впечатляюще? - 它看起来比实际情况复杂得多。 Postfix 确实易于配置和处理。
与 sendmail 不同,postfix 不是一个单一的程序,而是由许多小程序组成,每个小程序都有专门的功能。 在这一点上,我不想详细介绍每个程序的作用。 如果您有兴趣了解 Postfix 的工作原理,请参阅 http://www.postfix.org/docs.html 上的文档
在本文档中,您将找到使系统与完整电子邮件设置的其他组件结合运行所需的信息。
Cyrus IMAP 由卡内基梅隆大学开发和维护。
与 WU-IMAPd 软件包不同,Cyrus 使用自己的方法来存储用户的邮件。 每条消息都存储在自己的文件中。 使用单独文件的优点是提高了可靠性,因为如果文件系统出现错误,只会丢失一条消息。 元数据(例如消息的状态(已读等))存储在数据库中。 此外,消息还被索引以提高 Cyrus 的性能,尤其是在有大量用户和/或大量大型电子邮件的情况下。 没有其他服务器像 Cyrus IMAP 服务器那样快速。
另一个非常重要的功能是,您不需要为每个帐户设置本地 Un*x 用户。 所有用户都由 IMAP 服务器进行身份验证。 当您有大量用户时,这是一个非常好的解决方案。
用户管理通过特殊的 IMAP 命令完成。 这允许您使用命令行界面或使用可用的 Web 界面之一。 这种方法比 Web 界面更安全,可以访问/etc/passwd.
从 Cyrus 2.1 开始,SASL-lib 版本 2 用于身份验证。 对于本 HOWTO 中描述的设置,实施了三层身份验证。 Cyrus 使用 saslauthdaemon 进行身份验证,saslauthdaemon 将请求转发到 pam_mysql,pam_mysql 最终在 MySQL 表中查找用户信息。
由于 CMU 更改了 Cyrus 的许可策略,因此更多用户将使用此软件。
SASL 的意思是“简单身份验证和安全层”。 它由 IETF(互联网工程任务组)标准化。 网络服务器(在本例中为 Cyrus-IMAP)使用 SASL 来处理来自客户端的身份验证请求。
Cyrus SASL 是一个广泛的软件,有时不容易理解。 即使我只掌握编写本 HOWTO 所需的最少知识。
OpenSSL 是 SASL 加密数据流所需的库。 几乎所有需要加密的开源软件都使用它。 大多数或所有 Un*x 发行版都预装了 OpenSSL。 确保还安装了相应的 devel 软件包。 如果您愿意,可以自行编译 OpenSSL。 如果您需要修复安全漏洞,这将是必需的。
MySQL 是一个非常快速、强大且非常易于使用的数据库。
由于 Cyrus 可以使用 pam 验证其用户身份,因此您可以使用 pam_mysql 作为 MySQL 中存储的用户数据库的连接器。 这允许您为用户创建一个友好的 Web 界面,用于更改密码、定义和删除别名等。
pam 的意思是“可插拔身份验证模块”,最初是由 Sun 的一些人提出的。 与此同时,已经开发了许多模块。 其中之一是 MySQL 的接口
使用 pam_mysql,您可以将用户密码存储在 MySQL 数据库中。 此外,Postfix 能够从 MySQL 表中查找别名。 最终,您将拥有一个供邮局管理员完成所有管理任务的基础。
您将能够将一些任务委派给高级用户。 例如,创建帐户、更改密码和创建新别名等任务可以委派给特定域的管理员。 最终,作为系统管理员,您将有时间做一些更有成效的任务,或者为 Linux 文档项目编写 HOWTO。
Web-cyradm 是一个 Web 界面,允许您执行维护邮件系统所需的管理任务。 此屏幕截图显示了 Web-cyradm 的域管理部分。
Web-cyradm 是用 PHP 编写的,PHP 是最复杂的 html 预处理器语言。 如果您没有安装 php 的 Web 服务器,我想将您推荐到我的 Apache-Compile-HOWTO。 本文档描述了如何设置带有 PHP 和其他模块的 Apache。
Web-cyradm 正在全球各地的人们积极开发中。 功能列表随着每个版本的发布而增长。 如果您想为 web-cyradm 做出贡献,或者您有一个好主意,请随时通过 http://www.web-cyradm.org 上的邮件列表联系。
以下是部分功能列表
管理多个虚拟域
设置配额
自动创建用户名,可以使用定义的前缀或域名
将任务(例如创建新用户)委派给“域管理员”
将用户帐户映射到电子邮件地址
将帐户转发到单个别名
单个别名的休假功能
支持 SMTP 传输表
支持 MySQL 和 PostgreSQL
i18n(国际化)支持(包括不同的字符集)
已翻译成 18 种语言并且还在增加
Web-cyradm 支持其用户的不同角色。 如果您计划将其用作高级用户的前端,请注意安全可能是一个问题。 基于角色的内容需要安全审查。
大多数软件都包含在您的 Linux 发行版中。 例如,据我所知,SuSE 从 7.1 开始就发布了 Cyrus。 从 SuSE 8.1 开始,cyrus-imap 2.1 和 sasl2 已包含在内,并且可以正常工作。 仍然建议您自行编译 Cyrus。 SuSE 不发布启用 MySQL 的 Postfix。
![]() | Debian 稳定版和测试版中已弃用的软件包 |
---|---|
Debian 用户可能想要安装 Debian 提供的软件包。 不幸的是,Debian 稳定版 (Woody) 和测试版 (sarge) 正在使用本 HOWTO 中使用的软件的已弃用版本。 我测试了 Debian 不稳定版 (sid) 中的相应软件包,它们可以正常工作。 请注意,Debian 的维护人员非常保守。 软件包“postfix-mysql”、“libsasl2”和“cyrus21-imapd”是稳定的,即使它们仅在“不稳定”树中可用。 |
cd /usr/local tar -xvzf mysql-4.0.18.tar.gz cd mysql-4.0.18 ./configure \ --prefix=/usr/local/mysql \ --enable-assembler \ --with-innodb \ --without-debug make make install /usr/local/mysql/bin/mysql_install_db echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf ldconfig ln -s /usr/local/mysql/include/mysql /usr/include/mysql ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql |
为了提高安全性,请在您的系统上添加一个 mysql 用户,例如 “mysql”,然后
chown -R mysql /usr/local/mysql/var |
如果您想在启动时自动启动 MySQL,请复制/usr/local/mysql/share/mysql/mysql.server到/etc/init.d/对于 SuSE,对于 Redhat 则是/etc/rc.d/init.d而不是/etc/init.d/。 此外,您需要添加符号链接到/etc/init.d/rc3.d对于 SuSE 和/etc/rc.d/rc3.d对于 Redhat。
以下示例适用于 SuSE Linux,应易于为 Redhat 和其他 Linux 发行版以及商业 Unix 系统进行更改。
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/ ln -s /etc/init.d/mysql.server /etc/init.d/rc3.d/S20mysql ln -s /etc/init.d/mysql.server /etc/init.d/rc3.d/k08mysql |
Berkeley DB 是构建 Cyrus-SASL 和 Cyrus-IMAP 的必要条件。 某些系统附带了最新版本,但未安装头文件。 请查看您的发行商 CD/DVD,看看是否可以从软件包安装头文件。 通常,此软件包称为 bdb-devel。
GNU/Debian Linux 附带的版本已过时,您需要编译最新的版本。 如果您已经在 Debian Box 上安装了 Berkeley DB,请卸载它以防止冲突。
同样非常重要的是,Cyrus-SASL 和 Cyrus-IMAP 是使用相同版本的 Berkeley DB 编译的,否则您可能会遇到问题。
![]() | Berkeley DB 版本 |
---|---|
我只测试了 bdb 的 4.0.x 版本。 如果您成功使用了更新的版本,请告诉我。 |
从源代码构建 Cyrus SASL 和 IMAP 并非易事。 有一些先决条件需要满足,并且需要考虑许多困难的身份验证相关内容。
原始站点: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.18.tar.gz
原始站点: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.2.3.tar.gz
在大多数系统上,默认情况下没有 cyrus 用户和 mailgroup。 检查是否有可用的 UID,通常守护进程使用小于 100 的 UID 运行。例如,我使用的是 UID 96,这是 SuSE 默认值中的值/etc/passwd.
groupadd mail useradd -u 96 -d /usr/cyrus -g mail cyrus passwd cyrus |
tar -xvzf cyrus-sasl-2.1.18.tar.gz cd cyrus-sasl-2.1.18 ./configure \ --enable-anon \ --enable-plain \ --enable-login \ --disable-krb4 \ --disable-otp \ --disable-cram \ --disable-digest \ --with-saslauthd=/var/run/saslauthd \ --with-pam=/lib/security \ --with-dblib=berkeley \ --with-bdb-libdir=/usr/local/bdb/lib \ --with-bdb-incdir=/usr/local/bdb/include \ --with-openssl=/usr/local/ssl \ --with-plugindir=/usr/local/lib/sasl2 make make install mkdir -p /var/run/saslauthd cd saslauthd make testsaslauthd cp testsaslauthd /usr/local/bin echo /usr/local/lib/sasl2 >> /etc/ld.so.conf ldconfig |
SASL 库安装在/usr/local/lib/sasl2但有些程序希望 SASL 在/usr/lib/sasl2中。 因此,创建一个符号链接是个好主意:ln -s /usr/local/lib/sasl2 /usr/lib/sasl2。
tar -xvzf cyrus-imapd-2.2.3.tar.gz cd cyrus-imapd-2.2.3 export CPPFLAGS="-I/usr/include/et" ./configure \ --with-sasl=/usr/local/lib \ --with-perl \ --with-auth=unix \ --with-dbdir=/usr/local/bdb \ --with-bdb-libdir=/usr/local/bdb/lib \ --with-bdb-incdir=/usr/local/bdb/include \ --with-openssl=/usr/local/ssl \ --without-ucdsnmp \ make depend make make install |
如果您希望在启动后自动启动 Cyrus IMAP 守护进程,则需要启动脚本。 将以下脚本放置在/etc/init.d/中。 对于 Redhat,它是/etc/rc.d/init.d而不是/etc/init.d/.
#!/bin/bash # # Cyrus startup script case "$1" in start) # Starting SASL saslauthdaemon /usr/local/sbin/saslauthd -c -a pam& # Starting Cyrus IMAP Server /usr/cyrus/bin/master & ;; stop) # Stopping SASL saslauthdaemon killall saslauthd # Stopping Cyrus IMAP Server killall /usr/cyrus/bin/master ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac |
如果我有时间,我将提供一个更复杂的脚本,但是这个脚本可以工作。
现在在运行级别目录 (SuSE) 中创建符号链接
ln -s /etc/init.d/cyrus /etc/init.d/rc3.d/S20 ln -s /etc/init.d/cyrus /etc/init.d/rc3.d/K10 |
对于 Redhat
ln -s /etc/rc.d/init.d/cyrus /etc/rc.d/rc3.d/S20cyrus ln -s /etc/rc.d/init.d/cyrus /etc/rc.d/rc3.d/K10cyrus |
本节介绍如何将 IMAPd 从版本 2.1.x 更新到 2.2.x
![]() | 更新至关重要,可能意味着完全数据丢失 |
---|---|
请先在测试/预生产服务器上测试此过程。 还要仔细查看install-upgrade.html该文件随 cyrus-imapd 发行版一起提供。 请注意,您应该为生产服务器计划停机时间,以便有时间解决问题。 另请注意,对于此处提供的更新过程,我无法承担任何责任 |
Cyrus 更改了用于内部存储邮箱列表标志等的 dbd 数据库的格式。
发行版附带了一个转换脚本。 最重要的数据库是/var/imap/mailboxes.db。 如果没有该数据库,cyrus-imapd 将无法运行。 这需要备份。 让我们对数据库进行转储和备份。
/etc/init.d/cyrus stop # be sure no cyrus process is running lsof /var/imap/mailboxes.db # be sure NO process is accessing the mailbox file su - cyrus /usr/cyrus/bin/ctl_mboxlist -d > /tmp/mailbox.db.dump cp /var/imap/mailboxes.db /var/imap/mailboxes.db.old |
转换/var/imap/mailboxes.db
/usr/cyrus/bin/cvt_cyrusdb /var/imap/mailboxes.db berkeley /var/imap/mailboxes.db.new skiplist mv /var/imap/mailboxes.db.new /var/imap/mailboxes.db |
转换所有“seen”数据库
find /var/imap/user -name \*.seen -exec /usr/cyrus/bin/cvt_cyrusdb \{\} flat \{\}.new skiplist \; -exec mv \{\}.new \{\} \; |
转换 sieve 脚本
/usr/local/cyrus-imapd-2.2.3/tools/masssievec /usr/cyrus/bin/sievec |
在构建和安装 postfix 之前,请确保创建“postfix”和“postdrop”用户和组(如果系统上不存在)。 首先检查组。 您可以使用 grep postfix /etc/group 和 grep maildrop /etc/group 进行检查
如果不存在此类组和用户,只需创建它们即可。 搜索可用的数字 UID 和 GID。 在以下示例中,我将为 Postfix 使用 UID 和 GID 33333,为 maildrop UID 和 GID 使用 33335。 这些 ID 与其他文档相对应。
groupadd -g 33333 postfix groupadd -g 33335 postdrop useradd -u 33333 -g 33333 -d /dev/null -s /bin/false postfix |
以下部分说明了如果您按照上述说明从源代码安装了 MySQL,则必须执行的操作。 如果您从二进制软件包(例如 rpm 或 deb)安装了 MySQL,则必须将 include 和 library 标志更改为 -I/usr/include/mysql 和 -L/usr/lib/mysql。
![]() | 需要卸载旧的 MTA |
---|---|
重要的是,您必须从基于 RPM 的系统中卸载任何 sendmail 版本。 我建议您删除 sendmail,然后安装 Postfix。 至少 SuSE RPM 需要 MTA。 安装 Postfix-RPM 后,只需按照 HOWTO 通过 RPM 安装安装 Postfix 即可。 |
tar -xvzf postfix-2.0.19.tar.gz cd postfix-2.0.19 make makefiles 'CCARGS=-DHAS_MYSQL \ -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH \ -I/usr/local/include/sasl -I/usr/local/bdb/include' \ 'AUXLIBS=-L/usr/local/mysql/lib/mysql \ -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2 -L/usr/local/bdb/lib' make make install |
在 make install 期间,会询问几个问题。 只需按 Enter 即可满足您的需求。 对于 Redhat 用户,输入以下内容可能很有用/usr/local/share/man
现在您需要创建一些符号链接,以便在系统启动时自动启动 Postfix。 该示例适用于 SuSE Linux,请查阅您的供应商手册以了解其他发行版。
ln -s /usr/sbin/postfix /etc/init.d/rc3.d/S14postfix ln -s /usr/sbin/postfix /etc/init.d/rc3.d/K07postfix |
PAM 默认安装在几乎所有 Linux 发行版上。 我不描述如何自行编译 PAM,因为它可能会破坏您的系统。 相反,我将描述如何安装软件包。
基于 RPM 的发行版的用户可以发出以下命令
rpm -i pam-devel.rpm |
Debian 用户可以使用以下命令安装 devel 软件包
apt-get install libpam0g-dev |
tar -xvzf pam_mysql-0.5.tar.gz cd pam_mysql |
如果您自己编译了 mysql,请检查Makefile并输入 mysql 库的正确路径,并添加编译器标志CFLAGS -I/path/to/mysql/include.
ifndef FULL_LINUX_PAM_SOURCE_TREE export DYNAMIC=-DPAM_DYNAMIC export CC=gcc export CFLAGS=-O2 -Dlinux -DLINUX_PAM \ -ansi -D_POSIX_SOURCE -Wall -Wwrite-strings \ -Wpointer-arith -Wcast-qual -Wcast-align -Wtraditional \ -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline \ -Wshadow -pedantic -fPIC -I/usr/local/mysql/include export MKDIR=mkdir -p export LD_D=gcc -shared -Xlinker -x -L/usr/local/mysql/lib/mysql -lz endif |
自定义该文件后,您可以继续进行 pam_mysql 编译。
make cp pam_mysql.so /lib/security [[ ! -d /var/lib/mysql ]] && mkdir /var/lib/mysql ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock |
cd /usr/local/apache/htdocs tar -xvzf web-cyradm-0.5.4.tar.gz touch /var/log/web-cyradm.log chown nobody /var/log/web-cyradm.log |
解压缩 web-cyradm 后,将其移动到 Web 服务器文档根目录中的某个位置。
就这样。 现在您需要配置所有这些软件。
Web-cyradm 0.5.4 被认为是稳定的,并于 2003-12-05 发布
由于 web-cyradm 使用 PEAR 作为其数据库抽象层,因此您还需要 PEAR 的最新副本。 这包含在最新的 PHP 版本中。 我强烈建议将 PHP 更新到 4.3.4,因为许多重要的错误已得到修复。
一个常见的错误是忘记触摸日志文件并将所有者更改为 Apache UID。 这通常是“nobody”或“wwwrun”。
现在我们需要为 Postfix 和 Web-cyradm 创建数据库和表,并将用户添加到数据库中。
Web-cyradm 附带了几个 MySQL 脚本insertuser_mysql.sql和create_mysql.sql。 第一个脚本将数据库用户插入到数据库“mysql”并创建数据库“mail”。 第二个脚本创建所需的表,并使用初始管理员用户和 cyrus 用户填充数据库。
其他脚本用于从旧版本进行增量升级。
本示例中数据库用户“mail”的密码为“secret”。 请插入您喜欢的任何用户和密码。
初始超级用户的用户名为“admin”,密码为“test”。
![]() | 更改默认密码! |
---|---|
如果恶意用户想要获得对系统的未授权访问,他们首先尝试的总是供应商提供的默认用户名和密码。**务必**在应用脚本之前更改它们。 |
自定义用户名和密码后,应用脚本
/usr/local/mysql/bin/mysql -u root -p < \ /usr/local/apache/htdocs/web-cyradm/scripts/insertuser_mysql.sql /usr/local/mysql/bin/mysql mail -u mail -p < \ /usr/local/apache/htdocs/web-cyradm/scripts/create_mysql.sql |
因为您正在使用 MySQL 来验证用户身份,所以您需要限制对 3306 端口的网络访问。
最简单的方法是将 MySQL 仅绑定到环回接口 127.0.0.1。这可以确保没有人可以通过网络连接到您的 MySQL 守护进程。
编辑/etc/init.d/mysql.server并按如下方式更改第 107 行
原始行
$bindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file& |
已更改的行
$bindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file \ --bind-address=127.0.0.1& |
通过执行命令 /etc/init.d/mysql.server start 重新启动您的 MySQL 守护进程
为了确保配置更改成功,请执行 netstat -an|grep LISTEN。输出应类似于以下内容
bond:~ # netstat -an|grep LISTEN tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN |
仅当您在邮件服务器以外的主机上运行 MySQL 服务器时,此步骤才是必要的。这允许您从另一个主机安全地连接,因为只允许从预定义的 IP 地址进行访问。
该示例来自服务 MySQL 数据库的主机的角度。假设您的邮件服务器的 IP 为 192.168.0.100,而 MySQL 主机的 IP 为 192.168.0.200
编辑/etc/rinetd.conf并添加
192.168.0.200 3306 127.0.0.1 3306 allow 192.168.0.100 |
这意味着:MySQL 主机正在 192.168.0.200 的 3306 端口上监听。如果 192.168.0.100 尝试连接,它将被转发到 127.0.0.1:3306。所有其他主机都将被拒绝。
现在我们需要确保 PAM 知道如何验证 Cyrus 用户身份
您必须创建文件/etc/pam.d/imap包含以下条目
auth sufficient pam_mysql.so user=mail passwd=secret host=localhost db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time auth sufficient pam_unix_auth.so account required pam_mysql.so user=mail passwd=secret host=localhost db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1 logtable=log logmsgcolumn=msg logusercolumn=user loghostcolumn=host logpidcolumn=pid logtimecolumn=time account sufficient pam_unix_acct.so |
包含以下内容的行pam_unix_auth.so和pam_unix_acct.so仅当您从 WU-IMAP 迁移到 Cyrus 时才需要。这允许您使用旧的 unix 密码和新的基于 mysql 的密码进行身份验证。
要使用 cyrus 和 smtp 身份验证提供的其他服务,您需要复制该文件,以便它们与服务 ID 匹配
cp /etc/pam.d/imap /etc/pam.d/pop cp /etc/pam.d/imap /etc/pam.d/sieve cp /etc/pam.d/imap /etc/pam.d/smtp |
Postfix 需要两个主要的配置文件main.cf和master.cf. 两者都需要您注意。
您只需要更改一行
旧
flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user} |
新
flags= user=cyrus argv=/usr/cyrus/bin/deliver -r ${sender} -m ${extension} ${user} |
此更改会影响什么?
查看 cyrus 手册页 man deliver 可以澄清这个问题
Postfix 默认设置使用了错误的 cyrus deliver 路径,这是第一个更改。参数 “-r” 插入了正确的返回路径。如果没有它,sieve 拒绝/退回的邮件将发送到您域名下的 cyrus 用户。
在这里您需要更改更多内容,例如主机名、中继、别名查找等。
首先更改主机名
myhostname = foo.bar.org |
mydestination
您必须在此处放置所有本地域名(对应于 sendmail 的/etc/mail/sendmail.cw). 如果您有多个域名,请用逗号分隔它们。
mydestination = foo.bar.org, example.com, furchbar-grausam.ch, whatever.domain.tld, mysql:/etc/postfix/mysql-mydestination.cf |
Relayhost
您可以在此处定义将传出邮件传递到哪里。如果您不提供任何主机,邮件将直接传递到目标 smtp 主机。通常您的中继主机是您的互联网服务提供商的 smtp 服务器。
relayhost = relay01.foobar.net relay02.foobar.net relay03.foobar.net |
Mailtransport
您可以在此处定义应如何处理接受本地传递的邮件。在您的情况下,邮件应由 cyrus 传递程序传递。
mailbox_transport = cyrus |
在文件末尾,您需要添加
virtual_alias_maps = hash:/etc/postfix/virtual, mysql:/etc/postfix/mysql-virtual.cf |
如果您不想覆盖 /etc/postfix/virtual,请跳过哈希条目
传出的地址应该从 test0002 at domain 重写为 user.name at virtualhost.com。如果您想使用 webmail 界面,这一点很重要。
sender_canonical_maps = mysql:/etc/postfix/mysql-canonical.cf |
现在您需要创建文件/etc/postfix/mysql-virtual.cf:
# # mysql config file for alias lookups on postfix # comments are ok. # # the user name and password to log into the mysql server hosts = localhost user = mail password = secret # the database name on the servers dbname = mail # the table name table = virtual # select_field = dest where_field = alias additional_conditions = and status = '1' |
文件/etc/postfix/mysql-canonical.cf:
# mysql config file for canonical lookups on postfix # comments are ok. # # the user name and password to log into the mysql server hosts = localhost user = mail password = secret # the database name on the servers dbname = mail # the table name table = virtual # select_field = alias where_field = username # Return the first match only additional_conditions = and status = '1' limit 1 |
最后是文件/etc/postfix/mysql-mydestination.cf:
# mysql config file for local domain (like sendmail's sendmail.cw) lookups on postfix # comments are ok. # # the user name and password to log into the mysql server hosts = localhost user = mail password = secret # the database name on the servers dbname = mail # the table name table = domain # select_field = domain_name where_field = domain_name |
使用 SASL 和 PAM 进行 SMTP 身份验证
将以下内容放入您的/etc/postfix/main.cf
smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = broken_sasl_auth_clients = yes |
您还需要创建文件/usr/local/lib/sasl2/smtpd.conf包含以下内容
pwcheck_method: saslauthd |
下一步是告诉 postfix 如何找到 saslauthd 套接字
mv /var/run/sasl2 /var/run/sasl2-old ln -s /var/run/saslauthd /var/run/sasl2 |
本节介绍如何使用 postfix 实现基本的垃圾邮件防护设置。它不使用任何外部软件,如 spamassassin 等。
Postfix 具有一些内置过滤器,允许您阻止明显的垃圾邮件尝试。特别是以下这些:
smtpd_helo_required = yes
在main.cf中的此开关意味着连接到您的邮件服务器的 SMTP 客户端在连接时必须提供 “helo”。
smtpd_recipient_restrictions
在main.cf中的此选项允许您定义处理接受邮件的不同规则。以下示例简单地拒绝所有无效的发件人和收件人数据。此外,它还定义了如何从在线黑名单中查找已知的垃圾邮件发送者。
smtpd_recipient_restrictions = reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, reject_unauth_destination, reject_rbl_client zombie.dnsbl.sorbs.net, reject_rbl_client relays.ordb.org, reject_rbl_client opm.blitzed.org, reject_rbl_client list.dsbl.org, reject_rbl_client sbl.spamhaus.org, permit |
mime_header_checks=pcre:/etc/postfix/body_checks
MIME 标头检查允许您拒绝包含恶意 MIME 内容的邮件,即危险的附件,例如 Windows 可执行文件。创建文件/etc/postfix/body_checks. 以下示例拒绝所有包含潜在危险附件的邮件。根据我的经验,使用此示例将过滤掉通过电子邮件传递的大部分病毒。无论如何,应始终安装病毒扫描程序。
/^((Content-(Disposition: attachment;|Type:).*|\ +)| *)(file)?name\ *=\ *"?.*\.(lnk|asd|hlp|ocx|reg|bat|c[ho]m|cmd|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|wmf)"?\ *$/ REJECT attachment type not allowed |
您必须创建/etc/imapd.conf和/etc/cyrus.conf
如果您想使用 sieve(一种邮件过滤语言),则必须更改/etc/services中的一个条目。对于 SuSE 8.0,请特别注意 sieve 的端口,他们定义了错误的端口。添加或更改以下行
pop3 110/tcp imap 143/tcp imaps 993/tcp pop3s 995/tcp sieve 2000/tcp |
确保 “servername” 包含您的 FQHN(完全限定主机名)
参数 “unixhierarchysep: yes” 仅当您希望拥有像 “hans.mueller.somedomain.tld” 这样的用户名时才使用,有关更多信息,请参见 第 8 节。
postmaster: postmaster configdirectory: /var/imap partition-default: /var/spool/imap # admins: cyrus # no admins! allowanonymouslogin: no allowplaintext: yes sasl_mech_list: PLAIN servername: servername autocreatequota: 10000 reject8bit: no quotawarn: 90 timeout: 30 poptimeout: 10 dracinterval: 0 drachost: localhost sasl_pwcheck_method: saslauthd sievedir: /usr/sieve sendmail: /usr/sbin/sendmail sieve_maxscriptsize: 32 sieve_maxscripts: 5 #unixhierarchysep: yes |
确保 “servername” 包含您的 FQHN(完全限定主机名)
参数 “unixhierarchysep: yes” 仅当您希望拥有像 “hans.mueller.somedomain.tld” 这样的用户名时才使用,有关更多信息,请参见 第 8 节。
第二个文件确保只有管理员用户可以通过 localhost 连接。您自己决定您的站点是否需要此额外的安全功能。
postmaster: postmaster configdirectory: /var/imap partition-default: /var/spool/imap admins: cyrus allowanonymouslogin: no allowplaintext: yes sasl_mech_list: PLAIN servername: servername autocreatequota: 10000 reject8bit: no quotawarn: 90 timeout: 30 poptimeout: 10 dracinterval: 0 drachost: localhost sasl_pwcheck_method: saslauthd sievedir: /usr/sieve sendmail: /usr/sbin/sendmail sieve_maxscriptsize: 32 sieve_maxscripts: 5 #unixhierarchysep: yes |
如果您想启用 Cyrus 的 TLS/SSL 功能,您必须首先创建证书。这需要安装 OpenSSL
openssl req -new -nodes -out req.pem -keyout key.pem openssl rsa -in key.pem -out new.key.pem openssl x509 -in req.pem -out ca-cert -req \ -signkey new.key.pem -days 999 mkdir /var/imap cp new.key.pem /var/imap/server.pem rm new.key.pem cat ca-cert >> /var/imap/server.pem chown cyrus:mail /var/imap/server.pem chmod 600 /var/imap/server.pem # Your key should be protected echo tls_ca_file: /var/imap/server.pem >> /etc/imapd.conf echo tls_cert_file: /var/imap/server.pem >> /etc/imapd.conf echo tls_key_file: /var/imap/server.pem >> /etc/imapd.conf |
您需要创建的另一个文件是/etc/cyrus.conf它是 Cyrus 主进程的配置文件。它定义了进程 “master” 启动的启动过程、服务和事件。
# standard standalone server implementation START { # do not delete this entry! recover cmd="ctl_cyrusdb -r" # this is only necessary if using idled for IMAP IDLE # idled cmd="idled" } # UNIX sockets start with a slash and are put into /var/imap/socket SERVICES { # add or remove based on preferences imap cmd="imapd" listen="192.168.0.1:imap" prefork=0 imaplocal cmd="imapd -C /etc/imapd-local.conf" listen="127.0.0.1:imap" prefork=0 imaps cmd="imapd -s" listen="192.168.0.1:imaps" prefork=0 imapslocal cmd="imapd -C /etc/imapd-local.conf" listen="127.0.0.1:imaps" prefork=0 pop3 cmd="pop3d" listen="pop3" prefork=0 pop3s cmd="pop3d -s" listen="pop3s" prefork=0 sieve cmd="timsieved" listen="192.168.0.1:sieve" prefork=0 sievelocal cmd="timsieved -C /etc/imapd-local.conf listen="127.0.0.1:sieve" prefork=0 # at least one LMTP is required for delivery # lmtp cmd="lmtpd" listen="lmtp" prefork=0 lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0 # this is only necessary if using notifications # notify cmd="notifyd" listen="/var/imap/socket/notify" proto="udp" prefork=1 } EVENTS { # this is required checkpoint cmd="ctl_cyrusdb -c" period=30 # this is only necessary if using duplicate delivery suppression delprune cmd="ctl_deliver -E 3" period=1440 # this is only necessary if caching TLS sessions tlsprune cmd="tls_prune" period=1440 } |
![]() | 请检查您的系统 IP 地址 |
---|---|
在上面的示例中,IP 192.168.0.1 将被替换为您的系统外部 IP 地址。 |
首先复制发行版的配置文件,并创建日志文件。日志文件必须由运行 web 服务器的用户拥有。这通常是用户 “nobody” 或 “wwwrun”。
cd /usr/local/apache/htdocs/web-cyradm/config cp conf.php.dist conf.php touch /var/log/web-cyradm-login.log chown nobody /var/log/web-cyradm-login.log |
#The Cyrus login stuff $CYRUS = array( 'HOST' => 'localhost', 'PORT' => 143, 'ADMIN' => 'cyrus', 'PASS' => 'secret' ); |
这应该是自我解释的。请注意,目前不支持 SSL 连接,这对于希望在与运行 cyrus-imapd 的服务器不同的服务器上使用 web-cyradm 的用户尤其重要。
自 0.5.2 版本以来,web-cyradm 使用 PEAR 作为数据库抽象层。这增加了更多的灵活性。目前支持 MySQL 和 PostgreSQL。请注意,PostgreSQL 需要一个补丁,因为 Postfix 本身不支持 PostgreSQL。我强烈建议您使用 MySQL。我知道 MySQL 在事务等方面有一些限制,但在分发的 Postfix 代码中支持它。
这些条目应该是自我解释的
$DB = array( 'TYPE' => 'mysql', 'USER' => 'mail', 'PASS' => 'secret', 'PROTO' => 'unix', // set to "tcp" for TCP/IP 'HOST' => 'localhost', 'NAME' => 'mail' ); |
Web-cyradm 支持存储加密密码。我强烈建议使用加密。目前支持三种方法:Unix 兼容(crypt)、md5 和 MySQL。Unix 兼容加密允许您从现有的/etc/shadow导入加密密码。这是首选选项。
不幸的是,MySQL 使用专有的加密方法,该方法仅在使用 MySQL 时可用。我目前正在考虑放弃对 MySQL crypt 的支持,因为它仅适用于 MySQL,并且使迁移到另一个数据库成为不可能。一旦有一种方法可以在 PHP 上重新设计 MySQL crypt,就会有一个解决方案(需要编程方面的帮助,法律限制?)
检查变量$CRYPT在文件config.inc.php中。值 “plain” 表示不加密,“crypt” 表示 Shadow 兼容加密,mysql 表示 MySQL 加密。
![]() | 请仔细选择加密方法 |
---|---|
由于支持的加密方法都是单向加密,因此**没有办法**从一种方法迁移到另一种方法。另请注意,这是一个全局变量,它用于所有密码,包括管理员用户的密码。我**强烈**建议使用 Unix Shadow 兼容加密,因为它使您独立于任何软件供应商。 |
变量 “DOMAIN_AS_PREFIX” 中定义了两种支持的用户名方案。默认设置是具有定义的前缀 ($DOMAIN_AS_PREFIX=0),即域名 “expample.com” 的前缀为 “test”。使用此方案,第一个用户获得用户名 test0001,第二个用户获得 test0002,依此类推。
另一种方案是拥有像 “hans.mueller.example.com” 这样的用户名。如果是这种情况,请设置 $DOMAIN_AS_PREFIX=1
目前您不能混合使用这两种方案,请仔细评估哪种方案最适合您的需求
如果您选择 $DOMAIN_AS_PREFIX=1,请确保取消注释选项unixhierarchysep: yes如 第 7.1.2 节 中所述
现在所有软件都已安装和配置。现在让我们进行一些测试。首先,您必须(重新)启动所有受影响的守护进程
postfix start
/etc/init.d/cyrus start
/etc/init.d/mysql.server start
/usr/local/apache/bin/apachectl startssl
希望所有守护进程都已启动,没有任何错误提示。请注意,这假设 saslauthd 在 cyrus 启动脚本中启动。
现在您可以通过执行 netstat -an|grep LISTEN 来验证守护进程是否正常运行
输出应类似于以下内容
bond:~ # netstat -an|grep LISTEN tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN |
端口分配如下
993 imap-ssl
995 pop3-ssl
3306 mysql
110 pop3
143 imap
2000 sieve
80 http
25 smtp
443 https
现在您应该能够连接到 http://localhost/web-cyradm/。使用之前定义的凭据登录。
定义域名和一些帐户。确保域名属于您的服务器。如果不是,您必须通过在/etc/hosts中输入域名来伪造它。该域名也必须在/etc/postfix/main.cf(mydestination = domain)
中定义为本地域名。请确保在添加新域时提供唯一的域名前缀。例如,域名 test.org 的前缀为 test。如果您不提供这样的前缀,您将收到错误消息。
现在我们将编写一封邮件
telnet localhost 25 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail ESMTP Postfix helo localhost 250 mail mail from: testing at example.com 250 Ok rcpt to: tester at localhost 250 Ok data 354 End data with <CR><LF>.<CR><LF> some text . 250 Ok: queued as B58E141D33 quit |
如果您看到这样的消息,那么一切似乎都正常工作。请务必指定您之前在 web-cyradm 数据库中定义的收件人地址
如果您收到如下错误
rcpt to: tester at localhost 451 <tester at localhost>: Temporary lookup failure |
那么可能是 MySQL 没有运行,DB 权限未正确设置,或者您配置错误/etc/postfix/main.cf
如果出现任何错误,我建议检查/var/log/mail。通常您会找到一些关于哪里出错的提示。
许多用户喜欢使用命令行界面 (CLI) “cyradm” 测试 cyrus-IMAPd,但他们失败了。要成功使用 cyradm,您需要将 cyrus 用户添加到/etc/sasldb2因为 “cyradm” 始终针对 SASL 和 IMAP 进行身份验证。
要将 Cyrus 用户添加到 sasldb,请使用命令
saslpasswd2 -c cyrus Password: (enter your passwd) Again (for verification): (enter your password) |
要使用 “cyradm” CLI,请注意该工具不识别标准 CLI 选项(如 -u 等)。请遵循手册页 “cyradm 1” 中描述的语法,如以下示例所示
bond:~ # cyradm --user cyrus --server localhost --auth plain Password: # This is the SASL2 password IMAP Password: # This is the IMAP password that you need to enter in the mysql-table �accountusers� localhost> |
使用 Cyrus 命令 help,您将看到所有可能的命令及其缩写。
要进行此类测试,您只需要一个邮件客户端,如 kmail 或 netscape(是的,当然,M$ 产品也可以工作),但在本示例中,我使用 kmail。
如果您启用了 TLS/SSL,您可能还希望测试以下内容
如果登录失败,并且您确定您输入了正确的密码,请注意 MySQL 是否正在运行。
本章是可选的,介绍了如何对抗病毒和垃圾邮件。
我认为我不需要解释病毒有多危险。不幸的是,在最近来自 SCO.A(又名 MyDoom)的攻击中,即使是或多或少经验丰富的用户也会被病毒欺骗。当今大多数病毒和蠕虫通过互联网传播,其中大多数是通过电子邮件传播。不用说,如果可能,应该由 SMTP 系统捕获病毒。
![]() | 不是替代品 |
---|---|
过滤病毒的邮件系统**绝不是**本地安装的防病毒软件的替代品。电子邮件只是病毒渗透计算机的一种方式。 |
另一种无害但不受欢迎和令人不安的电子邮件是垃圾邮件。垃圾邮件最初是一种令人厌恶的罐头肉。它是 UCE(未经请求的商业电子邮件)和 UBE(未经请求的批量电子邮件)的同义词。
研究表明,全球高达 60% 的电子邮件流量是垃圾邮件。在我的 SMTP 服务器上安装反垃圾邮件过滤器之前,我每天收到大约 150 封垃圾邮件。原因之一是本文档。在很久以前,我注意到我的真实电子邮件地址没有受到保护。电子邮件收集器正在全球范围内扫描网站以查找地址,并尝试传递其商业广告,通常是非法的。
对抗病毒的策略非常直接:过滤通过电子邮件传递的病毒并安装本地防病毒软件。
几乎所有防病毒软件供应商都为 Linux 和 Unix 系统提供了最新版本,因为大多数 SMTP 服务器都在 Unix 上运行。在本文档中,我将解释如何实现 clamav,这是一个非常活跃的开源防病毒项目。
对抗垃圾邮件比对抗病毒困难得多。为什么?这是因为每个病毒都有唯一的签名。垃圾邮件可以包含任意内容。一些垃圾邮件是英文的,另一些是韩文的,另一些是 “您想得到的任何语言”。
防止垃圾邮件的最佳方法是将您的电子邮件地址视为您最珍贵的秘密。**永远不要**将您的地址放在 web 表单中或将其放在您的网站上。我知道,这与互联网的理念背道而驰。信息必须是自由的。如果您实施以下配置,您可以继续发布您的电子邮件地址。
在垃圾邮件的早期,过滤 “viagra” 等关键字就足够了。当今的垃圾邮件技术要复杂得多。这是用户和垃圾邮件发送者之间的战争。对抗复杂垃圾邮件的解决方案是更复杂的反垃圾邮件软件。当今的反垃圾邮件软件不仅检查电子邮件的关键字。它们还检查特定的邮件标头数据等。还有一种称为 贝叶斯 过滤器的技术,该过滤器可以从特定输入、分布式校验和网络等中学习。
本章介绍如何安装和处理对抗病毒和垃圾邮件的软件
原始站点:http://prdownloads.sourceforge.net/clamav/clamav-0.68.tar.gz
# Adding a group for the clamav user groupadd clamav # Adding the clamav user to your system useradd -g clamav -c "clamav user" clamav cd /usr/local tar -xvzf clamav-0.68.tar.gz cd clamav-0.68 ./configure make && make install |
要测试 clamav 的功能,您可以运行 clamscan 以从 clamav 发行版中包含的测试模式中获取一些结果,运行 clamscan -r -i /usr/local/clamav-0.68
输出应如下所示
/usr/local/clamav-0.68/test/test1: ClamAV-Test-Signature FOUND /usr/local/clamav-0.68/test/test1.bz2: ClamAV-Test-Signature FOUND /usr/local/clamav-0.68/test/test2.zip: ClamAV-Test-Signature FOUND /usr/local/clamav-0.68/test/test2.badext: ClamAV-Test-Signature FOUND /usr/local/clamav-0.68/contrib/clamdwatch/clamdwatch.tar.gz: Eicar-Test-Signature FOUND ----------- SCAN SUMMARY ----------- Known viruses: 20482 Scanned directories: 47 Scanned files: 406 Infected files: 5 Data scanned: 5.48 MB I/O buffer size: 131072 bytes Time: 2.706 sec (0 m 2 s) |
下一步是设置病毒数据库的自动更新。这是一个重要的步骤,因为病毒传播的速度很快,并且会进一步加快。
创建所需的日志文件
touch /var/log/clam-update.log chmod 600 /var/log/clam-update.log chown clamav /var/log/clam-update.log |
我建议使用每小时的 cronjob 更新签名。要编辑 crontab,请执行 crontab -e 并添加以下行,并将 “x” 替换为 1 到 59 之间的随机值。这是一种基于时间的负载均衡,以确保更多人可以获取更新。
#x * * * * /usr/local/bin/freshclam --quiet -l /var/log/clam-update.log |
要测试更新过程是否正常工作,请执行命令 /usr/local/bin/freshclam -l /var/log/clam-update.log 并查看输出。
输出应类似于以下内容
ClamAV update process started at Tue Mar 23 19:58:11 2004 Reading CVD header (main.cvd): OK Downloading main.cvd [*] main.cvd updated (version: 21, sigs: 20094, f-level: 1, builder: tkojm) Reading CVD header (daily.cvd): OK Downloading daily.cvd [*] daily.cvd updated (version: 210, sigs: 596, f-level: 1, builder: acab) Database updated (20690 signatures) from database.clamav.net (64.74.124.90). |
Razor 是 spamassassin 的先决条件之一。
原始站点:http://prdownloads.sourceforge.net/razor/razor-agents-sdk-2.03.tar.gz?download
原始站点:http://prdownloads.sourceforge.net/razor/razor-agents-2.40.tar.gz?download
cd /usr/local tar -xvzf razor-agents-sdk-2.03.tar.gz cd razor-agents-sdk-2.03 perl Makefile.PL make && make install cd /usr/local tar -xvzf razor-agents-2.40.tar.gz cd razor-agents-2.40/ perl Makefile.PL make && make install |
Spamassassin 是当今领先的开源项目,用于对抗垃圾邮件。描述 spamassassin 的工作原理对于本文档来说太多了。有关更多信息,请查阅 http://eu.spamassassin.org/doc.html
Amavisd-new 是将上述所有软件粘合在一起以连接到 postfix 的软件
Amavisd-new 需要许多先决条件。
运行 perl -MCPAN -e shell 并执行
install ExtUtils::MakeMaker install HTML::Parser install DB_File install Digest::SHA1 install Archive::Tar install Archive::Zip install Compress::Zlib install Convert::TNEF install Convert::UUlib install MIME::Base64 install MIME::Parser install Mail::Internet install Mail::SPF::Query install Net::Server install Net::SMTP install Net::DNS install Digest::MD5 install IO::Stringy install Time::HiRes install Unix::Syslog |
最后,运行 ./amavisd 并查看忽略的先决条件。
编辑/etc/amavisd.conf并更改变量$daemon_user为 “amavis” 和$daemon_group为 “amavis”。另一个要更改的变量是$mydomain 以匹配您的域名。
另请考虑更改病毒和垃圾邮件的默认设置,以避免收到有关每封拦截邮件的通知
$final_virus_destiny = D_DISCARD; # (defaults to D_BOUNCE) $final_spam_destiny = D_DISCARD; # (defaults to D_REJECT) |
在垃圾邮件过滤的开始阶段,我建议将 kill 值设置为更高的值,直到您调整过滤器为止。更改变量$sa_kill_level_deflt为 8 甚至更高。
cd /usr/local tar -xvzf amavisd-new-20030616-p8.tar.gz cd amavisd-new-20030616 cp amavisd /usr/local/sbin cp amavisd.conf /etc chown root /etc/amavisd.conf chmod 644 /etc/amavisd.conf |
现在是时候为 amavisd-new 定义组和用户了
groupadd amavis useradd -g amavis -c "Amavisd-new user" amavis |
接下来,您必须为隔离邮件定义一个目录
mkdir /var/virusmails chown amavis:amavis /var/virusmails chmod 750 /var/virusmails mkdir /var/amavis chown amavis:amavis /var/amavis chmod 750 /var/amavis |
amavisd-new 发行版中的原始 init 脚本仅适用于 Redhat。其他发行版需要安装我快速而简陋的 init 脚本
#!/bin/bash # # Amavisd-new startup script case "$1" in start) # Starting amavisd /usr/local/sbin/amavisd ;; stop) # follows later ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac |
需要配置 Postfix 以将每封邮件发送到 amavis-new 以进行清理。
您需要将以下行添加到/etc/postfix/main.cf
content_filter = smtp-amavis:127.0.0.1:10024 |
的/etc/postfix/master.cf也需要进行一些调整,以将 amavisd-new 的结果返回到邮件系统。
请将以下行添加到您的配置中
smtp-amavis unix - - y - 2 smtp -o smtp_data_done_timeout=1200 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 |
您可以在这里找到互联网上可用的其他一些资源。
一些最有趣的新闻组是
这是一个低流量组。
您也可以查看您所在国家/地区的新闻组,例如 ch.comp.os.linux
大多数新闻组都有自己的 FAQ,旨在回答您的大部分问题,正如其名称 “常见问题解答” 所表明的那样。最新版本应定期发布到相关新闻组。如果您在新闻组中找不到它,您可以直接访问 FAQ 主存档 FTP 站点。WWW 版本可以在 FAQ 主存档 WWW 站点 上浏览。
发送邮件至<majordomo at postfix.org>内容(非主题)为
subscribe postfix-users |
在向列表写入之前,请查看存档: http://www.deja.com/group/mailing.postfix.users
发送邮件至<majordomo at lists.andrew.cmu.edu>内容(非主题)为
subscribe info-cyrus |
在向列表写入之前,请查看存档: http://asg.web.cmu.edu/archive/index.php?mailbox=archive.info-cyrus
可以通过 web 界面完成订阅 http://www.web-cyradm.org/mailman/listinfo/web-cyradm
在向列表写入之前,请查看存档中是否有类似的事件:http://www.web-cyradm.org/pipermail/web-cyradm/
这些旨在作为获取背景信息以及向您展示如何解决特定问题的主要起点。一些相关的 HOWTO 是Cyrus-IMAP和Apache-Compile-HOWTO. 这些的主要站点是 LDP 存档。
在 TLDP.org 之外还有一些其他的 HOWTO 和免费提供的文档
IBM 最近发布了一本新的 RedbookBladeCenter、Linux 和开源:按需电子商务的蓝图.尤其是第 6 章在寻找电子邮件解决方案时很有趣。
通常,发行版会将一些文档安装到您的系统中。作为标准,它们位于/usr/share/doc/packages
Cyrus 的 SuSE rpm 包含大量此类文档。
Postfix 在源目录中包含一些 html 文件/usr/local/postfix-2.0.16/html
PAM 也附带大量文档,位于/usr/share/doc/packages/pam
pam_mysql 模块有一个 README,大小惊人,为 1670 字节。
有大量的 информационные 网站可用。由于它们的性质,它们变化很快,因此如果这些链接很快过时,请不要感到惊讶。
一个好的起点当然是 Linux 文档项目主页,它是文档、项目页面等的中心信息站。
要获得有关 Postfix 的更深入信息,那么 www.postfix.org 将是起点。
如果您有任何其他可能有趣的线索,请告诉我。
在这里我回答了从用户那里收到的问题。如果您找不到答案,请随时与我联系
如果您配置了 web-cyradm,它也支持像 “user.name.example.com” 这样的用户名。您需要更改 config.inc.php 并将 DOMAIN_AS_PREFIX 的值更改为 1。然后您需要将 “unixhierarchysep: yes” 添加到您的/etc/imapd.conf
检查 web-cyradm (config.inc.php) 上的 cyrus 登录名是否正确。用户名和密码必须存在于 MySQL 的 accountuser 表中。如果 cyrus 登录信息不正确,Web-cyradm 不会抱怨。
13.1.3. web-cyradm 抱怨 “Fatal error: Call to undefined function: bindtextdomain() in /www/web-cyradm-0.5.3/index.php on line 46”,哪里出错了?
Web-cyradm 需要启用 gettext 的 PHP。请使用 configure 选项 --with-gettext 编译 PHP。
gettext 是 NLS(本机语言支持)所必需的,这意味着贡献者可以轻松地将 web-cyradm 翻译成他们的语言。在文件/usr/local/apache/htdocs/web-cyradm/locale/templates/web-cyradm.pot中填写您的语言,然后将文件发送给我,您的语言将在下一个 CVS 快照中得到支持
13.1.4. 我从 Web-cyradm 收到一个错误,如下所示:“Fatal error: Call to undefined function: query() in /usr/local/httpd/htdocs/web-cyradm/auth.inc.php on line 17”
Web-cyradm 依赖 PEAR 进行数据库抽象。PEAR 包含在最新的 PHP 版本中。通常 PEAR 是一个单独的软件包,请查看您的发行版的软件包库。我强烈建议更新到最新版本的 PHP,因为很多错误已被修复。
另一个原因可能是 MySQL 的身份验证错误。请确保用户 “mail” 拥有足够的权限来访问数据库和表。
问得好。LDAP 是基于角色的,对于此类应用来说,它确实是一个更好的解决方案。不幸的是,LDAP 非常难以设置。您必须制定合适的模式等等。MySQL 是最直接的方法,它非常易于处理且用途广泛。有一个可用于 LDAP 的 PAM 模块,请随意使用它。
很多人希望看到使用 Qmail 的设置。原因是,Mysql 支持是一个 hack,而不是包含在主源代码树中。这可能会导致糟糕的情况。想想如果在 qmail 中发现一个安全漏洞,而补丁在修正后的版本中不起作用。Postfix 原生支持 MySQL。另一个(个人)原因是,我发现 Postfix 更令人喜欢(我不知道为什么)。
Postfix 无法查找别名表。最常见的故障是 MySQL 没有运行,或者存在身份验证错误。检查/var/log/mail和/usr/local/mysql/var/<hostname>.err以跟踪错误。