linux郵件服務器配置過程

  郵件服務器是linux系統中常用的服務器

  郵件服務器的工作過程:

  用戶使用用戶名和密碼通過認證之後,通過MUA寫好郵件,然後通過本機的smtp客戶端發送給本地域指定的郵件服務器,管理本地域的郵件服務器通過運行的MTA來接收郵件;如果是發往本域的郵件,則通過MDA投遞到對應用戶的郵箱中,如果是發往其它的域,則進行中繼,通過管理本地域的郵件服務器的smtp客戶端發給管理目標域的郵件服務器,管理目標域的郵件服務器執行相同的操作。而當郵件到達目的地點,接收郵件的用戶通過通過認證之後,就可以利用MRA在郵件服務器上查看和下載郵件,整個過程結束。
 
  本文主要通過bind+mysql+httpd+dovecot+postfix+cyrus-sasl+courier-authlib+extmail+extman來實現郵件服務器的工作。
 
  注:
 
1,bind
提供DNS服務。郵件服務器管理的是一個域,故需要我們用MX記錄指定一個域的郵件服務器。現在的郵件服務器,在接受客戶端的請求之前,先反解客戶端的ip地址,如果ip和主機名不匹配,則直接拒收。這個可以放在ADSL用戶建立郵件服務器,發送垃圾郵件。郵件服務器的優先級通過DNS中的MX記錄的優先級來定義,0-99,值越小優先 級越高。當有主機發送郵件的時候,會放送給優先級最高的服務器,只有這個優先級最高的服務器繁忙或是出現問題時,從郵件服務器接收請求,然後等優 先級最高的服務器正常的時候,再發送給優先級最高的服務器對郵件進行處理。
2,mysql
我們提供認證功能,賬號密碼存放至mysql中
3,httpd
用於提供webmail功能
4,dovecot
用於用戶下載文件
5,postfix
接收郵件,並且有自動投遞郵件的功能
6,cyrus-sasl
實現安全的認證
7,courier-authlib
認證所依賴的庫
7,extmail 
一個實現webmail的工具
8,extman
用於管理extmail的工具
我們常見的相關郵件服務的協議有:smtp、IMAP,POP3、S/MIME
smtp:工作在tcp的25號端口,主要用於發送和接收郵件,有smtp和smtpd進程之分。smtp用於發送郵件,smtpd用於接受郵件。而通常情況下,無論是microsoft的系統還是linux系統,系統本身自帶的有smtp服務,故我們可以在pc上通過outlookexpress和web發送郵件。
IMAP,POP3:IMAP工作在tcp的143端口,pop3工作在tcp的110端口,用於用戶查看和下載郵件
S/MIME:多用途互聯網郵件擴展,是一個互聯網標準,它擴展了電子郵件標準,使其能夠支持非ASCII字符、二進制格式附件等多種格式的郵件.
 
一、安裝前的準備工作:
 
首先確保yum源已配好(可以是系統安裝光盤),安裝以下所需要的安裝包:
 
1、安裝以下開發所用到的rpm包組:
Development Libraries
Development Tools
Legacy Software Development
X Software Development
 
方法:
# yum groupinstall "packge_group_name"
# yum install bind bind-utils,bind-libs
 
爲bind提供主配置文件:
 
vim /etc/named.conf
options {
  directory "/var/named";
};
 
zone "." IN {
  type hint;
  file "named.ca";
}
 
zone "localhost" IN {
  type master;
  file "localhost.zone";
};
 
zone "0.0.127.in-addr.arpa" IN {
  type master;
  file "named.local";
};
 
zone "magedu.com" IN {
  type master;
  file "magedu.com.zone";
};
 
zone "16.172.in-addr-arpa" IN {
  type master;
  file "172.16.zone";
};
 
配置區域配置文件:
cd /var/named/
dig -t NS .> nemd.ca    (確保網絡正常)
vim localhost.zone
$TTL 600
@         IN       SOA     localhost.  admin.localhost. (
                   2012040101
                   20M
                   6M
                   6D
                   1D
                              )
           IN       NS       localhost.
