linux下构建LAMP+Postfix+Dovecot+SquirrelMail+Extmail+Extman+
linux下mail服务器架构之源码实现postfix全功能电子邮件
第一、安装前的准备工作:
[root@junjie ~]# uname –r #查看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 –p 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 border="0" src="http://img.07net01.com/upload/images/2015/02/20/1493503201633162.png" />
[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 –m
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 border="0" src="http://img.07net01.com/upload/images/2015/02/20/1493503201633164.png" />
到此我们的postfix+webmail已经安装完成,但是为了使我们更好的管理维护邮件服务器的前端与后台接下来我们来安装extmail和extman以便实现我们的需求。
6.5 初始化 extman 软件
[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 border="0" src="http://img.07net01.com/upload/images/2015/02/20/1493503201633165.png" />
http://mail.junjie.com/extman 就可以看见Extman后台管理登录界面了
默认管理员账户:root@extmail.org
默认密码: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 发信测试
qq1@qq.com给xjzhujunjie@junjie.com发信测试

17.5 收信测试(成功)
xjzhujunjie@junjie.com登录收信测试
发现成功接收2封邮件,一封是qq1@qq.com发的,
另一封是postmaster@extmail.org的群发邮件



#其他选项卡同其他的邮件服务器一样。
#注意:一直登陆不上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
ds@163.com 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 spam@extmail.org
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 border="0" src="http://img.07net01.com/upload/images/2015/02/20/14935032016331641.png" />

2) 升级F-Port 病毒库(服务器要能够访问Internet 互联网)
[root@mail f-prot]# /opt/f-prot/fpupdate

[root@mail f-prot]# crontab –e (计划任务)
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

浙公网安备 33010602011771号