postfix-企業郵件服務器搭建完整版

聲明:本文爲個人原創,引用請申明出處。此文在百度文庫等地方上傳過。百度文庫ID:denhuaibo!此文最早上傳於2014年。

附件提供文檔下載。

postfix郵件服務器安裝配置文檔

 

 

 

 

 

 

目錄

簡介... 2

構建運行環境... 2

安裝配置postfix. 5

在客戶端發送郵件... 7

另一種認證更簡單... 11

在客戶端接收郵件... 12

郵件傳輸加密... 13

郵件病毒掃描... 14

廣告郵件的抵擋... 19

郵件監控... 20

 

 

 

 

 

 

 

 

 

 

 

 

簡介

這是一個集成項目,請仔細閱讀本文檔後再操作。遇到問題時請耐心檢查配置和日誌文件,本文檔中如果沒有列出相關解決方法請到網上尋求幫助吧!

本文檔旨在讓大家明白postfix和其它程序之間的關係,如何讓他們協同工作。每種軟件提供的功能,所完成何種任務。本文檔不詳細介紹postfix,具體詳細的postfix參數和優化請參閱《POSTFIX權威指南》

這裏以redhat6.4系統爲例進行安裝,其它系統可以根據實際情況對命令進行相應調整,配置方式不變。

redhat中默認安裝了sendmail的需要先使用rpm 命令安裝完postfix後卸載掉sendmail,也可以不卸載使用chkconfig sendmail off命令禁止其啓動。

在此使用的是一個完整的架構,其中會用到非常多的軟件,所以在進行此實驗之前需要一定的linux系統基礎知識才能保證成功率。

會用到的軟件有:

apache 提供網頁後臺管理功能,可使用nginx或者其它相關程序代替。

php   postfixadmin組件提供瀏覽,因爲postfix admin是使用php編寫的網頁

mysql  提供用戶認證和虛擬郵件路徑等數據信息

postfix 主郵件系統,提供郵件管理

postfix admin 提供郵件網頁管理功能,是一個使用php編寫的網頁。可使用extmail代替。

cyrus-sasl  提供smtp發送郵件認證功能

pam_mysql  提供pammysql認證,與cyrus-sasl協同工作。可使用courier-authlib代替

dovecot  提供收件服務功能

Amavisd-new 郵件系統和殺毒軟件之間的中介程序,負責調用殺毒軟件對郵件進行病毒掃描

Clamav  一個開源的殺毒軟件,另外一個比較好的是f-prot但是要收費。

總共有10個軟件協同工作來構建出一套實用安全的郵件系統。以下內容是本人在部署完整個系統後發現在整個過程中費了很多的時間和經歷,所以想想還是把它寫下來貢獻給大家學習參考。由於是事後回憶,當初也沒有做筆記,所以很多在過程中遇到的錯誤沒有記錄下來實在是一個遺憾。希望大家引以爲鑑,在平時工作和學習當中一定要做好筆記,特別是錯誤的處理過程。這裏只能通過日誌內容回憶一下處理的全過程供大家參考了。下面如無特殊說明,所使用的rpm包均在安裝光盤中能直接找到

構建運行環境

爲了方便後續操作,在安裝之前有必要進行yum源的配置,然後通過光盤進行安裝是比較方便的事情。所以下面從光盤安裝的rpm包都使用yum命令操作,當然也可以使用rpm命令,看個人喜好了.

1apachephp安裝

yum install httpd  安裝apache程序

php安裝:

雖然安裝光盤中有phprpm包,但是隻能提供一般的功能,postfixadmin中會用到兩個功能是rpm包無法提供的,所以必須下載源碼編譯安裝。否則打開網頁配置時會出現如下錯誤,提示缺少mbstringimap組件。

  • Error: Depends on:     multibyte string - NOT FOUND
        To install multibyte string support, install php5-mbstring

  • Warning: Depends on: IMAP     functions - NOT FOUND
        To install IMAP support, install php5-imap
        Without IMAP support, you won't be able to create subfolders when creating     mailboxes.

 

可以到http://www.php.net/ 官網下載php的源代碼,這裏使用的是php-5.5.5.tar.gz當前最新版本。使用tar -zxf php-5.5.5.tar.gz解壓然後編譯,下面是編譯的.configure選項

./configure --prefix=/usr/local/php5.5 --enable-bcmath  --enable-mbstring  --enable-sockets  --enable-zip --with-apxs2=/usr/sbin/apxs --with-libxml-dir --with-gd --with-mysql--with-mysql-sock --with-jpeg-dir --with-freetype-dir --with-gettext--with-imap --with-imap-ssl --with-kerberos

程序運行的過程中可能會出現錯誤,無法繼續的可能。下面列出一些來:

./configure: line 8423: /usr/sbin/apxs: No such file ordirectory  請安裝httpd-devel組件

configure: error: xml2-config not found  請安裝libxml2-devel

configure: error: jpeglib.h not found 請安裝libjpeg-turbo-devel

configure: error:png.h not found 請安裝 libpng-devel

configure: error: freetype.h not found. 請安裝 freetype-devel

error: utf8_mime2text() has new signature 需要安裝libc-clientlibc-client-devel 可到rpmfind.net上下載

configure: error: Kerberos libraries not found. 請安裝krb5-devel

configure: error: Cannot find OpenSSL's <evp.h>  請安裝openssl-devel

