聲明:本文爲個人原創,引用請申明出處。此文在百度文庫等地方上傳過。百度文庫ID:denhuaibo!此文最早上傳於2014年。
附件提供文檔下載。
postfix郵件服務器安裝配置文檔
目錄
簡介
這是一個集成項目,請仔細閱讀本文檔後再操作。遇到問題時請耐心檢查配置和日誌文件,本文檔中如果沒有列出相關解決方法請到網上尋求幫助吧!
本文檔旨在讓大家明白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 提供pam的mysql認證,與cyrus-sasl協同工作。可使用courier-authlib代替
dovecot 提供收件服務功能
Amavisd-new 郵件系統和殺毒軟件之間的中介程序,負責調用殺毒軟件對郵件進行病毒掃描
Clamav 一個開源的殺毒軟件,另外一個比較好的是f-prot但是要收費。
總共有10個軟件協同工作來構建出一套實用安全的郵件系統。以下內容是本人在部署完整個系統後發現在整個過程中費了很多的時間和經歷,所以想想還是把它寫下來貢獻給大家學習參考。由於是事後回憶,當初也沒有做筆記,所以很多在過程中遇到的錯誤沒有記錄下來實在是一個遺憾。希望大家引以爲鑑,在平時工作和學習當中一定要做好筆記,特別是錯誤的處理過程。這裏只能通過日誌內容回憶一下處理的全過程供大家參考了。下面如無特殊說明,所使用的rpm包均在安裝光盤中能直接找到
構建運行環境
爲了方便後續操作,在安裝之前有必要進行yum源的配置,然後通過光盤進行安裝是比較方便的事情。所以下面從光盤安裝的rpm包都使用yum命令操作,當然也可以使用rpm命令,看個人喜好了.
1、apache和php安裝
yum install httpd 安裝apache程序
php安裝:
雖然安裝光盤中有php的rpm包,但是隻能提供一般的功能,postfixadmin中會用到兩個功能是rpm包無法提供的,所以必須下載源碼編譯安裝。否則打開網頁配置時會出現如下錯誤,提示缺少mbstring和imap組件。
Error: Depends on: multibyte string - NOT FOUND
To install multibyte string support, install php5-mbstringWarning: 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-client和libc-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
2、mysql安裝配置:
同樣使用yum installmysql-server 進行安裝,當然數據庫就比較麻煩一點。
安裝完成後使用mysql_install_db命令對數據庫進行初始化,接下來就可以啓動數據庫了。service mysqld start 啓動
/usr/bin/mysqladmin-u root password “newpassword” 修改數據庫密碼,然後使用service mysqld restart重新啓動一次,使用mysql -u root -p 輸入上面的密碼後登錄數據庫測試是否能正常使用。
3、postfixadmin安裝
下載位置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如果正常就能看到
輸入一個密碼點下面的按鈕,會有提示要求再次編輯config.inc.php 文件輸入
修改好以後在第一項輸入剛纔設置的密碼,第二項爲管理員email地址如[email protected]下面輸入設置的密碼。然後點按鈕提交,這樣就算設置完了。
首先新建一個域:
然後可以新建郵箱:
注意用戶名和名字需要一模一樣,否則可能會導致後面無法登錄驗證。具體原因不知道,如果你們明白怎麼回事情,還希望發送郵件給我謝謝! 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 因爲是網頁上面對其進行操作,所以這裏的uid和gid需要是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-lib、cyrus-sasl-devel、cyrus-sasl-plain、cyrus-sasl-md5、cyrus-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-devel、mysql-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.cf中smtpd_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 postfix組ID
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已經啓動。
2、authmysqlrc、smtp.conf文件中每行的結尾是否有空格。特別是authdaemond_path:/usr/local/courier-auth/var/spool/authdaemon/socket
3、main.cf文件中smtpd_sasl_local_domain= 參數需要爲空。
在客戶端接收郵件
如果你通過了上面的配置,那麼恭喜你。經過漫長的測試和配置過程,你的郵件服務器已經可以通過客戶端發送郵件了,但是很遺憾的告訴你。到這裏你也纔剛剛完成了整個郵件系統建設的一半工作,只能發不能收算什麼郵件系統。下面就來介紹如何使用客戶端來接收別人發來的郵件。
這裏使用到的軟件是dovecot使用yum installdovecot進行安裝,可以先查看一下包的文件結構,這樣比較能知道配置文件等的位置。
首先打開/etc/dovecot/dovecot.conf,裏面修改的內容有
base_dir =/var/run/dovecot/
protocol pop3
把這兩行的註釋去掉,
接下來是下級目錄conf.d中10-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.
+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-prot和clamav。
配置殺毒軟件需要兩個軟件支持,amavisd和clamav 或者f-prot
其中amavisd可以在這個網站下載rpm包http://www.ijs.si/software/amavisd/#download或者源碼,這裏爲了方便我下載了rpm包。同時如果需要安裝這個rpm包的話還需要很多的依賴包,而且有很多是在光盤中無法找到的。這些包可以到rpmfind.net或http://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 這裏默認CN是XY
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是一個自動抵擋廣告郵件的機制,光盤中自帶有spamassassin的rpm包可以安裝。安裝完以後對它進行一些配置就可以了。
修改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