本套郵件系統的搭建,從如何發郵件到收郵件到認證到虛擬用戶虛擬域以及反病毒和反垃圾郵件等都有詳細的介紹。在搭建過程當中必須的參數解釋以及原理都有告訴,這樣才能更好地理解郵件系統。 |
卸載自帶postfixhtml
$ rpm -q postfix postfix-2.6.6-2.2.el6_1.x86_64 $ rpm -ev postfix --nodeps
環境準備node
1. YUM要配置好。mysql
2. 編譯環境要配置好。web
PS: 這兩步驟若是有問題,那麼能夠看本網站提供的YUM和編譯章節。sql
安裝MySQL服務器vim
$ yum install mysql-server mysql mysql-devel perl-DBD-MySQL $ chkconfig mysqld on $ service mysqld restart $ rpm -q mysql mysql-5.1.71-1.el6.x86_64
安裝cyrus-sasl並啓動saslauthd服務bash
$ yum install cyrus-sasl cyrus-sasl-devel $ service saslauthd start $ chkconfig saslauthd on
查看postfix用戶服務器
$ id postfix uid=89(postfix) gid=89(postfix) 組=89(postfix),12(mail)
發送郵件的用戶,這裏就使用系統自帶的postfix用戶,記住UID:8九、GID:89,後面不少地方都要用到這兩個ID號,若是此ID號更改了,那麼Postfix安裝方面會有不少目錄權限都須要更改。框架
編譯安裝postfix-2.11.7post
$ tar zxvf postfix-2.11.7.tar.gz $ cd postfix-2.11.7 $ make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ' 'AUXLIBS=-L/usr/lib64/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
$ tar zxvf postfix-2.11.7.tar.gz $ cd postfix-2.11.7 $ make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ' 'AUXLIBS=-L/usr/lib64/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
#-DHAS_MYSQL -I/usr/include/mysql //啓用Mysql存儲,指定頭文件; #-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl //啓用SASL(cyrus)認證框架; #-DUSE_TLS //啓用SSL功能; #AUXLIBS=-L/usr/lib64/mysql -lmysqlclient //找Mysql客戶端庫文件; #-lz //壓縮褲文件; #-lm -L/usr/lib64/sasl2 //模塊文件; #-lsasl2 -lssl -lcrypto //加密庫文件;
有如下信息就表示配置成功了
[src/posttls-finger] cat ../../conf/makedefs.out Makefile.in >Makefile rm -f Makefile; (cat conf/makedefs.out Makefile.in) >Makefile
$ make $ make install
按照如下的提示輸入相關的路徑([]號中的是缺省值,」]」後的是輸入值,省略的表示採用默認值)
install_root: [/] #指定Postfix安裝目錄,默認 tempdir: [/root/postfix-2.11.7] /tmp/postfix #指定Postfix臨時文件目錄 config_directory: [/etc/postfix] #指定Postfix配置文件目錄,默認 command_directory: [/usr/sbin] #指定Postfix二進制文件目錄,默認 daemon_directory: [/usr/libexec/postfix] #指定Postfix服務器進程,默認 data_directory: [/var/lib/postfix] #指定Postfix可寫文件目錄,默認 html_directory: [no] /var/www/html/postfix #指定Postfix幫助文件,可使用web服務器打開 mail_owner: [postfix] #指定Postfix屬主,默認 mailq_path: [/usr/bin/mailq] #指定Postfix隊列程序路徑,默認 manpage_directory: [/usr/local/man] newaliases_path: [/usr/bin/newaliases] #指定Postfix生成別名命令位置,默認 queue_directory: [/var/spool/postfix] #指定Postfix隊列目錄,默認 readme_directory: [no] sendmail_path: [/usr/sbin/sendmail] #指定Postfix客戶端(smtp),默認 setgid_group: [postdrop] #指定Postfix投遞組(默認有這個組,但沒有這個用戶),默認
PS:若是輸入錯誤能夠按Ctrl+退格鍵刪除字符。
添加SysV風格服務腳本
[root@localhost ~]# vim /etc/rc.d/init.d/postfix #!/bin/bash # # chkconfig: 2345 80 30 # description: Postfix is a Mail Transport Agent, which is the program \ # 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
[root@localhost ~]# chmod +x /etc/rc.d/init.d/postfix [root@localhost ~]# chkconfig --add postfix [root@localhost ~]# chkconfig postfix on [root@localhost ~]# service postfix start
Postfix相關命令
# 開啓postfix; $ postfix start # 檢查配置; $ postfix check # 從新加載; $ postfix reload $ postconf [OPTION] -d:顯示Postfix默認的配置; -n:顯示新修改的配置; -m:顯示支持的存儲文件類型如hash,mysql等; -a:顯示支持sasl的客戶端插件類型;
安裝完畢
若是上面沒有使用UID爲89的postfix用戶,那麼檢查postfix時就會報以下錯誤。
$ postfix check postsuper: fatal: scan_dir_push: open directory defer: Permission denied
緣由是通常編譯安裝時,Postfix隊列目錄/var/spoole/postfix/,下有幾個目錄會使用系統自帶postfix的目錄,因爲系統默認使用postfix(UID:89)用戶給刪除了,因此這些目錄就找不到postfix用戶,開啓時就會報錯一些權限問題,把如下幾個目錄權限給修改如下就行了,若是還有一些別的目錄一併修改便可。
$ chown -R postfix.root /var/spool/postfix/defer/ $ chown -R postfix.root /var/spool/postfix/deferred/ $ chown -R postfix.root /var/spool/postfix/private/ $ chown -R postfix.postdrop /var/spool/postfix/public/ $ chown -R postfix.postdrop /var/spool/postfix/maildrop/ $ chown -R postfix.root /var/lib/postfix/
Postfix進程
master:這條進程是 Postfix 郵件系統的大腦,它產生全部其餘進程。 smtpd:做爲服務器端程序處理全部外部連進來的請求。 smtp:做爲客戶端程序處理全部對外發起鏈接的請求。 qmgr:它是 Postfix 郵件系統的心臟,處理和控制郵件隊列裏面的全部消息。 local:這是 Postfix 自有的本地投遞代理MDA,就是它負責把郵件保存到郵箱裏。