extmail搭建文檔
參考:
http://wiki.extmail.org
1、系統環境
系統:centos 5.11_86 (由於該軟件對64位系統支持不夠,建議32位系統)
服務:HTTP、MySQL
2、yum源準備
vim /etc/yum.repos.d/EMOS-Base.repo
加入如下內容:
# EMOS-Base.repo
#
# Created by ExtMail Dev Team: http://www.extmail.org/
#
# $Id$
[EMOS-base]
name=EMOS-Base
baseurl=http://mirror.extmail.org/yum/emos/1.5/os/$basearch/
gpgcheck=0
priority=0
protect=0
[EMOS-update]
name=EMOS-Updates
baseurl=http://mirror.extmail.org/yum/emos/1.5/updates/$basearch/
gpgcheck=0
priority=0
protect=0
3、配置mta-postfix
一、安裝postfix
安裝postfix
shell
yum install postfix -y
rpm -e sendmail
二、配置postfix
shell
postconf -n > /etc/postfix/main2.cf
mv /etc/postfix/main.cf /etc/postfix/main.cf.old
mv /etc/postfix/main2.cf /etc/postfix/main.cf
編輯main.cf:
shell
vim /etc/postfix/main.cf
增長以下內容:
# hostname
mynetworks = 127.0.0.1
myhostname = mail.extmail.org
mydestination = $mynetworks $myhostname
# banner
mail_name = Postfix - by extmail.org
smtpd_banner = $myhostname ESMTP $mail_name
# response immediately
smtpd_error_sleep_time = 0s
# Message and return code control
message_size_limit = 5242880
mailbox_size_limit = 5242880
show_user_unknown_table_name = no
# Queue lifetime control
bounce_queue_lifetime = 1d
maximal_queue_lifetime = 1d
設置postfix開機自啓:
shell
chkconfig postfix on
4、配置Courier-Authlib
一、安裝Courier-Authlib
安裝如下軟件包:
shell
yum install courier-authlib -y
yum install courier-authlib-mysql -y
編輯/etc/authlib/authmysqlrc文件:
shell
vim /etc/authlib/authmysqlrc
並將其內容清空,而後增長以下內容:
MYSQL_SERVER localhost
MYSQL_USERNAME extmail
MYSQL_PASSWORD extmail
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD uidnumber
MYSQL_GID_FIELD gidnumber
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\
CONCAT('/home/domains/',homedir), \
CONCAT('/home/domains/',maildir), \
quota, \
name \
FROM mailbox \
WHERE username = '$(local_part)@$(domain)'
修改authdaemonrc文件
shell
vim /etc/authlib/authdaemonrc
修改以下內容:
authmodulelist="authmysql"
authmodulelistorig="authmysql"
二、啓動courier-authlib:
shell
service courier-authlib start
如一切正常,命令行將返回以下信息:
Starting Courier authentication services: authdaemond
修改authdaemon socket目錄權限
若是該目錄權限不正確修改,maildrop及postfix等將沒法正確獲取用戶的信息及密碼認證:
shell
chmod 755 /var/spool/authdaemon/
5、配置maildrop
一、安裝maildrop
shell
yum install maildrop -y
配置master.cf 爲了使Postfix支持Maildrop,必須修改/etc/postfix/master.cf文件,註釋掉原來的maildrop的配置內容,並改成:
maildrop unix - n n - - pipe
flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}
注意:flags前面有「兩個空格」
配置main.cf 因爲maildrop不支持一次接收多個收件人,所以必須在main.cf裏增長以下參數:
maildrop_destination_recipient_limit = 1
二、測試maildrop對authlib支持
shell
maildrop -v
看是否出現如下內容:
maildrop 2.1.0 Copyright 1998-2005 Double Precision, Inc.
GDBM/DB extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.
注意事項:
一、如需從新編譯Maildrop軟件包,必須先得到其源碼rpm包,而且必須先行安裝courier-authlib及其devel軟件包,不然編譯後的maildrop將沒法打開authlib支持。
二、maildrop RPM包安裝時,會自動建立vuser用戶及vgroup用戶組,專門用於郵件的存儲,vuser:vgroup的uid/gid都是1000,這與通常的郵件文檔中說起用postfix用戶存郵件不同。由於postfix用戶的uid通常都低於500,而Suexec模塊編譯時對UID/GID的要求是要大於500,所以使用postfix用戶不能知足要求。其次,若是用Maildrop做爲投遞代理(MDA),以postfix身份投遞的話,會致使postfix MTA錯誤。
6、配置Apache
一、虛擬主機設置
編輯httpd.conf文件:
shell
vim /etc/httpd/conf/httpd.conf
在最後一行加上:
NameVirtualHost *:80
Include conf/vhost_*.conf
編輯 vhost_extmail.conf
shell
vim /etc/httpd/conf/vhost_extmail.conf
裏面定義虛擬主機的相關內容:
# VirtualHost for ExtMail Solution
<VirtualHost *:80>
ServerName mail.extmail.org
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/
Alias /extmail /var/www/extsuite/extmail/html/
ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/
Alias /extman /var/www/extsuite/extman/html/
# Suexec config
SuexecUserGroup vuser vgroup
</VirtualHost>
設置apache開機啓動
shell
chkconfig httpd on
7、配置webmail-exmail
一、安裝ExtMail
shell
yum install extsuite-webmail -y
二、編輯webmail.cf
shell
cd /var/www/extsuite/extmail
cp webmail.cf.default webmail.cf
vim webmail.cf
主要變更的內容見下:
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
更新cgi目錄權限 因爲SuEXEC的須要,必須將extmail的cgi目錄修改爲vuser:vgroup權限:
shell
chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/
8、配置管理後臺-extman
一、yum安裝ExtMan
shell
yum install extsuite-webman -y
更新cgi目錄權限 因爲SuEXEC的須要,必須將extman的cgi目錄修改爲vuser:vgroup權限:
shell
chown -R vuser:vgroup /var/www/extsuite/extman/cgi/
連接基本庫到Extmail
shell
mkdir /tmp/extman
chown -R vuser:vgroup /tmp/extman
注意事項:
因爲RedHat發行版中包含了一個叫tmpwatch的工具,該工具會按期掃描/tmp/下的文件,若是這些文件好久都沒被使用,將被刪除,所以若是後臺長期不使用,/tmp/extman目錄有可能被tmpwatch刪除,因此要麼按期登錄後臺,要麼修改 webman.cf將臨時目錄修改到另外一個地方。此處暫以/tmp/extman默認值爲例。
二、數據庫初始化
啓動Mysql
shell
service mysqld start
chkconfig mysqld on
導入mysql數據庫結構及初始化數據,root密碼默認爲空
shell
mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
mysql -u root -p < /var/www/extsuite/extman/docs/init.sql
備註1: 上述導入初始化SQL時,默認的uidnumber/gidnumber都是1000,這和vuser:vgroup 的uid/gid一致,是由於maildrop投遞時會從數據庫裏取uidnumber/gidnumber,而在master.cf裏已經定義好了投遞時的運行身份(vuser:vgroup),因此這兩個字段的內容必須爲1000,不然將出現投遞錯誤,例如報0x06等錯誤。
備註2: MYSQL5.5.x 版本不支持 TYPE=MyISAM 這樣的語句,請執行如下腳本後,再導入數據庫。
shell
sed -i 's/TYPE=MyISAM/ENGINE=MyISAM/g' /usr/local/www/extman/docs/extmail.sql
三、設置虛擬域和虛擬用戶的配置文件
shell
cd /var/www/extsuite/extman/docs
cp mysql_virtual_alias_maps.cf /etc/postfix/
cp mysql_virtual_domains_maps.cf /etc/postfix/
cp mysql_virtual_mailbox_maps.cf /etc/postfix/
cp mysql_virtual_sender_maps.cf /etc/postfix/
配置main.cf:
shell
vim /etc/postfix/main.cf
增長如下內容:
# extmail config here
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_transport = maildrop:
重啓postfix :
shell
service postfix restart
四、測試authlib
創建剛纔導入mysql的postmaster@extmail.org賬戶的Maildir,請輸入以下命令:
shell
cd /var/www/extsuite/extman/tools
./maildirmake.pl /home/domains/extmail.org/postmaster/Maildir
chown -R vuser:vgroup /home/domains/extmail.org
在命令行下執行:
shell
/usr/sbin/authtest -s login postmaster@extmail.org extmail
結果以下:
Authentication succeeded.
Authenticated: postmaster@extmail.org (uid 1000, gid 1000)
Home Directory: /home/domains/extmail.org/postmaster
Maildir: /home/domains/extmail.org/postmaster/Maildir/
Quota: 104857600S
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
Cleartext Password: extmail
Options: (none)
這樣代表ExtMan的正確安裝,數據庫也正確導入,courier-authlib能正確鏈接到mysql數據庫
最後訪問http://mail.extmail.org/extmail/,如無心外,將看到webmail的登錄頁,不過此時尚未加正式的用戶,因此不能登錄,包括postmaster@extmail.org也不行。必需要登錄到http://mail.extmail.org/extman/ 裏增長一個新賬戶才能登錄。
ExtMan的默認超級管理員賬戶:root@extmail.org,初始密碼:extmail*123*,登錄成功後,建議將密碼修改,以確保安全。
五、配置圖形化日誌
啓動mailgraph_ext
shell
/usr/local/mailgraph_ext/mailgraph-init start
啓動cmdserver(在後臺顯示系統信息)
shell
/var/www/extsuite/extman/daemon/cmdserver --daemon
加入開機自啓動:
shell
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裏,點「圖形日誌」便可看到圖形化的日誌。具體天天,周,月,年的則點擊相應的圖片進入便可。
添加定時任務:
shell
crontab -e
添加如下內容:
0 4 * * * /var/www/extsuite/extman/tools/expireusers.pl -all postmaster@extmail.org
30 4 * * * /var/www/extsuite/extman/tools/reportusage.pl -all /home/domains postmaster@extmail.org
9、配置cyrus-sasl
RHEL-5/CentOS-5的cyrus-sasl默認沒有打開authdaemon的支持,爲了使用集中認證的authlib,必須打開這個支持。爲此咱們必須刪除系統的cyrus-sasl軟件包,替換成打開了authdaemon支持的sasl軟件包。
一、安裝cyrus-sasl
刪除系統的cyrus-sasl:
shell
rpm -e cyrus-sasl --nodeps
安裝新的支持authdaemon的軟件包
shell
yum install cyrus-sasl -y
二、配置main.cf文件
Postfix的SMTP認證須要透過Cyrus-SASL,鏈接到authdaemon獲取認證信息。
編輯main.cf
shell
vim /etc/postfix/main.cf
增長以下內容:
# smtpd related config
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
# SMTP sender login matching config
smtpd_sender_restrictions =
permit_mynetworks,
reject_sender_login_mismatch,
reject_authenticated_sender_login_mismatch,
reject_unauthenticated_sender_login_mismatch
smtpd_sender_login_maps =
mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
mysql:/etc/postfix/mysql_virtual_alias_maps.cf
# SMTP AUTH config here
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
三、編輯smtpd.conf文件
shell
vim /usr/lib/sasl2/smtpd.conf
確保其內容爲:
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/spool/authdaemon/socket
從新啓動postfix:
shell
service postfix start
四、測試SMTP認證
經過如下命令得到postmaster@extmail.org的用戶名及密碼的BASE64編碼:
shell
perl -e 'use MIME::Base64; print encode_base64("postmaster\@extmail.org")'
內容以下:
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
shell
perl -e 'use MIME::Base64; print encode_base64("extmail")'
內容以下:
ZXh0bWFpbA==
而後本機測試:
shell
telnet localhost 25
其過程以下:
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.extmail.org ESMTP Postfix - by extmail.org
ehlo demo.domain.tld << 輸入內容
250-mail.extmail.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login << 輸入內容
334 VXNlcm5hbWU6
cG9zdG1hc3RlckBleHRtYWlsLm9yZw== << 輸入內容
334 UGFzc3dvcmQ6
ZXh0bWFpbA== << 輸入內容
235 2.0.0 Authentication successful
quit << 輸入內容
221 2.0.0 Bye
最後出現235 Authentication Successful 代表認證成功了。
10、配置courier-imap
一、安裝Courier-imap
默認的courier-authlib及courier-imap都會增長系統自啓動設置,所以下一次服務器啓動將自動啓動相應的authlib及POP3服務
shell
yum install courier-imap -y
配置courier-imap
因爲Courier-imap的IMAP目錄是按UTF-7編碼的,ExtMail目前尚未正式支持IMAP目錄,所以須要屏蔽IMAP,只提供pop3服務。而就目前的使用狀況來看,IMAP使用的很是少,絕大部分OutLook/Foxmail用戶都習慣使用POP3而非IMAP。
shell
vim /usr/lib/courier-imap/etc/imapd
修改內容以下:
IMAPDSTART=NO
shell
vim /usr/lib/courier-imap/etc/imapd-ssl
修改內容以下:
IMAPDSSLSTART=NO
而後從新啓動courier-imap:
shell
service courier-imap start
測試POP3 請按以下步驟輸入pop3命令測試其是否正常工做,注意藍色的信息是咱們輸入到POP3服務器的(請首先登陸extman自行創建test@extmail.org用戶,密碼:extmail)
shell
telnet localhost 110
其過程以下:
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Hello there.
user test@extmail.org << 輸入內容
+OK Password required.
pass extmail << 輸入內容
+OK logged in.
list << 輸入內容
+OK POP3 clients that break here, they violate STD53.
.
quit << 輸入內容
+OK Bye-bye.
Connection closed by foreign host.
11、配置內容、病毒過濾
一、安裝amavisd-new
shell
yum install amavisd-new
設置相關目錄權限:
shell
chown -R amavis.amavis /var/spool/vscan/
二、配置SpamAssassin
Amavisd-new 經過Mail::SpamAssassin 模塊來調用SA的功能,所以這裏配置SA和常規配置SA軟件有些區別,主要集中在修改local.cf文件上。
增長中文規則: 用於處理中文(簡體)垃圾郵件。
shell
wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf
設置規則自動更新:
shell
/usr/bin/crontab -e
而後輸入以下的內容:
0 0 1 * * wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf; /etc/init.d/amavisd restart
存盤退出便可。最後運行如下調試命令以確認amavisd沒有錯誤:
shell
/usr/sbin/amavisd -c /etc/amavisd.conf debug
若是沒有異常提示或報錯退出則表示一切都正常,按ctrl+c終止,而後正常啓動,若提示pid不存在等錯誤,沒必要理會。
設置amavisd開機自啓:
shell
service amavisd start
chkconfig amavisd on
三、配置ClamAV
安裝ClamAV
shell
cd /root/rpm
wget http://packages.sw.be/clamav/clamav-0.97-1.el5.rf.i386.rpm
wget http://packages.sw.be/clamav/clamd-0.97-1.el5.rf.i386.rpm
wget http://packages.sw.be/clamav/clamav-db-0.97-1.el5.rf.i386.rpm
rpm -ivh clam*
備註: 這裏的ClamAV採用packages.sw.be站點的RPM包,由於EMOS裏面的版本太舊,致使測試時老出問題。
編輯clamd.conf文件
shell
vim /etc/clamd.conf
去掉 'LocalSocket /var/run/clamav/clamd.sock'的註釋,並註釋掉 'TCPSocket 3310',咱們將使用unix socket而不是TCP,二者不可並存。
變更內容見下:
Default: disabled
LocalSocket /var/run/clamav/clamd.sock
TCPSocket 3310
設置相關目錄權限:
將clamav加到amavis運行組裏,並調整目錄權限,不然clamav將沒法掃描amavisd-new產生的臨時文件
shell
gpasswd -a clamav amavis
usermod -G amavis clamav
chown amavis.amavis /var/spool/vscan
chmod 750 /var/spool/vscan
chown amavis.amavis /var/spool/vscan/tmp
chmod 750 /var/spool/vscan/tmp
默認的/var/spool/vscan 目錄屬性是:
drwxr-x--- 5 amavis amavis
對於clamav用戶而言,則無任何權限訪問該目錄,所以maillog裏amavisd-new會提示:
May 19 08:38:53 as3 amavis[1752]: (01752-01) ask_av (ClamAV-clamd) FAILED - unexpected result: /var/spool/vscan/tmp/amavis-20050519T
083853-01752/parts: Access denied. ERROR\n
May 19 08:38:53 as3 amavis[1752]: (01752-01) WARN: all primary virus scanners failed, considering backups
啓動ClamAV及開機自啓:
shell
service clamd start
freshclam –daemon
四、配置amavisd.con文件
修改amavisd.conf
shell
vim /etc/amavisd.conf
修改的主要參數以下:
$mydomain = 'extmail.org';
$db_home = "$MYHOME/db";
$lock_file = "$MYHOME/amavisd.lock"; # -L
$pid_file = "$MYHOME/amavisd.pid"; # -P
$myhostname = 'mail.extmail.org';
@local_domains_maps = qw(.);
@mynetworks = qw( 127.0.0.0/8 );
對本地發出的郵件不進行內容過濾
$policy_bank{'MYNETS'} = { # mail originating from @mynetworks
originating => 1, # is true in MYNETS by default, but let's make it explicit
os_fingerprint_method => undef, # don't query p0f for internal clients
allow_disclaimers => 1, # enables disclaimer insertion if available
bypass_spam_checks_maps => [1],
bypass_banned_checks_maps => [1],
bypass_header_checks_maps => [1],
};
$sa_spam_modifies_subj = 0; # 當郵件被認爲是垃圾郵件時,是否修改郵件的主題
$remove_existing_x_scanned_headers= 1; # 凡是通過 Amavisd 過濾的郵件,都會在郵件頭中被加入一行郵件頭信息
$remove_existing_spam_headers = 1;
# 修改投遞/攔截的方法:
$final_virus_destiny = D_DISCARD;
$final_banned_destiny = D_DISCARD;
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS;
# 配置Amavisd與Clamav結合
@av_scanners = (
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
);
@av_scanners_backup = (
['ClamAV-clamscan', 'clamscan',
"--stdout --no-summary -r --tempdir=$TEMPBASE {}",
[0], qr/:.*\sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
);
amavisd.conf經常使用參數說明:
$max_servers = 10; 設置最大可以使用的進程數
$sa_spam_subject_tag = '[SPAM] '; 加 [SPAM] 標記
$mydomain = 'mail.extmail.org'; 設置域名
$myhostname = 'mail.extmail.org'; 設置主機名
@local_domains_maps = qw(.); 對全部的域檢查
$sa_tag2_level_deflt = 5.0; 超過這個分數,容許在郵件標題加入[SPAM] 標記
$sa_kill_level_deflt = 5.0; 超過這個分數,直接將信件備份後刪除
$final_virus_destiny: 檢測到病毒時的動做
$final_banned_destiny: 檢測到受禁止的內容時的動做
$final_spam_destiny: 檢測到垃圾郵件、廣告郵件(spam)時的動做
$final_bad_header_destiny: 檢測到不良信件時的動做
默認有如下幾種動做:
D_PASS: 不管信件是否有問題,都會將信件發給收件人
D_DISCARD: 信件將被丟棄,而且不會告知收件人及發件人
D_BOUNCE: 信件不會發送給收件人,但會通知發件人郵件沒有被投遞
D_REJECT: 郵件不會被投遞給收件人,但會通知發件人郵件被拒絕
注意事項:
上述$mydomain參數與$myhostname參數相同,主要是爲了方便以後的病毒/垃圾彙報郵件發給系統管理員時,能投遞到本地的別名裏,再轉交到虛擬域的特定用戶。
五、配置Postfix 集成amavisd-new
增長郵件別名
shell
vim /etc/postfix/aliases
增長以下信息,注意:默認的aliases數據庫裏已有一條virusalert的別名,請刪除,再輸入下面的別名記錄,並確保全部記錄都是惟一的:
virusalert: root
spam.police: root
postfix: test@extmail.org
保存並執行newaliases命令生成新的別名數據庫,從新啓動amavisd:
shell
newaliases
service amavisd restart
編輯master.cf文件:
shell
vim /etc/postfix/master.cf
增長以下內容:
smtp-amavis unix - - n - 3 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=10
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
編輯main.cf文件:
shell
vim /etc/postfix/main.cf
增長以下內容:
# Content-Filter
content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
注意:receive_override_options 這裏必須增長,禁止地址展開/影射,不然若是遇到別名的時候會引發冗餘郵件的產生。
重啓postfix :
shell
# service postfix restart
從新啓動amavisd:
shell
# service amavisd restart
六、測試Clamav
shell
# telnet localhost 25
其過程以下:
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.extmail.org ESMTP Postfix - by extmail.org
mail from:<postmaster@extmail.org> << 輸入內容
250 2.1.0 Ok
rcpt to:<test@extmail.org> << 輸入內容
250 2.1.5 Ok
data << 輸入內容
354 End data with .
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* << 輸入內容
.
250 2.0.0 Ok: queued as BC24E85260
quit << 輸入內容
221 2.0.0 Bye
Connection closed by foreign host.
在郵件日誌裏,應該有相應的信息出現:
Mar 22 06:43:15 localhost amavis[15405]: (15405-01) Blocked INFECTED (Eicar-Test-Signature), [192.168.0.235] ->, quarantine:
virus-mI6vbjkWZ2Tz, Message-ID: <003401c88c1a$74706360$eb00a8c0@nbk00045>, mail_id: mI6vbjkWZ2Tz, Hits: -, size: 1757, 474 ms
若是看到相似這樣的日誌,代表Clamav+Amavisd-new工做正常。
12、配置spam_locker
一、安裝Spam_Locker
shell
# yum install extsuite-slockd
配置resolv.conf
請確認/etc/resolv.conf裏的dns服務器是離你的郵件服務器最近,速度最快的dns server,slockd很依賴dns的好壞,所以給系統配置一個快速的dns能大幅度提升處理速度。如下給出一個配置僅供參考:
shell
# vim /etc/resolv.conf
增長如下內容:
nameserver 202.96.209.6
上述dns服務器是上海電信的DNS服務器,對於非廣東朋友,請改成離你最近的DNS服務器IP,若是可能的話,請配置一個簡單的bind,成爲本地的dns cache server,能夠得到最高性能。這裏略過這一步驟,但您必須確保dns的配置是正確而且可靠的,不然slockd將不能工做!
二、測試slockd
啓動slockd
shell
# /usr/local/slockd/slockd-init start
此時slockd將啓動,並進入非daemon方式的監聽模式,接受來自10030端口的請求,命令行下將顯示以下調試信息:
Starting spam locker daemon: slockd
starting child 2908
starting child 2909
打開另外一個ssh/終端窗口:
shell
# cd /usr/local/slockd/tools
輸入:
shell
# perl policy_sig -h localhost -p 10030 --helo FOOBAR --ip 192.168.0.1 --from test@foo.com --to test@bar.com
此時,程序應該返回以下錯誤信息:這表示slockd初步的正常工做了。
action=554 blocked using zen.spamhaus.org, see http://bl.extmail.org/cgi/rbl?192.168.0.1
設置slockd開機自啓動
shell
# /usr/local/slockd/slockd-init start # echo "/usr/local/slockd/slockd-init start" >> /etc/rc.d/rc.local
三、配置Postfix
slockd調試正常後,必須配置postfix以使其打開對slockd的支持。
編輯main.cf文件
shell
# vim /etc/postfix/main.cf
將 check_policy_service inet:127.0.0.1:10030 這一行記錄增長到smtpd_recipient_restrictions 裏,例如:
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
check_policy_service inet:127.0.0.1:10030
從新啓動postfix以使配置生效
shell
# service postfix restart
注意事項: 上述配置是將slockd的查詢放到最後,這也是進一步提升資源利用律的辦法,由於有部分功能postfix已實現了,因此就先由postfix檢測,若是檢測不到再由slockd完成。
十3、配置dspam
一、安裝dspam
Dspam的配置主要參考《Dspam+Amavis-new+SA-Clamav for EMOS》
連接: http://www.extmail.org/forum/thread-10393-1-1.html
shell
yum install dspam-mysql -y
二、導入 DSPAM 訓練庫
shell
cd /usr/src
wget http://www.extmail.org/download/misc/dspam/dspam-trained-data.sql.gz
gzip -d dspam-trained-data.sql.gz
rm -rf /var/lib/mysql/dspam/ (備註:若是沒有dspam的庫,能夠不用執行)
mysql -u root -p -e "create database dspam"
mysql -u root -p -e "grant all on dspam.* to dspam@localhost identified by 'dspam'"
mysql -u dspam -p dspam dspam < /root/dspam-trained-data.sql
DSPAM的token數據庫的定時清理:
shell
# crontab -e
加入如下內容:
0 0 * * * /usr/bin/mysql -u dspam -p'dspam' dspam < /usr/share/dspam/sql/mysql/purge.sql
0 0 * * * /usr/bin/dspam_logrotate -a 30 -d /var/spool/dspam/data
三、配置 dspam.conf 文件
shell
# vim /etc/dspam/dspam.conf
變更內容以下:
DeliveryHost 127.0.0.1
DeliveryPort 10024
DeliveryIdent localhost
DeliveryProto SMTP
Trust extmail
Preference "signatureLocation=headers" # 'message' or 'headers'
Preference "showFactors=off"
MySQLUIDInSignature on
MySQLServer /var/lib/mysql/mysql.sock
MySQLUser dspam
MySQLPass dspam
MySQLDb dspam
MySQLCompress true
MySQLConnectionCache 10
ServerHost 127.0.0.1
ServerPort 10028
ServerQueueSize 32
ServerPID /var/spool/dspam/dspamd.pid
ServerMode auto
ServerPass.Relay1 "secret"
ServerParameters "--user extmail --deliver=innocent,spam"
ServerIdent "localhost.localdomain"
ClientHost 127.0.0.1
ClientPort 10028
ClientIdent "secret@Relay1"
三、啓動 dspam 進程
shell
# chkconfig dspamd on
# service dspamd start
查看dspam啓動進程
shell
# ps aux |grep dspam
顯示如下內容:
dspam 18407 0.0 0.5 5452 1344 pts/0 S 19:16 0:00 /usr/sbin/dspamd --daemon
root 18412 0.0 0.2 5140 668 pts/0 S+ 19:17 0:00 grep dspamd
四、修改main.cf文件
shell
# vim /etc/postfix/main.cf
增長如下內容:
header_checks = regexp:/etc/postfix/dspam_header_checks
設置郵件標題過濾管理 以防止重複X-DSPAM-Signature標題,能夠防止簽名被報道爲垃圾。這發生在當你從一個已經運行Dspam的服務器收到郵件,或被用於經過僞造的、濫發郵件來阻止你訓練數據庫,
shell
# vim /etc/postfix/dspam_header_checks
增長如下內容:
/^(X-DSPAM-.*)/ IGNORE
/^(X-Spam-.*)/ IGNORE
重啓postfix :
shell
# service postfix restart
五、編輯 amavisd.conf 文件
shell
# vim /etc/amavisd/amavisd.conf
增長如下內容:
$dspam = '/usr/bin/dspam';
@spam_scanners = (
['SpamAssassin', 'Amavis::SpamControl::SpamAssassin'],
['DSPAM', 'Amavis::SpamControl::ExtProg', $dspam,
[ qw(--client --stdout --deliver=spam,innocent --mode=teft --user extmail)],
],
);
SA增長DSpam插件:
shell
# cd /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/Plugin/
# wget http://www.extmail.org/download/misc/dspam/dspam.pm
編輯 local.cf 文件
shell
# cd /etc/mail/spamassassin/
# wget http://www.extmail.org/download/misc/dspam/dspam.cf
# vim local.cf
在下面增長如下內容
include dspam.cf
編輯 init.pre 文件:
shell
# vim init.pre
在下面增長如下內容
loadplugin Mail::SpamAssassin::Plugin::dspam
重啓amavisd
shell
# service amavisd restart
六、增長 extmail 的垃圾郵件舉報
說明:
Extmail 1.0.9正式加入垃圾郵件舉報功能,主要基於(xueron)的補丁包,並進行了必定的調整,使該功能能夠兼容DSPAM及Spamassassin兩種內容過濾軟件的訓練。
Extmail1.1.1加入(stvictor)提供的spamassassin舉報功能,感謝!
修改 webmail.cf
shell
# vim /var/www/extsuite/extmail/webmail.cf
主要變更的內容以下:
SYS_SPAM_REPORT_ON = 1
SYS_SPAM_REPORT_TYPE = dspam
設置maidrop的全局過濾
shell
# vim /etc/maildroprc
內容以下:
# Decoder for high quality key word filtering
# Author: hzqbbc <hzqbbc@hzqbbc.com> - ExtMail Dev Team
DECODER="/var/www/extsuite/extmail/tools/decode -v"
if ((/^(From|Sender|Return-Path):.*MAILER\-DAEMON/))
{
BADSENDER=1
}
# Custom filter and auto deliver to Junk mailbox support
# need test command and other Unix command
`test -f $HOME/.mailfilter && exit 1 || exit 0`
# No customize filtering rules
if ( $RETURNCODE == 0 )
{
if (/^X-Spam-Flag:.*YES/ || /^X-DSPAM-Result:.*Spam/)
{
exception {
to "$HOME/Maildir/.Junk/."
}
}
}
七、配置DSPAM Web 界面
備註: Dspam_WebUI for Nginx配置:
shell
http://www.extmail.org/forum/thread-22976-1-1.html
安裝相關的rpm包:
shell
yum install perl-GDGraph -y
yum install perl-GD-Graph3d -y
yum install dspam-web -y
建立dspam-web 認證用戶:
shell
cd /usr/share/dspam/webui/cgi-bin
echo "extmail" > admins
htpasswd -c .htpasswd extmail
輸入認證密碼
New password:
Re-type new password:
Adding password for user extmail
啓動 dspam-web 守護進程
shell
# service dspam-webd start
這實際是啓動了mini_httpd進程,查看 mini_httpd 是否啓動正常:
shell
# ps aux |grep mini
顯示如下內容:
dspam 18580 0.0 0.3 4152 820 ? Ss 20:05 0:00 mini_httpd -C /etc/dspam/webui.conf
root 18582 0.0 0.2 5316 668 pts/0 S+ 20:05 0:00 grep mini
重啓 apache
shell
# service httpd restart
訪問 dspam-web
http://mail.example.com/dspam
輸入你在 .htpasswd 文件中建立的用戶和密碼
php
附件上傳大小限制問題:html
使由 Exmail+Postfix 搭建的郵件系統能上傳50M的附件node
1. 修改/etc/php.inimysql
max_execution_time = 30 #改成60 (增長處理腳本的時間限制)web
memory_limit = 8M #改成50M (這樣才能發10M的附件)sql
post_max_size = 2M #改成50Mshell
upload_max_filesize = 2M #改成50M數據庫
2. 修改/etc/httpd/conf.d/php.confapache
<Files *.php>;vim
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288 #把524288改成51200000
</Files>;
這裏的 LimitRequestBody 524288 限定了上傳附件的上限爲512k, 將其改成50M
3. 修改/etc/postfix/main.cf, 添加以下語句:
message_size_limit = 69120000
postfix的默認值是10M, 但這指的是郵件正文和編碼後附件的總和, 通過base64編碼,附件的大小會增長35%左右, 所以這裏設定可接受郵件的大小爲69M
可使用以下命令查看postfix的有關設定:
# /usr/sbin/postconf | grep size
4. 修改/var/www/extsuite/extmail/webmail.cf
SYS_MESSAGE_SIZE_LIMIT = 51200000
5. 重起apache和postfix.
一、extman 日誌不顯示
緣由:
/tmp/viewlog 權限不夠
解決
chmod 777 -R /tmp/viewlog
二、沒法新建用戶
緣由:
沒有cgi的執行權限
解決:
chown -R vuser:vgroup /var/www/extsuite/*
三、登陸extman,提示 Connection refused
緣由
cmdserver 沒有啓動
解決
/var/www/extsuite/extman/daemon/cmdserver -v -d