localhost. IN       A        127.0.0.1
vim named.local
$TTL 600
@         IN       SOA       localhost.  admin.localhost. (
                   2012040101
                   20M
                   6M
                   6D
                   1D
                              )
           IN       NS       localhost.
1          IN       PTR      localhost.
 
vim magedu.com.zone
$TTL 600
$ORIGIN magedu.com.
@             IN      SOA   ns       admin  (
                      2012040101
                      20M
                      6M
                      6D
                      1D
                        )
              IN      NS     ns
              IN      MX 10  mail
ns            IN      A      172.16.30.5
mail          IN      A      172.16.30.5
pop           IN      CNAME  mail
 
vim 172.16.zone
$TTL 600
@             IN      SOA   ns.magedu.com.  admin.magedu.com.  (
                      2012040101
                      20M
                      6M
                      6D
                      1D
                        )
              IN      NS     ns.magedu.com.
5.30          IN      PTR    mail.magedu.com.
5.30          IN      PTR    ns.magedu.com.
 
檢查配置文件是否有語法錯誤:
service named configtest    #一次性檢查
named-checkconf 檢查/etc/named.conf  #主配置文件是否有語法錯誤
named-checkzone "zone_name" "name"   #檢查區域數據文件是否有語法錯誤 
 
service named start       #啓動DNS服務器
 
2、安裝所需的rpm包,包括以下這些:
httpd, tcl, tcl-devel, libart_lgpl, libart_lgpl-devel, libtool-ltdl, libtool-ltdl-devel, expect
 
3、關閉sendmail,並將它的隨系統自動啓動功能關閉:
# service sendmail stop
# chkconfig sendmail off
 
4、啓動saslauthd服務,並將其加入到自動啓動隊列:
# service saslauthd start
# chkconfig saslauthd on
 
二、安裝mysql-5.5.20
 
1、準備數據存放的文件系統
 
新建一個邏輯卷,並將其掛載至特定目錄即可。這裏不再給出過程。
 
這裏假設其邏輯卷的掛載目錄爲/mydata,而後需要創建/mydata/data目錄做爲mysql數據的存放目錄。
 
2、新建用戶以安全方式運行進程:
 
# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
# chown -R mysql:mysql /mydata/data
 
3、安裝並初始化mysql-5.5.20
 
首先下載平臺對應的mysql版本至本地,這裏是32位平臺,因此,選擇的爲mysql-5.5.19-linux2.6-i686.tar.gz,其下載位置爲ftp://172.16.0.1/pub/Sources/mysql-5.5。
 
# tar xf mysql-5.5.20-linux2.6-i686.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mysql-5.5.20-linux2.6-i686  mysql
# cd mysql 
 
# chown -R mysql:mysql  .
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# chown -R root  .
 
4、爲mysql提供主配置文件:
 
# cd /usr/local/mysql
# cp support-files/my-large.cnf  /etc/my.cnf
 
並修改此文件中thread_concurrency的值爲你的CPU個數乘以2,比如這裏使用如下行:
thread_concurrency = 2
 
另外還需要添加如下行指定mysql數據文件的存放位置:
datadir = /mydata/data
 
 
5、爲mysql提供sysv服務腳本:
 
# cd /usr/local/mysql
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
 
添加至服務列表:
# chkconfig --add mysqld
# chkconfig mysqld on
 
而後就可以啓動服務測試使用了。
 
 
爲了使用mysql的安裝符合系統使用規範,並將其開發組件導出給系統使用,這裏還需要進行如下步驟:
 
6、輸出mysql的man手冊至man命令的查找路徑:
 
編輯/etc/man.config,添加如下行即可:
MANPATH  /usr/local/mysql/man
 
7、輸出mysql的頭文件至系統頭文件路徑/usr/include:
 
這可以通過簡單的創建鏈接實現:
# ln -sv /usr/local/mysql/include  /usr/include/mysql
 
8、輸出mysql的庫文件給系統庫查找路徑:
 
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
 
而後讓系統重新載入系統庫:
# ldconfig
 
