Linux下mail服务器架构之源码实现postfix全功能电子邮件
第一、安装前的准备工作:
[root@junjie ~]# uname �Cr #查看Linux的环境
2.6.25.19
准备:关闭firewall和SELinux(略)
1.准备:下载以下软件(这里我将包放在/root/mail/和/root/lamp/下了)
软件包免费下载地址:http://down.51cto.com/data/371439
httpd-2.2.9.tar.gz
mysql-5.0.95.tar.gz
php-5.4.0.tar.bz2
DBD-mysql-4.020.tar.gz
DBI-1.616.tar.gz
File-Tail-0.99.3.tar.gz
GD-2.46.tar.gz
MailScanner-4.84.3-1.rpm.tar.gz
Unix-Syslog-1.1.tar.gz
courier-authlib-0.62.4.tar.bz2
dovecot-1.1.4.tar.gz
extmail-1.2.tar.gz
extman-1.1.tar.gz
fp-Linux-i686-ws.tar.gz
postfix-2.8.2.tar.gz
rrdtool-1.2.23-3.el5.i386.rpm
rrdtool-perl-1.2.23-3.el5.i386.rpm
squirrelmail-webmail-1.4.22.tar.gz
squirrelmail-webmail-1.4.22.tar.gz
软件包免费下载地址:http://down.51cto.com/data/371439
2.#修改ip地址为192.168.101.210,修改dns指向为192.168.101.210
[root@junjie ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
NETMASK=255.255.255.0
IPADDR=192.168.101.210
[root@junjie ~]# service network restart
[root@junjie ~]# vim /etc/resolv.conf
nameserver 192.168.101.210
3、安装以下开发所用到的rpm包组:
Development Libraries
Development Tools
Legacy Software Development
X Software Development
#安装方法: yum groupinstall "packge_group_name"
4.构建本地yum服务器(略)
5.安装配置dns服务器:
[root@junjie ~]# yum install -y bind bind-chroot caching-nameserver
[root@junjie ~]# cd /var/named/chroot/etc/
[root@junjie etc]# cp �Cp named.caching-nameserver.conf named.conf
[root@junjie etc]# vim named.conf
15 listen-on port 53 { any; };
27 allow-query { any; };
28 allow-query-cache { any; };
37 match-clients { any; };
38 match-destinations { any; };
[root@junjie etc]# vim named.rfc1912.zones
20 zone "junjie.com" IN {
21 type master;
22 file "junjie.com.db";
23 allow-update { none; };
24 };
37 zone "101.168.192.in-addr.arpa" IN {
38 type master;
39 file "192.168.101.db";
40 allow-update { none; };
41 };
[root@junjie etc]# cd ../var/named/
[root@junjie named]# cp -p localhost.zone junjie.com.db
[root@junjie named]# vim junjie.com.db
2 @ IN SOA ns.junjie.com. root (
9 @ IN NS ns.junjie.com.
10 ns IN A 192.168.101.210
11 mail IN A 192.168.101.210
12 pop3 IN CNAME mail
13 smtp IN CNAME mail
14 @ IN MX 10 mail
[root@junjie named]# cp -p named.local 192.168.101.db
[root@junjie named]# vim 192.168.101.db
210 IN PTR mail.junjie.com.
[root@junjie named]# chkconfig named on
[root@junjie named]# service named start
[root@junjie named]# rndc reload
server reload successful
#查看dns解析是否正常
[root@junjie named]# nslookup pop3.junjie.com
[root@junjie named]# nslookup mail.junjie.com
[root@junjie named]# dig -t mx junjie.com
[root@junjie named]# nslookup 192.168.101.210
6.修改主机名称,并重新启动系统,重启后挂载光盘
[root@junjie named]# vim /etc/sysconfig/network
HOSTNAME=mail.junjie.com
[root@junjie named]# init 6
[root@mail ~]# mount /dev/cdrom /mnt/cdrom/
第二 LAMP平台结构,源码构建LAMP环境
[root@mail ~]# cd lamp/
[root@mail lamp]# ls
httpd-2.2.9.tar.gz
mysql-5.0.95.tar.gz
php-5.4.0.tar.bz2
2.1安装apache软件:
[root@mail lamp]# tar -zxvf httpd-2.2.9.tar.gz -C /usr/local/src/
[root@mail lamp]#cd /usr/local/src/httpd-2.2.9/
[root@mail httpd-2.2.9]# ./configure
--prefix=/usr/local/apache2 --enable-so --enable-rewrite
[root@mail httpd-2.2.9]# make && make install
#这里我们并没有将Suexec编译进apache中去,提到这个的原因
#是因为后面我们装postfix时候的后台管理extman是通过CGI的
#方式来调用程序的,如果不启用Suexec的话那么就会限制其他
#用户调用CGI程序,但考虑到启用Suexec的风险我们在此
#就不启用它了。
#(启用方式:--enable-suexec �Cwith-suexec-caller=daemon
#�Cwith-suexec-docroot=/usr/local/apache2/htdocs)
#进行相关配置,使apache正常工作
[root@www httpd-2.2.9]# cd /usr/local/apache/
[root@www apache]# ./bin/apachectl start
[root@www apache]# netstat -tupln |grep http
[root@www apache]# vim /etc/profile
55 PATH=$PATH:/usr/local/apache/bin/
[root@www apache]# . /etc/profile
[root@www apache]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:
/root/bin:/usr/local/apache/bin/
#此时可以再任何位置:apachectl start|restart |stop
#配置apache的库文件
[root@www include]# cat /etc/ld.so.conf
[root@www include]# cd /etc/ld.so.conf.d/
[root@www ld.so.conf.d]# vim apache.conf
/usr/local/apache/lib
[root@www ld.so.conf.d]# ldconfig -v |grep apache
/usr/local/apache/lib:
[root@www ld.so.conf.d]#
#查看httpd信息.
[root@www ld.so.conf.d]# netstat -tupln |grep httpd
tcp 0 0 :::80 :::* LISTEN 21263/httpd
2.2安装mysql软件:
[root@mail ld.so.conf.d]# cd /root/lamp/
[root@mail lamp]#useradd -M -s /sbin/nologin mysql
#添加mysql用户,如果安装系统时候已经装过mysql会提示用户已存在,
#建议在安装前先卸载掉系统自带的mysql,卸载完成后必须重启,
#否则新装的mysql会无法启动,提示错误信息3306端口被占有
[root@mail lamp]# tar -zxvf mysql-5.0.95.tar.gz -C /usr/local/src/
[root@mail lamp]# cd /usr/local/src/
[root@mail src]# ll
[root@junjie src]# ln -s mysql-5.0.95/ mysql
[root@junjie src]# ll
[root@junjie src]# cd mysql
[root@mail mysql]# ./configure --prefix=/usr/local/mysql
[root@mail mysql]#make
[root@mail mysql]# make install
#安装完成。
#配置mysql,复制主配置文件
[root@mail mysql-5.0.95]# cp support-files/my-medium.cnf /etc/my.cnf
#初始化
[root@mail mysql-5.0.95]# /usr/local/mysql/bin/mysql_install_db --user=mysql
[root@mail mysql-5.0.95]# chown -R root:mysql /usr/local/mysql
[root@mail mysql-5.0.95]# chown -R mysql /usr/local/mysql/var
#添加库文件路径
[root@mail mysql-5.0.95]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib/mysql/
[root@mail mysql-5.0.95]# ldconfig -v |grep mysql
/usr/local/mysql/lib/mysql:
libmysqlclient.so.15 -> libmysqlclient.so.15.0.0
#后台安全启动 (如果显示启动并且卡住不动按回车)
[root@mail mysql-5.0.95]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
#复制启动脚本
[root@mail mysql-5.0.95]# cp support-files/mysql.server /etc/init.d/mysqld
#赋予脚本执行权限
[root@mail mysql-5.0.95]# chmod +x /etc/init.d/mysqld
[root@mail mysql-5.0.95]# chkconfig --add mysqld
[root@mail mysql-5.0.95]# chkconfig mysqld on
[root@mail mysql-5.0.95]# service mysqld start
#设置系统全局的环境变量PATH值,方便使用mysql数据库命令
[root@mail mysql-5.0.95]# echo "PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
2.3安装php软件
[root@mail mysql-5.0.95]# cd /root/lamp/
[root@mail lamp]# ll
total 39640
-rw-r--r-- 1 root root 6396996 Apr 1 10:07 httpd-2.2.9.tar.gz
-rw-r--r-- 1 root root 22693585 Apr 1 10:08 mysql-5.0.95.tar.gz
-rw-r--r-- 1 root root 11439508 Apr 1 10:07 php-5.4.0.tar.bz2
[root@mail lamp]# tar -jxvf php-5.4.0.tar.bz2 -C /usr/local/src/
[root@mail lamp]# cd /usr/local/src/php-5.4.0/
[root@mail php-5.4.0]# ./configure --prefix=/usr/local/php5
--enable-mbstring --with-apxs2=/usr/local/apache2/bin/apxs
--with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5
#复制配置文件
[root@mail php-5.4.0]# cp php.ini-production /usr/local/php5/php.ini
#修改apache服务的主配置文件使其支持php
[root@mail php-5.4.0]# vim /usr/local/apache2/conf/httpd.conf
53 LoadModule php5_module modules/libphp5.so
#确认53行的存在,如果没有就重新编译php
#添加这行记录,在这行添加关于php格式的首页
167 DirectoryIndex index.php index.html
310 AddType application/x-httpd-php .php
#启动apache,在/usr/local/apache目录下执行指令:bin/apachectl start
[root@mail php-5.4.0]# cd /usr/local/apache2/
[root@mail apache2]# ./bin/apachectl start
[root@mail apache2]# netstat -tupln |grep 80
tcp 0 0 :::80 :::* LISTEN 31981/httpd
2.4测试php是否与apache整合成功
[root@mail apache2]# cd /usr/local/apache2/htdocs/
[root@mail htdocs]# ls
[root@mail htdocs]# mv index.html index.php
[root@mail htdocs]# vim index.php
--xjzhujunjie
--2012/04/10
<?php
phpinfo();
?>
#在浏览器中输入http://192.168.101.210/index.php
#看到下图表示跟apache服务整合成功
[root@mail htdocs]# vim index.php
--xjzhujunjie
--2012/04/10
<?php
$link=mysql_connect('127.0.0.1','root','');
if($link)
echo "scuess";
else
echo "fail";
?>
#在IE浏览器中输入网址http://192.168.101.210/index.php
#看到下图表示跟mysql服务整合成功
[root@mail htdocs]# service mysqld stop
Shutting down MySQL..STOPPING server from pid file /usr/local/mysql/var/mail.junjie.com.pid
120401 11:36:07 mysqld ended [ OK ]
第三 安装postfix软件
3.1、卸载sendmail,sendmail将占用tcp 25端口,和postfix冲突:
[root@junjie ~]# rpm -e sendmail --nodeps
3.2编译安装postfix软件
[root@mail ~]# groupadd -g 1200 postdrop
[root@mail ~]# groupadd -g 1000 postfix
[root@mail ~]# useradd -M -u 1000 -g postfix -G postdrop
-s /sbin/nologin postfix
[root@mail ~]# cd /root/mail/
[root@mail mail]# tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/postfix-2.8.2/
#安装,安装过程中会出现互动提问,直接选择默认设置即可.若配置中时出现问
#题,检查路径是否正确,或查看日志,和postfix用户是否存在
[root@mail postfix-2.8.2]# make -f Makefile.init makefiles
'CCARGS=-DHAS_MYSQL
-I/usr/local/mysql/include/mysql
-DUSE_SASL_AUTH -I/usr/local/include/sasl'
'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient
-lz -lm -L/usr/local/lib -lsasl2'
[root@mail postfix-2.8.2]# make
[root@mail postfix-2.8.2]# make install
#生成别名二进制文件,这个步骤如果忽略,会造成postfix效率极低:
[root@mail postfix-2.8.2]# newaliases
#查看postfix支持的模块是否有mysql;
#若不存在mysql,就不要往下做了,必须重做,知道出现mysql为止
[root@mail postfix-2.8.2]# postconf �Cm
mysql
第四 配置postfix
#进行一些基本配置,测试启动postfix并进行发信
[root@mail postfix-2.8.2]# cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
[root@mail postfix-2.8.2]# vim /etc/postfix/main.cf
76 myhostname = mail.junjie.com
83 mydomain = junjie.com
99 myorigin = $mydomain
113 inet_interfaces = all
162 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
163 mail.$mydomain, www.$mydomain, ftp.$mydomain
260 mynetworks = 192.168.101.0/24, 127.0.0.0/8
说明:myorigin参数用来指明发件人所在的域名;mydestination参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件;myhostname 参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;mydomain参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值;mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问;inet_interfaces 参数指定postfix系统监听的网络接口.注意:1、在postfix的配置文件中,参数行和注释行是不能处在同一行中的;2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用;3、每修改参数及其值后执行 postfix reload 即可令其生效; 但若修改了inet_interfaces,则需重新启动postfix;4、如果一个参数的值有多个,可以将它们放在不同的行中, 只需要在其后的每个行前多置一个空格即可; postfix会把第一个字符为空格或tab的文本行视为上一行的延续;
#检查配置,启动postfix
[root@mail postfix-2.8.2]# postfix start
postfix/postfix-script: starting the Postfix mail system
[root@mail postfix-2.8.2]# postfix check
[root@mail postfix-2.8.2]# service postfix restart
postfix: unrecognized service
#无法启动,此时要制作制作postfix启动控制文件
#【没有启动文件的启动postfix方法:
#/usr/local/postfix/sbin/postfix start】
[root@mail postfix-2.8.2]# mkdir /tmp/abc
[root@mail postfix-2.8.2]# cd /tmp/abc
[root@mail abc]# cp /mnt/cdrom/Server/postfix-2.3.3-2.1.el5_2.i386.rpm ./
[root@mail abc]# rpm2cpio postfix-2.3.3-2.1.el5_2.i386.rpm |cpio -id
16333 blocks
[root@mail abc]# ll
[root@mail abc]# ll etc/rc.d/init.d/postfix
-rwxr-xr-x 1 root root 2404 Apr 1 13:01 etc/rc.d/init.d/postfix
[root@mail abc]# cp etc/rc.d/init.d/postfix /etc/rc.d/init.d/
[root@mail abc]# service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
[root@mail abc]# chkconfig --add postfix
[root@mail abc]# chkconfig postfix on
[root@mail abc]# chkconfig --list postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
#连接postfix,验正服务启动状况,测试是否可以发信:
[root@mail ~]# useradd user1
[root@mail ~]# useradd user2
[root@mail ~]# echo "123" |passwd --stdin user1
[root@mail ~]# echo "123" |passwd --stdin user2
[root@mail ~]# telnet mail.junjie.com 25
Trying 192.168.101.210...
Connected to mail.junjie.com (192.168.101.210).
Escape character is '^]'.
220 mail.junjie.com ESMTP Postfix
ehlo mail.junjie.com
250-mail.junjie.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
user1--to--user2
.
250 2.0.0 Ok: queued as 4961D16DE6E
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@mail ~]# su - user2
[user2@mail ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/user2": 1 message 1 new
>N 1 [email protected] Tue Apr 10 16:37 13/472
& 1
Message 1:
From [email protected] Tue Apr 10 16:37:23 2012
X-Original-To: [email protected]
Delivered-To: [email protected]
Date: Tue, 10 Apr 2012 16:36:42 +0800 (CST)
From: [email protected]
user1--to--user2
& quit
Saved 1 message in mbox
[user2@mail ~]$
#cat /home/test/Maildir/new/ 按tab键可以看见刚才发的那封邮件,说明SMPT没有问题。
第五 Dovecot 邮局软件安装(提供pop3/imap4协议)
5.1安装Dovecot
[root@mail ~]# cd /root/mail/
[root@mail mail]# tar -zxvf dovecot-1.1.4.tar.gz -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/dovecot-1.1.4/
[root@mail dovecot-1.1.4]# groupadd dovecot
[root@mail dovecot-1.1.4]# useradd -M -s /sbin/nologin dovecot
[root@mail dovecot-1.1.4]# ./configure --sysconfdir=/etc --with-mysql && make && make install
5.2安装完成,配置
[root@mail dovecot-1.1.4]# cp /etc/dovecot-example.conf /etc/dovecot.conf
[root@mail dovecot-1.1.4]# vim /etc/dovecot.conf
23 protocols = pop3 imap
47 disable_plaintext_auth = no
87 ssl_disable = yes
208 mail_location = maildir:~/Maildir
[root@mail ~]# vim /etc/postfix/main.cf
415 home_mailbox = Maildir/
[root@mail dovecot-1.1.4]# vim /etc/pam.d/dovecot
auth required pam_nologin.so
auth include system-auth
account include system-auth
session include system-auth
#/usr/local/sbin/dovecot -c /etc/dovecot.conf 启动把这句话写入开机脚本
# pkill -1 dovecot #重新读取dovecot
[root@mail dovecot-1.1.4]# /usr/local/sbin/dovecot -c /etc/dovecot.conf
测试接受服务器dovecot
[root@mail dovecot-1.1.4]# telnet mail.junjie.com 110
Trying 192.168.101.210...
Connected to mail.junjie.com (192.168.101.210).
Escape character is '^]'.
+OK Dovecot ready.
user user2
+OK
pass 123
+OK Logged in.
list
+OK 1 messages:
1 432
.
retr 1
+OK 432 octets
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.junjie.com (mail.junjie.com [192.168.101.210])
by mail.junjie.com (Postfix) with ESMTP id 6FA1116DEF5
for <[email protected]>; Tue, 10 Apr 2012 17:46:37 +0800 (CST)
Message-Id: <[email protected]>
Date: Tue, 10 Apr 2012 17:46:37 +0800 (CST)
From: [email protected]
11111111111111
.
quit
+OK Logging out.
Connection closed by foreign host.
第六 安装Webmail软件
6.1 squirrelmail安装
[root@mail ~]# cd mail/
[root@mail mail]# tar -zxvf squirrelmail-webmail-1.4.22.tar.gz -C /usr/local/apache2/htdocs/
[root@mail mail]# cd /usr/local/apache2/htdocs/
[root@mail htdocs]# mv squirrelmail-webmail-1.4.22/ webmail
6.2 配置webmail
[root@mail htdocs]# cd /usr/local/apache2/htdocs/webmail/
[root@mail webmail]# mkdir -p attach data/
[root@mail webmail]# chown -R daemon:daemon attach/ data/
[root@mail webmail]# chmod 730 attach/
[root@mail webmail]# cp config/config_default.php config/config.php
[root@mail webmail]# vim config/config.php
118 $domain = 'junjie.com';
146 $smtpServerAddress = 'localhost';
151 $smtpPort = 25;
210 $imapPort = 143;
231 $imap_server_type = 'dovecot';
499 $data_dir = '/usr/local/apache2/htdocs/webmail/data/';
517 $attachment_dir = '/usr/local/apache2/htdocs/webmail/attach/';
6.3重启 apache 服务
[root@mail webmail]# /usr/local/apache2/bin/apachectl restart
6.4测试:客户端IE地址栏中输入 http://mail.junjie.com/webmail (前提mail.junjie.com可以被解析,否则用ip)即可看见下图:
到此我们的postfix+webmail已经安装完成,但是为了使我们更好的管理维护邮件服务器的前端与后台接下来我们来安装extmail和extman以便实现我们的需求。
6.5 初始化 extman 软件
6.5.1 数据库脚本
[root@mail ~]# service mysqld restart
Shutting down MySQL.. [ OK ]
Starting MySQL. [ OK ]
[root@mail ~]# cd mail/
[root@mail mail]# tar -zxvf extman-1.1.tar.gz -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/extman-1.1/docs/
6.5.2脚本导入数据库的时候会询问密码,默认情况下root用户密码为空
[root@mail docs]# mysql -u root -p < extmail.sql
Enter password:
[root@mail docs]# mysql -u root -p <init.sql
Enter password:
#注意这里在5.3版本中汇出错
ERROR 1064 (42000) at line 50: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM COMMENT='Ext/Webman - Admin Accounts'' at line 15
原因:编写数据库的版本比当前安装的版本不相同。
解决:1、用文本编辑器打开extmail.sql;
2、查找/替换,将数据库文件内的所有TYPE=MyISAM修改为ENGINE=MyISAM,保存退出;
3、重新导入extmail.sql即可。
第七重天 配置 Postfix
#查看模块,#postconf -m |grep mysql 返回值有mysql,说明可以支持mysql 数据库的查询表
[root@mail docs]# cd
[root@mail ~]# postconf -m |grep mysql
mysql
7.1 修改配置文件
[root@mail ~]# vim /etc/postfix/main.cf
162-163行需要注释掉
162 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
163 # mail.$mydomain, www.$mydomain, ftp.$mydomain
652 virtual_mailbox_base = /mailbox
653 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
654 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
655 virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
656 virtual_uid_maps = static:1000
657 virtual_gid_maps = static:1000
658 virtual_transport = virtual
[root@mail ~]# cd /usr/local/src/extman-1.1/docs/
[root@mail docs]# cp mysql_virtual_* /etc/postfix/
第八重天 虚拟用户设置SMTP发信认证
8.1 软件安装
注意:确认系统中的rpm格式的mysql 软件被卸载
[root@mail ~]# cd mail/
[root@mail mail]# tar -jxvf courier-authlib-0.62.4.tar.bz2 -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/courier-authlib-0.62.4/
[root@mail courier-authlib-0.62.4]# ./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --with-authmysql --with-redhat --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql
install-configure #生成默认配置文件authmysqlrc 和 authdaemonrc
[root@mail courier-authlib-0.62.4]# make && make install && make install-configure
8.2 添加courier-authlib的库文件路径
[root@mail courier-authlib-0.62.4]# vim /etc/ld.so.conf.d/courier-authlib.conf
/usr/local/courier-authlib/lib/courier-authlib
[root@mail courier-authlib-0.62.4]# ldconfig -v |grep courier-authlib
/usr/local/courier-authlib/lib/courier-authlib:
8.3 修改authdaemonrc主配置文件
[root@mail courier-authlib-0.62.4]# cd /usr/local/courier-authlib/etc/authlib
[root@mail authlib]# cp authdaemonrc authdaemonrc.bak
[root@mail authlib]# vim authdaemonrc
27 authmodulelist="authmysql"
34 authmodulelistorig="authmysql"
[root@mail authlib]# chmod -R 755 /usr/local/courier-authlib/var/spool/authdaemon/
8.4 修改authmysqlrc 文件
[root@mail authlib]# cd /usr/local/courier-authlib/etc/authlib
[root@mail authlib]# cp authmysqlrc authmysqlrc.bak
[root@mail authlib]# vim authmysqlrc
26 MYSQL_SERVER localhost
27 MYSQL_USERNAME extmail
28 MYSQL_PASSWORD extmail
49 MYSQL_SOCKET /tmp/mysql.sock
56 MYSQL_PORT 3306
68 MYSQL_DATABASE extmail
83 MYSQL_USER_TABLE mailbox
92 MYSQL_CRYPT_PWFIELD password
113 MYSQL_UID_FIELD uidnumber
119 MYSQL_GID_FIELD gidnumber
128 MYSQL_LOGIN_FIELD username
133 MYSQL_HOME_FIELD concat('/mailbox/',homedir)
139 MYSQL_NAME_FIELD name
150 MYSQL_MAILDIR_FIELD concat('/mailbox/',maildir
8.5. 复制courier-authlib脚本,并启动courier-authlib服务。
[root@mail authlib]# cd /usr/local/src/courier-authlib-0.62.4/
[root@mail courier-authlib-0.62.4]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
[root@mail courier-authlib-0.62.4]# cd
[root@mail ~]# chmod 755 /etc/init.d/courier-authlib
[root@mail ~]# chkconfig --add courier-authlib
[root@mail ~]# chkconfig --level 2345 courier-authlib on
[root@mail ~]# chkconfig --list courier-authlib
courier-authlib 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@mail ~]# service courier-authlib start
Starting Courier authentication services: authdaemond
[root@mail ~]# ps -aux |grep courier-authlib
第九重天 修改Cyrus sasl 设置
#添加如下文件
[root@mail ~]# vim /usr/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socke
第十 修改Dovecot配置
10.1修改Dovecot
[root@mail ~]# vim /etc/dovecot.conf
208 mail_location = maildir:/mailbox/%d/%n/Maildir
790 auth default {
795 mechanisms = plain
828 # passdb pam {
857 # }
899 passdb sql {
901 args = /etc/dovecot-mysql.conf
902 }
962 userdb sql {
964 args = /etc/dovecot-mysql.conf
965 }
#打开一行,postfix的配置文件也要该(可能已经改过)
[root@mail ~]# vim /etc/postfix/main.cf
415 home_mailbox = Maildir/
10.2 建立数据查询配置文件,手动产生/etc/dovecot-mysql.conf文件:
[root@mail ~]# vim /etc/dovecot-mysql.conf
1 ver = mysql
2 connect = host=localhost dbname=extmail user=extmail password=extmail
3 default_pass_scheme = CRYPT
4 password_query = SELECT username AS user,password AS password FROM m ailbox WHERE username = ‘%u’
5 user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FRO M mailbox WHERE username = ‘%u’
第十一 建立虚拟用户
11.1 建立邮箱目录并调整权限
[root@mail ~]# mkdir -p /mailbox/extmail.org/postmaster/Maildir
[root@mail ~]# cd /mailbox/extmail.org/postmaster/Maildir/
[root@mail Maildir]# chown -R postfix:postfix /mailbox/
#启动服务
[root@mail Maildir]# dovecot
Fatal: Dovecot is already running with PID 29275 (read from /usr/local/var/run/dovecot/master.pid)
[root@mail Maildir]# /usr/local/sbin/dovecot -c /etc/dovecot.conf
Fatal: Dovecot is already running with PID 29275 (read from /usr/local/var/run/dovecot/master.pid)
11.2 虚拟用户测试
确认authlib服务
[root@mail Maildir]# /usr/local/courier-authlib/sbin/authtest -s login [email protected] extmail
Authentication succeeded.
Authenticated: [email protected] (uid 1000, gid 1000)
Home Directory: /mailbox/extmail.org/postmaster
Maildir: /mailbox/extmail.org/postmaster/Maildir/
Quota: (none)
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
Cleartext Password: extmail
Options: (none)
(其实这时候如果验证不通过,后面的虚拟用户也可以建立) 成功提示信息
第十二 ExtMail平台
基于Perl 语言开发的中文Webmail管理平台
套件:ExtMail --Web 界面的邮件操作
Extman �CWeb 界面的邮件系统管理
12.1平台安装
3个倚赖包
[root@mail Maildir]# cd /root/mail/
[root@mail mail]# ll
[root@mail mail]# tar -zxf Unix-Syslog-1.1.tar.gz -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/Unix-Syslog-1.1/
[root@mail Unix-Syslog-1.1]# perl Makefile.PL && make && make install
[root@mail Unix-Syslog-1.1]# cd /root/mail/
[root@mail mail]# ll
[root@mail mail]# tar -zxf DBI-1.616.tar.gz -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/DBI-1.616/
[root@mail DBI-1.616]# perl Makefile.PL && make && make install
[root@mail DBI-1.616]# cd /root/mail/
[root@mail mail]# ll
[root@mail mail]# tar -zxf DBD-mysql-4.020.tar.gz -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/DBD-mysql-4.020/
[root@mail DBD-mysql-4.020]# perl Makefile.PL && make && make install
#注意以上三个包在编译安装过程可能会提示 警告信息 隐式函数 计算出的变量值未被使用等,只要没有error信息就一切ok
安装ExtMail
[root@mail DBD-mysql-4.020]# cd /root/mail/
[root@mail mail]# ll
[root@mail mail]# tar -zxf extmail-1.2.tar.gz -C /usr/local/apache2/htdocs/
[root@mail mail]# cd /usr/local/apache2/htdocs/
[root@mail htdocs]# ll
[root@mail htdocs]# mv extmail-1.2 extmail
[root@mail htdocs]# cd extmail/
[root@mail extmail]# chown -R postfix:postfix cgi/
[root@mail extmail]# ll
[root@mail extmail]# cp webmail.cf.default webmail.cf
[root@mail extmail]# ll
12.2 修改配置文件
[root@mail extmail]# vim webmail.cf
2 SYS_CONFIG = /usr/local/apache2/htdocs/extmail/
5 SYS_LANGDIR = /usr/local/apache2/htdocs/extmail/lang
8 SYS_TEMPLDIR = /usr/local/apache2/htdocs/extmail/html
127 SYS_MAILDIR_BASE = /mailbox
139 SYS_MYSQL_USER = extmail
140 SYS_MYSQL_PASS = extmail
141 SYS_MYSQL_DB = extmail
142 SYS_MYSQL_HOST = localhost
143 SYS_MYSQL_SOCKET = /tmp/mysql.sock
12.3 修改apache服务,添加虚拟主机
[root@mail extmail]# vim /usr/local/apache2/conf/httpd.conf
66 User postfix
67 Group postfix
412 NameVirtualHost *:80
413 <VirtualHost *:80>
414 ServerName mail.junjie.com
415 DocumentRoot /usr/local/apache2/htdocs/extmail/html/
416 ScriptAlias /extmail/cgi/ "/usr/local/apache2/htdocs/extmail/cgi/"
417 Alias /extmail "/usr/local/apache2/htdocs/extmail/html/"
418 </VirtualHost>
#这里由于前面我们并没有启用Suexec 所以我们没有在虚拟主机中添加 SuexecUerGroup postfix postfix
#重启apache
[root@mail extmail]# /usr/local/apache2/bin/apachectl restart
12.4 Extmail无法访问问题原因
到这一步很多网上的文档都会说这时候只要在客户端访问 http://mail.junjie.com 就可以看到ExtMail的登录界面,但是经过我很多次实践改动配置得到的结果都是访问页面不存在404的错误提示页面,一度我曾认为可能是我之前编译的那三个倚赖包有问题,或者是我的PHP有问题,以及cgi权限问题都想到但是结果依然是404页面不存在,但是我可以很正常的看到访问http://mail.junjie.com时候页面确实是跳转到了http://mail.junjie.com/extmail/cgi/index.cgi这个目录,而且我这个目录中文件确实存在,没有任何问题,经过我多次尝试终于找到原因如果要成功的访问到这个页面就必须把Extman装上,并且在apache配置文件中写入extman的路径这样我终于如愿以偿的看到了期望已久的ExtMail的登录界面。
下面我们开始安装Extman
第十三 Extman平台
13.1 安装包
4个倚赖包
[root@mail extmail]# cd /root/mail/
[root@mail mail]# tar -zxf GD-2.46.tar.gz -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/GD-2.46/
[root@mail GD-2.46]# perl Makefile.PL && make && make install
[root@mail GD-2.46]# cd /root/mail/
[root@mail mail]# tar -zxf File-Tail-0.99.3.tar.gz -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/File-Tail-0.99.3/
[root@mail File-Tail-0.99.3]# perl Makefile.PL && make && make install
[root@mail File-Tail-0.99.3]# cd /root/mail/
[root@mail mail]# rpm -ivh rrdtool-1.2.23-3.el5.i386.rpm
[root@mail mail]# rpm -ivh rrdtool-perl-1.2.23-3.el5.i386.rpm
Extman 套件
[root@mail mail]# tar -zxf extman-1.1.tar.gz -C /usr/local/apache2/htdocs/
[root@mail mail]# cd /usr/local/apache2/htdocs/
[root@mail htdocs]# ll
[root@mail htdocs]# mv extman-1.1 extman
[root@mail htdocs]# ll
[root@mail htdocs]# cd extman/
[root@mail extman]# chown -R postfix:postfix cgi/
[root@mail extman]# mkdir /tmp/extman
[root@mail extman]# chown -R postfix:postfix /tmp/extman/
13.2 修改配置文件
[root@mail extman]# cp webman.cf.default webman.cf
[root@mail extman]# ll
[root@mail extman]# vim webman.cf
2 SYS_CONFIG = /usr/local/apache2/htdocs/extman/
5 SYS_LANGDIR = /usr/local/apache2/htdocs/extman/lang
8 SYS_TEMPLDIR = /usr/local/apache2/htdocs/extman/html
12 SYS_MAILDIR_BASE = /mailbox
127 SYS_MYSQL_USER = webman
128 SYS_MYSQL_PASS = webman
129 SYS_MYSQL_DB = extmail
130 SYS_MYSQL_HOST = localhost
131 SYS_MYSQL_SOCKET = /tmp/mysql.sock
13.3 调整apache主配文件。添加extman相关目录别名
[root@mail extman]# vim /usr/local/apache2/conf/httpd.conf
412 NameVirtualHost *:80
413 <VirtualHost *:80>
414 ServerName mail.junjie.com
415 DocumentRoot /usr/local/apache2/htdocs/extmail/html/
416 ScriptAlias /extmail/cgi/ "/usr/local/apache2/htdocs/extmail/cgi/"
417 Alias /extmail "/usr/local/apache2/htdocs/extmail/html/"
418 ScriptAlias /extman/cgi "/usr/local/apache2/htdocs/extman/cgi/"
419 Alias /extman "/usr/local/apache2/htdocs/extman/html/"
420 </VirtualHost>
[root@mail extman]# /usr/local/apache2/bin/apachectl restart
13.4 现在在客户端访问
http://mail.junjie.com 就可以看见ExtMail的登录界面了。在客户端访问
http://mail.junjie.com/extman 就可以看见Extman后台管理登录界面了
默认管理员账户:[email protected]
默认密码:extmail*123*
#如无法登录禁用校验码,将1改为0
#[root@mail ~]# vim /usr/local/apache2/htdocs/extman/webman.cf
#21 SYS_CAPTCHA_ON = 1
第十四重天设置邮件系统的图形化日志信息
[root@mail ~]# ln -sf /usr/local/apache2/htdocs/extman/addon/mailgraph_ext/mailgraph-init /usr/sbin/
[root@mail ~]# ln -sf /usr/local/apache2/htdocs/extman/addon/mailgraph_ext/qmonitor.pl /usr/sbin/
[root@mail ~]# cp -a /usr/local/apache2/htdocs/extman/addon/mailgraph_ext/ /usr/local/
[root@mail ~]# mailgraph-init start
Starting mail statistics grapher: mailgraph_ext
Starting queue statistics grapher: qmonitor
[root@mail ~]# qmonitor.pl start &
[1] 6837
[root@mail ~]# echo "/usr/sbin/qmoonitor.pl start" >> /etc/rc.d/rc.local
[root@mail ~]# echo "/usr/sbin/mailgraph-init start" >> /etc/rc.d/rc.local
第十五登录测试
15.1 Extmail 登录页面,下面附上我成功访问之后的登录界面如下图:
15.2 Extman登录页面,输入http://mail.junjie.com/extman
登录ExtMail
这里需要注意一点就是要登录extmail必须解析域名,使用IP访问时候无法登录,会提示IP域名无效。下面我们看一下登录进去的界面。
第十六 Extman后台管理设置
16.1 首页概况,登录进去首页显示系统管理员列表
域列表中的qq.com,junjie.com是我们刚才创建的
16.2 添加域
基础设置设置域名、域名描述、最大用户、最大别名、最大限额、最大网络磁盘限额、传输方式、还有是否允许自由注册(如果勾上这个选项的话,在ExtMail登录页面下面有一个免费注册邮箱就可以注册,如果不勾的话注册免费邮箱时候就会提示域名不提供注册服务!)是否激活域名、最后是域名过期日期。
16.2.1 模版设置
设置域名新账户默认限额、网络磁盘限额、新账户默认生命周期以及新账户默认开启的服务
16.3 添加用户
基础设置设置用户名,后面可选用户所在的域。
用户的磁盘限额、网络磁盘限额以及过期日期是否激活等(默认磁盘、网络磁盘限额为5M)设置完基本信息保存修改会提示密码错误,所有要设置密码之后才可以保存修改。
16.3.1 密码设置
设置密码、密码找回问题以及是否禁止用户修改密码
16.3.2 功能设置
这里一般保持默认即可
16.4 添加别名
可以添加别名、别名所在的域,设置多个目标地址提示目标地址每行只能写一个并激活
16.5 添加管理员
管理员名称、通用名、过期日期是否激活等。同普通用户一样需要设置密码才能保存修改。
16.5.1 密码相关设置
同普通用户一样也是设置密码、找回密码问题与答案是否禁止用户修改密码等
16.5.2 管理域名
可以设置管理员管理的域名增加、删除域名等
16.6 群发邮件
按照提示说明可以设置邮件的群发,可用于通知类型的邮件
16.7 图像日志
在这里可以查看各类日志分析邮件服务器是否正常
第十七 Extmail登录
17.1 邮件用户注册界面首页,点击免费注册邮箱
17.2 邮件用户登录界面首页
17.3 偏好设置
这里可以设置个人的信息包括姓名、密码及密码问题等
17.4 发信测试
[email protected]给[email protected]发信测试
17.5 收信测试(成功)
[email protected]登录收信测试
发现成功接收2封邮件,一封是[email protected]发的,
另一封是[email protected]的群发邮件
#其他选项卡同其他的邮件服务器一样。
#注意:一直登陆不上extman,提示校验码不对,是因为系统时间和客户端时间不对
第十八 垃圾邮件过滤
18.1 根据客户端的主机名/地址过滤邮件,添加
[root@mail ~]# vim /etc/postfix/main.cf
659 smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
[root@mail ~]# vim /etc/postfix/access
447 192.168.100 REJECT
448 192.168.100.210 OK
449 bbc.com REJECT
[root@mail ~]# postmap /etc/postfix/access
18.2 根据客户机HELO 信息中的主机名地址过滤邮件
[root@mail ~]# vim /etc/postfix/main.cf
660 smtpd_helo_required = yes
661 smtpd_helo_restrictions = reject_invalid_hostname
[root@mail ~]# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
[root@mail ~]# service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
18.3 根据发件人的地址过滤邮件
[root@mail ~]# vim /etc/postfix/main.cf
662 smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_sender_maps.cf,mysql:/etc/postfix/mysql_virtual_alias_maps.cf
663 smtpd_sender_restrictions = permit_mynetworks,reject_sender_login-mismatch,reject_non_fqdn_sender,reject_unknown_sender_domain,che ck_sender_access hash:/etc/postfix/sender_access
[root@mail ~]# vim /etc/postfix/sender_access
[email protected] REJECT
marketing@ REJECT
fake.aptech.com REJECT
[root@mail ~]# postmap /etc/postfix/sender_access
18.4 根据收件人的地址过滤邮件
[root@mail ~]# vim /etc/postfix/main.cf
664 smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_non_fqdn_ recipient,re ject_unknown_recipient_domain
[root@mail ~]# service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
18.5 基于邮件内容的过滤
18.5.1安装并配置MailScanner 扫描调度工具
1) 安装MailScanner 扫描调度工具,(安装时间非常长)
[root@mail ~]# cd mail/
[root@mail mail]# ll
[root@mail mail]# tar -zxf MailScanner-4.84.3-1.rpm.tar.gz -C /usr/local/src/
[root@mail mail]# cd /usr/local/src/MailScanner-4.84.3-1/
[root@mail MailScanner-4.84.3-1]# ls
[root@mail MailScanner-4.84.3-1]# ./install.sh
2) 修改配置文件MailScanner
[root@mail MailScanner-4.84.3-1]# cd
[root@mail ~]# vim /etc/MailScanner/MailScanner.conf
131 Run As User = postfix
136 Run As Group = postfix
165 Incoming Queue Dir = /var/spool/postfix/hold
169 Outgoing Queue Dir = /var/spool/postfix/incoming
196 MTA = postfix
2231 Required SpamAssassin Score = 7
2237 High SpamAssassin Score = 10
2437 Spam Actions = deliver header "X-Spam-Status: Yes"
2499 High Scoring Spam Actions = delete forward [email protected]
3) 配置Postfix 支持调用MailScanner
[root@mail ~]# vim /etc/postfix/main.cf
520 header_checks = regexp:/etc/postfix/header_checks
#最后添加
[root@mail ~]# vim /etc/postfix/header_checks
497 /^Received:/HOLD
4) 调整邮件过滤队列的目录属主、属组,并启动MailScanner 服务程序
[root@mail ~]# chown -R postfix:postfix /var/spool/MailScanner/incoming/
[root@mail ~]# chown -R postfix:postfix /var/spool/MailScanner/quarantine/
[root@mail ~]# service MailScanner start
Starting MailScanner daemons:
incoming postfix: [ OK ]
outgoing postfix: [ OK ]
MailScanner: [ OK ]
[root@mail ~]# chkconfig --level 35 MailScanner on
[root@mail ~]# chkconfig --list MailScanner
MailScanner 0:off 1:off 2:on 3:on 4:on 5:on 6:off
18.5.2 安装并配置SpamAssassin 垃圾邮件过滤器
1) 安装并配置SpamAssassin 垃圾邮件过滤器
[root@mail ~]# yum install spamassassin -y
2) 修改配置文件local.cf
(位于“/etc/mail/spamassassin/local.cf”,一般不需要进行任何修改,保
持默认设置即可)
3) 启动SpamAssassin 服务
[root@mail ~]# chkconfig --level 2345 spamassassin on
[root@mail ~]# chkconfig --list spamassassin
spamassassin 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@mail ~]# service spamassassin start
Starting spamd: [ OK ]
18.5.3 安装并配置F-Port 病毒查杀软件
1) 安装F-Port 软件包安装过程中出现提示是按回车键接受默认设置
[root@mail ~]# cd mail/
[root@mail mail]# ll
[root@mail mail]# tar -zxvf fp-Linux-i686-ws.tar.gz -C /opt/
[root@mail mail]# cd /opt/f-prot/
[root@mail f-prot]# ls
[root@mail f-prot]# ./install-f-prot.pl
2) 升级F-Port 病毒库(服务器要能够访问Internet 互联网)
[root@mail f-prot]# /opt/f-prot/fpupdate
[root@mail f-prot]# crontab �Ce (计划任务)
00 8 * * * /opt/f-prot/fpupdate
[root@mail f-prot]# chkconfig --level 2345 crond on
[root@mail f-prot]# service crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
18.6测试一下你的邮件服务器防病毒能力如何
病毒测试数据:X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
垃圾邮件测试数据:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
测试防垃圾,防病毒邮件过滤能力失败