熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

postfix 的 sasl 支持

2013-11-13 16:14:51  來源: Oracle 

  如果您之前有看過小弟寫過關於mandrake 支持sasl的文章您大概會發現在Mandrake 中好象不太能夠執行了!我想我再一次的把這篇文章做個整理!希望可以幫助大家可以做好防止服務器被利用轉寄的困擾!關於sasl 在電子郵件運行的初期大家並沒有想到電子郵件寄送上的安全考量!smtp的認證機也一直沒有被建立大家只可以使用封鎖的方式!而 cyrussasl 的出現提供了一個更大的 彈性 的選擇!也就是使用密碼認證 在這之前我們必須說sasl並不一定是一個安全的而是提供更大的彈性!希望大家認清功能或服務的開啟是等於是開啟一個危險的可能!你如果看過postfix的說明文件第一個就會告欣你你使用的東西並不會加強你的安全性也希望大家可以有這樣的認知如果您只是在內部使用而沒有需要開啟對外的服務建議還是使用郵件服務器的安全防護功能就好了( 例如關閉relay )系統環境 Mandrake 相關套件 postfix cryussasl您可以使用控制台中的安裝功能或者使用urpmi都可以套件安裝小弟就不多個說明了您可以參考下圖安裝
   
  在上列的套件中包含了一些plugin及sasl系統
  您可以依自己的需求進行安裝!
  
  如何設定sasl及postfix
  我想在 上一節中我們已經介紹過了postfix的設定了
  這個部份我們也不再多做講解
  
  首先我們在/etc/postfix/maincf中加入幾行
  基本上范例如下
  # server
  smtpd_sasl_auth_enable = yes
  smtpd_sasl_local_domain = $myhostname
  smtpd_recipient_restrictions = permit_mynetworkspermit_sasl_authenticatedcheck_relay_domains
  #smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
  smtpd_sasl_security_options = noanonymous
  # client
  smtp_sasl_auth_enable = yes
  
  我們一個一個來解釋一下
  smtpd_sasl_auth_enable = yes
  這是激活sasl支持如果您改成 no sasl功能也會停 止運作!
  smtpd_sasl_local_domain = $myhostname
  指 sasl 預設 domain 如果你不使用sasldb方式管理密碼的話
  請設定 $myhostname (主要因為sasldb管理方式自行可以設定 )
  
  smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated check_relay_domains
  指使用認證的設定(請保持上列為一行 沒有斷行)
  
  apermit_mynetworks 允許 mynetworks (postfix設定)
  bpermit_sasl_authenticated 允許具有 sasl 認證設定( sasldb)
  ccheck_relay_domains 確認relay的區域 (postfix設定)
  
  smtpd_sasl_security_options = noanonymous
  指 sasl 安全選項
  i noanonymous 這裡是允許任何非匿名認證方法
  ii noplaintext 指不使用 PLAIN 和 LOGIN 方式
  iii nodictionary
  ix noactive
  任何一項不通過信件都可能造成信件無法送出
  
  
  另外二個
  broken_sasl_auth_clients = yes
  #client
  smtp_sasl_auth_enable = yes
  
  這二個支持client端的服務
  主要是針對客戶端的連結軟件個區隔例如 outlook大概很少人用了吧
  所以 broken_sasl_auth_clients 就當沒看到吧^ ^|||
  
  接下來我們可以試著執行postfix 確認
  #
  
  # postfix check
  #postfix reload
  
  如果沒有錯誤訊息您的設定 就算成功了!
  接下來我們設定sasl的認證項目
  
  修改 /usr/lib/sasl/nf
  # vi /usr/lib/sasl/nf
  
  看起來像這樣:
  pwcheck_method:sasldb
  
  
  這是指定密碼認證方式
  (主要分成四種 pamshadowsasldbpwcheck)
  
  這一行設定完成後這樣您的發信服務器的
  基本認證功能大至上就完了了哦
  附注:
  密碼認證方式
   pam :
  使用系統的pam來做認證
  
  以下為舊的方式:(參考一下就好了)
  
  預設的pam 認證方式
  /usr/lib/sasl/nf
  #%PAM
  auth required /lib/security/pam_stackso service=systemauth
  account required /lib/security/pam_stackso service=systemauth
  也即和/etc/pamd/pop文件的內容是一致的
  
  修改/etc/shadow文件權限
  因為PAM最終要去讀取/etc/shadow文件的內容來進行用戶認證但是/etc/shadow文件
  權限是設置為只有root用戶可以讀寫而我們的postfix是運行在postfix用戶權限之下所以我們要合理的設置/etc/shadow文件權限以便讓pam可以讀取其內容
  執行以下命令讓root組也可以讀取shadow
  方式 : 把postfix加入root群組
  # chmod /etc/shadow
  # usermod G root postfix
  方式 : 給他設
  
  目前pam已經交由saslauthd來處理所以大至上不需要再改成
  注意: pam 認證不支持 CRAMMD 只支持 LOGIN DIGESTMD PLAIN
  這大概是pam本身的限制 !
  
  
   shadow:
  使用系統的影子文件來進行認證
  因為要讀取/etc/shadow檔案(影子檔)就必須要可以讀取
  而檔限就必須要修改建議修改為
  
   pwcheck:
  pwcheck 其實是和shadow認證是相同的
  都是要讀取影子檔shadow但是pwcheck的想法
  不需要去修改影子檔shadow 的權限想法是:
  在開機時就把影子文件中密碼讀出所以您就必須在開機的設定中加入一行
  #vi /etc/rclocal
  
  在最後加上這一行
  /usr/sbin/pwcheck
  這樣您就不需要修改影子檔的權限了
  
  sasldb:
  使用sasl資料庫存放使用者帳號
  
  一般建議使用 sasldb來設定
  接下來我們來討論如何存取sasldb的數據庫
  在安裝好您的cyrussasl之後程序提供了二個語法
  
  sasldblistusers (列出sasl使用者及密碼設定)
  saslpasswd (設定使用者密碼)
  小弟不針對語法進行說明只進行實例操作
  請自行參照man
  
  我們先試著設定一個帳號
  新增語法
  #saslpasswd a smtpd c [帳號]
  新增一個帳號為test
  #saslpasswd a smtpd c test
  Password:[輸入密碼 test]
  Again (for verification): [再輸入一次 密碼 test]
  
  
  這樣就完成了一個新增使用者的動作了
  帳號為 : test
  密碼為 : test
  
  再來我們試著用 sasldblistusers 查看使用者是否有新增
  
  #sasldblistusers
  user: test realm: wwwphpidvtw mech: PLAIN
  user: test realm: wwwphpidvtw mech: CRAMMD
  user: test realm: wwwphpidvtw mech: DIGESTMD
  
  列出了三個都是 test 帳號 這三個是密碼格式
  為什麼有三個呢 ? 這要看您所安裝的plugin而定
  libsaslplugcrammdmdkirpm
  libsaslplugdigestmdmdkirpm
  libsaslplugplainmdkirpm
  * Mandrake 之後的變革
  重點來了!!!!!!
  我想大家一直很不解的是從前玩到這裡重啟postfix就會運作了為什麼之後就不行了呢!
  不管如何認證都不會通過!
  
  在之後的Postfix 做了一個改變在 mastercf 他使用了 software chroot 來增加系統的安全性!
  刻意的讓 mail server在運作時和檔案系統分開 使用saslauthd來中介取得認證!
  而造成我們所設定的sasldb無法存在正確路徑!
  解決方法:
  關閉software chroot
  把相關檔案copy到目錄中
  
  我想二個方法各有益斃
  解法一: 修改 /etc/postfix/mastercf 關閉software chroot
  范例如下:
  
  # ==========================================================================
  # service type private unpriv chroot wakeup maxproc command + args
  # (yes) (yes) (yes) (never) ()
  # ==========================================================================
  smtp inet n n smtpd
  #smtps  inet n n smtpd
  # o smtpd_tls_wrappermode=yes o smtpd_sasl_auth_enable=yes
  #submission inet n n smtpd
  # o smtpd_enforce_tls=yes o smtpd_sasl_auth_enable=yes
  #  inet n y qmqpd
  pickup fifo n y pickup
  cleanup unix n y cleanup
  #qmgr  fifo n y qmgr
  qmgr fifo n y nqmgr
  #tlsmgr  fifo y tlsmgr
  rewrite unix y trivialrewrite
  bounce unix y bounce
  defer unix y bounce
  flush unix n y ? flush
  smtp unix y smtp
  showq unix n y showq
  error unix y error
  local  unix n n local
  virtual unix n y virtual
  lmtp unix y lmtp
  #
  # Interfaces to nonPostfix software Be sure to examin
From:http://tw.wingwit.com/Article/program/Oracle/201311/18018.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.