9、修改PATH環境變量,讓系統可以直接使用mysql的相關命令。具體實現過程這裏不再給出。
 
 
三、安裝配置postfix
 
# groupadd -g 2525 postfix
# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
# groupadd -g 2526 postdrop
# useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop
 
# tar zxvf postfix-2.9.1.tar.gz
# cd postfix-2.9.1
# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'
# make
# make install
 
按照以下的提示輸入相關的路徑([]號中的是缺省值,”]”後的是輸入值,省略的表示採用默認值)
 
  install_root: [/] /
  tempdir: [/root/postfix-2.9.1] /tmp/postfix
  config_directory: [/etc/postfix] /etc/postfix
  daemon_directory: [/usr/libexec/postfix] 
  command_directory: [/usr/sbin] 
  queue_directory: [/var/spool/postfix]
  sendmail_path: [/usr/sbin/sendmail]
  newaliases_path: [/usr/bin/newaliases]
  mailq_path: [/usr/bin/mailq]
  mail_owner: [postfix]
  setgid_group: [postdrop]   
    html_directory: [no]/var/www/html/postfix 
    manpages: [/usr/local/man]
    readme_directory: [no]
 
生成別名二進制文件:
#  newaliases
 
2.進行一些基本配置,測試啓動postfix並進行發信
# vim /etc/postfix/main.cf
修改以下幾項爲您需要的配置
myhostname = mail.magedu.com
myorigin = magedu.com
mydomain = magedu.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.1.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
/usr/local/postfix/sbin/postfix  start
 
連接postfix,驗正服務啓動狀況:
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.magedu.com ESMTP Postfix
ehlo mail.magedu.com
250-mail.magedu.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
250 2.1.0 Ok
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject:Mail test!
Mail test!!!
.
250 2.0.0 Ok: queued as AB94A1A561
quit
221 2.0.0 Bye
Connection closed by foreign host.
 
切換到redhat用戶進行收信:
# su - redhat
$ mail
Mail version 8.1 6/6/93.  Type ? for help.
"/var/spool/mail/redhat": 1 message 1 new
>N  1 [email protected]        Wed Sep  5 10:59  15/488   "Mail test!"
&
 
四、爲postfix提供SysV服務腳本/etc/rc.d/init.d/postfix,內容如下(#END 之前):
#!/bin/bash
#
# postfix      Postfix Mail Transfer Agent
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program \
#              that moves mail from one machine to another.
# processname: master
# pidfile: /var/spool/postfix/pid/master.pid
# config: /etc/postfix/main.cf
# config: /etc/postfix/master.cf
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ $NETWORKING = "no" ] && exit 3
 
[ -x /usr/sbin/postfix ] || exit 4
[ -d /etc/postfix ] || exit 5
[ -d /var/spool/postfix ] || exit 6
 
RETVAL=0
prog="postfix"
 
start() {
# Start daemons.
echo -n $"Starting postfix: "
        /usr/bin/newaliases >/dev/null 2>&1
/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
        echo
return $RETVAL
}
 
stop() {
  # Stop daemons.
echo -n $"Shutting down postfix: "
/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
echo
return $RETVAL
}
 
reload() {
echo -n $"Reloading postfix: "
/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $"$prog reload"
RETVAL=$?
echo
return $RETVAL
}
 
abort() {
/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $"$prog abort"
return $?
}
 
flush() {
/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $"$prog flush"
return $?
}
 
check() {
/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $"$prog check"
return $?
}
 
restart() {
stop
start
}
 
# See how we were called.
case "$1" in
  start)
start
;;
  stop)
stop
;;
  restart)
stop
start
;;
  reload)
reload
;;
  abort)
abort
;;
  flush)
flush
;;
  check)
check
;;
  status)
  status master
;;
  condrestart)
[ -f /var/lock/subsys/postfix ] && restart || :
;;
  *)
echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"
exit 1
esac
 
exit $?
 
# END
 
爲此腳本賦予執行權限:
# chmod +x /etc/rc.d/init.d/postfix
 
將postfix服務添加至服務列表:
# chkconfig --add postfix
 
