/ 中存储网

安装Postfix+dovecot+maildrop+mailscanner+clamav+spamassassin

2014-12-28 20:21:41 来源:中存储网

>安装配置前准备:

1.改主机名(非必要,但别是除localhost之外的其他主机名了,修改主机名也是为了避免出现不必要的错误)

#hostname mail.test.com

#vi /etc/sysconfig/network

修改 HOSTNAME=mail.test.com

注销再登陆,验证一下:

#hostname

#uname -n

显示一致,说明已经可以进行下一步了。

==================================================================

2.DNS设置

如果方便可以直接在你的域名管理后台添加mail的A记录及MX记录。如果暂时是测试环境那就自己建一个dns服务吧,其实也很简单。

从www.isc.org下载bind9.8,这是当前的最新版了。

#tar zxvf bind-9.8.0.tar.gz
#cd bind-9.8.0
#./configure --prefix=/usr/local/bind --enable-threads
#make;make install
#/usr/local/bind/sbin/rndc-confgen > /usr/local/bind/etc/rndc.conf
#tail -10/usr/local/bind/etc/rndc.conf |head -9| sed s/#// > /usr/local#/bind/etc/named.conf

#dig > /usr/local/bind/etc/named.root
 

#vim /usr/local/bind/etc/named.conf

下是我的named.conf文件:

 key "rndc-key" {
        algorithm hmac-md5;
        secret "phTa1qrl4gZ5Th3vrV+nzQ==";
 };

 controls {
        inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
 };
options {
        directory "/usr/local/bind";
        pid-file "var/named.pid";
        forwarders {
202.106.0.20;
        };
};
zone "." IN {
        type hint;
        file "etc/named.root";
};
zone "localhost" IN {
        type master;
        file "etc/named.local";
};
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "etc/named.localarpa";
};
zone "test.com" IN {
        type master;
        file "etc/named.test";
};
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "etc/named.testarpa";
};

接下来建立这个主文件中指定的zone配置文件

(1)named.local

$TTL 86400
@   1D    IN      SOA     @        root.localhost. (
20110429
3H
15M
1W
1D )
    1D    IN      NS      @
    1D    IN      A      127.0.0.1

(2)named.localarpa

$TTL 86400
@       IN      SOA     localhost.      root.localhost. (
20110429
3H
15M
1W
1D )
IN      NS      localhost.
1       IN      PTR     localhost.

(3)named.test

$TTL 86400
@       IN      SOA     test.com.       root.test.com.(
20110429
3H
15M
1W
1D )
IN      NS      @
IN      MX  1   mail.test.com.
ns      IN      A       192.168.50.170
@       IN      A       192.168.50.170
mail    IN      A       192.168.50.170

(4)named.testarpa

$TTL 86400
@ IN SOA test.com. root.test.com. (
20110429 ; Serial
3H ; Refresh 1d=1 days
15M ; Retry 30m=30 minutes
1W ; Expire 1w=7 days
1D ) ; Minimum ;Negative Caching
@       IN NS test.com.
        IN PTR test.com.
        IN PTR mail.test.com.
        IN PTR ns.test.com.

#/usr/local/bind/sbin/named

好了以上我只是建了一个测试环境。不需要太复杂

启动之后用nslookup,ping检查一下看是否能正常解析,如果有错误会在/var/log/messages中可以看到。

=======================================================================

3.amp安装配置

我自己测试时用的系统自带的安装包。不过我这里还想再操作一遍。yum这个东西很不赖,安装软件时可以解决rpm包的依赖性,这是我为什么讨厌使用rpm包的原因,有时候让人抓狂。不过一些简单的包用rpm还是蛮有效率的。

由于我的系统安装时比较干净,所以一些包默认没有安装。比如安装PHP环境需要的一些支持图像的软件我的系统只装了主程序,但相应的devel包却没装。这时候用光盘镜像制作的yum源搬上来吧。

yum install libpng

yum install libpng-devel

yum install libjpeg

yum install libjpeg-devel

yum install freetype

yum install freetype-devel

yum install zlib

yum install zlib-devel

yum install libxml2

yum install libxml2-devel

yum install gd  #以上的包也是为这个gd服务的,所以要先装好

(1)apache

#tar jxvf httpd-2.2.15.tar.bz2

#cd httpd-2.2.15
#./configure --prefix=/usr/local/apache --enable-so --enable-rewrite && make && make install

(2)mysql

groupadd mysql
useradd -g mysql -M -s /bin/false mysql
tar zxvf mysql-5.1.53-linux-i686-glibc23.tar.gz
cp -a mysql-5.1.53-linux-i686-glibc23 /usr/local/mysql
cd /usr/local/mysql
chown -R mysql:mysql .

