1. 程式人生 > >Linux中Postfix郵件安裝配置(二)

Linux中Postfix郵件安裝配置(二)

本套郵件系統的搭建,從如何發郵件到收郵件到認證到虛擬使用者虛擬域以及反病毒和反垃圾郵件等都有詳細的介紹。在搭建過程中必須的引數解釋以及原理都有告訴,這樣才能更好地理解郵件系統。

解除安裝自帶postfix
$ rpm -q postfix
postfix-2.6.6-2.2.el6_1.x86_64
$ rpm -ev postfix --nodeps
環境準備

1. YUM要配置好。

2. 編譯環境要配置好。

PS: 這兩步驟如果有問題,那麼可以看本網站提供的YUM和編譯章節。

安裝MySQL伺服器
$ 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服務
$ 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:89、GID:89,後面很多地方都要用到這兩個ID號,如果此ID號更改了,那麼Postfix安裝方面會有很多目錄許可權都需要更改。

編譯安裝postfix-2.11.7
$ 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風格服務指令碼
[[email protected] ~]# 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
[[email protected] ~]# chmod +x /etc/rc.d/init.d/postfix
[[email protected] ~]# chkconfig --add postfix
[[email protected] ~]# chkconfig postfix on
[[email protected] ~]# 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,就是它負責把郵件儲存到郵箱裡。