設置其開機自動啓動:
# chkconfig postfix on
 
使用此腳本重新啓動服務,以測試其能否正常執行:
# service postfix restart
 
 
五、爲postfix服務開啓用戶別名支持:
 
1、在配置文件開啓基於hash的別名文件支持
 
在main.cf中,找到如下指令,而後啓用它(即移除前面的#號):
#alias_maps = hash:/etc/aliases
 
2、在/etc/aliases文件中定義新的別名項,其格式通常爲以冒號隔開的兩個字段,前一個字段爲初始目標郵件地址,後一個字段爲實際發往的地址,如:
redhat: magedu
 
3、將/etc/aliases轉換爲hash格式:
# postalias  /etc/aliases
 
4、讓postfix重新載入配置文件,即可進行測試;
 
六、實現postfix基於客戶端的訪問控制
 
1、基於客戶端的訪問控制概覽
 
postfix內置了多種反垃圾郵件的機制,其中就包括“客戶端”發送郵件限制。客戶端判別機制可以設定一系列客戶信息的判別條件:
smtpd_client_restrictions
smtpd_data_restrictions
smtpd_helo_restrictions
smtpd_recipient_restrictions
smtpd_sender_restrictions
 
上面的每一項參數分別用於檢查SMTP會話過程中的特定階段,即客戶端提供相應信息的階段,如當客戶端發起連接請求時,postfix就可以根據配置文件中定義的smtpd_client_restrictions參數來判別此客戶端IP的訪問權限。相應地,smtpd_helo_restrictions則用於根據用戶的helo信息判別客戶端的訪問能力等等。
 
如果DATA命令之前的所有內容都被接受,客戶端接着就可以開始傳送郵件內容了。郵件內容通常由兩部分組成,前半部分是標題(header),其可以由header_check過濾,後半部分是郵件正文(body),其可以由check_body過濾。這兩項實現的是郵件“內容檢查”。
 
postfix的默認配置如下:
smtpd_client_restrictions =
smtpd_data_restrictions =
smtpd_end_of_data_restrictions =
smtpd_etrn_restrictions =
smtpd_helo_restrictions =
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
smtpd_sender_restrictions =
 
這限制了只有mynetworks參數中定義的本地網絡中的客戶端才能通過postfix轉發郵件,其它客戶端則不被允許,從而關閉了開放式中繼(open relay)的功能。
 
Postfix有多個內置的限制條件,如上面的permit_mynetworks和reject_unauth_destination,但管理員也可以使用訪問表(access map)來自定義限制條件。自定義訪問表的條件通常使用check_client_access, check_helo_access, check_sender_access, check_recipient_access進行,它們後面通常跟上type:mapname格式的訪問表類型和名稱。其中,check_sender_access和check_recipient_access用來檢查客戶端提供的郵件地址,因此,其訪問表中可以使用完整的郵件地址,如[email protected];也可以只使用域名,如magedu.com;還可以只有用戶名的部分,如marion@。
 
2、實現示例1
 
這裏以禁止172.16.100.200這臺主機通過工作在172.16.100.1上的postfix服務發送郵件爲例演示說明其實現過程。訪問表使用hash的格式。
 
(1)首先,編輯/etc/postfix/access文件,以之做爲客戶端檢查的控制文件,在裏面定義如下一行:
172.16.100.200 REJECT
 
(2)將此文件轉換爲hash格式
# postmap /etc/postfix/access
 
(3)配置postfix使用此文件對客戶端進行檢查
編輯/etc/postfix/main.cf文件,添加如下參數:
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
 
(4)讓postfix重新載入配置文件即可進行發信控制的效果測試了。
 
3、實現示例2
 
這裏以禁止通過本服務器向microsoft.com域發送郵件爲例演示其實現過程。訪問表使用hash的格式。
(1)首先,建立/etc/postfix/denydstdomains文件(文件名任取),在裏面定義如下一行:
microsoft.com REJECT
 
(2)將此文件轉換爲hash格式
# postmap /etc/postfix/denydstdomains
 
(3)配置postfix使用此文件對客戶端進行檢查
編輯/etc/postfix/main.cf文件,添加如下參數:
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/denydstdomains, permit_mynetworks, reject_unauth_destination
 
(4)讓postfix重新載入配置文件即可進行發信控制的效果測試了。
 
4、檢查表格式的說明
 
hash類的檢查表都使用類似如下的格式:
pattern   action
 
檢查表文件中,空白行、僅包含空白字符的行和以#開頭的行都會被忽略。以空白字符開頭後跟其它非空白字符的行會被認爲是前一行的延續,是一行的組成部分。
 
(1)關於pattern
其pattern通常有兩類地址:郵件地址和主機名稱/地址。
 
郵件地址的pattern格式如下:
user@domain  用於匹配指定郵件地址;
domain.tld   用於匹配以此域名作爲郵件地址中的域名部分的所有郵件地址;
user@ 用於匹配以此作爲郵件地址中的用戶名部分的所有郵件地址;
 
主機名稱/地址的pattern格式如下:
domain.tld   用於匹配指定域及其子域內的所有主機;
.domain.tld   用於匹配指定域的子域內的所有主機;
net.work.addr.ess
net.work.addr
net.work
net        用於匹配特定的IP地址或網絡內的所有主機;
network/mask  CIDR格式,匹配指定網絡內的所有主機;
 
(2)關於action
 
接受類的動作:
OK   接受其pattern匹配的郵件地址或主機名稱/地址;
全部由數字組成的action   隱式表示OK;
 
拒絕類的動作(部分):
4NN text 
5NN text 
    其中4NN類表示過一會兒重試;5NN類表示嚴重錯誤,將停止重試郵件發送;421和521對於postfix來說有特殊意義,儘量不要自定義這兩個代碼;
REJECT optional text...   拒絕;text爲可選信息;
DEFER optional text...    拒絕;text爲可選信息; 
 
 
七、爲postfix開啓基於cyrus-sasl的認證功能
 
使用以下命令驗正postfix是否支持cyrus風格的sasl認證,如果您的輸出爲以下結果,則是支持的:
# postconf -a
cyrus
dovecot
 
#vi /etc/postfix/main.cf
添加以下內容:
############################CYRUS-SASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!
 
#vim /usr/lib/sasl2/smtpd.conf
添加如下內容:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
 
讓postfix重新加載配置文件
#/usr/sbin/postfix reload
 
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 Welcome to our mail.magedu.com ESMTP,Warning: Version not Available!
ehlo mail.magedu.com
250-mail.magedu.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN               (請確保您的輸出以類似兩行)
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
 
八、安裝Courier authentication library
 
1、courier簡介
 
courier-authlib是Courier組件中的認證庫,它是courier組件中一個獨立的子項目,用於爲Courier的其它組件提供認證服務。其認證功能通常包括驗正登錄時的帳號和密碼、獲取一個帳號相關的家目錄或郵件目錄等信息、改變帳號的密碼等。而其認證的實現方式也包括基於PAM通過/etc/passwd和/etc/shadow進行認證,基於GDBM或DB進行認證,基於LDAP/MySQL/PostgreSQL進行認證等。因此,courier-authlib也常用來與courier之外的其它郵件組件(如postfix)整合爲其提供認證服務。
 
2、安裝
 
安裝前說明:本文中使用的mysql是非rpm包的安裝方式安裝出來的,請確保你的系統上沒有其它的mysql相關的rpm包,否則爲courier-authlib執行configure時會報錯。如果的確要用到mysql,也可以在編譯courier-authlib完成後再將mysql安裝上。卸載本地安裝的mysql方法和安裝mysql的方法如下:
# rpm -e mysql --nodeps
# yum -y install mysql
 
接下來開始編譯安裝
# tar jxvf courier-authlib-0.62.4.tar.bz2
# cd courier-authlib-0.62.4
#./configure \
    --prefix=/usr/local/courier-authlib \
    --sysconfdir=/etc \
    --without-authpam \
    --without-authshadow \
    --without-authvchkpw \
    --without-authpgsql \
    --with-authmysql=/usr/local/mysql \
    --with-mysql-libs=/usr/local/mysql/lib \
    --with-mysql-includes=/usr/local/mysql/include \
    --with-redhat \
    --with-authmysqlrc=/etc/authmysqlrc \
    --with-authdaemonrc=/etc/authdaemonrc \
    --with-mailuser=postfix \
    --with-mailgroup=postfix \
    --with-ltdl-lib=/usr/lib \
    --with-ltdl-include=/usr/include
# make
# make install
 
# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon
# cp /etc/authdaemonrc.dist  /etc/authdaemonrc
# cp authmysqlrc  /etc/authmysqlrc
 
修改/etc/authdaemonrc 文件
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=10
 
3、配置其通過mysql進行郵件帳號認證
 
編輯/etc/authmysqlrc 爲以下內容,其中2525,2525 爲postfix 用戶的UID和GID。
MYSQL_SERVER localhost
MYSQL_PORT 3306                   (指定你的mysql監聽的端口,這裏使用默認的3306)
MYSQL_USERNAME  extmail      (這時爲後文要用的數據庫的所有者的用戶名)
MYSQL_PASSWORD extmail        (密碼)
MYSQL_SOCKET  /tmp/mysql.sock
MYSQL_DATABASE  extmail
MYSQL_USER_TABLE  mailbox
MYSQL_CRYPT_PWFIELD  password
MYSQL_UID_FIELD  '2525'
MYSQL_GID_FIELD  '2525'
MYSQL_LOGIN_FIELD  username
MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)
MYSQL_NAME_FIELD  name
MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir)
 