其它錯誤,請自行網上查找答案。

如果通過,你會看到Thank you for using PHP.的這麼一行,當然不一定顯示在最後。

看到這個就表示成功很近了,使用make編譯,然後make install安裝。

默認安裝完以後使用servicehttpd start就可以啓動了,不需要什麼配置。

可以在/var/www/html/下寫一個php的測試頁。

vi/var/www/html/index.php內容爲:

<?php

 phpinfo();

?>

然後保存,使用瀏覽器輸入服務器的ip地址就能看到一片php的信息。當然如果高端一點的可以使用源碼進行安裝,其中配置過程就比較麻煩一點。具體方式可以參考網上的文檔,這裏不細說。

如果php網頁無法執行,只能看到文件內容請檢查httpd.conf文件中是否有一下內容:

LoadModulephp5_module modules/libphp5.so

AddHandlerphp5-script .php

AddTypetext/html .php

2mysql安裝配置:

   同樣使用yum installmysql-server 進行安裝,當然數據庫就比較麻煩一點。

安裝完成後使用mysql_install_db命令對數據庫進行初始化,接下來就可以啓動數據庫了。service mysqld start 啓動

/usr/bin/mysqladmin-u root password “newpassword” 修改數據庫密碼,然後使用service mysqld restart重新啓動一次,使用mysql -u root -p 輸入上面的密碼後登錄數據庫測試是否能正常使用。

3postfixadmin安裝

下載位置http://sourceforge.net/projects/postfixadmin/files/postfixadmin/目前使用的是2.3.6版本。

刪除/var/www/html/index.php之前的測試文件,然後把postfixadmin-2.3.6.tar.gz解壓到此處。

postfix單獨創建一個數據庫和帳號,是比較明智的選擇,便於管理和備份。

mysql -u root -p

輸入密碼登錄數據庫

mysql> createdatabase postfix character set utf8; 創建數據庫

mysql> grantall privileges on postfix.* to postfix@localhost identified by 'youpassword';

vi/var/www/html/config.inc.php修改內容

$CONF['configured']= true; 打開配置功能

$CONF['database_type']= 'mysql';  設置網頁數據庫類型

$CONF['database_host']= 'localhost'; 數據庫主機地址

$CONF['database_user']= 'postfix';  數據庫賬戶

$CONF['database_password']= 'postfix'; 數據庫密碼

$CONF['database_name']= 'postfix'; 數據庫名字

修改完後保存

在瀏覽器中輸入http://192.168.4.11/setup.php如果正常就能看到

spacer.gif

輸入一個密碼點下面的按鈕,會有提示要求再次編輯config.inc.php 文件輸入

spacer.gif

修改好以後在第一項輸入剛纔設置的密碼,第二項爲管理員email地址如[email protected]下面輸入設置的密碼。然後點按鈕提交,這樣就算設置完了。

首先新建一個域:

spacer.gif

然後可以新建郵箱:

spacer.gif

注意用戶名和名字需要一模一樣,否則可能會導致後面無法登錄驗證。具體原因不知道,如果你們明白怎麼回事情,還希望發送郵件給我謝謝! denwork#qq.com#改成@

建立還郵箱地址以後還是不能發送郵件,因爲沒有郵件服務程序。

安裝配置postfix

配置好yum源,然後通過光盤進行安裝是比較方便的事情。其實redhat系統在安裝完成以後就已經安裝完成了。yum install postfix進行安裝

主要的配置文件:

/etc/postfix/main.cf  postfix的打部分設置都在此文件中,後面會多次用到這個文件

/etc/postfix/master.cf  該文件規定了postfix每個程序的運行參數,後面也會使用到

編輯main.cf文件這裏只列出修改的內容

 

myhostname =mail.test.com   輸入本機的計算機名

mydestination = 因爲要在下面設置virtual_mailbox_domains所以這裏需要留空

mydomain = test.com    輸入域名

inet_interfaces= all  運行的接口

mynetworks =192.168.4.11/32,127.0.0.1/32 設置信任的客戶端地址

註釋:設置虛擬郵件目錄(下面的內容一樣在main.cf裏面)

virtual_mailbox_base= /var/mailbox   設置虛擬郵件目錄

virtual_mailbox_maps= mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf 定義郵件結構,使用到的表是mailbox。裏面保存了用戶名密碼,用戶郵件的路徑等。

virtual_mailbox_domains= mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf定義郵件域名。裏面記錄了郵件服務器可以服務的域名,可以爲很多域名提供郵件服務。

virtual_alias_maps= mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf  定義郵件別名,比如每個部門有一個名字對應了整個部門所有的員工郵件地址。

virtual_minimum_uid= 48 因爲是網頁上面對其進行操作,所以這裏的uidgid需要是apahce的用戶id,可以在/etc/passwd文件中查看,或者使用id apache命令查看。

virtual_uid_maps= static:48 同上

virtual_gid_maps= static:48 同上

virtual_transport= virtual 傳輸類型當然是virtual

message_size_limit= 41720000  允許發送的最大郵件大小,注意這裏不是附件而是整個郵件的大小。單位爲Byte

mailbox_size_limit= 209715200  定義郵件可以使用的空間

virtual_mailbox_limit= 209715200 定義虛擬郵件可以使用的空間

virtual_create_maildirsize= yes

