這篇文章本來是2008年發表的,近期幾天照此筆記又安裝了一遍系統。這裏更新一下記錄。
1. 概述
安裝環境是CentOS6.5,拿到server的時候僅僅有根文件夾的分區。郵件準備存儲到 /var/mailbox下,後面內容會出現屢次,假設要改動請注意不要有遺漏的地方。
/var/spool/postfix是postfix存儲隊列的地方。 /var/vmail是用來存儲郵件的。
有條件的建議對 /var/spool/postfix和 /var/vmail進行了單獨分區。
CentOS提供了很是方便的yum在線安裝。個人基本原則是非重要、對版本號不敏感的模塊儘可能用yum安裝。郵件系統主要模塊則用源代碼編譯安裝。html
首先用yum安裝的模塊有:mysql mysql-server mysql-devel db4-devel openssl gcc libxml2 libxml2-develgcc-c++
幾個模塊都需要用到PCRE。mysql
先說明一下幾個模塊的搭配。
MTA用的是postfix-2.5.17。c++
web模塊是最早需要肯定的,因爲它決定了郵箱系統最核心的數據結構,這裏選用國產的extmail,其它所有模塊都依照extmail的結構進行配置改動。
webmail使用 extmail-1.0.5,web管理模塊用extman-0.2.5。web
extmail對maildrop的本身主動回覆、轉發等提供了很是好的支持。因此MDA採用最流行的maildrop(2.5.4)
這裏面簡單說一下爲何要用maildrop。
對虛擬用戶投遞的支持。postfix自帶了一個投遞代理(MDA):virtual
virtual投遞代理在 master.cf裏描寫敘述爲:
virtual unix - n n - - virtual
假設咱們在main.cf裏設置virtual_transport = virtual。就表示對於包括在 virtual_mailbox_domains域名裏的郵件。都使用virtual進行投遞。
postfix自帶的virtual僅僅提供了最主要的QUOTA功能。假設想使用更復雜的功能,如本身主動轉發,本身主動回覆。郵件本身定義過濾等,就需要換成更高級的MDA。
固然可選擇的MDA有很是多種,比方procmail, maildrop等。sql
我這裏選用maildrop。
用戶信息存儲方式也有很是多可選的。比方mysql,ldap等。這裏選mysql,緣由是各個模塊,包含extmail等對這個支持最好最方便最簡單。
maildrop在投遞郵件的時候。需要肯定一些數據,比方收件用戶的Maildir的路徑,保存郵件用的uid,gid,郵箱容量等。這些數據需要 courier-authlib來提供。
整個系統模塊間的做用和關係是:
postfix做爲MTA(Mail Transfer Agent), 負責建立smtp服務(smtpd)接收本域用戶或其它域名server投遞來的郵件。負責向其它server投遞(轉發)郵件,管理郵件隊列;
maildrop做爲MDA(Mail Delivery Agent)負責把從postfix接收到郵件存入郵件夾,同一時候還支持本身主動轉發、本身主動回覆。郵件過濾等功能;
courier-authlib 爲 maildrop 提供與用戶相關的信息查詢;
dovecot提供系統的POP3和IMAP服務,同一時候給postfix提供SMTP的SASL認證服務。
2. 系統基礎配置
假設系統已經安裝postfix請先卸載!數據庫
建立郵箱存儲文件夾 /var/mailbox ,子文件夾結構爲 ./[domain]/[username]
建立負責郵件存取的用戶和組賬戶 vmail。注意要指定uid和gid。這兩個id在後面很是多配置裏要用到!
#groupadd -g 1001 vmail
#useradd -g vmail -u 1001 -s /sbin/nologin
#chown vmail:vmail /var/mailbox
#chmod 700 /var/mailbox
postfix安裝的是需要指定幾個專門的用戶和組
#groupadd -g 2001 postfix
#useradd -g postfix -u 1001 -s /sbin/nologin -M postfix
#groupadd-g 2002 postdrop
#useradd-g postdrop -u 2002 -s /bin/false -M postdrop
3. courier-authlib安裝
下載 courier-authlib-0.66.1
./configure --sysconfdir=/etc --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc --with-mailuser=1001 --with-mailgroup=1001
注意此處已經用到了vmail用戶的uid和gid!
#cp /etc/authdaemonrc.dist /etc/authdaemonrc
改動配置文件,啓用mysql用戶認證方式:
#authmodulelist="authuserdb authmysql authcustom authpipe"
authmodulelist="authmysql"
#authmodulelistorig="authuserdb authmysql authcustom authpipe"
authmodulelistorig="authmysql"
authmysql的配置文件:
#cp /etc/authmysqlrc.dist /etc/authmysqlrc
改動相關配置,當中
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD crypt
MYSQL_SELECT_CLAUSE SELECT username as id,password as crypt,"" as clear,\
'1001' as uid,'1001' as gid, \
CONCAT('/var/mailbox/',homedir) as home, \
CONCAT('/var/mailbox/',maildir) as maildir, \
quota, \
name \
FROM mailbox \
WHERE active = 1 and username = '$(local_part)@$(domain)'
事實上就是配置了數據源是什麼(mysql)。怎麼鏈接,運行什麼sql語句查詢用戶信息,數據的字段名是什麼等。網絡
啓動auth服務
# /usr/local/libexec/courier-authlib/authdaemond &
4. Dovecot安裝
下載dovecot-2.0.21.tar.gz
#./configure--prefix=/usr/local/dovecot --sysconfdir=/etc --with-sql --with-mysql
#make
#make install
需要ssl支持可以加上參數--with-ssl=openssl
拷貝 doc/example-config/下的 dovecot.conf 至 /etc/dovecot
配置dovecot.conf:
base_dir=/var/run/dovecot
#支持的用戶協議
protocols=imap imaps pop3 pop3s
listen=*
disable_plaintext_auth = no
#是否啓用ssl
ssl_disable = yes
#郵件存儲位置,%d表示域名,%n表示username
mail_location= maildir:/var/vmail/%d/%n/Maildir
pop3_uidl_format=%08Xu%08Xv
authdefault {
...
mechanisms= plain login digest-md5 cram-md5
#驗證password的配置文件
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
...
#查詢用戶信息的配置文件
userdbsql {
args = /etc/dovecot/dovecot-sql.conf
}
...
socketlisten {
...
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
編輯/etc/dovecot/dovecot-sql.conf:
driver =mysql
connect =host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme=MD5-CRYPT
password_query= SELECT password, maildir as userdb_home FROM mailbox WHERE username = '%u'
user_query= select 1001 as uid ,1001 as gid from mailbox where username='%u' And active='1'
注意文件中的username口令。
password_query是pop3 or imap登陸的時候運行的,傳username查密碼,郵箱文件夾
user_query是查詢用戶存取郵件用的uid和gid的,這裏寫死了。。
建立符號連接
#ln -s/usr/local/dovecot/sbin/dovecot /usr/bin/dovecot
啓動dovecot服務
# dovecot
假設出錯。看看 /var/log/dovecot
5. 安裝 maildrop
下載 maildrop-2.5.4.tar.gz
./configure--enable-sendmail=/usr/sbin/sendmail --enable-trusted-users='root vmail'--enable-syslog=1 --enable-maildirquota --enable-maildrop-uid=1001--enable-maildrop-uid=1001 --with-trashquota --with-dirsync
make& make install
/etc/postfix/master.cf裏添加
maildrop unix - n n - - pipe
flags=DRhu user=vmailargv=/usr/local/bin/maildrop -d ${recipient}
6. 安裝 postfix
下載postfix-2.5.17.tar.gz
編譯
# make CCARGS='-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"\
-DHAS_PCRE-DHAS_MYSQL \
-I/usr/include/-I/usr/local/include -I/usr/include/mysql/' \
AUXLIBS='-L/usr/local/lib-L/usr/lib/mysql -lmysqlclient -lpcre'
# make
# make install
-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"
表示啓用SASL身份認證,並默認使用dovecot。session
mysql的幾個路徑可以依據實際狀況作改動,我這裏的文件夾都是yum默認安裝的。
注意make參數里加上正確的mysql -I (頭文件所在文件夾) -L(動態庫所在文件夾)
make install的提問全部回車默認。數據結構
(install的時候假設默認參數裏沒有值。請依據錯誤提示認真檢查)
導入extmail的mysql表結構和數據。less
下載extman-0.2.5.tar.gz
解開後進入 docs文件夾
建庫建表:
# mysql-u root -p < extmail.sql
注意extmail.sql裏配置的數據庫,username,口令都是extmail。可以編輯腳本改動。
extmail.sql裏建立的數據庫用戶 webman 是用在web後臺管理的,extmail用在所有其它地方,包含postfix郵件收發,dovecot賬戶驗證、郵件收發,webmail裏等。
導入初始數據:
#mysql-u root -p < init.sql
(可以先吧 init.sql文件中的extmail.org改爲你本身的域名。或登陸web管理後再加入域名)
把文件夾下 mysql_*.cf全部拷貝至/etc/postfix
# cpmysql_*.cf /etc/postfix/
改動cf文件中的username口令
繼續配置 postfix
# mv/etc/aliases /etc/aliases.old
# ln -s/etc/postfix/aliases /etc/aliases
# /usr/bin/newaliases
編輯 /etc/postfix/main.cf
#郵件server域名
myhostname= mail.abc.com
#郵箱域名
mydomain= abc.com
myorigin= localhost
mydestination= $myhostname localhost localhost.$mydomain
#可以信賴的網絡,後面的permit_mynetworks 說的就是這
mynetworks= 127.0.0.0/8
inet_interfaces= all
home_mailbox= mbox
smtpd_banner= Welcome to ESMTP Server
#設置可以隨意從本機轉發郵件的域名,黑莓什麼的可能用到
#relay_domains=
alias_maps=
sendmail_path= /usr/sbin/sendmail
newaliases_path= /usr/bin/newaliases
mailq_path= /usr/bin/mailq
setgid_group= postdrop
html_directory= no
manpage_directory= /usr/local/man
sample_directory= /etc/postfix
unknown_local_recipient_reject_code= 450
non_fqdn_reject_code= 450
unknown_virtual_alias_reject_code= 450
unknown_virtual_mailbox_reject_code= 450
maps_rbl_reject_code= 450
maximal_queue_lifetime= 1
bounce_queue_lifetime= 0
#=====================VritualMailbox settings=========================
#查詢域名的配置
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
#用maildrop投遞郵件!後面會安裝
virtual_transport= maildrop
maildrop_destination_recipient_limit=1
#====================QUOTA========================
smtpd_recipient_restrictions=
permit_sasl_authenticated,
permit_mynetworks,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
reject_unauth_destination
#check_recipient_access pcre:/etc/postfix/spamd_filter_access
#reject_rbl_client sbl.spamhaus.org,
#reject_rbl_client cblless.anti-spam.org.cn,
#檢查發信人
smtpd_sender_restrictions=
permit_sasl_authenticated,
permit_mynetworks,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_sender_login_mismatch,
reject_authenticated_sender_login_mismatch,
reject_unauthenticated_sender_login_mismatch
smtpd_helo_required= yes
smtpd_helo_restrictions=
permit_sasl_authenticated,
permit_mynetworks,
reject_invalid_hostname
smtpd_sender_login_maps=
mysql:/etc/postfix/mysql_virtual_sender_maps.cf,
mysql:/etc/postfix/mysql_virtual_alias_maps.cf
disable_vrfy_command= yes
smtpd_client_restrictions=
permit_mynetworks,
check_client_access hash:/etc/postfix/access
#=====================TLS=========================
#smtp的tls支持,此處不詳述
smtpd_use_tls= yes
smtpd_tls_security_level= may
smtpd_tls_key_file= /etc/postfix/certs/mail.key
smtpd_tls_cert_file= /etc/postfix/certs/mail.crt
smtpd_tls_loglevel= 1
smtpd_tls_session_cache_timeout= 3600s
smtpd_tls_session_cache_database= btree:/var/spool/postfix/smtpd_tls_cache
tls_random_source= dev:/dev/urandom
readme_directory= no
command_directory= /usr/sbin
daemon_directory= /usr/libexec/postfix
queue_directory= /var/spool/postfix
mail_owner= postfix
data_directory= /var/lib/postfix
啓動postfix
#postfix
啓動後注意觀察 /etc/log/maillog 裏是否有錯誤信息
7. 安裝extmail和extman!
extman是郵箱的後臺管理web,注意webman.cf裏的配置: 郵箱的根文件夾: SYS_MAILDIR_BASE= /var/mailbox SYS_DEFAULT_UID= 1001 SYS_DEFAULT_GID= 1001 SYS_MYSQL_USER= webman SYS_MYSQL_PASS= webman extmail裏的 webmail.cf SYS_MAILDIR_BASE= /var/mailbox 祝您成功!