4、提供SysV服務腳本
 
# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
# chmod 755 /etc/init.d/courier-authlib
# chkconfig --add courier-authlib
# chkconfig --level 2345 courier-authlib on
 
#echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf
# ldconfig -v
# service courier-authlib start   (啓動服務)
 
5、事件postfix和courier-authlib
 
新建虛擬用戶郵箱所在的目錄,並將其權限賦予postfix用戶:
#mkdir –pv /var/mailbox
#chown –R postfix /var/mailbox
 
接下來重新配置SMTP 認證,編輯 /usr/lib/sasl2/smtpd.conf ,確保其爲以下內容:
pwcheck_method: authdaemond
log_level: 3
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
 
九、讓postfix支持虛擬域和虛擬用戶
 
1、編輯/etc/postfix/main.cf,添加如下內容:
########################Virtual Mailbox Settings########################
virtual_mailbox_base = /var/mailbox
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:2525
virtual_gid_maps = static:2525
virtual_transport = virtual
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
##########################QUOTA Settings########################
message_size_limit = 14336000
virtual_mailbox_limit = 20971520
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later.
virtual_overquota_bounce = yes
 
2、使用extman源碼目錄下docs目錄中的extmail.sql和init.sql建立數據庫:
/%s@TYPE=MyISAM@ENGINE=MyISAM
 