virtual_mailbox_extended= yes

virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf用來定義設置郵箱容量,有了上面的兩個項可以不使用。

virtual_mailbox_limit_override= yes

virtual_maildir_limit_message= Sorry, the user’s maildir has overdrawn his disspace quota, please try againlater.

virtual_overquota_bounce= yes

==============================main.cf=========================================

上面main.cf文件中還有幾個cf的文件,如

mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf意思是需要在/etc/postfix/mysql 目錄下創建mysql_virtual_mailbox_maps.cf的文件,下面就給出這幾個文件的內容。

/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf

user = postfix  填寫數據庫賬戶

password = postfix 數據庫密碼

hosts = localhost  數據庫地址

dbname = postfix  數據庫名

table = mailbox   使用的表

select_field = maildir  關鍵字

where_field = username 條件

上面的動作完成使用賬戶密碼等內容登錄數據庫,然後執行use postfix; select maildir from mailbox where username=”[email protected]”;得到的結果是這個郵件用戶保存郵件的相對main.cf配置文件中virtual_mailbox_base = /var/mailbox選項設置的路徑加上查詢的結果。比如郵件名爲[email protected]的用戶郵件路徑爲/var/mailbox/[email protected]/。告訴postfix程序保存郵件的具體位置,下面其它類似文件的作用也是如此。就不做一一講解了。

mysql_virtual_domains_maps.cf內容:

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = domain

select_field = domain

where_field = domain

mysql_virtual_alias_maps.cf內容:

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = alias

select_field = goto

where_field = address

mysql_virtual_mailbox_limit_maps.cf內容:

user = postfix

password = postfix

hosts = localhost

dbname = postfix

table = mailbox

select_field = quota

where_field = username

=================================關於數據庫的設置文件完========================

還需要對master.cf文件進行設置,上面就寫過這個文件是對postfix的各個程序進行控制,所以後面的收發文件、病毒查殺等程序都是在這個文件中設置。添加一行:

smtps    inet  n       -      n       -       -      smtpd

 

到這裏postfix基本就可以搭配postfixadmin進行收發郵件了。但是這盡限於本機,還無法像其它客戶端一樣通過網頁或者outlook等客戶端進行收發郵件。

postfix進行測試,使用service postfix start命令啓動程序。這裏需要注意,就算顯示OK也需要查看一下/var/log/maillog文件中是否有錯誤。否則還是會不成功的。

telnet 127.0.0.1 25可以測試postfix是否正常。

輸入ehlo local

mail from:[email protected]

rcpt to:[email protected]

data

   “輸入郵件內容”

  . 輸入一個點結束編輯

250 2.0.0 Ok: queued as 2AE65203D6 出現類似內容代表郵件已經發出了。

在客戶端發送郵件

經過上面的設置後,就可以發送郵件了。如果要達到使用foxmail或者outlook客戶端進行郵件的收發還需要進行下一步配置,就是登錄郵件服務器的驗證。

啓用stmpd程序的認證,這個認證的目的是可以使用客戶端登錄郵件服務器發送郵件,如果需要收郵件還需要另外一個程序。

常常使用saslauthd來進行程序認證,需要安裝如下rpm包:

cyrus-sasl-libcyrus-sasl-develcyrus-sasl-plaincyrus-sasl-md5cyrus-sasl

編輯/etc/sasl2/smtpd.conf配置文件:

pwcheck_method:saslauthd 認證程序

log_level: 3 日誌級別

mech_list: plainlogin 提供的認證類型

saslauthd_path:/var/run/saslauthd/mux 執行程序的socket文件默認爲此位置

這裏更正一下網上的內容,很多網站上面寫的都是一樣的,各個網站互相複製內容。導致結果全是錯誤的根本無法提供驗證。後來找到一個方法,就是使用pam_mysql模塊爲sasl程序提供pam的驗證功能達到驗證的目的。

下載pam_mysql源代碼。http://download.chinaunix.net/download/0008000/7820.shtml在網上找到的鏈接,只能保證暫時有效。大家可以去網上搜索。我目前找到的最高版本pam_mysql-0.7RC1.tar.gz

使用如下命令進行編譯安裝。

./configure--with-openssl=/usr/include/openssl/ --with-mysql=/usr  --with-pam=/usr  --with-cyrus-sasl=/usr/include/sasl/

在配置程序運行的過程中會提示沒有pam的頭文件,需要安裝pam-develmysql-devel

其中由於需要md5支持,需要把/usr/include/openssl/md5.h文件拷貝到/usr/include/md5.h下才能編譯成功。如果沒有這個文件需要安裝openssl-devel

然後make &&make install 編譯並安裝

把編譯好的模塊cp/usr/lib/security/pam_mysql.* /lib/security/目錄下

編輯PAM模塊,讓smtp程序能調用pam進行mysql數據庫認證,使用vi 打開/etc/pam.d/smtp.postfix刪除原來的兩項內容,添加以下兩項內容:

auth sufficientpam_mysql.so user=postfix passwd=postfix host=localhost db=postfixtable=mailbox usercolumn=name passwdcolumn=password crypt=1 4

account  required pam_mysql.so  user=postfix  passwd=postfix  host=localhost  db=postfix table=mailbox usercolumn=name passwdcolumn=password crypt=1 4

