簡易設定 POP Before SMTP 郵件主機系統
wang
<wang1126@mail.gpp.ks.edu.tw>

簡介
底下的簡易流程為設定 POP before SMTP 的郵件主機,使用的郵件伺服器為 Postfix 。什麼是 POP before SMTP 呢?由於目前的郵件主機很容易被當成垃圾信的轉信站,所以目前的郵件主機已經不再開放 Open Relay 了,但是由於我們總是需要將郵件主機開放給主機的使用者( 用戶 )來寄信吧!所以呢,就有所謂的 SMTP 認證以及這個 POP before SMTP 的機制出現了!
 
在 SMTP 認證機制裡面,我們必須要輸入帳號與密碼才能開始傳送信件,那麼換個角度來想,其實 POP (收信) 的過程裡面,不是也會輸入帳號與密碼嗎?所以我們就利用『在寄信之前先以 POP3 收信,由於收信的認證資料會有短時間存在主機裡面,因此在 POP 收信完成後,就可以寄信,這個時候的寄信認證的機制就是使用前一時間的 POP 的認證』。這樣說應該就可以瞭解,使用底下的流程之後,您不需要勾選任何認證的選項,只要在發信之前先收個信,呵呵!就可以寄信囉!

架設流程
  1. 需要先安裝 perl 的一些檔案,請至 http://www.cpan.org/modules/01modules.index.html 下載下列兩個模組,

  2. File::Tail及Net::Netmask。
    ( 在redhat8.0以上,另兩個模組;Time::HiRes及Date::Parse,已經安裝了。)
     
  3. https://sourceforge.net/project/showfiles.php?group_id=5017 下載檔案,目前為1.33版。

  4. 解壓縮:
      tar zxvf pop-before-smtp-1.33.tar.gz
    進入該目錄:
      cd pop-before-smtp-1.33
    修改檔案:
      vi pop-before-smtp-conf.pl
      設定三個變數:
        $file_tail{'name'} = '/var/log/maillog';#設定mail的log檔
        $grace = 30*60;  #這項功能是有效時間,單位是秒
        $dbfile = '/etc/postfix/pop-before-smtp';
         
  5. 測試是否可以使用:
    1. ./pop-before-smtp --config=./pop-before-smtp-conf.pl --debug --nowrite –reprocess
    如果正確,會列出日期及ip等資料
     
  6. 安裝:
    1.  cp pop-before-smtp.init /etc/rc.d/init.d/pop-before-smtp
       cp pop-before-smtp /usr/sbin/
       cp pop-before-smtp-conf.pl /etc
       
  7. 背景執行:
    1. /etc/rc.d/init.d/pop-before-smtp start
       
  8. 接著設定postfix的參數:
    1. smtpd_recipient_restrictions = permit_mynetworks,reject_non_fqdn_recipient,
      check_client_access hash:/etc/postfix/pop-before-smtp,#加入這行
      check_relay_domains
       
  9. 測試:

  10. 請從遠端登入,請勿從同一網域登入(因為permit_mynetworks在最前面,會先檢查到此一條件而無法測試),再看看 /etc/postfix/pop-before-smtp.db的更新時間,是否是你剛從遠端入的時間,如果是,那就對了。