# tar zxvf  extman-1.1.tar.gz
# cd extman-1.1/docs
# mysql -u root -p < extmail.sql
# mysql -u root -p <init.sql
# cp mysql*  /etc/postfix/
 
3、授予用戶extmail訪問extmail數據庫的權限
mysql> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';
mysql> GRANT all privileges on extmail.* TO [email protected] IDENTIFIED BY 'extmail';
 
說明:啓用虛擬域以後,需要取消中心域,即註釋掉myhostname, mydestination, mydomain, myorigin幾個指令;當然,你也可以把mydestionation的值改爲你自己需要的。
 
十、配置dovecot
yum install dovecot
# vi /etc/dovecot.conf
mail_location = maildir:/var/mailbox/%d/%n/Maildir
……
auth default {
    mechanisms = plain
    passdb sql {
        args = /etc/dovecot-mysql.conf
    }
    userdb sql {
        args = /etc/dovecot-mysql.conf
    }
    ……
 
# vim /etc/dovecot-mysql.conf                 
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = CRYPT
password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'                            
user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'
 
接下來啓動dovecot服務:
 
# service dovecot start
# chkconfig dovecot on
 
 
 
十一、安裝Extmail-1.2
 
1、安裝
# tar zxvf extmail-1.2.tar.gz
# mkdir -pv /var/www/extsuite
# mv extmail-1.2 /var/www/extsuite/extmail
# cp /var/www/extsuite/extmail/webmail.cf.default  /var/www/extsuite/extmail/webmail.cf
 
2、修改主配置文件
#vi /var/www/extsuite/extmail/webmail.cf
 
部分修改選項的說明:
 
SYS_MESSAGE_SIZE_LIMIT = 5242880
用戶可以發送的最大郵件
 
SYS_USER_LANG = en_US
語言選項,可改作:
SYS_USER_LANG = zh_CN
 
SYS_MAILDIR_BASE = /home/domains
此處即爲您在前文所設置的用戶郵件的存放目錄,可改作:
SYS_MAILDIR_BASE = /var/mailbox
 
SYS_MYSQL_USER = db_user
SYS_MYSQL_PASS = db_pass
以上兩句句用來設置連接數據庫服務器所使用用戶名、密碼和郵件服務器用到的數據庫,這裏修改爲:
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
 
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock
修改爲:
SYS_MYSQL_SOCKET = /tmp/mysql.sock
 
SYS_MYSQL_HOST = localhost
指明數據庫服務器主機名,這裏默認即可
 
SYS_MYSQL_TABLE = mailbox
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_DOMAIN = domain
SYS_MYSQL_ATTR_PASSWD = password
 
以上用來指定驗正用戶登錄裏所用到的表,以及用戶名、域名和用戶密碼分別對應的表中列的名稱;這裏默認即可
 
SYS_AUTHLIB_SOCKET = /var/spool/authdaemon/socket
此句用來指明authdaemo socket文件的位置,這裏修改爲:
SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket
 
 
3、apache相關配置
 
由於extmail要進行本地郵件的投遞操作,故必須將運行apache服務器用戶的身份修改爲您的郵件投遞代理的用戶;本例中打開了apache服務器的suexec功能,故使用以下方法來實現虛擬主機運行身份的指定。此例中的MDA爲postfix自帶,因此將指定爲postfix用戶:
<VirtualHost *:80>
ServerName mail.magedu.com
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
Alias /extmail /var/www/extsuite/extmail/html
SuexecUserGroup postfix postfix
</VirtualHost>
 
修改 cgi執行文件屬主爲apache運行身份用戶:
# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
 
如果您沒有打開apache服務器的suexec功能,也可以使用以下方法解決:
# vi /etc/httpd/httpd.conf
User postfix
Group postfix
 
<VirtualHost *:80>
ServerName mail.magedu.com
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
Alias /extmail /var/www/extsuite/extmail/html
</VirtualHost>
 
4、依賴關係的解決
 
extmail將會用到perl的Unix::syslogd功能,您可以去http://search.cpan.org搜索下載原碼包進行安裝。
# tar zxvf Unix-Syslog-0.100.tar.gz
# cd Unix-Syslog-0.100
# perl Makefile.PL
# make
# make install
 
5、啓動apache服務
# service httpd start
# chkconfig httpd on
 
 
 
十二、安裝Extman-1.1
 
1、安裝及基本配置
 
# tar zxvf  extman-1.1.tar.gz
# mv extman-1.1 /var/www/extsuite/extman
 
修改配置文件以符合本例的需要:
# cp /var/www/extsuite/extman/webman.cf.default  /var/www/extsuite/extman/webman.cf
# vi /var/www/extsuite/extman/webman.cf
 
SYS_MAILDIR_BASE = /home/domains
此處即爲您在前文所設置的用戶郵件的存放目錄,可改作:
SYS_MAILDIR_BASE = /var/mailbox
 
SYS_DEFAULT_UID = 1000
SYS_DEFAULT_GID = 1000
此兩處後面設定的ID號需更改爲前而創建的postfix用戶和postfix組的id號,本文使用的是2525,因此,上述兩項需要修改爲:
SYS_DEFAULT_UID = 2525
SYS_DEFAULT_GID = 2525
 
SYS_MYSQL_USER = webman
SYS_MYSQL_PASS = webman
修改爲:
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
 
SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock
修改爲:
SYS_MYSQL_SOCKET = /tmp/mysql.sock
 
而後修改cgi目錄的屬主:
# chown -R postfix.postfix /var/www/extsuite/extman/cgi/
 
在apache的主配置文件中Extmail的虛擬主機部分,添加如下兩行:
ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
Alias /extman /var/www/extsuite/extman/html
 
創建其運行時所需的臨時目錄,並修改其相應的權限:
#mkdir  -pv  /tmp/extman
#chown postfix.postfix  /tmp/extman
 
修改
SYS_CAPTCHA_ON = 1
SYS_CAPTCHA_ON = 0
 
好了,到此爲止,重新啓動apache服務器後,您的Webmail和Extman已經可以使用了,可以在瀏覽器中輸入指定的虛擬主機的名稱進行訪問,如下:
http://mail.magedu.com
 
選擇管理即可登入extman進行後臺管理了。默認管理帳號爲:[email protected]  密碼爲:extmail*123*
 
說明:
(1) 如果您安裝後無法正常顯示校驗碼,安裝perl-GD模塊會解決這個問題。如果想簡單,您可以到以下地址下載適合您的平臺的rpm包,安裝即可:  http://dries.ulyssis.org/rpm/packages/perl-GD/info.html
(2) extman-1.1自帶了圖形化顯示日誌的功能;此功能需要rrdtool的支持,您需要安裝此些模塊纔可能正常顯示圖形日誌。
 
 
2、配置Mailgraph_ext,使用Extman的圖形日誌:(下面所需的軟件包面要自己下載)
 
接下來安裝圖形日誌的運行所需要的軟件包Time::HiRes、File::Tail和rrdtool,其中前兩個包您可以去http://search.cpan.org搜索並下載獲得,後一個包您可以到 http://oss.oetiker.ch/rrdtool/pub/?M=D下載獲得; 注意安裝順序不能改換。
 
安裝Time::HiRes
#tar zxvf Time-HiRes-1.9707.tar.gz
#cd Time-HiRes-1.9707
#perl Makefile.PL
#make
#make test
#make install
 
安裝File::Tail
#tar zxvf File-Tail-0.99.3.tar.gz
#cd File-Tail-0.99.3
#perl Makefile
#make
#make test
#make install
 
安裝rrdtool-1.2.23
#tar zxvf rrdtool-1.2.23.tar.gz
#cd rrdtool-1.2.23
#./configure --prefix=/usr/local/rrdtool
#make
#make install
 
創建必要的符號鏈接(Extman會到這些路徑下找相關的庫文件)
#ln -sv /usr/local/rrdtool/lib/perl/5.8.5/i386-linux-thread-multi/auto/RRDs/RRDs.so   /usr/lib/perl5/5.8.5/i386-linux-thread-multi/
#ln -sv /usr/local/rrdtool/lib/perl/5.8.5/RRDp.pm   /usr/lib/perl5/5.8.5
#ln -sv /usr/local/rrdtool/lib/perl/5.8.5/i386-linux-thread-multi/RRDs.pm   /usr/lib/perl5/5.8.5
 
複製mailgraph_ext到/usr/local,並啓動之
# cp -r /var/www/extsuite/extman/addon/mailgraph_ext  /usr/local  
# /usr/local/mailgraph_ext/mailgraph-init start 
 
啓動cmdserver(在後臺顯示系統信息) 
# /var/www/extsuite/extman/daemon/cmdserver --daemon
 
添加到自動啓動隊列
# echo “/usr/local/mailgraph_ext/mailgraph-init start” >> /etc/rc.d/rc.local
# echo “/var/www/extsuite/extman/daemon/cmdserver -v -d” >> /etc/rc.d/rc.local 
 
使用方法: 等待大約15分鐘左右,如果郵件系統有一定的流量,即可登陸到extman裏,點“圖形日誌”即可看到圖形化的日誌。具體每天,周,月,年的則點擊相應的圖片進入即可。 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章