以上參數的解釋和其它參數請查看程序編譯目錄的README文件。

除了上面的配置以外還需要在/etc/postfix/main.cf配置文件中添加以下內容:

broken_sasl_auth_clients= yes 啓用sasl登錄認證

smtpd_recipient_restrictions=

        permit_mynetworks 允許mynetworks選項中的主機

        permit_sasl_authenticated 允許通過sasl_authenticated認證的主機

        reject_invalid_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_path= smtpd

smtpd_sasl_local_domain= $myhostname

smtpd_sasl_security_options= noanonymous

smtpd_banner =Welcome to our $myhostname ESMTP,Warning: Version Available!

 

 

調試方法:

配置好上面的配置文件以後重新啓動postfix,使用telnet127.0.0.1 25進行調試,以下是調試內容:

[root@localhostlog]# telnet 127.0.0.1 25

Trying127.0.0.1...

Connected to127.0.0.1.

Escape characteris '^]'.

220 Welcome toour localhost.localdomain ESMTP,Warning: Version Available!  這裏顯示的內容是上面main.cfsmtpd_banner= Welcome to our $myhostname ESMTP,Warning: Version Available!的信息。

ehlo local 查看服務器支持的信息。

250-localhost.localdomain

250-PIPELINING

250-SIZE41720000

250-VRFY

250-ETRN

250-AUTH PLAINLOGIN

250-AUTH=PLAINLOGIN   顯示這兩項說明支持plain login認證

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN

auth login  使用login認證方式

334 VXNlcm5hbWU6  提示輸入用戶名

dGVzdEB0ZXN0LmNvbQ==

334 UGFzc3dvcmQ6  提示輸入密碼

cmVkaGF0

235 2.7.0 Authenticationsuccessful  出現這個表示認證成功。

上面輸入的密碼是通過命令編碼後的內容,在shell命令行中輸入printf  ”[email protected]” | openssl base 64,然後就能看到了,密碼也是如此。同時可以在日誌裏面查看認證過程,涉及到的日誌文件有/var/log/maillog, /var/log/message, /var/log/secure, 如果其中的內容都不能判斷是什麼錯誤的話,那麼請啓用mysql的詳細日誌。進入mysql 使用show variables like "%general_log%";語句進行查看,如果|general_log      | OFF,那麼set globalgeneral_log=1;語句開啓,並在上一條語句中查看到的路徑中文件的位置進行查看。然後再此執行認證過程,看是否mysql參與了認證過程。我在安裝的時候就忘記把pam文件中原來的兩行註釋,造成沒有通過mysql認證所以導致日誌文件中總是提示認證失敗沒有別的錯誤提示。

在實際應用過程中會發現,當你使用A用戶登錄後以B用戶的名義來寄信這也是可以的。所以必須杜絕這種情況發生。設置防止僞造發信人:

main.cf中添加

smtpd_sender_login_maps=

mysql:/etc/postfix/mysql/mysql_sender_login_maps.cf,mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf

smtpd_reject_unlisted_sender= yes

smtpd_sender_restrictions= reject_authenticated_sender_login_mismatch

smtpd_recipient_restrictions=

        reject_sender_login_mismatch

       reject_authenticated_sender_login_mismatch

修改後的smtpd_recipient_restrictions=

        permit_mynetworks

        reject_invalid_hostname

        reject_unknown_sender_domain

        reject_sender_login_mismatch

       reject_authenticated_sender_login_mismatch

                   permit_sasl_authenticated

        reject_non_fqdn_sender

        reject_non_fqdn_recipient

        reject_unknown_recipient_domain

        reject_unauth_pipelining

        reject_unauth_destination

#       reject_non_fqdn_hostname

注意這個列表的順序,否則可能出問題。

數據庫文件配置:

mysql_sender_login_maps.cf

user = postfix 

password = ps.test.com

hosts =localhost

dbname = postfix

table = mailbox

select_field =username

where_field =username

mysql_virtual_alias_maps.cf

user = postfix

password = ps.test.com

hosts =localhost

dbname = postfix

table = alias

select_field =goto

where_field =address

additional_conditions= AND active='1'

配置完後重啓postfix服務,再進行測試。使用A賬戶和密碼登錄,指定發件人爲B <from:B郵箱地址>如果以上配置成功會出現如下類似錯誤:

postfix/smtpd[10220]:NOQUEUE: reject: RCPT from unknown[112.193.145.100]: 553 5.7.1 <[email protected]>:Sender address rejected: not owned by user [email protected]; from=< [email protected]> to=< [email protected]> proto=ESMTP helo=<CV0024762TO>

另一種認證更簡單

smtp.conf配置

 

pwcheck_method:authdaemond

log_level: 3

mech_list: plainlogin

srp_mda: md5

password_format:crypt

authdaemond_path:/usr/local/courier-auth/var/spool/authdaemon/socket

 

 

courier-authlib安裝

./configure--sysconfdir=/etc --prefix=/usr/local/courier-auth--with-authmysqlrc=/etc/authlib/authmysqlrc--with-mysql-libs=/usr/lib/mysql/ --with-mysql-includes=/usr/include/mysql/

configure期間如果提示LibTool  ltdl庫文件沒找到就需要安裝libtool-ltdl-devel這個軟件包。

makeinstall-configure配置文件可以使用這個命令來生成