scripts/mysql_install_db --user=mysql
cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
chown -R root .
chown -R mysql data
bin/mysqld_safe --user=mysql &
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 35 mysqld on
echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
ldconfig
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
. /etc/profile

我为了追求安装时的速度,这里是用的二进制包,不过用于邮件存储来说应该够用了。如果时间很充裕还是用源码包configure,make,make install吧。

(3)php

tar zxvf php-5.3.6.tar.gz &&
cd php-5.3.6 

./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --enable-mbstring --with-gd --with-jpeg-dir --with-freetype --with-zlib-dir --with-xml --with-mysql=/usr/local/mysql --with-mysql-libs=/usr/local/mysql/lib --with-mysql-includes=/usr/local/mysql/include --enable-sockets
make && make install && cp php.ini-production /usr/local/php/lib/php/php.ini

修改/usr/local/apache/conf/httpd.conf

加入 AddType application/x-httpd-php .php

修改 DirectoryIndex加入index.php

这样就是apache支持了php解析。

phpinfo()

在浏览器里查看此文件是否被解释执行。
 

echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local

=========================================================================

4.安装courier-authlib,maildrop

安装前先建立想要建立相关的用户信息

groupadd postdrop
groupadd -g 1000 postfix
useradd -u 1000 -g postfix -s /sbin/nologin -G postdrop postfix
groupadd dovecot
useradd -s /sbin/nologin -g dovecot dovecot
groupadd -g 1010 vmail
useradd -u 1010 -g vmail -d /mailbox -s /sbin/nologin vmail

建立存放虚拟域,用户及邮件的目录

mkdir /mailbox

chown -R vmail.vmail /mailbox

建立所需的数据库

tar zxvf extman-1.1.tar.gz

cd extman-1.1/docs

mysql -uroot -p

mysql -uroot -p

 tar jxvf courier-authlib-0.63.0
 cd courier-authlib-0.63.0

 ./configure --with-redhat --with-authmysql=yes --with-mailuser=vmail --with-mailgroup=vmail --with-mysql-libs=/usr/local/mysql/lib --with-mysql-includes=/usr/local/mysql/include --prefix=/usr/local/authlib --without-stdheaderdir

make;make install

cd /usr/local/authlib/etc/authlib/

mv authdaemonrc.dist authdaemonrc
mv authmysqlrc.dist authmysqlrc

编辑authdaemonrc,确保为以下内容:

authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=10
authdaemonvar=/usr/local/authlib/var/spool/authdaemon
DEBUG_LOGIN=0
DEFAULTOPTIONS=""
LOGGEROPTS=""

其中前三行是需要自行修改的

编辑authmysqlrc确保为以下内容:

MYSQL_SERVER            localhost
MYSQL_USERNAME          extmail
MYSQL_PASSWORD          extmail
MYSQL_SOCKET            /var/lib/mysql/mysql.sock
MYSQL_PORT              3306
MYSQL_OPT               0
MYSQL_DATABASE          extmail
MYSQL_USER_TABLE        mailbox
MYSQL_CRYPT_PWFIELD     password
DEFAULT_DOMAIN          test.com
MYSQL_UID_FIELD         uidnumber
MYSQL_GID_FIELD         gidnumber
MYSQL_LOGIN_FIELD       username
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir
MYSQL_QUOTA_FIELD       quota
MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,
CONCAT("/mailbox/",homedir),CONCAT("/mailbox/",maildir),
quota,name from mailbox
where username="$(local_part)@$(domain)";

MYSQL_UID_FIELD为vmail的uid

MYSQL_GID_FIELD为vmail的gid

MYSQL_HOME_FIELD为("/mailbox/",maildir)

MYSQL_MAILDIR_FIELD为("/mailbox/",maildir)

然后最下面那个查询语句省略。但这种配置我试过在extmail里设置好自动回复,不能实现其功能。

设置authlib的共享库:

echo "/usr/local/authlib/lib/courier-authlib" >> /etc/ld.so.conf
ldconfig

拷贝安装包内的courier-authlib.sysvinit到/etc/init.d下:

cp courier-authlib.sysvinit /etc/init.d/courier-authlib

chmod 755 /etc/init.d/courier-authlib
chkconfig --add courier-authlib
chkconfig --level 2345 courier-authlib on
service courier-authlib start

chmod +x /usr/local/authlib/var/spool/authdaemon

ln -sv /usr/local/authlib/bin/courierauthconfig /usr/bin
 

