linux下構建LAMP+Postfix+Dovecot+SquirrelMail+Extmail+Extman+SpamAssassin防垃圾

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 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 –with-suexec-caller=daemon

#–with-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 –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 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

&gt;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  &lt;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 –Web 界面的郵件系統管理

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 &lt;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" &gt;&gt; /etc/rc.d/rc.local

[root@mail ~]# echo "/usr/sbin/mailgraph-init start" &gt;&gt; /etc/rc.d/rc.local

第十五登錄測試

15.1 Extmail 登錄頁面,下面附上我成功訪問之後的登錄界面如下圖:

15.2 Extman登錄頁面,輸入http://mail.junjie.com/extman

登錄ExtMail

這裏需要注意一點就是要登錄extmail必須解析域名,使用IP訪問時候無法登錄,會提示IP域名無效。下面我們看一下登錄進去的界面。

第十六 Extman後臺管理設置

16.1 首頁概況,登錄進去首頁顯示系統管理員列表

域列表中的qq.comjunjie.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 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

 

測試防垃圾,防病毒郵件過濾能力失敗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章