按照上面的配置安裝完成後,所有的配置文件都在/etc/authlib下面。

配置authdaemonrc文件告訴程序使用mysql模塊認證。

authmodulelist="authmysql"

authmodulelistorig="authmysql"

只需要修改這兩項就行了。

authmysqlrc文件

 

MYSQL_SERVER            localhost  

MYSQL_USERNAME          postfix

MYSQL_PASSWORD          postfix

MYSQL_SOCKET            /var/lib/mysql/mysql.sock

MYSQL_PORT              3306

MYSQL_DATABASE          postfix 數據庫名稱

MYSQL_USER_TABLE        mailbox 數據庫表名

MYSQL_CRYPT_PWFIELD     password 密碼字段

DEFAULT_DOMAIN  test.com  服務器域名

MYSQL_UID_FIELD         89 postfix的賬戶ID

MYSQL_GID_FIELD         89 postfixID

MYSQL_LOGIN_FIELD       username 數據庫表中帶域名的字段

MYSQL_HOME_FIELD        '/var/mailbox/' 郵件存放位置,和main.cf文件中的一致

MYSQL_NAME_FIELD        name  用戶名字段

MYSQL_MAILDIR_FIELD     maildir 郵件路徑字段

MYSQL_WHERE_CLAUSE      active='1' 是否爲激活狀態

 

在編譯目錄下把courier-authlib.sysvinit文件複製到/etc/init.d目錄下courier-authlib這樣就可以使用service命令啓動了。

 

 

排錯:

 warning: SASL authentication failure: cannotconnect to Courier authdaemond: Permission denied

出現以上信息時,請檢查/usr/local/courier-auth/var/spool/authdaemon目錄的權限,請增加執行權限。

 warning: SASL authentication failure: cannotconnect to Courier authdaemond: No such file or directory

1、出現以上信息,請確認courier-authlib已經啓動。

2authmysqlrcsmtp.conf文件中每行的結尾是否有空格。特別是authdaemond_path:/usr/local/courier-auth/var/spool/authdaemon/socket

3main.cf文件中smtpd_sasl_local_domain= 參數需要爲空。

在客戶端接收郵件

如果你通過了上面的配置,那麼恭喜你。經過漫長的測試和配置過程,你的郵件服務器已經可以通過客戶端發送郵件了,但是很遺憾的告訴你。到這裏你也纔剛剛完成了整個郵件系統建設的一半工作,只能發不能收算什麼郵件系統。下面就來介紹如何使用客戶端來接收別人發來的郵件。

這裏使用到的軟件是dovecot使用yum installdovecot進行安裝,可以先查看一下包的文件結構,這樣比較能知道配置文件等的位置。

首先打開/etc/dovecot/dovecot.conf,裏面修改的內容有

base_dir =/var/run/dovecot/

protocol pop3

把這兩行的註釋去掉,

接下來是下級目錄conf.d10-auth.conf配置認證方式

disable_plaintext_auth= no 支持明文傳輸

auth_mechanisms= plain login加上認證類型

#!includeauth-system.conf.ext 註釋掉這行

!includeauth-sql.conf.ext  取消這樣的註釋。打開使用sql認證的功能

10-mail.conf配置mail的存放路徑。

找到mail_location的行,添加mail_location= maildir:/var/mailbox/%n@%d/ 這裏只的是mail的目錄爲/var/mailbox/郵箱名@域名/

first_valid_uid= 48 uid爲系統的apache用戶ID,這裏一定要修改正確否則也會認證不成功

20-pop3.conf配置去掉pop3_uidl_format的註釋。

/etc/dovecot/下新建一個配置文件dovecot-sql.conf.ext,這個文件的位置取決於在conf.d目錄下auth-sql.conf.ext配置文件中的路徑。內容如下

driver =mysql

connect =host=localhost dbname=postfix user=postfix password=postfix 數據庫的鏈接信息

default_pass_scheme= MD5 郵件密碼加密方式

password_query =SELECT password, concat('/var/mailbox/',maildir) AS home, 48 AS uid, 48 AS gidFROM mailbox WHERE username = '%u'

user_query =SELECT concat('/var/mailbox/',maildir) AS home, 48 AS uid, 48 AS gid FROMmailbox WHERE username = '%u'

配置完成後就可以啓動dovecot服務了。servicedovecot start

測試方式也可以使用telnet127.0.0.1 110

[[email protected]]# telnet 127.0.0.1 110

Trying127.0.0.1...

Connected to127.0.0.1.

Escape characteris '^]'.

+OK Dovecot ready.

[email protected]

+OK

pass redhat

+OK Logged in.

list

+OK 3 messages:

1 2492

2 435

3 320

如果到這裏就證明認證已經可以正常使用了,如果遇到無法認證可以到maillog文件中查看日誌。

在配置dovecot時總會發現日誌內容不夠詳細,可以通過下面選項打開程序的調試日誌便於程序的排錯。

# 顯示協議層的SSL錯誤

verbose_ssl = yes

# 詳細的認證過程信息記錄

auth_verbose = yes

# 更詳細的認證調試(debug)信息

auth_debug = no

郵件傳輸加密

以上配置中的,密碼和內容都是在網絡上明文傳輸的,所以非常的不安全。可以啓用SSL加密方式進行認證。

smtp郵件發送的加密認證:

生成ssl證書文件:

