Postfix实现代理Exchange邮件传输方案
由于公司Exchange環境的郵件過濾的硬件設備存在單點故障又不想再花更多的費用去做這方面的投資,所以想通過Postfix工具實現一個冗余的方案。
postfix是Wietse Venema在IBM的GPL協議之下開發的MTA(郵件傳輸代理)軟件,是linux世界的一個開源的郵件傳輸代理工具,通過一些組件可以實現反垃圾郵件和防病毒的功能。
相關組件:
postfix+clamd+spamassassin+amavisd-new
clamd 反病毒引擎 ? ?
spamassassin 反垃圾郵件
amavisd-new是郵件代理服務器(MTA)和防毒軟件之間的中介軟件
基本原理:
第一步:postfix 接收郵件
postfix,通過25端口,接受所有的郵件,這個步驟,是很好理解。
第二步:把郵件交給amavisd-new
在Linux的郵件系統里,amavisd-new的非常關鍵啊??梢赃@樣理解,postfix,的所有額外的功能,都需要通過他才能實現。
從上面的這個圖片,我們就可以看到,postfix,把郵件接收下來后,交給amavisd-new,讓他想辦法,解決殺毒,垃圾郵件過濾的問題。
交給殺毒軟件
通過clamd,linux的殺毒軟件,檢查郵件是否帶病毒。
交給SpamAssassin
通過他來實現垃圾郵件的過濾。
第三步:amavisd-new通過10025端口還給postfix
當所有的工作完成后,交給postfx,postfix在傳遞給exchange
?
安裝的整個過程
主要參考文檔
http://blog.linuxphp.org/archives/657/
http://wiki.extmail.org/%E5%8D%81%E4%BA%8C%E3%80%81%E9%85%8D%E7%BD%AE%E5%86%85%E5%AE%B9%E3%80%81%E7%97%85%E6%AF%92%E8%BF%87%E6%BB%A4#、配置clamav
操作系統版本 Centos 6.3
1 配置dns vim /etc/resolv.conf
添加一個能夠解析的局域網DNSIP
2 配置hosts vim /etc/hosts
使其能解析自己
比如 1.1.1.1 postfix.contoso.com
?
一 安裝配置Postfix使其能完成基本的郵件收發
1 修改相關配置文件
vim /etc/postfix/main.cf:
2 vim /etc/postfix/transport,在配置文件的末尾添加以下內容。
3 vim /etc/postfix/master.cf 基本保持默認文件的原來的內容
4 執行以下命令使transport生效
postmap transport
5 啟動服務:
6查看相關端口:
7利用powershell ?send-mailmessage測試一下發送郵件,10.7.2.53就是本臺postfix服務器:
8發現客戶端已經可以收到了
二 添加相關的病毒過濾組件和反垃圾郵件組件
創建相關的賬戶:
添加ClamAV運行所需的組和用戶: ??
groupadd clamav ? ?
useradd -g clamav -s /sbin/nologin -M clamav ? ?
添加配合amavisd-new使用的用戶amavis(我們這次是yum安裝默認會創建) ? ?
groupadd amavis ? ?
useradd -g amavis -s /sbin/nologin -M amavis
?
本次組件的安裝為了方便主要使用yum安裝也可以使用源碼安裝。
1 安裝Clamd(版本0.98.1)
yum install clamd (yum安裝會自動創建clam組和賬戶這個需要后邊更改一下)
發現默認的源沒有相關的軟件
我們需要將其他服務器的/etc/yum.repos.d目錄下面的源文件拷貝到這臺服務器上
到postfix服務器上查看已經有了相關的文件,并執行yum makecache使其生效
再次執行yum install clamd的時候雖然有了相關組件但又發現了錯誤
需要更改/etc/yum.repos.d/epel.repo中的以下內容
再運行 yum makecache 然后再運行yum install clamd 發現已經可以安裝了
啟動服務service clamd start,會有病毒庫過期的提示:
使用freshclam更新一下病毒庫,重啟一下clamd服務已經正常了:
修改配置文件內容,/etc/clamd.conf 因為默認的用戶是clam我們需要改為amavis
默認的用戶:
修改完的用戶:
重啟服務失敗:
原來是目錄權限的問題:
修改目錄權限:
刪除/var/log/clamav目錄線面的這兩個文件:
再起重啟服務,還是有問題:
目錄權限問題:
重啟服務成功:
?
修改病毒庫更新的配置文件
先檢查配置文件/etc/freshclam.conf
默認賬戶:
更新后的賬戶
配置文件更改完以后會出現病毒庫更新錯誤
還是權限的問題需要修改權限至下面的截圖:
更新成功:
2 安裝spamassassin(版本3.3.1)
yum install spamassassin 這個是正常的。
修改配置文件/etc/mail/spamassassin/local.cf
required_score 5.0 ??
rewrite_header Subject *****SPAM***** ? ?
report_safe ? ? 1 ? ?
use_bayes ? ? ? 1 ? ?
bayes_auto_learn ? ? ? ?1 ? ?
skip_rbl_checks ? ? ? ? 1 ? ?
use_razor2 ? ? ?0 ? ?
use_pyzor ? ? ? 0 ? ?
ok_locales ? ? ?all
啟動服務:
3安裝amavisd-new(版本2.8.0)
yum install amavisd-new 一切順利
設置相關目錄權限: ? ??
將clamav加到amavis運行組里,并調整目錄權限,否則clamav將無法掃描amavisd-new產生的臨時文件
# gpasswd -a clamav amavis ??
# usermod -G amavis clamav ? ?
# chown amavis.amavis /var/spool/amavisd ? ?
# chmod 750 /var/spool/amavisd ? ?
# chown amavis.amavis /var/spool/amavisd/tmp ? ?
# chmod 750 /var/spool/amavisd/tmp
修改相關的配置文件/etc/amavisd/amavisd.conf內容。
$daemon_user ?= 'amavis';#yum安裝的時候會自動創建賬戶$daemon_group = 'amavis';#yum安裝的時候會自動創建組和賬戶 ??
$mydomain = 'contoso.com'; #此處是你的Exchange或者其它郵件系統的郵件域
$virus_admin ? ? ? ? ? ? ? = "postmaster\@$mydomain"; ??
$mailfrom_notify_admin ? ? = "postmaster\@$mydomain"; ??
$mailfrom_notify_recip ? ? = "postmaster\@$mydomain"; ??
$mailfrom_notify_spamadmin = "postmaster\@$mydomain"; ? ?
$mailfrom_to_quarantine = '';
virus_admin_maps => ["postmaster\@$mydomain"] ? ?(指定報告病毒和垃圾郵件時發送系統郵件的用戶身份) ??
spam_admin_maps ?=> ["postmaster\@$mydomain"]
取消以下內容的注釋并修改相關內容。
將配置文件中的以下內容修改成以下內容 ??
?['ClamAV-clamd', ? ?
? ?\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"], ? ?
? ?qr/\bOK$/m, qr/\bFOUND$/m, ? ?
? ?qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
這是默認的配置文件。
啟動服務,正常。
service amavisd start
?
三 所有組件安裝完畢需要將所有的組件與postfix關聯
修改/etc/postfix/master.cf 添加以下內容
smtp-amavis unix - - n - 2 smtp ??
?-o smtp_data-done_timeout=1200 ? ?
?-o disable_dns_lookup=yes ? ?
#符號前面有一個空格用于連續下面的內容 ? ?
127.0.0.1:10025 inet n - ? ? ? ?n ? ? ? - ? ? ? - ? ? ? smtpd ? ?
?-o content_filter= ? ?
?-o local_recipient_maps= ? ?
?-o relay_recipient_maps= ? ?
?-o smtpd_restriction_classes= ? ?
?-o smtpd_client_restrictions= ? ?
?-o smtpd_helo_restrictions= ? ?
?-o smtpd_sender_restrictions= ? ?
?-o smtpd_recipient_restrictions=permit_mynetworks,reject ? ?
?-o mynetworks=127.0.0.0/8 ? ?
?-o strict_rfc821_envelopes=yes
修改/etc/postfix/main.cf 添加以下內容:
content_filter=amavisfeed:[127.0.0.1]:10024
重啟一下服務,相關的端口已經啟動:
我們將相關的服務設置為開機啟動:
?
四 相關的一些測試:
1我們先發送一份正常的郵件:
查看相關的日志,沒有檢測到病毒。郵件已經傳送成功:
2 我們發送一份帶病毒的郵件。
查看一下日志發現被隔離了。
然后會產生一封退信:
說明病毒過濾成功了。
?
3 測試反垃圾郵件功能.
# telnet localhost 25 ?
Trying 127.0.0.1... ?
Connected to localhost.localdomain (127.0.0.1). ?
Escape character is '^]'. ?
220 xt.contoso.com ESMTP Postfix ? ?
ehlo localhost //打招呼 ? ?
250-xt.contoso.com ? ?
250-PIPELINING ? ?
250-SIZE 10240000 ? ?
250-ETRN ? ?
250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN ?
250-ENHANCEDSTATUSCODES ? ?
250-8BITMIME ? ?
250 DSN ? ?
mail from:<xiaosong.li1@contoso.com?> // 發件人 ? ?
250 2.1.0 Ok ?
rcpt to:<xiaosong.li1@contoso.com//收件人 ? ?
250 2.1.5 Ok ?
data ? ?//郵件內容 ? ?
354 End data with . ? //下面那行為測試內容 ? ?
Subject: XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X ? ?
. ? //以.結束郵件內容 ? ?
250 2.0.0 Ok: queued as BC24E85260 ?
quit //退出 ? ?
221 2.0.0 Bye ?
Connection closed by foreign host.
發送方出現了退信
整個方案測試成功
?
總結
以上是生活随笔為你收集整理的Postfix实现代理Exchange邮件传输方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 动态获取对象的属性和方法(
- 下一篇: C语言函数为什么不可以声明默认参数?