Qmail有一個名為rcpthosts(該檔名源於RCPT TO命令)的配置檔案,其決定了是否接受一個郵件。只有當一個RCPT TO命令中的接收者地址的域名存在於rcpthosts檔案中時,才接受該郵件,否則就拒絕該郵件。若該檔案不存在,則所有的郵件將被接受。當一個郵件伺服器不管郵件接收者和郵件接收者是誰,而是對所有郵件進行轉發(relay),則該郵件伺服器就被稱為開放轉發(open relay)的。當qmail伺服器沒有rcpthosts時,其是開放轉發的。
設定自己伺服器為非open relay的最簡單的辦法就是將你的郵件伺服器的所有域名(若DNS的MX記錄指向該機器,也應該包括該域名。例如你的機器有三個域名mail.linxuaid.com.cn、mail1.linuxaid.com.cn,而且linuxaid.com.cn的MX指向mail.linuxaid.com.cn,則qmail的rcphosts的應該包括mail.linuxaid.com.cn、mail1.linuxaid.com.cn和linuxaid.com.cn)。
但是這將導致你的本地客戶也被拒絕使用你的伺服器轉發郵件,而要支援客戶使用MUA來發送郵件,必須允許客戶使用伺服器轉發郵件。qmail-smtpd支援一種有選擇性的忽略rcpthosts檔案的方法:若qmail-smtpd的環境變數RELAYCLIENT被設定,則rcpthost檔案將被忽略,relay將被允許。但是如何識別一個郵件傳送者是否是自己的客戶呢?qmail並沒有採用密碼認證的方法,而是判斷髮送郵件者的源IP地址,若該IP地址屬於本地網路,則認為該傳送者為自己的客戶。
這裡就要使用ucspi-tcp軟體包。在這裡我們要使用該軟體包的tcpserver程式。該程式的功能類似於inetd-監聽進入的連線請求,為要啟動的服務設定各種環境變數,然後啟動指定的服務。
tcpserver的配置檔案是/etc/tcp.smtp,該檔案定義了是否對某個網路設定RELAYCLIENT環境變數。例如,本地網路是地址為192.168.10.0/24的C類地址,則tcp.smtp的內容應該設定如下: 127.0.0.1:allow,RELAYCLIENT="" 192.168.10.:allow,RELAYCLIENT="" :allow
這幾個規則的含義是指若連線來自127.0.0.1和192.168.10則允許,並且為其設定環境變數RELAYCLIENT,否則允許其他連線,但是不設定RELAYCLIENT環境變數。這樣當從其他地方到本地的25號連線將會被允許,但是由於沒有被設定環境變數,所以其連線將會被qmail-smptd所拒絕。
但是tcopserver並不直接使用/etc/tcp.smtp檔案,而是需要先將該檔案轉化為cbd檔案:
[lix@mail /etc]___FCKpd___1nbsp;# tcprules tcp.smtp.cdb tcp.smtp.temp
然後再回頭看在/service/qmail-smtpd目錄下的run檔案中有
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb
可以看到,tcpserver利用了/etc/smtp.cbd檔案。若本地有多個網路,則需要這些網路都出現在/etc/tcp.smtp檔案中。
這樣就實現了允許本地客戶relay郵件,而防止relay被濫用。
Qmail有一個名為rcpthosts(該檔名源於RCPT TO命令)的配置檔案,其決定了是否接受一個郵件。只有當一個RCPT TO命令中的接收者地址的域名存在於rcpthosts檔案中時,才接受該郵件,否則就拒絕該郵件。若該檔案不存在,則所有的郵件將被接受。當一個郵件伺服器不管郵件接收者和郵件接收者是誰,而是對所有郵件進行轉發(relay),則該郵件伺服器就被稱為開放轉發(open relay)的。當qmail伺服器沒有rcpthosts時,其是開放轉發的。
設定自己伺服器為非open relay的最簡單的辦法就是將你的郵件伺服器的所有域名(若DNS的MX記錄指向該機器,也應該包括該域名。例如你的機器有三個域名mail.linxuaid.com.cn、mail1.linuxaid.com.cn,而且linuxaid.com.cn的MX指向mail.linuxaid.com.cn,則qmail的rcphosts的應該包括mail.linuxaid.com.cn、mail1.linuxaid.com.cn和linuxaid.com.cn)。
但是這將導致你的本地客戶也被拒絕使用你的伺服器轉發郵件,而要支援客戶使用MUA來發送郵件,必須允許客戶使用伺服器轉發郵件。qmail-smtpd支援一種有選擇性的忽略rcpthosts檔案的方法:若qmail-smtpd的環境變數RELAYCLIENT被設定,則rcpthost檔案將被忽略,relay將被允許。但是如何識別一個郵件傳送者是否是自己的客戶呢?qmail並沒有採用密碼認證的方法,而是判斷髮送郵件者的源IP地址,若該IP地址屬於本地網路,則認為該傳送者為自己的客戶。
這裡就要使用ucspi-tcp軟體包。在這裡我們要使用該軟體包的tcpserver程式。該程式的功能類似於inetd-監聽進入的連線請求,為要啟動的服務設定各種環境變數,然後啟動指定的服務。
tcpserver的配置檔案是/etc/tcp.smtp,該檔案定義了是否對某個網路設定RELAYCLIENT環境變數。例如,本地網路是地址為192.168.10.0/24的C類地址,則tcp.smtp的內容應該設定如下: 127.0.0.1:allow,RELAYCLIENT="" 192.168.10.:allow,RELAYCLIENT="" :allow
這幾個規則的含義是指若連線來自127.0.0.1和192.168.10則允許,並且為其設定環境變數RELAYCLIENT,否則允許其他連線,但是不設定RELAYCLIENT環境變數。這樣當從其他地方到本地的25號連線將會被允許,但是由於沒有被設定環境變數,所以其連線將會被qmail-smptd所拒絕。
但是tcopserver並不直接使用/etc/tcp.smtp檔案,而是需要先將該檔案轉化為cbd檔案:
[lix@mail /etc]___FCKpd___1nbsp;# tcprules tcp.smtp.cdb tcp.smtp.temp
然後再回頭看在/service/qmail-smtpd目錄下的run檔案中有
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb
可以看到,tcpserver利用了/etc/smtp.cbd檔案。若本地有多個網路,則需要這些網路都出現在/etc/tcp.smtp檔案中。
這樣就實現了允許本地客戶relay郵件,而防止relay被濫用。