make -C/etc/pki/tls/certs smtpd.pem

mv  /etc/pki/tls/certs/smtpd.pem  /etc/postfix/

在生成證書是會提示輸入一些內容,按照提示輸入即可。

打開/etc/postfix/main.cf文件,添加以下內容:

#=========================postfixssl config==================

smtp_use_tls =yes

smtpd_use_tls =yes

smtp_tls_note_starttls_offer= yes

smtpd_tls_key_file= /etc/postfix/smtpd.pem

smtpd_tls_cert_file= /etc/postfix/smtpd.pem

smtpd_tls_CAfile= /etc/postfix/smtpd.pem

smtpd_tls_loglevel= 1

smtpd_tls_received_header= yes

smtpd_tls_session_cache_timeout= 3600s

打開/etc/postfix/master.cf文件:

smtps     inet n       -       n      -       -       smtpd

前面已經添加過這一項了,不過還是請確認一下。默認配置裏面會有多餘的兩個-o選項,還請不要配置。

注意,經過測試在配置郵件客戶端的時候需要選擇認證加密方式。分別發送加密爲tls端口還是25,收信加密爲ssl端口會變成993或者995

dovecot郵件接收的加密認證:

首先配置conf.d目錄下的10-auth.conf文件:

disable_plaintext_auth= yes

10-master.conf文件:

inet_listenerimap {

    port = 0 改成0.

    #port = 143

  }

inet_listener pop3{

    port = 0 改成0

    #port = 110

  }

10-ssl.conf文件:

ssl = yes

ssl_cert =</etc/pki/dovecot/certs/dovecot.pem

ssl_key =</etc/pki/dovecot/private/dovecot.pem

查看一下/etc/pki/dovecot/certs/dovecot.pem是否有此文件,如果沒有此文件需要運行/usr/libexec/dovecot/mkcert.sh腳本。如果使用rpm包安裝默認文件是已經存在的。

然後重新啓動dovecot程序,servicedovecot restart

SSL認證登錄時,使用mutt-f pops://[email protected]登錄發現調試日誌中的用戶名是test。自動加上域名需要在10-auth.conf中配置

auth_default_realm= test.com

設置完以上內容後就可以使用客戶端進行測試了,outlook或者foxmail

郵件病毒掃描

目前郵件病毒比較猖獗,如果有相關的殺毒軟件放在服務器上就能保護所有的用戶。現在比較好的郵件殺毒軟件算是f-protclamav

配置殺毒軟件需要兩個軟件支持,amavisdclamav 或者f-prot

其中amavisd可以在這個網站下載rpmhttp://www.ijs.si/software/amavisd/#download或者源碼,這裏爲了方便我下載了rpm包。同時如果需要安裝這個rpm包的話還需要很多的依賴包,而且有很多是在光盤中無法找到的。這些包可以到rpmfind.nethttp://pkgs.repoforge.org/ 下載。下面列出光盤中沒有的包:

amavisd-new-2.8.0-1.el6.rf.i686.rpm這個包可以到官網下載

altermime-0.3.10-1.el6.rf.x86_64.rpm   perl-BerkeleyDB-0.43-1.el6.rf.x86_64.rpm

amavisd-new-2.8.0-1.el6.rf.x86_64.rpm  perl-Convert-TNEF-0.18-1.el6.rf.noarch.rpm

arc-5.21p-1.el6.rf.x86_64.rpm          perl-Convert-UUlib-1.34-1.el6.rf.x86_64.rpm

cabextract-1.4-1.el6.rf.x86_64.rpm     perl-Net-Server-0.99-1.el6.rf.noarch.rpm

freeze-2.5.0-3.el6.rf.x86_64.rpm       perl-Unix-Syslog-1.1-1.el6.rf.x86_64.rpm

lha-1.14i-19.2.2.el6.rf.x86_64.rpm     ripole-0.2.0-1.2.el6.rf.x86_64.rpm

ncompress-4.2.4-54.el6_2.1.x86_64.rpm  unarj-2.63-0.a.2.el6.rf.x86_64.rpm

nomarch-1.4-1.el6.rf.x86_64.rpm        unrar-4.2.3-1.el6.rf.x86_64.rpm

p7zip-9.20.1-1.el6.rf.x86_64.rpm       zoo-2.10-2.2.el6.rf.x86_64.rpm

使用rpm -ivh安裝完所有rpm包以後就可以進行配置了。

amavisd配置很簡單打開/etc/amavisd.conf文件,搜索clamav。然後去掉其中內容的註釋就行了:

