一、postfix背景及優點
postfix的爲了替代傳統的sendmail,基於GPL協議開發的一款MTA(郵件傳輸代理)軟件。相較於sendmail,postfix在速度,性能,安全性和穩定性上都更勝一籌。
1. postfix是免費開源的:postfix想要作用的範圍是廣大的Internet用戶。試圖影響大多數的Internet上的電子郵件系統,因此它是免費的。
2. 更快:postfix在性能上大約比sendmail快三倍。一部執行postfix的臺式PC每天能夠收發上百萬封郵件。
3. 兼容性好:postfix是sendmail兼容的,從而使sendmail用戶能夠非常方便地遷移到postfix。Postfix支持/var[/spool]/mail、/etc/aliases、 NIS、和 ~/.forward 文件。
4. 更健壯:postfix被設計成在重負荷之下仍然能夠正常工作。當系統執行超出了可用的內存或磁盤空間時,postfix會自己主動降低執行進程的數目。當處理的郵件數目增長時,postfix執行的進程不會跟着添加。
5. 更靈活:postfix是由超過一打的小程序組成的,每一個程序完畢特定的功能。你能夠通過配置文件設置每一個程序的執行參數。
6. 安全性:postfix具有多層防禦結構,能夠有效地抵禦惡意入侵者。如大多數的postfix程序能夠執行在較低的權限之下,不能夠通過網絡訪問安全性相關的本地投遞程序等等。
二、postfix的安裝使用
redhat6.0以上版本應該是默認集成了postfix服務的,假如沒有安裝的話,可以手動安裝。
rpm -qa | grep postifx #查看是否安裝
yum install postfix # 安裝
Postfix郵件的log位置是:/var/log/maillog
發送成功的話,會返回250和OK,也可以去自己的郵件客戶端查收。
三、配置
vi /etc/postfix/main.cf
myhostname = sample.test.com ← 設置系統的主機名
mydomain = test.com ← 設置域名(我們將讓此處設置將成爲E-mail地址“@”後面的部分)
myorigin = $mydomain ← 將發信地址“@”後面的部分設置爲域名(非系統主機名)
inet_interfaces = all ← 接受來自所有網絡的請求
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ← 指定發給本地郵件的域名
home_mailbox = Maildir/ ← 指定用戶郵箱目錄
四、postfix組件結構
1、 postfix中隊列狀態共有五種,分別如下:
收件:incoming
活動:active
延遲:deferred
故障:corrupt
保留:hold
2、主要有以下組件:
master組件:主導郵件處理流程、其他組件的總管。配置文件:main.cf和master.cf。
qmgr組件:隊列管理器。各個postfix組件之間的合作依靠隊列交換郵件。
sendmail組件:服務器本機發送郵件。
postdrop組件:將郵件存入postfix隊列目錄下的maildrop/子目錄。
pickup組件:監視maildrop/子目錄,讀出新郵件,交給cleanup組件。
cleanup組件:補足遺漏的標頭字段。
trivial-rewrite組件:地址處理,改成標準格式。決定路由信息,包括傳輸方法、下一站以及收件人地址。
smtpd組件:接收來自網絡的郵件,交給cleanup組件處理。
defer組件:郵件被延時時產生通知函。
bounce組件:郵件無法送達目的地時產生通知函。
dns組件:查找符合條件的郵件服務器。
四、postfix起停及查看操作
service postfix start
service postfix status
service postfix stop
五、配置文件詳解
postfix的配置文件是main.cf
#別名數據庫(postalias/newaliases 命令生成) alias_database = hash:/etc/postfix/aliases #別名表,列出local mda 所使用的別名數據庫 alias_maps = hash:/etc/postfix/aliases #退回的郵件重新投遞的最長時間 bounce_queue_lifetime = 1d #支持非標準驗證規定的行爲 broken_sasl_auth_clients = yes #postfix命令目錄 command_directory = /usr/sbin #postfix配置文檔目錄 config_directory = /etc/postfix #配置內容過濾 amavis content_filter = smtp-amavis:[127.0.0.1]:10024 #postfix 的各個服務器程序目錄 daemon_directory = /usr/libexec/postfix # data_directory = /var/lib/postfix # debug_peer_level = 2 #重複郵件 enable_original_recipient = no # html_directory = /usr/share/doc/postfix-2.6.2-documentation/html # mail_name = Postfix – welcome mail.xmall.com #以此參數指定的系統賬戶,作爲隊列文件的擁有者以及postfix daemon 進程的運行身份 mail_owner = postfix #單封郵件大小限制,單位字節 mailbox_size_limit = 150242880 # mailq_path = /usr/bin/mailq.postfi #manpage 目錄 manpage_directory = /usr/share/man #postfix在放棄投遞而返回不可投遞信息前,被延遲郵件再deferred郵件隊列中的生存時間 maximal_queue_lifetime = 1d #限制單封郵件的最大長度,單位字節 message_size_limit = 150242880 #設置”本地網域” mydestination = $mynetworks $myhostname #完整主機名稱(主機名稱+網域名稱) myhostname = mail.xmall.com #郵件系統的網域名稱 mydomain = xmall.com #附加到只含人名部分的,不完整郵件地址的網域名稱 myorigin #列出可通過本郵件系統寄出郵件的網絡地址或ip地址 mynetworks = 127.0.0.1 #兼容sendmail,用於重建別名數據庫的newaliases程序路徑 newaliases_path = /usr/bin/newaliases.postfix #postfix 隊列的主目錄 queue_directory = /var/spool/postfix # readme_directory = /usr/share/doc/postfix-2.6.2-documentation/readme
receive_override_options = no_address_mappings #樣本配置文件目錄 sample_directory = /etc/postfix #供腳本或命令行用來寄送郵件 sendmail_path = /usr/sbin/sendmail.postfix #用來提交郵件或管理隊列的組標識符 setgid_group = postdrop # show_user_unknown_table_name = no #smtp 問候信息 smtpd_banner = $myhostname ESMTP $mail_name #當客戶端引發錯誤時,postfix 的初始等待時間 smtpd_error_sleep_time = 0s #收件人限制條件 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, check_policy_service inet:127.0.0.1:10030 #啓動sasl 驗證 smtpd_sasl_auth_enable = yes # smtpd_sasl_local_domain = $myhostname #指定密碼驗證機制(除noanonymous) 所有可用機制 smtpd_sasl_security_options = noanonymous #設定寄件地址與sasl登錄身份的對應關係,只能使用本域地址避免使用其他寄件地址! smtpd_sender_login_maps = mysql:/etc/postfix/mysql_virtual_sender_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_maps.cf #發件人限制條件 smtpd_sender_restrictions = permit_mynetworks, reject_sender_login_mismatch, reject_authenticated_sender_login_mismatch, reject_unauthenticated_sender_login_mismatch # unknown_local_recipient_reject_code = 550 #指向含有“虛擬別名地址”與“實際收件地址”對應關係的查詢表 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf #虛擬網域查詢表 virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf #虛擬郵箱查詢表 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf #用於投遞郵件到虛擬郵箱地址的默認傳輸服務(虛擬mda)
|
六、收發郵件處理過程
整個處理流程分爲三個階段:接收郵件、將郵件排入隊列、遞送郵件。每個階段由一組獨立的Postfix組件負責。當一封郵件被收下並排入隊列之後,隊列管理器(Queue Manager)會啓動適當的MDA,將郵件送到終點。
七、postfix命令行工具
postalias:創建或查詢別名數據庫。
postcat:顯示出隊列文件的內容,讓管理員可觀察滯留在隊列裏的郵件內容。
postconf:顯示或改變postfix參數。
postdrop:將郵件放回到maildrop目錄,由postfix重新進行投遞操作。
postfix:啓動或停止postfix系統,或重新讀取配置文件。
postkick:對特定postfix服務發出請求。
postlock:鎖定特定文件,確保能夠獨佔訪問。
postlog:將特定的信息記錄到系統日誌文件中。
postmap:創建查詢表的DB數據庫或查詢查詢表內容。
postqueue:讓一般的用戶能夠有限度地訪問postfix隊列。
postsuper:供管理員訪問postfix隊列。