聲明:任何形式的摘抄必須保留上述作者和http地址
在新版本的Solaris 9_x86 已經提供了 Sendmail-8.12.10,所以不需要再下載和從新編譯。
本文章並不打算只為了安裝 sendmail 而裝 sendmail,也加入了很多有關安全上和Anti-spam的設定。
設定
mc 檔
% cd
/usr/lib/mail/cf
% cp main.mc main.mc.orig ( 保留原本的 mc 檔案 在 main.mc.orig )
% vi main.mc
或 pico main.mc ( 更改mc 檔內容 )
main.mc 檔內容如下
divert(-1)
divert(0)dnl
VERSIONID(`@(#)main.mc 1.5 (Sun) 08/10/00')
OSTYPE(`solaris8')dnl
DOMAIN(`solaris-generic')dnl
FEATURE(`virtusertable', `dbm /etc/mail/virtusertable')dnl ( 注解一 )
FEATURE(`use_cw_file')dnl ( 注解二 )
FEATURE(`access_db',
`dbm -T<TMPF> /etc/mail/access')dnl ( 注解三 )
FEATURE(relay_hosts_only)dnl ( 注解四 )
define(`confTRY_NULL_MX_LIST',true)dnl ( 注解五 )
FEATURE(`blacklist_recipients')dnl ( 注解六 )
FEATURE(dnsbl,
`blackholes.mail-abuse.org', `Rejected - see http://www.mail-abuse.org/rbl/')dnl ( 注解七 )
FEATURE(dnsbl,
`dialups.mail-abuse.org', `Dialup - see http://www.mail-abuse.org/dul/')dnl ( 注解八 )
FEATURE(dnsbl,
`relays.mail-abuse.org', `Open spam relay - see http://www.mail-abuse.org/rss/')dnl ( 注解九 )
FEATURE(`delay_checks')dnl ( 注解十 )
define(`confSMTP_LOGIN_MSG',
`$j server ready at $b')dnl ( 注解十一 )
MAILER(local)dnl
MAILER(smtp)dnl
| 備注: |
在每一行的後面,很多時候都會看到
dnl 這個東西,事實上,dnl 要不要都沒問題,一般 dnl 是用來加入注解,在dnl後所有文字或資料都會被忽略 。 |
| 注解一: |
使用 Virtual Domain和
Virtual User功能,資料存放在 /etc/mail/virtusertable |
| 注解二: |
用來設定 E-mail Domain,也可以很多個
E-mail Domain ( 注意:舊版本的設定檔為 /etc/mail/sendmail.cw,新版本改為 /etc/mail/local-host-names ) |
| 注解三: |
用來設定你不想接收的 E-mail
Address, Domain 彧 ip addess 的資料庫。 相關設定檔名 /etc/mail/access。 |
| 注解四: |
限制利用sendmail server發電郵的使用者
ip 範圍。當然如果你不加入 FEATURE(relay_hosts_only),任何人都可以使用你的 sendmail server發電子郵件。這樣是非常不安全,必須要加上這功能。如果不加的話,你的sendmail
server很有機會被列入國際電郵主機黑名單中。我很多年前就試過被列進黑名單裡,千萬萬小心。 相關設定檔名 /etc/mail/relay-domain。 |
| 注解五: |
讓 mail
server 在收到信後,嘗試直接連線到下所屬郵件主機,如果沒有這個主機,信件將不會保存在 mail server 的 /var/spool/mail 中,注意:這樣設定有可能造成郵件流失 。 |
| 注解六: |
這項功能可以啟動Sendmail
8.12.10來阻擋特定使用者、特定的主機名稱,或者是特定的電子郵件地址寄來的信件。並且送出一段訊息或者是送出在Access
Database 資料庫裡所定義之REJECT的值給對方。舉例來說,我們的Access Database 資料庫檔。
相關設定檔名 /etc/mail/access。 |
| |
注解七至注解十是用來下載垃圾郵件公司清單的,有幾個組織負責蒐集這類的公司行號,sendmail 能根據清單上的內容,防止這些公司轉寄垃圾信件 |
| 注解七: |
有漏洞網址黑名單檢查 |
| 注解八: |
撥號網址黑名單檢查 |
| 注解九: |
垃圾郵件網址黑名單檢查 |
| 注解十: |
啟用 check_mail 和 check_relay 功能,這讓 sendmail 在接收信件時,能針對各個欄位進行廣泛的分析比對。 |
| 注解十一: |
這是用來防止 sendmail 洩漏自己的版本號碼 。可用 telnet
127.0.0.1 25 來測試。 |
% make main.cf (
會利用 main.mc 產生一個 main.cf 檔
)
% cp main.cf /etc/mail/sendmail.cf ( 把轉換好的 cf 檔放到
/etc/mail/sendmail.cf )
% cd /etc/mail
% vi relay-domains 或 pico relay-domains ( 設定送件者的 ip address。)( Example )(
203.46.8 是指可接受 203.46.8.0 至 203.46.8.255 的使用者送出郵件 )
% vi local-host-names
或 pico local-host-names 把所有 domain 放在 local-host-names
裏 ( Example ) 。在舊版為
sendmail.cw
% newaliases ( 讀入 /etc/mail/aliases 的設定 ) (如果執行newaliases時出現問題,大多數都是
/etc/hosts 和 /etc/resolv.conf 未設好,請參考這裡。)
% makemap dbm /etc/mail/access < /etc/mail/access ( 讀入
/etc/mail/access 的設定 ) ( 你不想接收的 E-mail Address Example )
% makemap dbm /etc/mail/virtusertable < /etc/mail/virtusertable (
讀入 /etc/mail/virtusertable 的設定 )
% /etc/init.d/sendmail stop ( 停止 sendmail server )
% /etc/init.d/sendmail start ( 啟動 sendmail
server )
因為經常有機會更改 /etc/mail/virtusertable 、/etc/mail/access、/etc/mail/aliases和從啟 sendmail,所以我寫了一個簡單script來更新和從啟sendmail。
% cd /etc/mail
% vi reload 或 pico reload (編輯 reload 這個檔案)
#!/bin/sh
newaliases
makemap dbm /etc/mail/access < /etc/mail/access
makemap dbm /etc/mail/virtusertable < /etc/mail/virtusertable
sendmailpid=`cat /var/run/sendmail.pid | head -1`
echo "OLD SENDMAIL PID: $sendmailpid"
/etc/init.d/sendmail stop
/etc/init.d/sendmail start
sendmailpid=`cat /var/run/sendmail.pid | head -1`
echo "NEW SENDMAIL PID: $sendmailpid"
% chmod 700 reload
% ./reload ( 嘗試執行 )
看過一些外國的文章,建議不要讓
/var/spool/mqueue 太大,太大的話會降低系統性能
因為這個理由,所以寫了一個 conjob ,定期每月把
mqueue 清空一次。
% cd /etc/mail
% vi cronjob 或 pico cronjob (編輯 cronjob 這個檔案)
#!/bin/sh
mkdir
/var/spool/mqueue.tmp
chown root:bin /var/spool/mqueue.tmp
chmod 750 /var/spool/mqueue.tmp
mv
/var/spool/mqueue /var/spool/mqueue.old
mv /var/spool/mqueue.tmp /var/spool/mqueue
rm -r /var/spool/mqueue.old
% crontab -e ( 編輯 crontab
job )
加入新一行 0 6 1 * * /etc/mail/cronjob ( 每月一號,六時執行 /etc/mail/cronjob 一次) |