ln -sv /usr/local/authlib/include/* /usr/include

注:上面两个连接文件在安装maildrop时,会去相应目录检查这些文件。

tar jxvf maildrop-2.5.2.tar.bz2
cd maildrop-2.5.2

./configure --enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root vmail' --enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=1010 --enable-maildrop-gid=1010 --with-trashquota --with-dirsync

make;make install 

maildrop 2.5.2 Copyright 1998-2005 Double Precision, Inc.
Courier Authentication Library extension enabled.
Maildir quota extension are now always enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information. 

这个文件要自行建立,而且权限要正确,否则在测试时会出现“不能建立这个文件”。网上有人说把日志的设置去掉,比较不可取。另外此文件还可以设置垃圾邮件分拣。我在这里没有设置。再做深入研究时再加吧。

=========================================================================

5.postfix+dovecot

(1)安装

安装之前首先卸载sendmail,这一步记得还算熟了,不过rhel6上的sendmail已经被postfix取代,postconf -m 发现默认竟然支持mysql了。一大惊喜,以后可以不用费劲编译安装了。呵呵,别失望,我已经下载好了2.8的版本,为了体验一下,我还是卸载了原装正版的postfix。还是以源码包安装为老规矩吧。

这次安装打破以前的惯例,首先声明这不是我的原创,也是网上翻出来的。编译postfix时把sasl验证改为dovecot。并且使用自动安装方式,省去交互式安装需要手动按回车的麻烦,我这里是安照默认安装的路径。

rpm -e postfix --nodeps #卸载自带的postfix

postfix还依赖一些包

yum install openssl

yum install openssl-devel

yum install db*

还有记得上面mysql的库文件要加到ld.so.conf中,并使之生效。

dovecotver=dovecot-2.0.11
###################setup_postfix#################
tar zxvf $postfixver.tar.gz
cd $postfixver
chmod 755 ./postfix-install
make makefiles
CCARGS='-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH
-DDEF_SERVER_SASL_TYPE="dovecot" -DUSE_TLS -I/usr/include'
AUXLIBS='-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib -lssl -lcrypto' &&
make &&
./postfix-install -non-interactive
install_root=/ tempdir=/tmp
config_directory=/etc/postfix
command_directory=/usr/sbin
daemon_directory=/usr/libexec/postfix
data_directory=/var/lib/postfix
html_directory=no
mail_owner=postfix
mailq_path=/usr/bin/mailq
manpage_directory=/usr/local/man
newaliases_path=/usr/bin/newaliases
queue_directory=/var/spool/postfix
readme_directory=no
sendmail_path=/usr/sbin/sendmail
setgid_group=postdrop

红色字体是脚本内容,这里就是简单命令的罗列,所以就不一步一步操作了。

(2)配置

postconf -n > /etc/postfix/main.cf.new   #把默认的main.cf中的有效配置提取出来.

mv /etc/postfix/main.cf /etc/postfix/main.cf.bak 

mv /etc/postfix/main.cf.new /etc/postfix/main.cf

下面是我的main.cf配置:

sed -e /^#/d /etc/postfix/main.cf

注:postfix的配置文件如果一行内写的太长想换行的话,要在下一行加空格,这样postfix就知道是上一行的续写。

要postfix支持maildrop还需要在master.cf中把调用maildrop的注释打开,并加上适当的修改。

编辑dovecot配置文件

cp /usr/local/dovecot/share/doc/dovecot/example-config/dovecot.conf /etc/dovecot/
cp /usr/local/dovecot/share/doc/dovecot/example-config/dovecot-sql.conf.ext /etc/dovecot/dovecot-mysql.conf

两个关键的配置样例文件在安装目录的share/doc下,拷贝到指定的存放配置文件的目录(根据安装时的选项)。

#sed -e /^#/d /etc/dovecot/dovecot.conf
protocols = imap pop3
listen = *
base_dir = /usr/local/dovecot/
auth_debug = yes
auth_default_realm = test.com
default_login_user = dovecot
default_internal_user = dovecot
disable_plaintext_auth = no
ssl = no
mail_uid = 1010
mail_gid = 1010
first_valid_uid = 1010
last_valid_uid = 1010
log_path = /var/log/dovecot.log
mail_location = maildir:/mailbox/%d/%n/Maildir
pop3_uidl_format = %08Xu%08Xv
auth default {
        mechanisms  = plain login
        passdb sql {
args = /etc/dovecot/dovecot-mysql.conf
        }
        userdb sql {
args = /etc/dovecot/dovecot-mysql.conf
        }
        socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
        }
}

#sed -e /^#/d /etc/dovecot/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = MD5-CRYPT      #这里和extmail的验证方式一致
password_query =
  SELECT password ,maildir as userdb_home
  FROM mailbox WHERE username = '%u'
user_query =
  SELECT 1010 as uid, 1010 as gid
  FROM mailbox WHERE username = '%u' AND active='1'

加入自启动程序

echo "postfix start" >> /etc/rc.local

echo "/usr/local/dovecot/sbin/dovecot -c /etc/dovecot/dovecot.conf" >> /etc/rc.local

==================================================================

6.反病毒+反垃圾

从mailscanner官网下载MailScanner,还有一个惊喜,不仅MailScanner的包自带安装时依赖的perl程序,还有ClamAV 0.96.5 and SpamAssassin 3.3.1 easy installation package.这么一个包。下载下来打开后也和MailScanner一样封装好了clamav和spam,同时也有相应的perl程序包。这可是省了很多的时间呢。

先安装MailScanner。解压运行目录下的install.sh就可以了。安装顺利完成。

安装install-Clam-SA-latest.tar.gz。这个包安装过程中有些小问题。一些依赖的perl程序在它自己的解压包内还是没有的,导致安装到spam时报错。有一个必须安装的NetAddr-IP包没装上,还有三个可选包,还提示安装razor和dcc。这个只能麻烦一下了,先手动安装这几个包吧。这里我以前已经下载了相关的包,所以可选的也给它装上。

IO-Socket-SSL-1.39

Mail-SPF-2.004

NetAddr-IP-4.004

razor-agents-2.84

razor-agents-sdk-2.07

dcc-1.3.139

就是这几个包了,注意版本别太低,不然不被识别。前3个是perl包,安装时执行

"perl Makefile.PL;make;make install";后面是一般的压缩包,三部曲"configure;make;make install".

这样再运行install.sh就顺利装好了。

这里先做一些简单的配置就可以运行起来了。mailscanner的配置文件很人性化,每个设置都有大量的说明。可设置的选项很多,主配置文件有3100多行,这里先让其运行起来。

编辑/etc/MailScanner/MailScanner.conf主配置文件,修改一下选项:

%org-name% = test.com
%org-long-name% = ceshi    #填写组织名,可随意填写
%web-site% = mail.test.com   #填写组织的网站

Run As User = postfix
Run As Group = postfix

Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA = postfix

SpamAssassin User State Dir = /var/spool/MailScanner/spamassassin

Virus Scanners = clamav

Use SpamAssassin = yes

更细致的配置以后根据实际情况再做调整。

mkdir /var/spool/MailScanner/spamassassin
chown -R postfix.postfix /var/spool/MailScanner/incoming
chown -R postfix.postfix /var/spool/MailScanner/quarantine
chown -R postfix.postfix /var/spool/MailScanner/spamassassin

基本配置好了,clamav和spam据说可以直接被mailscanner管理。甚至是postfix。

这里为使postfix调用mailscanner,要编辑main.cf文件。上面安装postfix时给出的配置文件已经添加了,下面要编辑/etc/postfix/header_checks,确保为以下内容:

/^Received:/ HOLD

这个配置可以从官网文档上查到,也可以在网络上找到。再提一下,mailscanner的官网看起来还是比较顺眼的,多看一下。

既然mailscanner能管理postfix,那就把前面写进开机启动的postfix start去掉。

然后关闭postfix

postfix stop

chkconfig --add MailScanner

chkconfig --level 235 MailScanner on

service MailScanner start

ps aux |grep postfix

经查看postfix确实已经启动。

tail -f /var/log/maillog 发送一封邮件测试一下

MailScanner[18478]: New Batch: Scanning 1 messages, 879 bytes

MailScanner[18478]: Virus and Content Scanning: Starting

MailScanner[18478]: Requeue: A141A43EC6.A8809 to 3E5AE43EC9

postfix/qmgr[18466]: 3E5AE43EC9: from=, size=669, nrcpt=1 (queue active)

MailScanner[18478]: Uninfected: Delivered 1 messages

MailScanner[18478]: Deleted 1 messages from processing-database

这是我截取的一段日志。可以看到mailscanner在扫描邮件了。

==================================================================

7.webmail

终于最后一步了。这一步按照搭建过程其实在做完smtp和pop3服务后就该做了,我做测试就是用extman添加虚拟域和用户的。命令行暂时还没研究怎么添加虚拟用户。

 extman需要几个perl包,系统光盘中没有的需要自行下载了。

 我用命令罗列了一个脚本。安装起来更方便些:

#! /bin/bash

unixsyslogver=Unix-Syslog-0.100
dbdmysqlver=DBD-mysql-3.0008
dbiver=DBI-1.612
filetrilver=File-Tail-0.99.3

extmailver=extmail-1.2
extmanver=extman-1.1

#########setup_apache_virtual_directory######

mkdir -p /usr/local/httpd/htdocs

#################################
tar zxvf $unixsyslogver.tar.gz
cd $unixsyslogver
perl Makefile.PL
make;make intall
cd -
#################################
tar zxvf $dbdmysqlver.tar.gz
cd $dbdmysqlver
perl Makefile.PL
make;make intall
cd -
###################################
tar zxvf $dbiver.tar.gz
cd $dbiver
perl Makefile.PL
make;make intall
cd -
###################################
tar zxvf $filetrilver.tar.gz
cd $filetrilver
perl Makefile.PL
make;make intall
cd -

###################################

tar zxvf $extmailver
tar zxvf $extmanver
mv $extmailver/ /usr/local/httpd/htdocs/extmail
mv $extmanver/ /usr/local/httpd/htdocs/extman
chown -R vmail:vmail /usr/local/httpd/htdocs/extmail/cgi
chown -R vmail:vmail /usr/local/httpd/htdocs/extman/cgi
mkdir /tmp/extman
chown -R vmail:vmail /tmp/extman
cp /usr/local/httpd/htdocs/extman/docs/mysql_virtual_* /etc/postfix/

编辑httpd.conf把User和Group改成vmail用户;加入虚拟机设置,映射到htdocs目录。我这里是为了方便,正式环境要规范一些。

ServerName mail.test.com
DocumentRoot /usr/local/httpd/htdocs/extmail/html/
ScriptAlias /extmail/cgi/ /usr/local/httpd/htdocs/extmail/cgi/
Alias /extmail/ /usr/local/httpd/htdocs/extmail/html/
ScriptAlias /extman/cgi/ /usr/local/httpd/htdocs/extman/cgi/
Alias /extman/ /usr/local/httpd/htdocs/extman/html/

编辑/usr/local/httpd/htdocs/extmail/webmail.cf,修改以下关键选项:

SYS_CONFIG = /usr/local/httpd/htdocs/extmail/

SYS_LANGDIR = /usr/local/httpd/htdocs/extmail/lang

SYS_TEMPLDIR = /usr/local/httpd/htdocs/extmail/html

SYS_AUTH_TYPE = mysql

SYS_MAILDIR_BASE = /mailbox

SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock

SYS_AUTHLIB_SOCKET = /usr/lcoal/authlib/var/spool/authdaemon/socket

SYS_G_ABOOK_FILE_PATH = /usr/local/httpd/htdocs/extmail/globabook.cf

编辑/usr/local/httpd/htdocs/extman/webman.cf,修改以下关键选项:

SYS_CONFIG = /usr/local/httpd/htdocs/extman/

SYS_LANGDIR = /usr/local/httpd/htdocs/extman/lang

SYS_TEMPLDIR = /usr/local/httpd/htdocs/extman/html

SYS_MAILDIR_BASE = /mailbox
SYS_DEFAULT_UID = 1010

SYS_DEFAULT_GID = 1010
SYS_MYSQL_USER = webman
SYS_MYSQL_PASS = webman
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock

启动以下守护进程,不启动话在进入extman后台是不显示系统统计信息。

 /usr/local/httpd/htdocs/extman/daemon/cmdserver --daemon

安装rrdtool让extman显示图形日志

tar zxvf rrdtool-1.0.50.tar.gz
cd rrdtool-1.0.50
./configure
make;make install

cp /root/rrdtool-1.0.50/perl-shared/blib/lib/RRDs.pm /usr/lib/perl5/

cp -a /root/rrdtool-1.0.50/perl-shared/blib/arch/auto/RRDs/* /usr/lib/perl5/

注:最好别用高版本的,不好安装,低版本也不影响显示。不过安装完之后启动mailgraph-init 还是提示找不到 RRDs.pm。用find看到解压包内包含所需文件,干脆拷贝过去。

cp -r /usr/local/httpd/htdocs/extman/addon/mailgraph_ext/ /usr/local/mailgraph_ext/

/usr/local/mailgraph_ext/mailgraph-init start 

==================================================================

8.后记

虽然以前也配置过类似系统,但以前使用的相关功能软件不同。资料也比较多。还是很费劲。现在配置的这个系统也是经过无数次调试。终于成功了,性能方面应该能满足一般中小企业的用户了,当然还有待调优相关软件的设置。达到更好的性能。

配置的时候一定要小心各配置文件的细节,也许多一个标点或打错字母都让你找半天原因。

我用crt打开几个窗口。一个几乎是 tail -f /var/log/maillog 没停过。

还有就是谷歌了。我发现谷歌有些方面是比百度好使!