利用Postfix搭建邮件系统
目录
四、cyrus-sasl +courier-authlib+ postfix+ courier-imap+ maildrop联合配置与调试
一、预备知识
MUA (Mail User Agent) :
顾名思义 MUA 就是『邮件使用者代理人』的意思,因为除非你可以直接利用类似 telnet 之类的软件登入邮件主机来主动发出信件,否则您就得要透过 MUA 来帮你送信到邮件主机上头去。 最常见的 MUA 像是 Mozilla 推出的Thunderbird ( 雷鸟 ) 自由软件, 或者是 Linux 桌面 KDE 常见的 Kmail ,及 Windows 内件的 Outlook Express (OE) 等 。MUA 主要的功能就是收受邮件主机的电子邮件,以及提供用户浏览与编写邮件的功能!
MTA (Mail Transfer Agent) :
MUA 帮用户传送邮件到邮件主机上,那这部邮件主机如果能够帮用户将这封信寄出去, 那他就是一部邮件传送主机 (MTA) 啦!这个 MTA 就是『邮件传送代理人』的意思。也来顾名思义一下,既然是『传送 代理人』, 那么使用者寄出的信,与使用者要收信时,就是找他 (MTA) 就对啦!基本上, MTA 的功能有这些:
1. 收受信件:使用简单邮件传送协议 (SMTP)
MTA 主机最主要的功能就是:将来自客户端或者是其他 MTA 的来信收下来,这个时候 MTA 使用的是 Simple Mail Transfer Protocol (SMTP) ,他使用的是 port 25 啦!
2. 转递信件:
如果该封信件的目的地并不是本身的用户,且该封信的相关数据符合使用 MTA 的权力, 那么咱们的 MTA 就会将该封信再传送到下一部主机上。这即是所谓的转递 (Relay) 的功能。
3. 响应使用者的收信要求:
POP 或 IMAP 协定用户可以透过 MTA 主机提供的邮政服务协议 (Post Office Protocol, POP) 来收下自己的信件, 也可以透过IMAP (Internet Message Access Protocol) 协议将自己的信件保留在邮件主机上面, 并进一步建立邮件数据匣等进阶工作。
总之,我们一般提到的 Mail Server 就是 MTA 啦!而严格来说, MTA 其实仅是指 SMTP 这个协议而已。 而达成 MTA的 SMTP 功能的主要套件包括老牌的 sendmail ,后起之秀的 postfix ,还有 qmail 等等。
MDA (Mail Delivery Agent) :
字面上的意思是『邮件递送代理人』的意思。事实上,这个 MDA 是挂在 MTA 底下的一个小程序, 最主要的功能就是: 分析由 MTA 所收到的信件表头或内容等数据, 来决定这封邮件的去向。 所以说,上面提到的 MTA 的信件转递功能,其实是由 MDA 达成的。 举例来说,如果 MTA 所收到的这封信目标是自己,那么MDA 会将这封信给他转到使用者的信箱 (Mailbox) 去, 如果不是呢?那就准备要转递出去了。此外, MDA 还有分析与过滤邮件等功能喔!如:过滤垃圾邮件,自动回复,自动转发等……。
各主要的 MTA 程序 (sendmail,postfix...) 都有自己的 MDA 功能,不过有些外挂的程序功能更强大, 举例来说 procmail就是一个过滤的好帮手,另外 Mailscanner + Spamassassion 也是可以使用的一些 MDA 喔。
Mailbox :
就是电子邮件信箱!简单的说,就是某个账号专用的信件收受档案。我们的 Linux 系统默认的信箱都是放在 /var/spool/mail/ 使用者账号 中! 若 MTA 所收到的信件是本机的使用者, MDA 就会将信件送到该 mailbox 当中去!
POP3:
(Post Office Protocol 3)即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
详情参见:http://baike.baidu.com/view/5404.htm
IMAP
Interactive Mail Access Protocol(交互式邮件存取协议)是由美国华盛顿大学所研发的一种邮件获取协议。它的主要作用是邮件客户端(例如MS Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。
无论是POP3还是IMAP都是描述如何从邮箱取出邮件。
请注意:POP3/IMAP和SMTP可以组建在不同的服务器上,经常使用MUA的用户肯定记得软件的设置中经常将POP3/IMAP和SMTP进行分开设置。
详情参见:http://baike.baidu.com/view/17877.htm
Maildirs
Maildirs是使用非常广泛的e-mail邮件存储格式。也可以说是一种基于目录的邮件存储格式。它在添加,移动或删除时并不依赖于应用程序级的文件锁定来维护消息的完成性。每一个消息(每一封邮件)被保存在一个独立的且名称唯一的文件中。所有的更改均使用基于文件系统的原子操作(atomic filesystem operations )因此文件系统来控制文件锁定从而避免一致性问题。通常Maildir为一个目录(名称为Maildir)其下包含三个子目录,分别为tmp,new和cur。
详情参考:http://en.wikipedia.org/wiki/Maildir
http://www.courier-mta.org/maildir.html
Courier IMAP
Courier IMAP server 是使用Maildir存储格式的高速,可扩展,企业级 IMAP 服务器。许多E-mail提供商使用Courier IMAP server来处理几十万的邮件用户,使用它建立IMAP和POP3集合代理,可以说Courier IMAP server 简直具有无限的水平扩展能力。在代理配置环境中,一些Courier 服务器提供IMAP和POP3服务,他们等待客户端登陆请求,查找并操作邮件用户的mailbox,与服务器建立代理连接,所有的这些操作都在一个单独的,无缝连接的进程中。
Courier-IMAP主要特点
* 小巧而高效;
* 提供多种用户认证模块和方式;
* 支持虚拟邮箱;
* 可限制IMAP同时登录的总数目及同一个IP地址同时登录的数目,能有效保护系统在受到拒绝服务(Denial-of-service)攻击时不致因超载而瘫痪;
详情参考:http://www.courier-mta.org/imap/
maildrop
具有过滤功能的邮件投递代理(MDA)
详情参考:http://www.courier-mta.org/maildrop/
Courier-Authlib
Courier authentication library 为其他 Courier 应用程序提供验证服务。
详情参考:http://www.courier-mta.org/authlib/
SASL:
SASL的英文全称是Simple Authentication and Security Layer,简单验证和安全层。SMTP 协议并没有提供用户验证功能,很容易匿名中转邮件。即使限制了可以转发的网段,也不安全。他的定义是: a method for adding authentication support to connection-based protocols,为基于连接的协议提供认证功能。SASL是一个胶合(glue)库,通过这个库把应用层 与 形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。
更详细的文档参见:
http://www.ietf.org/rfc/rfc2222.txt rfc2222 说明文档
http://blog.chinaunix.net/u/4929/showart_110441.html Cyrus SASL Libary学习
http://www.sendmail.org/~ca/email/cyrus/sysadmin.html 上一篇文章原文
何谓Open-Relay?
Open-Relay(开放转发或匿名转发)是指由于邮件服务器不理会邮件发送者或邮件接受者的是否为系统所设定的用户,而对所有的入站邮件一律进行转发(RELAY)的功能。通常,若邮件服务器的此功能开放,则我们一般称此邮件服务器是Open-Relay的。
由于Internet E-mail 采用开放式标准,所以MTA、MDA、MUA等不同角色,可分别由许多不同的软件包来扮演。实现相同协议的不同包,可以彼此互相交流,而不管它们是在什么系统上运行。如果将一个完整的E-mail邮件系统集中在一起,你可能会发现,处SMTP的是一套软件,处理POP/IMAP的是另一套软件。但邮件系统中的每一种角色,都有许多不同的软件可以选择。
二、安装前准备工作
1、试验环境
测试机环境
操作系统: CentOS 5.3 32bit
IP地址 : 192.168.108.113
主机名 : mail.example.com
系统环境
名称 | 版本 | 说明 |
Postfix | 2.2.6(src) | MTA |
MySQL | 5.1.35(src) | 存储postfix虚拟用户信息 |
courier-authlib | 0.62.4(src) | 搭配SASL做验证 |
cyrus-sasl | 2.1.23(src) | 把应用(E-Mail)与验证(courier-authlib)结合在一起 |
courier-imap | 4.5.1(src) | 结合postfix提供imap/imaps与pop3/pop3s服务 |
perl | 5.8.8(rpm) | 解释器 |
pcre | 7.9(src) | 安装Imap需要-- Perl兼容正则表达式 |
httpd | 2.2.3(rpm) | web 服务器 |
Extmail | 1.1.0(web src) | webmail |
Extman | 0.2.5(web src) | 结合extmail管理邮件用户 |
Clamav | 杀毒软件 | |
amavisd-new | 扫描邮件病毒 | |
Spamassassin | 防垃圾邮件 |
2、下载软件
Clamav | |
amavisd-new | |
3、创建相关用户
用户 | 组 | 简介 | 备注 |
mysql | mysql | mysql用户和组 | 安装mysql时创建 |
vmail | vmail | Postfix虚拟账户所使用的用户和组 | 无home目录不可能登陆系统。 |
postdrop | Postfix专用组 | 该组不能包含任何成员,包括前面的postfix虚拟帐号也不例外。gid:1002 | |
postfix | postfix | Postfix主程序使用的用户和组 | uid:1000 |
clamav | clamav | clamav 杀毒软件用户 | |
amavis | amavis | 邮件扫描用户 |
# groupadd -g 1001 vmail
# useradd -g 1001 -u 1001 -s /sbin/nologin -M vmail
# groupadd -g 1002 postdrop
# groupadd -g 1000 postfix
# useradd -g 1000 -u 1000 -s /sbin/nologin -M postfix
# useradd clamav
# useradd amavis
4、卸载系统中相关软件
卸载sendmail
无论你愿不愿意,装好CentOS之后系统就为你装好了Sendmail服务,其目的是为root用户发送一些有用的信息。一山不容二虎,我们在安装Postfix之前一定要先卸载Sendmail。
# rpm -qa | grep sendmail
sendmail-8.13.8-2.el5
# service sendmail stop
# rpm -e --nodeps sendmail
卸载sasl
# rpm -qa |grep sasl
cyrus-sasl-lib-2.1.22-4
cyrus-sasl-devel-2.1.22-4
cyrus-sasl-2.1.22-4
cyrus-sasl-plain-2.1.22-4
# rpm -e --nodeps cyrus-sasl-lib cyrus-sasl-devel cyrus-sasl cyrus-sasl-plain
5、系统环境
# echo "/usr/local/lib" >> /etc/ld.so.conf
6、创建相应目录
虚拟用户的邮件存放路径
# mkdir -p /var/mailbox
# chown vmail.vmail /var/mailbox
# chmod 700 /var/mailbox
apache的base目录
# mkdir -p /data/web
# chown vmail.vmail /data/web
extman的临时目录
# mkdir -p /tmp/extman
# chown vmail.vmail /tmp/extman
clamav临时目录
# mkdir -p /dev/shm/clamav/tmp
# chown -R amavis.amavis /dev/shm/clamav/
# echo " mkdir -p /dev/shm/clamav/tmp" >>/etc/rc.local
# echo " chown -R amavis.amavis /dev/shm/clamav/" >>/etc/rc.local
7、安装必备组件
# yum install perl-Unix-Syslog perl-DBI perl-Class-DBI-mysql perl-DBD-MySQL rrdtool perl-rrdtool perl-File-Tail perl-IO-stringy perl-MIME-* perl-Net-Server perl-BerkeleyDB perl-Crypt-* perl-Mail-DKIM perl-Convert-TNEF perl-Convert-UUlib perl-Archive-Zip
三、安装及初始配置
1、源码包路径
/data/soft/tar 源码压缩包目录
/data/soft/src 源码解压后目录
2、安装/配置Apache
由于本文档主要介绍postfix及其组件的安装,这里apache的安装与配置省略。有一点要说明,由于apache是为webmail,也就是后续我们要装的extmail/extman服务的,因此这里apache的执行用户和组要修改为vmail,另外更多的针对extmail/extman的apache配置,会在安装配置extmail和extman时有所说明。
# vi /etc/httpd/conf/httpd.conf
User vmail |
3、安装MySQL
MySQL编译安装过程参见《MySQL编译安装笔记》
4、安装/配置courier-authlib
安装:
# tar -xvjf courier-authlib-0.62.4.tar.bz2 -C ../src/
# cd ../src/courier-authlib-0.62.4/
# ./configure --prefix=/usr/local/courier-authlib --with-mailuser=vmail --with-mailgroup=vmail --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --without-stdheaderdir
# make && make install
# make install-configure
# ln -s /usr/local/courier-authlib/bin/courierauthconfig /usr/bin/
说明:在指定编译选项时需要指定mysql的include位置和lib位置,由于我mysql是源码安装的,所以这里一定要使用--with-mysql-includes和--with-mysql-includes参数指定。--without-stdheaderdir 参数是说将头文件安装到我自己制定的目录中,而非编译器找到的默认目录中。
配置:
安装完成后需要修改/usr/local/courier-authlib/etc/authlib/目录下的authdaemonrc 和 authmysqlrc 文件。详细修改信息如下:
# vi /usr/local/courier-authlib/etc/authlib/authdaemonrc
这个文件时告诉courier-authlib要使用什么验证方法
# 验证模块只保留mysql |
# vi /usr/local/courier-authlib/etc/authlib/authmysqlrc
这个文件是courier-authlib程序通过mysql验证时需要访问数据库的信息。还包含一些mysql语句的定义等等。
# mysql数据库地址 # 访问数据库的用户名 MYSQL_USERNAME extmail # 访问数据库的密码 MYSQL_PASSWORD extmai # mysql 的socket路径 MYSQL_SOCKET /data/mysql_db/mysql.sock # mysql开放的端口 MYSQL_PORT 3306 # 进行验证的数据库是哪个。这个在后面安装extmail会有介绍 MYSQL_DATABASE extmail # 进行验证时要访问那个表 MYSQL_USER_TABLE mailbox # 取出密码的字段是哪个 MYSQL_CRYPT_PWFIELD password # 默认域名⑴ DEFAULT_DOMAIN example.com # 这里设定mail虚拟帐号的uid MYSQL_UID_FIELD '1001' # 虚拟帐号的gid MYSQL_GID_FIELD '1001' # 登录名从哪个字段中取得 MYSQL_LOGIN_FIELD username # 邮件存放路径在哪里,这里是根目录。 MYSQL_HOME_FIELD '/var/mailbox/' # 邮件账户的描述信息字段 MYSQL_NAME_FIELD name # 邮件账户的详细邮件目录,从maildir字段中取得。 MYSQL_MAILDIR_FIELD maildir # MYSQL_USER_TABLE 表中的quota字段,这里concat函数取出S之前的字符 MYSQL_QUOTA_FIELD concat(quota,'S') # 这里定义SQL语句中where的条件 MYSQL_WHERE_CLAUSE active='1' |
注意:
1. 默认域名可有可无,如果设置了默认域名,则在courier-authlib连接mysql验证时如果用户只指定了username为test的话,则程序会自动加上这里设置的默认域名,否则必须指定用户名为test@example.com。这里看来还是设置默认域名比较方便。在设置多个虚拟域名的时候,主域名的用户可以不用输入完整的用户邮箱,其他虚拟域则必须设置完整的邮件地址。
加入启动项
切换到源码目录下
# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
# chmod 755 /etc/init.d/courier-authlib
# chkconfig --add courier-authlib
# chkconfig courier-authlib on
# service courier-authlib start
Starting Courier authentication services: authdaemond
修改authdaemon 的socket目录权限
如果该目录权限不正确修改,maildrop及postfix等将无法正确获取用户的信息及密码认证:
# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon
# ll -d /usr/local/courier-authlib/var/spool/authdaemon
drwxr-xr-x
2 vmail vmail 4096 Jul 27 10:26 /usr/local/courier-authlib/var/spool/authdaemon
系统集成
# ln -s /usr/local/courier-authlib/lib/courier-authlib/* /usr/lib
# ldconfig -v
5、安装/配置Cyrus-SASL2
编译安装
# tar -xvzf cyrus-sasl-2.1.23.tar.gz -C ../src/
# cd ../src/cyrus-sasl-2.1.23/
# ./configure --disable-anon --disable-gssapi --disable-sample --disable-digest --enable-plain --enable-login --enable-sql --with-mysql=/usr/local/mysql --with-authdaemond=/usr/local/courier-authlib/var/spool/authdaemon/socket
# make && make install
注意:红色标出的部分为先前安装的courier-authlib启动之后的socket文件位置。一定要指定,否则sasl无法和authdaemon连接
系统集成
# ln -s /usr/local/lib/sasl2/ /usr/lib/
# ldconfig -v | grep sasl
libcourierauthsasl.so -> libcourierauthsasl.so.0
libcourierauthsaslclient.so -> libcourierauthsaslclient.so.0
配置
Postfix的SMTP认证需要透过Cyrus-SASL,连接到authdaemon获取认证信息,这里我们需要配置smtp的验证,后续的还需要修改postfix的main.cf文件这里先不错说明,等到了配置postfix的时候再介绍如何配置postfix的smtp认证的配置。
在/usr/local/lib/sasl2/目录下创建smtpd.conf文件并添加如下内容:
# vi /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond authdaemond_path: /usr/local/courier-authlib/var/spool/authdaemon/socket |
6、Postfix安装/配置
编译安装
# tar -xvzf postfix-2.6.2.tar.gz -C ../src/
# cd ../src/postfix-2.6.2/
# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2'
# make install
编译完成后程序会自动进入交互状态,等待用户的输入,一般情况下,一路回车即可完成所有的安装。
注意: make的参数可以参考postfix源码目录下README_FILES文件夹中的INSTALL、MYSQL_README、SASL_README 文件。
生成别名二进制文件
# /usr/bin/newaliases
这条命令的作用就是将/etc/alias 文件利用工具转为postfix可以读取的二进制文件,存为/etc/postfix/ aliases
验证安装的Postfix是否支持SASL、MySQL
# postconf -a
cyrus
dovecot
# postconf -m
btree
cidr
environ
hash
mysql
nis
proxy
regexp
static
unix
注意:
(1)如果没有显示出cyrus项说明你的postfix不支持SASL,需要检查但前系统是否将libsasl库加入到系统中,利用ldconfig -v | grep 查看。如果没有libsasl2.so.2 -> libsasl2.so.2.0.23 需要将/usr/local/lib目录添加到/etc/ld.so.conf文件中然后再执行ldconfig命令使其生效。这在前面的 安装前准备工作 中已经有介绍。
(2)如果没有mysql项说明postfix不支持mysql协议的查询,肯定是编译时mysql的目录指定错误,重新查看mysql的lib目录和include目录的确切位置后重新编译安装postfix
Postfix配置
Postfix的配置我们放到最后等courier-imap、maildrop、extmail安装完成之后做统一的配置。
创建虚拟用户验证配置文件的目录
由于我们的虚拟用户是结合mysql进行验证的,postfix的配置文件中可以针对虚拟用户进行配置的定义,该目录就是存储mysql验证的配置文件。后文extman配置时会介绍。这里先创建相应目录。
# mkdir -p /etc/postfix/mysql
创建postfix启动daemon控制脚本
# vi /etc/init.d/postfix
#!/bin/sh |
添加服务,指定自动启动
# chmod +x /etc/init.d/postfix
# chkconfig --add postfix
# chkconfig postfix on
7、安装/配置 courier-imap
编译安装
# tar -xvjf courier-imap-4.5.1.tar.bz2 -C ../src/
# cd ../src/courier-imap-4.5.1/
# ./configure --prefix=/usr/local/courier-imap --with-redhat --disable-root-check --enable-unicode=utf-8,iso-8859-1,gb2312,gbk,gb18030 --with-trashquota --with-dirsync --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-authmysql --with-authmysql=yes CPPFLAGS='-I/usr/local/courier-authlib/include' LDFLAGS='-L/usr/local/courier-authlib/lib/courier-authlib' COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig'
# make && make install && make install-configure
# cp courier-imap.sysvinit /etc/rc.d/init.d/imapd
# chmod 755 /etc/rc.d/init.d/imapd
# chkconfig --add imapd
# chkconfig imapd on
配置
# vi /usr/local/courier-imap/etc/imapd
跳到文件最后,找到 IMAPDSTART=NO 替换为 IMAPDSTART=YES
# vi /usr/local/courier-imap/etc/pop3d
与imapd文件类似,在文件最后找到POP3DSTART=NO 修改为 POP3DSTART=YES
启动服务
# service imapd start
Starting Courier-IMAP server: imap pop3
# netstat -tulnp | egrep "110|143"
tcp 0 0 :::110 :::* LISTEN 23349/couriertcpd
tcp 0 0 :::143 :::* LISTEN 23343/couriertcpd
8、安装 pcre
编译安装
# tar -xvzf pcre-7.9.tar.gz -C ../src/
# cd ../src/pcre-7.9/
# ./configure
# make && make install
9、安装maildrop
编译安装
# tar -xvjf maildrop-2.2.0.tar.bz2 -C ../src/
# cd ../src/maildrop-2.2.0/
#./configure --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root vmail' --enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=1001 --enable-maildrop-gid=1001 --with-trashquota --with-dirsync
# make && make install
注意:./configure --help 查看的编译选项不全,查看目录下的INSTALL文件获得更多的编译选项。
验证安装
# maildrop -v
maildrop 2.1.0 Copyright 1998-2005 Double Precision, Inc.
GDBM/DB extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.
如果没有显示Courier Authentication Library extension enabled.说明你的maidrop还不支持courier auth,请仔细检查,重新编译maildrop建议不要自定义目录安装,可以减少不必要的麻烦,删除很方便:直接在已经编译的源代码目录 make uninstall
知道maildrop把邮件移动到哪个用户目录还是非常有必要的,这个操作就是maildrop的日志记录。这里我们创建一个新文件/etc/maildroprc,这个文件就2行内容:如果加入反SPAM,需要更改以下内容
# vi /etc/maildroprc
logfile "/var/log/maildrop.log" |
注意:/etc/maildroprc 文件为maildrop工作在投递模式下的全局过滤说明文档。详细的配置说明可以参考 man maildropfilter 文档。
# touch /var/log/maildrop.log;chown vmail.vmail /var/log/maildrop.log
10、安装extmail与extman
安装extmail
# tar -xvzf extmail-1.1.0.tar.gz -C /data/web/
# cd /data/web
# mv extmail-1.1.0/ extmail
# chown vmail.vmail extmail/ -R
# cd extmail
# cp -p webmail.cf.default webmail.cf
配置extmail
SYS_CONFIG = /data/web/extmail/ SYS_TEMPLDIR = /data/web/extmail/html # web页面登陆语言设置 SYS_USER_LANG = zh_CN #虚拟用户mail存放的根目录 SYS_MAILDIR_BASE = /var/mailbox # 关于数据库的设置,根据实际情况设置 SYS_MYSQL_USER = extmail SYS_MYSQL_PASS = extmail SYS_MYSQL_DB = extmail SYS_MYSQL_HOST = localhost SYS_MYSQL_SOCKET = /data/mysql_db/mysql.sock # courier-authlib验证程序socket位置 SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket # 全局联系人配置文件位置 SYS_G_ABOOK_FILE_PATH = /data/web/extmail/globabook.cf |
注意:可以使用vi的命令批量替换相应的目录命令为 【1,$s/\/var\/www\/extsuite\//\/data\/web\//g】
安装extman
# tar -xvzf extman-0.2.5.tar.gz -C /data/web/
# cd /data/web/
# mv extman-0.2.5/ extman; chown vmail.vmail extman -R
配置extman
# vi /data/web/extman/docs/init.sql
将所有extmail.org替换为example.com 根据自己的域名替换。vi替换命令【1,$s/extmail.org/example.com/g】
# vi /data/web/extman/webman.cf
SYS_CONFIG = /data/web/extman/ SYS_LANGDIR = /data/web/extman/lang SYS_TEMPLDIR = /data/web/extman/html SYS_MAILDIR_BASE = /var/mailbox # sys_sess_dir, the session dir SYS_SESS_DIR = /tmp/extman/ SYS_CAPTCHA_ON = 0 SYS_GROUPMAIL_SENDER = postmaster@example.com # sys_default_uid, if not set, webman will ignore it SYS_DEFAULT_UID = 1001 # sys_default_gid, if not set, webman will ignore it SYS_DEFAULT_GID = 1001 # 数据库相关设置 SYS_MYSQL_USER = extman SYS_MYSQL_PASS = extman SYS_MYSQL_DB = extmail SYS_MYSQL_HOST = localhost SYS_MYSQL_SOCKET = /data/mysql_db/mysql.sock |
修改extmail创建表的mysql语句
# vi /data/web/extman/docs/extmail.sql
vi 替换命令:【1,$s/TYPE=MyISAM/TYPE=MyISAM DEFAULT CHARSET=utf8/g】
初始化数据库
# mysql -u root -pjobkoo </data/web/extman/docs/extmail.sql
# mysql -u root -pjobkoo </data/web/extman/docs/init.sql
注意:通过仔细的查看extmail.sql 文件,发现其sql语句中已经有添加用户的操作。因此,下面的通过grant命令来创建用户并指定权限的操作可以省略。另外可以根据需要修改extmail.sql中用户的配置。但修改之后一定要将extmail/extman的配置也同步修改。
将虚拟用户验证配置文件复制到/etc/postfix/mysql目录中
# cp /data/web/extman/docs/mysql_virtual_* /etc/postfix/mysql/
注意:这些文件是postfix的配置相关文件,其所有者必须为root。
针对extmail/extman 对mysql的配置
mysql> grant all on extmail.* to extmail@localhost identified by 'extmail';
mysql> grant all on extmail.* to extman@localhost identified by 'extman';
针对extmail/extman 对apache所做的配置
# vi /etc/httpd/conf/httpd.conf
# 修改Dierctoryindex 选项天际index.cgi DirectoryIndex # 在文件最后添加下面配置 NameVirtualHost <VirtualHost ServerName DocumentRoot ScriptAlias ScriptAlias Alias Alias </VirtualHost> |
# service httpd restart
测试extmail/extman
修改测试机host文件添加 192.168.108.113 mail.example.com 在浏览器访问 http://mail.example.com 显示如下页面:
extmail 登陆界面
注意:登陆管理系统后创建两个用户用于下面的联合测试使用。用户分别为:test和 zyq
。用户创建完成后查看/var/mailbox/目录下是否自动创建了example.com/text 和 zyq 目录。如果没有生成这两个文件,说明创建用户的时候没有自动生成目录,这种情况大多是因为权限不对。通过查看apache的日志排错。同时将/var/mailbox的权限设置为700 所有者设置为 vmail。
启动图形日志服务测试
# cp -rp /data/web/extman/addon/mailgraph_ext/ /usr/local/
# /usr/local/mailgraph_ext/mailgraph-init start
Starting mail statistics grapher: mailgraph_ext
# /usr/local/mailgraph_ext/qmonitor-init start
Starting queue statistics grapher: qmonitor
加入到开机启动:
# echo "/usr/local/mailgraph_ext/mailgraph-init start">>/etc/rc.local
# echo "/usr/local/mailgraph_ext/qmonitor-init start">>/etc/rc.local
登陆查看是否出图
extmail图形日志
四、cyrus-sasl +courier-authlib+ postfix+ courier-imap+ maildrop联合配置与调试
1、完善配置postfix
# vi /etc/postfix/master.cf
maildrop unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/local/bin/maildrop -d ${recipient} |
注意:该文件中需要修改的只有一处,将前面的注释去掉即可
# vi /etc/postfix/main.cf
myhostname = mail.example.com mydomain = example.com myorigin = $mydomain inet_interfaces = all mynetworks = 192.168.0.0/16, 127.0.0.0/8 relay_domains = $mydestination alias_maps = $alias_database alias_database = hash:/etc/aliases mail_spool_directory = /var/spool/mail default_recipient_refill_delay = 1s #====================SASL ESMTP Authenticat================= smtpd_sasl_auth_enable = yes #smtpd_helo_required = yes smtpd_sasl_local_domain = $mydomain smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_non_fqdn_hostname, reject_unknown_sender_domain, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_pipelining, reject_unauth_destination smtpd_sasl_application_name = smtpd #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) smtpd_banner = $myhostname ESMTP Jobkoo mail system (version:1.0) #=====================Vritual Mailbox settings========================= virtual_mailbox_base = /var/mailbox/ virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf virtual_alias_domains = virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf virtual_uid_maps = static:1001 virtual_gid_maps = static:1001 virtual_transport = maildrop maildrop_destination_recipient_limit = 1 maildrop_destination_concurrency_limit = 1 #====================QUOTA============================================ message_size_limit = 20000000 mailbox_size_limit = 409600000 virtual_mailbox_limit = 20000000 virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later. virtual_overquota_bounce = yes |
启动postfix
# postfix start
postfix/postfix-script: starting the Postfix mail system
查看maillog日志
# tail -f /var/log/maillog
Jul 28 10:35:37 example postfix/postfix-script[3275]: starting the Postfix mail system
Jul 28 10:35:37 example postfix/master[3276]: daemon started -- version 2.6.2, configuration /etc/postfix
2、验证courier-authlib认证
确认courier-authlib已经运行
# service courier-authlib restart
# /usr/local/courier-authlib/sbin/authtest -s login test@example.com test
Authentication succeeded. Authenticated: test@example.com (uid 1001, gid 1001) Home Directory: /var/mailbox/ Maildir: example.com/test/Maildir/ Quota: 5242880SS Encrypted Password: $1$c9tbTCdr$4NOnlVJlaMOoPYUSFSyCU0 Cleartext Password: test Options: (none) |
说明:这样表明ExtMan的正确安装,数据库也正确导入,courier-authlib能正确连接到mysql数据库。
下面查看maillog日志看看courier-authlib都做了什么。
# tail -f /var/log/maillog
↓courier-authlib接到验证请求类型为login Jul 28 11:09:01 example authdaemond: received auth request, service=login, authtype=login ↓使用authmysql验证模块 Jul 28 11:09:01 ↓由于与mysql不是长连接,这里与mysql连接时失败。 Jul 28 11:09:01 example authdaemond: authmysqllib: mysql_ping failed, connection lost ↓这里重新连接mysql数据库并成功 Jul 28 11:09:01 ↓根据用户提交的用户名从数据库中查询信息 Jul 28 11:09:01 example authdaemond: SQL query: SELECT username, password, "", '1001', '1001', '/var/mailbox/', maildir, "", name, "" FROM mailbox WHERE username = 'test@example.com' AND (active='1') ↓验证密码成功 Jul 28 11:09:01 ↓authmysql 模块获得查询结果 Jul 28 11:09:01 ↓authmysql 分析clearpasswd字段和passwd字段值 Jul 28 11:09:01 ↓通过验证显示用户信息 Jul 28 11:09:01 ↓验证成功显示用户密码信息 Jul 28 11:09:01 |
注意:由于我的courier-authlib验证服务将调试信息打开了,因此可以在maillog文件中查看这么详细的日志信息。配置文件中(/usr/local/courier-authlib/etc/authlib/authdaemonrc)关于调试信息的设置分为三个级别,分别为:
0 → 关闭调试信息
1 → 打开调试信息
2 → 打开调试信息并显示密码
3、测试SMTP认证
通过以下命令获得test@example.com的用户名及密码的BASE64编码:
# perl -e 'use MIME::Base64; print encode_base64("test\@example.com")'
dGVzdEBleGFtcGxlLmNvbQ==
# perl -e 'use MIME::Base64; print encode_base64("test")'
dGVzdA==
然后本机测试,其过程如下(粉色的文字是我们输入/发送到Postfix的)
# telnet localhost 25
Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 mail.example.com ESMTP Postfix - by Nathan.Zhou ehlo mail.example.com 250-mail.example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN auth login 334 VXNlcm5hbWU6 dGVzdEBleGFtcGxlLmNvbQ== 334 UGFzc3dvcmQ6 dGVzdA== 235 2.0.0 quit 221 2.0.0 Bye |
最后出现235 2.0.0 Authentication successful表明认证成功了。
4、测试POP3
请按如下步骤输入pop3命令测试其是否正常工作,注意粉色的信息是我们输入到POP3服务器的(请首先登录extman自行建立test@example.com用户,密码:test)
# telnet localhost 110
Trying 127.0.0.1... Escape character is '^]'. +OK Hello there. user test@example.com +OK Password required. pass test +OK logged in. list +OK POP3 clients that break here, they violate STD53. . quit +OK Bye-bye. Connection closed by foreign host. |
查看maillog日志
# tail -f /var/log/maillog
↓连接pop3 端口 ↓需要验证,服务类型为pop3 Jul 28 13:17:08 example authdaemond: received auth request, service=pop3, authtype=login ↓使用authmysql模块认证 Jul 28 13:17:08 example authdaemond: authmysql: trying this module ↓======= 与mysql连接获得认证信息======== Jul 28 13:17:08 example authdaemond: authmysqllib: mysql_ping failed, connection lost Jul 28 13:17:08 example authdaemond: authmysqllib: connected. Versions: header 50135, client 50135, server 50135 Jul 28 13:17:08 example authdaemond: SQL query: SELECT username, password, "", '1001', '1001', '/var/mailbox/', maildir, concat(quota,'S'), name, "" FROM mailbox WHERE username = 'test@example.com' AND (active='1') Jul 28 13:17:08 example authdaemond: password matches successfully Jul 28 13:17:08 example authdaemond: authmysql: sysusername=<null>, sysuserid=1001, sysgroupid=1001, homedir=/var/mailbox/, address=test@example.com, fullname=test, maildir=example.com/test/Maildir/, quota=5242880SS, options=<null> Jul 28 13:17:08 example authdaemond: authmysql: clearpasswd=<null>, passwd=$1$c9tbTCdr$4NOnlVJlaMOoPYUSFSyCU0 Jul 28 13:17:08 example authdaemond: Authenticated: sysusername=<null>, sysuserid=1001, sysgroupid=1001, homedir=/var/mailbox/, address=test@example.com, fullname=test, maildir=example.com/test/Maildir/, quota=5242880SS, options=<null> Jul 28 13:17:08 example authdaemond: Authenticated: clearpasswd=test, passwd=$1$c9tbTCdr$4NOnlVJlaMOoPYUSFSyCU0 ↑=============== 通过认证 ================ ↓通过pop3登陆 Jul 28 13:17:08 example pop3d: LOGIN, user=test@example.com, ip=[::ffff:127.0.0.1], port=[57719] ↓退出pop3 Jul 28 13:17:12 example pop3d: LOGOUT, user=test@example.com, ip=[::ffff:127.0.0.1], port=[57719], top=0, retr=0, rcvd=12, sent=88, time=4 |
root用户手动给test发2封邮件
# mail -s 'hello' -v test@example.com <~/.bashrc
# mail -s 'hello' -v test@example.com </etc/bashrc
再次登录pop3查看是否有新邮件
# telnet localhost 110
Trying 127.0.0.1... Escape character is '^]'. +OK Hello there. user test@example.com +OK Password required. pass test +OK logged in. list +OK POP3 clients that break here, they violate STD53. 1 653 # 已经发现有一封邮件了。1代表第一封邮件,653为邮件大小 2 1849 . quit +OK Bye-bye. Connection closed by foreign host. |
test用户登录extmail可以收到两封邮件
5、通过MUA测试收发邮件
本次MUA软件使用Foxmail进行测试,先在Foxmail创建4个用户。3个为example.com域中的账户,另外一个为外网163的免费邮箱。各帐号如下:
下图为创建root@example.com帐号的过程,其余的3个账户过程相同。
新建root@example.com账户
填写pop3和smtp服务器地址
通过postmaster@example.com给zyq和test发邮件
编写邮件
如果三个用户都能收到邮件说明内网同一个域中的用户互相均可以发送邮件了。
五、邮件发垃圾和反病毒
1、杀毒软件
杀毒软件选用clamav
安装
# tar -xvzf clamav-0.95.2.tar.gz -C ../src/
# cd ../src/clamav-0.95.2/
# ./configure --prefix=/usr/local/clamav --with-dbdir=/usr/local/share/clamav
# make && make install
说明:--with-dbdir 参数指定病毒库位置,这个路径在clamav的配置文件中也有出现。当指定了这个参数之后,编译安装后悔自动创建这个目录。
配置
Clamav有2个配置文件,一个主配置文件/usr/local/clamav/etc/clamd.conf,一个病毒更新配置文件 /usr/local/clamav/etc/ freshclam.conf 下面分别进行配置
# vi /usr/local/clamav/etc/clamd.conf
# 将example注掉 LogFile /var/log/clamd.log LogSyslog yes LogVerbose yes PidFile /var/run/clamav/clamd.pid TemporaryDirectory /dev/shm/clamav/tmp DatabaseDirectory /usr/local/share/clamav LocalSocket /tmp/clamd.socket StreamMaxLength 20M #附件大小,超过20M不扫描 User amavis ScanMail yes ScanArchive yes |
# vi /usr/local/clamav/etc/freshclam.conf
# 将example注掉 DatabaseDirectory /usr/local/share/clamav UpdateLogFile /var/log/freshclam.log PidFile /var/run/clamav/freshclam.pid DatabaseOwner amavis DatabaseMirror db.CN.clamav.net DatabaseMirror database.clamav.net |
说明:在两个配置文件中,都有用户的设置,我这里都设置成了 amavis 。为什么不用默认的用户clamav而使用amavis呢?这样做的目的是为了与amavis-new结合在一起。
其中黄色背景的部分是杀毒程序的socket文件位置,后面与amavis-new结合使用的时候配置amavis-new需要指定这个文件。
修改相应目录权限
# chown -R amavis.amavis /usr/local/share/clamav
# chown -R amavis.amavis /dev/shm/clamav/
# touch /var/log/freshclam.log
# chown amavis.amavis /var/log/freshclam.log
# touch /var/log/clamd.log
# chown amavis.amavis /var/log/clamd.log
# mkdir -p /var/run/clamav/
# chown amavis.amavis /var/run/clamav/ -R
手动更新病毒库并运行杀毒程序
# /usr/local/clamav/bin/freshclam --daemon
# /usr/local/clamav/sbin/clamd
将病毒库升级和杀毒程序设置为随系统启动
# echo "/usr/local/clamav/bin/freshclam --daemon" >> /etc/rc.local
# echo "/usr/local/clamav/sbin/clamd" >> /etc/rc.local
2、邮件病毒扫描与垃圾邮件过滤
amavisd-new程序是提供postfix邮件扫描杀毒的,因此需要连接clamav杀毒软件和postfix程序。
安装
# tar -xvzf amavisd-new-2.6.4.tar.gz -C ../src/
# cd ../src/ amavisd-new-2.6.4/
# mkdir -p /var/amavis/{tmp,var,db}
# chown -R amavis.amavis /var/amavis
# chmod -R 750 /var/amavis
# cp amavisd /usr/local/sbin/
# chown root /usr/local/sbin/amavisd
# chmod 755 /usr/local/sbin/amavisd
# cp amavisd.conf /etc/
# chown root /etc/amavisd.conf
# chmod 644 /etc/amavisd.conf
# mkdir /var/virusmails
# chown amavis.amavis /var/virusmails
# chmod 750 /var/virusmails
配置Amavisd与Clamav结合
# vi /etc/amavisd.conf
$max_servers=8; $daemon_group = 'amavis'; $mydomain = 'mail.example.com'; $db_home = "$MYHOME/db"; $sa_tag_level_deflt = 5.0; $sa_tag2_level_deflt = 6.2; $sa_kill_level_deflt = $sa_tag2_level_deflt; $virus_admin = "virusalert@$mydomain"; $sa_spam_subject_tag = '***SPAM*** '; $forward_method = 'smtp:127.0.0.1:10025'; $notify_method = $forward_method; $final_virus_destiny = D_DISCARD; $final_banned_destiny = D_DISCARD; $final_spam_destiny = D_PASS; ['ClamAV-clamd', &ask_daemon, ["CONTSCAN {}n", "/tmp/clamd.socket"], qr/bOK$/, qr/bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ], # 在154行左右,修改投递/拦截的方法: $final_virus_destiny = D_DISCARD; $final_banned_destiny = D_BOUNCE; $final_spam_destiny = D_PASS; $final_bad_header_destiny = D_PASS; |
注意:
(1)配置文件编写完成后使用执行/usr/local/sbin/amavisd debug 进行调试。如果发现缺少perl组件就利用yum search 查找相关组件,最后用yum 安装,这样来的方便些!
(2)黄色背景部分是clamav 杀毒软件的socket文件,这个文件的位置是在配置clamav的时候指定的,在这里配置amavis时一定要指定正确!
(3)绿色字体部分是amavisd运行时打开的端口号
(4)粉色字体部分是与postfix连接时需要连接的地址和端口号。这个地址是在postfix的master.cf文件中指定的。后文会介绍。
(5)最后4个设置中,对spam(垃圾邮件)默认会直接反弹(BOUNCE),现在修改为继续投递(PASS)但在信头中增加相关X-Spam- Status信息等。这样可以很方便的在extmail中设置将被标记为垃圾邮件的mail投递到"垃圾邮件箱"中,便于用户翻查。
mail:: spamassassin配置
# vi /etc/mail/spamassassin/local.cf
#required_hits 5 |
启动spamassassin 并加入到系统启动
# /usr/bin/spamd --daemonize --pidfile /var/run/spamd.pid
# echo "/usr/bin/spamd --daemonize --pidfile /var/run/spamd.pid" >>/etc/rc.local
启动amavisd并加入到系统启动
# /usr/local/sbin/amavisd start
# echo "/usr/local/sbin/amavisd start " >>/etc/rc.local
配置Postfix 集成amavisd-new
# vi /etc/postfix/master.cf
增加如下内容:
127.0.0.1:10025 inet n - n - - smtpd -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 -o receive_override_options= |
编辑/etc/postfix/main.cf
# vi /etc/postfix/main.cf
在最后添加
# Content-Filter receive_override_options = no_address_mappings |
注意:
(1)这里content_filter 选项指定的smtp:[127.0.0.1]:10024 端口正是配置amavisd-new时所指定的。
(2)receive_override_options 这里必须增加,禁止地址展开/影射,否则如果遇到别名的时候会引起冗余邮件的产生。
保存后重启postfix
# postfix stop
# postfix start
测试Clamav
先利用examail建立一个postmaster@example.com帐户别名 virusalert@example.com 因为遇到邮件中有病毒或垃圾邮件的话postfix会给virusalert@example.com 发一封邮件。
利用telnet测试25端口,粉色字体为用户输入内容。过程如下:
# telnet localhost 25
Trying 127.0.0.1... |
查看邮件日志
# tail -f /var/log/maillog
Jul 29 16:20:28 example postfix/smtpd[25980]: connect from localhost.localdomain[127.0.0.1] Jul 29 16:20:36 example postfix/smtpd[25980]: 64B3E2C011E: client=localhost.localdomain[127.0.0.1] Jul 29 16:20:44 example postfix/cleanup[25983]: 64B3E2C011E: message-id=<20090729082036.64B3E2C011E@mail.example.com> Jul 29 16:20:44 example postfix/qmgr[25857]: 64B3E2C011E: from=<zyq@example.com>, size=424, nrcpt=1 (queue active) Jul 29 16:20:44 example postfix/smtpd[25986]: connect from localhost.localdomain[127.0.0.1] Jul 29 16:20:44 example postfix/smtpd[25986]: B08882C0120: client=localhost.localdomain[127.0.0.1] Jul 29 16:20:44 example postfix/cleanup[25983]: B08882C0120: message-id=<VATMwuDh4Ms020@example.jobkoo.com> Jul 29 16:20:45 example postfix/qmgr[25857]: B08882C0120: from=<virusalert@example.com>, size=2250, nrcpt=1 (queue active) Jul 29 16:20:45 example postfix/smtpd[25986]: disconnect from localhost.localdomain[127.0.0.1] Jul 29 16:20:45 example amavis[25726]: (25726-02) Blocked INFECTED (Eicar-Test-Signature), [127.0.0.1] [127.0.0.1] <zyq@example.com> -> <test@example.com>, quarantine: virus-TMwuDh4Ms020, Message-ID: <20090729082036.64B3E2C011E@mail.example.com>, mail_id: TMwuDh4Ms020, Hits: -, size: 424, 673 ms Jul 29 16:20:45 example postfix/smtp[25984]: 64B3E2C011E: to=<test@example.com>, relay=127.0.0.1[127.0.0.1]:10024, delay=12, delays=12/0.01/0.01/0.67, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=25726-02 - INFECTED: Eicar-Test-Signature) Jul 29 16:20:45 example postfix/qmgr[25857]: 64B3E2C011E: removed Jul 29 16:20:45 example authdaemond: received userid lookup request: virusalert@example.com Jul 29 16:20:45 Jul 29 16:20:45 Jul 29 16:20:45 example authdaemond: Authenticated: sysusername=<null>, sysuserid=1001, sysgroupid=1001, homedir=/var/mailbox/, address= postmaster @example.com, fullname= Jul 29 16:20:45 example authdaemond: Authenticated: clearpasswd=<null>, passwd=$1$qTrAv06G$XYL3xP4Xo058oP7wZTEMH0 Jul 29 16:20:45 example postfix/pipe[25987]: B08882C0120: to=< postmaster @example.com>, relay=maildrop, delay=0.58, delays=0.53/0.02/0/0.02, dsn=2.0.0, status=sent (delivered via maildrop service) Jul 29 16:20:45 example postfix/qmgr[25857]: B08882C0120: removed Jul 29 16:20:50 example postfix/smtpd[25980]: disconnect from localhost.localdomain[127.0.0.1] |
说明:
从日志中可以清楚的看到,刚刚测试的邮件被amavis捕捉到了,红色的部分表示被amavis拦截了。这时邮件经过postfix打包,发给了virusalert@example.com这个账户,从蓝色的日志文件中可以很清楚的看到。通过extmail登陆virusalert@example.com后可以看到警报邮件的内容,如下图:
六、最终测试
现在通过简单的email收发来确认系统是否正常。
发送测试邮件
输入以下命令,通过telnet方式给test@example.com发送一封测试信件
telnet localhost 25
Trying 127.0.0.1... |
此时通过另一个命令行窗口,观察maillog,命令为:
tail -f /var/log/maillog
将看到如下信息:
Jul 29 17:15:08 example postfix/qmgr[25857]: 6C1C92C012A: from=<test@example.com>, size=832, nrcpt=1 (queue active)Jul 29 17:15:08 example amavis[25728]: (25728-01) Passed CLEAN, [127.0.0.1] [127.0.0.1] <test@example.com> -> <zyq@example.com>, Message-ID: <20090729091438.431572C00CD@mail.example.com>, mail_id: NR8p7K6scsUW, Hits: -1.44, size: 391, queued_as: 6C1C92C012A, 14851 ms |
说明:
上述日志表示邮件经过了amavisd-new的扫描,并且已经通过maildrop投递到用户的maildir了,黄色字体表面通过检查。
七、整理启动服务及进程
mysql
# chkconfig mysqld on
# service mysqld start
apache
# chkconfig httpd on
# service httpd start
courier-authlib
# chkconfig courier-authlib on
# service courier-authlib start
postfix
# chkconfig --list postfix
# service postfix start
imapd
# chkconfig imapd on
# service imapd start
extmail 图形监控
加入启动项
# echo "/usr/local/mailgraph_ext/mailgraph-init start">>/etc/rc.local
# echo "/usr/local/mailgraph_ext/qmonitor-init start">>/etc/rc.local
启动
/usr/local/mailgraph_ext/mailgraph-init start
/usr/local/mailgraph_ext/qmonitor-init start
clamav
加入启动项
# echo "/usr/local/clamav/bin/freshclam --daemon" >> /etc/rc.local
# echo "/usr/local/clamav/sbin/clamd" >> /etc/rc.local
启动
# /usr/local/clamav/bin/freshclam --daemon
# /usr/local/clamav/sbin/clamd
amavisd-new
# /usr/local/sbin/amavisd start
# echo "/usr/local/sbin/amavisd start " >>/etc/rc.local
启动spamassassin 并加入到系统启动
# /usr/bin/spamd --daemonize --pidfile /var/run/spamd.pid
# echo "/usr/bin/spamd --daemonize --pidfile /var/run/spamd.pid" >>/etc/rc.local
八、利用Postal进行压力测试
./postal -m 100 -p 25 192.168.108.113 maillist.txt
错误处理
1、/var/log/message发现如下错误提示:
postfix/smtpd[4568]: sql_select option missing
postfix/smtpd[4568]: auxpropfunc error no mechanism available
解决:
/usr/lib/sasl2/smtpd.conf 文件最后添加如下内容
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: localhost
sql_user: extmail
sql_passwd: extmail
sql_database: extmail
sql_select: select password from mailbox where username='%u'
2、maillog日志显示:warning: do not list domain jobkoo.com in BOTH mydestination and virtual_mailbox_domains
解决:
在maillog日志中看到这样的错误提示说明 postfix 的配置文件main.cf中 mydestination选项和virtual_mailbox_domains 所对应的数据库中的域名不符所致!
解决方法是将 mydestination 设置为 空 ,或者干脆注掉。
使用命令直接修改选项值postconf -e mydestination=
3、maillog日志报错显示:maildrop: Invalid home directory permissions - world writable.
解决:
这个错误发起时maildrop程序,报告的错误内容是说home目录权限无效,所有人都可写!这是不允许的。
通过将 /var/mailbox目录修改为700 文件修改为600 问题解决
附录:
参考文章
Postfix + Maildrop Howto
http://www.postfix.org/MAILDROP_README.html
配置extmail过程详解
http://llk726.blog.51cto.com/622293/122054
ExtMail Solution HOWTO for Linux
http://www.extmail.org/docs/extmail_solution_linux/#maildrop
Postfix 电子邮件系统精要
http://sery.blog.51cto.com/10037/45500
Postfix Documents
http://www.postfix.org/documentation.html
postfix+extmail的mail服务器架设维护笔记
http://ivan8321.blog.51cto.com/681139/166567
amavisd-new黑白名单设置经验总结
http://www.cnitblog.com/linus2k/archive/2008/10/16/50325.html
Clamav + Amavisd-new + Spamassassin 系统设置说明
http://blog.csdn.net/huangyaoshifog/archive/2008/10/11/3057974.aspx
开源邮件技术社区
http://www.thismail.org/bbs/index.php
Extmail官方论坛
http://www.extmail.org/forum/index.php
转自:http://salogs.com/category/linux%e7%bd%91%e7%bb%9c%e6%9c%8d%e5%8a%a1/mail%e6%9c%8d%e5%8a%a1/