['ClamAV-clamd',

  \&ask_daemon, ["CONTSCAN {}\n","/tmp/clamd.socket"],

  qr/\bOK$/m, qr/\bFOUND$/m,

  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

 

['ClamAV-clamd-stream',

  \&ask_daemon, ["*", 'clamd:/tmp/clamd.socket'],

  qr/\bOK$/m, qr/\bFOUND$/m,

  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

/tmp/clamd.socket這個文件需要安裝了clamav之後再確定正確路徑。

上面是病毒引擎,還需要一些別的基本配置纔可以使用。

$mydomain =   修改成你的域名

$MYHOME =   amavis的默認目錄,如果是rpm安裝的。應該不需要修改。

$inet_socket_port = 10024  程序監聽端口

$myhostname = mail.test.com  本地主機名

$notify_method  = 'smtp:[127.0.0.1]:10025';

$forward_method = 'smtp:[127.0.0.1]:10025';   設置鏈接端口,在postfix權威指南里面說到是隻掃描完郵件後通過這個端口傳回給postfix處理。

下面是找到問題郵件後進行什麼操作的規則

$final_virus_destiny      =D_DISCARD;   找到病毒後

$final_banned_destiny     = D_BOUNCE;  找到禁止項目

$final_spam_destiny       = D_PASS;  找到廣告

$final_bad_header_destiny = D_PASS;  找到不良信件標頭

操作的選項有 D_PASS  無論郵件的內容是否有問題,都發給收件人。

D_DISCARD 郵件被直接丟棄,而且不會告知收件人和發件人。

D_BOUNCE 郵件不會傳給收件人,但無法傳遞的信息會傳給發件人。

D_REJECT 郵件不會傳給收件人,但發件人會收到拒絕的信息。

暫時先不要啓動amavisd因爲還沒有安裝殺毒軟件,這只是一個殺毒軟件與postfix之間的接口程序而已。

下面來安裝clamav

下載clamav源代碼,./configure --prefix=/usr/local/clamav命令進行配置安裝。

安裝完以後配置文件在/usr/local/clamav/etc/目錄下,裏面有兩個默認的實例文件,把clamd.conf.sample複製一份成clamd.conf另外一個也進行類似操作,然後對文件進行修改。

clamd.conf文件配置:

#Example把這行註釋掉。

LogFile /var/log/clamav/clamd.log

LogFileMaxSize 1M

LogVerbose

LogTime

LocalSocket /tmp/clamd.socket

PidFile /var/run/clamav/clamd.pid

DatabaseDirectory  /usr/local/clamav/data

MaxDirectoryRecursion 15

User amavis  默認爲clamav一定要修改,否則會lstat() failed: Permission denied. ERROR\n" at (eval 113) line897.的提示信息而無法掃描。

ScanMail  yes

ScanArchive yes

上面的選項可根據實際情況調整,在配置文件中有詳細的說明。

freshclam.conf文件配置:

#Example 註釋掉

DatabaseDirectory /usr/local/clamav/data 和上面一樣配置

UpdateLogFile /var/log/clamav/freshclam.log

LogSyslog
LogVerbose
DatabaseOwner amavis

Checks 12
DatabaseMirror db.CN.clamav.net  這裏默認CNXY
DatabaseMirror database.clamav.net
NotifyClamd /usr/local/clamav/etc/clamd.conf

創建相關目錄 mkdir /var/log/clamav && chown -c amavis /var/log/clamav/

mkdir /usr/local/clamav/data && chown -c amavis /usr/local/clamav/data

執行/usr/local/clamav/bin/freshclam升級病毒庫。

爲方便啓動和管理程序方便,創建一個程序啓動腳本:

vi /etc/init.d/clamd

#! /bin/bash

#

# crond Start/Stop the clam antivirusdaemon.

#

# chkconfig: 2345 90 60

# description: clamdis a standard UNIXprogram that scans for Viruses.

# processname: clamd

# config: /usr/local/etc/clamd.conf

# pidfile: /var/run/clamav/clamd.pid

 

# Source function library.

. /etc/init.d/functions

 

RETVAL=0

 

# See how we were called.

 

prog="clamd"

progdir="/usr/local/clamav/sbin"

 

# Source configuration

if [ -f /etc/sysconfig/$prog ] ; then

. /etc/sysconfig/$prog

fi

 

start() {

echo -n $"Starting $prog: "

daemon $progdir/$prog

RETVAL=$?

echo

return $RETVAL

}

 

stop() {

echo -n $"Stopping $prog: "

killproc $prog

RETVAL=$?

echo

return $RETVAL

}

 

rhstatus() {

status clamd

}

 

restart() {

stop

start

}

 

reload() {

echo -n $"Reloading clam daemonconfiguration: "

killproc clamd -HUP

retval=$?

echo

return $RETVAL

}

 

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

reload)

reload

;;

status)

rhstatus

;;

condrestart)

[ -f /var/lock/subsys/clamd ] &&restart || :

;;

*)

echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"

exit 1

esac

 

exit 0

設置 clamav 爲自啓動項

 

# chmod 755 /etc/init.d/clamd

# chkconfig --add clamd

# chkconfig clamd on

配置postfix,讓接收的郵件都需要先經過病毒掃描後再轉發給收件人。

vi /etc/postfix/main.cf在文件中添加下面一項:

content_filter = SMTP-amavis:[127.0.0.1]:10024

vi /etc/postfix/master.cf編輯文件添加以下內容:

#Set amavis

SMTP-amavis   unix - - n - 2 smtp

       -o SMTP_data_done_timeout=1200

       -o SMTP_send_xforward_command=yes

       -o disable_dns_lookups=yes

       -o max_use=20

