茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1675069 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_0270.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

小企鵝開談 : [分享]Mail Relay 問題

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]Mail Relay 問題
作者 kenduest (小州) 看板 Linux
標題 [分享] 來談一下撥接用戶的 Mail Relay 問題
時間 Sun Apr 2 22:03:02 2000
───────────────────────────────────────


相信大家都知道,在 SendMail 8.8.x 版本之後,已經把 Mail Server
可以任意被 Relay 的功能關掉了;也就是說,預設的 SendMail
目前只允許讓本機的連線端可以透過這台 Mail Server 來發信到
Internet 上,其他的連線端一律都會被拒絕....

OK.. 若是希望某個網域可以使用這台郵件主機來寄信,那在主機的
/etc/mail 目錄內可以看到 access 、relay-domains 這兩個檔案可以
用來開放與限制那些連線端可以使用這台主機來發信。

關於 access 與 relay-domains 檔案的解說部份,這裡弟就先略過了,
也就是這裡先假設大家已經知道了access 與 relay-domains 檔案的
用途,也知道要使用 makemap 程式來產生實際給 sendmail 程式所
使用的 .db 資料檔案。

話說目前 SendMail 預設把可以任意被 Relay 的功能關掉了,那的確是
可以大大減少主機會被拿來亂發信的問題,那 spam 的問題的確是可以
少了很多... 不過 SendMail 這個目前的限制作法,也造成了一些實際上的困擾。

怎麼說呢?比方有個公司是在台北,這台主機限制了只有屬於該公司
網域 IP 的連線端才可以使用這台 Mail Server 來寄信到任何 internet
上。而某個公司的員工他該好出差到南部,現在他使用 notebook 打好
了 e-mail 準備要寄給公司的客戶,那他現在就使用了 hinet 的撥接上網
要寄信出去。不過就按下寄信扭後,螢幕出現了 Relaying Denied 的
錯誤訊息被告知寄信失敗。檢察一下 smtp 發信主機的設定,原來 smtp
主機是指向台北公司的 Mail Server ,而只因為目前是使用 hinet ISP
撥接上網,所屬網域並不是在公司的網域內,所以當然會寄信失敗.........

OK... 那沒有辦法囉,只得去改 SMTP 的設定,所以就把 smtp 的連線
主機改成任意一台 hinet 的 e-mail 主機,比方是 ms24.hinet.net
就不會有問題了。

當他處理完事情,回到台北公司了。現在他人在公司內,正在寫 e-mail
準備把出差所處理的事情回報給上司。信寫好後要寄出去的時候,螢幕
誘出現了 Relaying Denied 的錯誤訊息。仔細一看,原來他目前是在公司
網域內,已經不是用 ISP 網域內,所以 ISP 的 Mail Server 拒絕讓你寄信。
遇到這樣子的錯誤,他需要再去改 smtp 的主機指向公司的 Mail Server
就不會有問題了。

關於上面的情況,弟目前工作的地方,有人的確遇過這個問題,也向的弟
反應過了,結論他是希望可不可以說就算是他不是在公司內也可以使用公司的
主機發信呢?而不用說在公司外還需要去改寄信軟體的設定徒增了一些不便的地方。

弟想一想他這麼說的確是沒有錯,而有一些業務人員可能只懂得怎麼操作
outlook 這類軟體來寫個 e-mail 發信,smtp 的設定細節他可能不是相當清楚;
而遇到了 Relaying Denied 的錯誤訊息更是不知道要如何處理....

那弟就在想辦法,看看有沒有一個解決的方式可以允許使用撥接上網的公司
員工可以使用公司的 Mail 主機寄信,而不會因為上線 IP 並沒有在
/etc/mail/access 或者是 /etc/mail/relay-domains 內設定開放的區域而
拒絕這個連線端的寄信。

首先弟去把整個 sendmail 8.9.x 的文件資料翻過一遍,發現並沒有這方面的
資訊。 後來 sendmail 8.10.x 有 beta 版出來了 (目前已經正式 release 囉),
有注意到在這個版本內提供了所謂的 AUTH SMTP 的功能。AUTH SMTP 的功能,
簡單的說就是通過 sendmail 的認證之後,就可以使用主機任意寄信了,也不會
遇到因為連線端並未在 sendmail 所允許開放的網域而被拒絕。

而為了要使用 sendmail 8.10.x 的 auth smtp 功能,耗了一兩個禮拜還是
搞不定。整個要讓 sendmail 8.10.x 可以支援 auth smtp 還真是不簡單,
因為還需要另外抓其他的 library 套件回來編譯安裝,還要改 sendmail 的一些
設定才能夠支援....

OK... 弄到最後,使用 telnet xxx.xxx.xxx.xxx 25 然後使用 EHLO localhost
打招呼時的確是已經有看到 AUTH 的回應字串,那也就是說這台 mail server
是支援 auth smtp 的認證功能。不過這裡到目前還搞不定的是,這個部份 auth
smtp 的密碼設定部份遲遲無法成功,也就是雖然使用一些 mail client 測試
的確有丟出了 auth xxxxxx 的字串向 mail server 認證,但是這個部份總是
認證失敗 _< 於是的另外想辦法另求其他方式來解決。

有一天上台大電機與 stevel 說到 sendmail 8.10.x 的認證問題,他是說到目前
反倒是有個解決的方式叫做 "pop before smtp" 。pop before smtp 的意思
就是說,先讓某個使用者到主機做 pop3 收信的動作,那完成後在往後幾分鐘內
mail server 就暫時開放允許這個連線端可以使用這台主機來寄信。等幾分鐘後,
這個這個連線端可以任意使用主機發信的功能就會被關閉了....

