sendmail郵件服務權限的設定
設定sendmail 郵件服務器使用權限:
/etc/mail/access
在你啟動了 Sendmail 以及設定好主機名稱 ( local-host-names )之后,那你就可以利用『在你的主機上面利用你的主機來寄信』了!為什么要加上『在你的主機上面』呢?還記得我們在前面有提過,為了杜絕廣告與垃圾信件,所以預設的情況中, Sendmail 是關閉 Open Relay 的對吧!但是為了主機使用者的方便,所以我們預設是有啟動 local 這個 Mailer ,也就是說:
1. 只有使用者是在主機上面發信的,例如使用 SSH 登入主機后,以 mail 這個指令來發信;
2. 又或者使用者直接在主機上面使用 X-Window System 里面的郵件代理人,亦即是 Netscape 或者是 Kmail 等軟件來發信
的時候,我們的 Sendmail 才會幫使用者『寄信』喔!至于其它的計算機來源的『寄信』郵件,Sendmail 一概將他退信回去!那么如果我想要在其它的計算機上面使用我這部 Mail Server 來寄信呢?這個時候就要編輯『/etc/mail/access』這個信任網域設定的檔案啦!假設一個例子好了:
我的 Sendmail 主機想要支持我內部網域的所有計算機來寄信,而我內部網域的計算機 IP 網段為 192.168.0.0/24 這一段;
還有,我另外有一個公共 IP ( Public IP )為 140.116.44.125 ,也想要讓他可以寄信;
此外,我發現 192.168.1.100 計算機使用者都會亂寄垃圾給我的郵件主機,所以我想要擋掉他;
那個 h8h.com 也有問題,我也要擋掉這個網域 (domain) 的來源;
更發現有個使用者叫做 test@testing.domain.name 也是色情廣告信業者!那么我可以怎樣設定 Sendmail 的存取權限呢?
在 /etc/mail/access 當中,只要有加上 # 就是批注內容,所以不會被讀入數據庫當中!其實真正的 Sendmail 可以讀得到的數據庫是 /etc/mail/access.db 這個檔案,不過,我們必需先在 /etc/mail/access 編輯完畢后,再以 makemap 這支程序將他改寫成為數據庫!所以,不要忘記 makemap 那個步驟喔!由上面的檔案我們就可以知道啦, access 的語法為
規定的范圍:規定可以在sendmail上面的動作
IP/不完整IP/主機名稱/E-mail RELAY/DISCARD/REJECT
在『規定范圍』與『規定可以在 sendmail 上面的動作』兩項目之間最好以
from:test@your-domain.com.tw REJECT
to:blah@your-domain.com.tw REJECT
當信件想要使用我們的郵件主機來進行寄信或者是 Relay 的動作時,首先會傳送 mail header 到我們的 mail server 上面,這也就是一些郵件的基本數據(如認證信息、來源IP、目標的 MTA 等等),但并不包含郵件的內容(例如信件本體、附件夾帶等等的內容)。也就是說,一封郵件基本上可以分為兩大部分,分別是 Header 與 Body ,Header 僅記錄郵件基本信息,Body 才是真正的信件內容。當郵件想要進入 MTA 時,會先發送 Header 給 MTA ,MTA 判斷這個 Header 的信息是可接受的之后,才后繼續接受來源主機的郵件 Body 內容!如果這些基本訊息傳送過來的主機信息包括在 /etc/mail/access.db 里面所記錄到的主機(或IP)范圍時,就可以指定底下這些動作:
RELAY:允許該來源主機所傳送過來的郵件可以被接受,然后再進行 Relay 的動作。以上面的范例為例,則 192.168.0.0/24 來源的計算機所發送來我們 Mail Server 的郵件將會被接受喔!•REJECT:若來源主機的主機名稱或 IP 在 REJECT 的情況下,則我們 Mail Server 將不會接受對方的郵件內容(就是 body 部分),『并且會回傳一個錯誤或警告訊息給原發信端』喔!•DISCARD:與 REJECT 相似,亦即關閉規定范圍內的計算機主機的 RELAY 功能,不過, Sendmail 會直接將該信件『丟棄』而不會『退回』!通常我們比較建議使用 DISCARD 啦!為什么呢?如果該 IP 來源傳送的是廣告信件,您又使用 REJECT 的話,那么兩方面的郵件主機將會一再地進行 mail header 的傳送,也是挺消耗頻寬的!所以我們比較建議使用 DISCARD!再來,由于 access 不支持網域的寫法,亦即
192.168.0.0/24
192.168.0.0/255.255.255.0
這種類型的網域寫法并不能被使用的!所以,只能以 192.168.0 這種寫法來達成整個網域的設定了!也就是說, access 里面大概只能支持 A/B/C Class 的網域, subnet 大概就無法達成了!只能一個一個 IP 的 Keyin 啰!編輯完這個檔案之后,就可以讓你的其它主機使用 Sendmail 的 Relay 功能啰!還不賴吧!
【編輯推薦】