127.0.0.1:10025 inet n - n - - smtpd

       -o content_filter=

       -o smtpd_restriction_classes=

       -o smtpd_delay_reject=no

       -o smtpd_client_restrictions=permit_mynetworks,reject

       -o smtpd_helo_restrictions=

       -o smtpd_sender_restrictions=

        -osmtpd_recipient_restrictions=permit_mynetworks,reject

       -o smtpd_data_restrictions=reject_unauth_pipelining

       -o smtpd_end_of_data_restrictions=

       -o mynetworks=127.0.0.1/32

       -o smtpd_error_sleep_time=0

       -o smtpd_soft_error_limit=1001

       -o smtpd_hard_error_limit=1000

       -o smtpd_client_connection_count_limit=0

       -o smtpd_client_connection_rate_limit=0

       -o smtpd_milters=

       -o local_header_rewrite_clients=

       -o local_recipient_maps=

       -o relay_recipient_maps=

 

接下來就啓動service amavisd start service clamd start。查看日誌文件tail -f /var/log/clamav/clamd.log 如果有錯誤會在裏面記錄,如果沒有就會出現很多OK的內容如下:

Wed Oct 23 14:52:01 2013 -> /var/amavis/tmp/amavis-20131023T135201-05949-WbGe3KJt/parts/p001:OK

Wed Oct 23 15:02:01 2013 -> SelfCheck:Database status OK.

這樣就代表已經完成了。

 

廣告郵件的抵擋

spamassassin是一個自動抵擋廣告郵件的機制,光盤中自帶有spamassassinrpm包可以安裝。安裝完以後對它進行一些配置就可以了。

修改vi /etc/amavisd.conf文件,$sa_tag_level_deflt  = 5.0;2改成5

修改vi /etc/mail/spamassassin/local.cf文件

required_hits 5    廣告郵件評分,如果操作這個分數就被認定爲廣告郵件。

report_safe 0

rewrite_header Subject [SPAM]  修改郵件的標頭信息

然後重新啓動service amaivsd restart.就可以了。

(!!)TROUBLE in pre_loop_hook: config: norules were found!  Do you need to run'sa-update'?

如果報錯,請啓動service spamassassin start 程序然後使用sa-update -D命令對數據庫進行更新。這樣能保持最新的廣告郵件過濾。再次啓動 amavisd就可以了。

 

 

到這裏一個基本合格的postfix服務器就全部搭建完成了,算是比較漫長。寫這個安裝文檔因爲怕有錯誤,所以又在虛擬機上經過了一次安裝調試。所以可以確定按照這個文檔一步步安裝應該沒有什麼問題。可以郵件給我denwork#vip.qq.com#改成@

 

郵件監控

就目前來看很多企業已經不對員工的往來郵件進行監控了。不過有些企業保密機制比較嚴格,所以還是會有這方面的需要,在這裏也一起做個介紹。

postfix自帶有三種bcc(密送)方式:

always_bcc:將所有的郵件都備份到指定郵箱

sender_bcc_maps:將收件人包含在map文件中的郵件被分到指定郵箱

recipient_bcc_maps:將收件人包含在map文件中的郵件被分到指定郵箱

receive_override_options 這裏必須增加,禁止地址展開/影射,否則如果遇到別名的時候會引起冗餘郵件的產生。

master.cf文件裏面也添加一條規則。

127.0.0.1:10025 inet n - n - - smtpd

     -o receive_override_options= no_address_mappings

注意上面的參數一定要有空格,否則會出錯。

首先需要編輯main.cf文件

vi/etc/postfix/main.cf #增加下面兩行

recipient_bcc_maps= mysql:/etc/postfix/mysql/mysql_virtual_recipient_bcc.cf

sender_bcc_maps= mysql:/etc/postfix/mysql/mysql_virtual_sender_bcc.cf

==============================================================================

mysql_virtual_recipient_bcc.cf內容

user = postfix

password = pass.mail.com

hosts = localhost

dbname = postfix

table = bcc

select_field = user_bcc

where_field = recipient_bcc

mysql_virtual_sender_bcc.cf內容

user = postfix

password = pass.mail.com

hosts = localhost

dbname = postfix

table = bcc

select_field = user_bcc

where_field = sender_bcc

數據庫結構(注意!這個數據庫表需要自己單獨創建)

mysql> select * from bcc; 

 sender_bcc      | recipient_bcc    |    user_bcc       

[email protected] | [email protected] | [email protected] 

配置完成後重新啓動postfix就行了。

如果使用了上面的殺毒軟件,可能會造成備份郵箱收到兩份一樣的郵件。可以這樣進行修改!

編輯master.cf文件。

複製cleanup   unix  n      -       n       -      0       cleanup這行,修改爲

cleanup2  unix  n       -      n       -       0      cleanup

       -o sender_bcc_maps=

       -o recipient_bcc_maps=

127.0.0.1:10025 inet n - n - - smtpd這個行裏面添加一個參數

       -o cleanup_service_name=cleanup2

這樣就不會出現兩份郵件了!

這裏的設置方便把部門員工的郵件都備份給部門領導。如果公司比較小只需要把所有郵件都放到一個郵箱裏面,那麼可以這樣做:

登錄網頁創建一個郵箱地址如:[email protected]

編輯vi main.cf文件添加:

always_bcc = [email protected]

receive_override_options =no_address_mappings

注意,這個選項和上面只能保存一個。否則可能會出現冗餘郵件。這裏比較簡單的是不需要新建數據庫表。

解決重複郵件的方法一樣。編輯master.cf文件:

cleanup2  unix  n       -      n       -       0      cleanup

       -o always_bcc =

127.0.0.1:10025 inet n - n - - smtpd這個行裏面添加一個參數

       -o cleanup_service_name=cleanup2

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章