好,說到重點了,那 pop before smtp 怎麼做呢?
http://www.jdimedia.nl/igmar/relayd/ 網站上可以找到
Sendmail Relay Daemon 的程式。這個 daemon 程式能夠修改
/etc/mail/access.db 檔案動態加入某個 ip ,如此 sendmail 程式就接受某個
連線端來使用主機來寄信了。

那這個 relay domains 程式怎麼知道有人使用 pop3 收信之後,要去修改
access.db 檔案暫時讓 sendmail 可以接受這個連線端可以 relay 的動作呢?
那這個部份還需要修改 imap 套件裡面的原始碼,讓重新編譯出來的 pop3d 程式
可以配合這個 pop before smtp 的功能。

大致上整個意思就是這樣子了... 要使用這個功能,那整個操作方式是這樣子的:

1. 到 http://www.jdimedia.nl/igmar/relayd/ 抓 relayd 的原始碼套件。
弟目前是使用 RedHat Linux 6.1 的環境下來說的,那的抓取
relayd-1.3-6.src.rpm 回來使用 rpm --rebuild relayd-1.3-6.src.rpm
把套件編譯為 .i386.rpm 的 binary 檔案,完成後可以在
/usr/src/redhat/RPMS/i386 找到 relayd-1.3-6.i386.rpm

2. 提供收信的 pop3d 程式也需要修正,在網站上可以找到 imap 的 patch 檔案
http://www.jdimedia.nl/igmar/relayd/relayd-ipop3d-4.5.tar.gz
另外我們還需要 imap 的原始 .src.rpm 套件檔案,請到 CLE ftp
ftp://cle.linux.org.tw/pub/CLE/SRPMS/SRPMS 裡面就可以找到

3. 抓回 imap 的 .src.rpm 檔案後,請使用 rpm -ihv imap-xxxxxx.src.rpm
的方式安裝,該套件的的 imap .tar.gz 檔案會解開到 /usr/src/redhat/SOURCES
目錄內, .sepc 規格檔案會放置在 /usr/src/redhat/SPECS 目錄內。
然後也把 relayd-ipop3d-4.5.tar.gz 檔案解開,把裡面解開的所有檔案
都複製到 /usr/src/redhat/SOURCES 目錄內。

4. 切換目錄到 /usr/src/redhat/SPECS 目錄內使用 rpm -ba imap.spec 重新把
imap 套件打包編譯成為 .i386.rpm 的套件檔案。

5. 接著分別使用 rpm -ihv relayd-1.3-6.i386.rpm 安裝上該套件,還有就是
使用 rpm -Uhv imap-4.7.i386.rpm 安裝上該套件。若是安裝新的 imap rpm
檔案有問題,請先把原先的 imap 移除,然後再安裝這個套件即可。

6. 執行 chown relayd.relayd /etc/mail/access.db ,好讓 relayd 有權限
可以修改這個檔案以便於達到動態 relay 的功能。對了,這樣做會讓每次啟動
sendmail 程式時會出現 access.db 建立失敗的問題,不過這是正常的,
所以不需要擔心。

7. 現在就使用 /etc/rc.d/init.d/relayd start 就可以啟動了 relayd 的程式。
另外可以使用 ntsysv 設定每次開機都啟動這個服務。

整個步驟就是這樣子了。往後在外面要使用這台主機寄信,先作 "pop"
收信檢查的動作,那接下來的幾分鐘時間內你就可以使用這台主機來寄信到
其他非公司的網域也不會出現 Relaying Denied 的錯誤訊息了 ^_^
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]relayd已經改網址了!
小州大大的文章中的網址已經不會動了!
新的網址如下,而且似乎也不再那麼複雜了!
直接抓回來,直接給它安裝上去,好像就好了耶~~~
大家可以試試看看~~~

Sendmail Relay Daemon
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[教學]如何查看不正常的 relay 記錄
如果你是使用SendMail的話,
系統 mail 記錄檔案應該在 /var/log/maillog 檔案內,
你可以使用以下指令看一下是否有不正常 relay 的來源資料。
[code:1:7894525413]# cat /var/log/maillog | grep -i "Relaying denied" [/code:1:7894525413]

若你在該資料夾找不到該檔案,則可以嘗試
[code:1:7894525413]locate maillog[/code:1:7894525413]
來找找看你的 maillog 在哪裡!
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[教學]只要有帳號,密碼正確就允許 RELAY
只要有帳號,密碼正確就允許 RELAY
  • sendmail 自 8.11.0 起提供了 SMTP AUTH 的機制。在 Red Hat 7.2 內附的 sendmail-8.11.6 版,若要啟用這項機制,請
    1. 先修改 /etc/mail/sendmail.mc,把以下三行前方的 'dnl ' 移除:
      define(`confAUTH_OPTIONS', `A')dnl
      TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
      define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

    2. 接著透過 m4 產生新的 sendmail.cf:
      m4 /etc/mail/sendmail.mc > /etc/sendmail.cf

    3. 重新啟動 sendmail:
      service sendmail restart

    4. 以 telnet 到 TCP 25 port 的方式,輸入 EHLO localhost,看到如下的畫面:
      250-main.linux.com.tw Hello localhost [127.0.0.1], pleased to meet you
      250-ENHANCEDSTATUSCODES
      250-8BITMIME
      250-SIZE
      250-DSN
      250-ONEX
      250-ETRN
      250-XUSR
      250-AUTH LOGIN PLAIN
      250 HELP

      若出現如畫面中粗體字的部分,即代表成功,再輸入 QUIT 結束 SMTP 的對話。

前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|