sendmail下設(shè)定郵箱大小
目前,在Linux/Unix平臺上,Sendmail因成為缺省安裝的郵件服務器而得到非常廣泛的應用。但是Sendmail本身并不具有限定用戶郵箱大小的功能,所以,如果某些用戶長時間不取信或設(shè)定了保留郵件副本,其信件將在服務器上不斷堆積,以致郵箱越來越大,占用大量的硬盤空間,很多網(wǎng)絡管理員對此都很有意見。這里介紹一種簡單實用的方法,通過它, 我們可以很方便靈活地對用戶郵箱的大小進行設(shè)定。
一、基本思路
先設(shè)定一個用戶郵箱大小的門限值;然后定期啟動一個進程,檢查每一個用戶郵箱文件的大小,將所有超過這一限值的郵箱文件名臨時寫進某一特定的文件中; 再讀取該文件,將它寫進Sendmail 的黑名單(blacklist_recipients) 中,從而使郵件服務器拒收該用戶的新郵件,直到下次檢查時該郵箱大小已小于設(shè)定的門限值為止。
二、運行環(huán)境
我們以Solaris 2.7操作系統(tǒng)為例進行說明,其他Unix(或Linux)系統(tǒng)可參照來做。
本文以Sendmail 8.11.3為例,若無該版本的Sendmail運行軟件,可到http://freesoft.cei.gov.cn或 http://www.sendmail.org站點下載。
三、具體操作
1. 下載編譯
在Sendmail軟件包已下載到當前目錄后即可進行編譯,操作步驟如下。
dc sendmail.8.11.3.tar.gz | tar -xf - (Gzip 是一個壓縮/解壓縮的工具,相當于 Windows平臺上的WinZip,在網(wǎng)上能很容易地找到并下載)
sendmail-8.11.3/sendmail
/Build
(編譯Sendmail )
2. 安裝
- # ./Build install
(用超級用戶身份安裝)
3. 生成配置文件
- # cd ../cf/domain
- # vi generic.m4
此時,在文件的末尾增加如下兩行內(nèi)容。
FEATURE('access_db','dbm /etc/mail/access')dnl
FEATURE('blacklist_ recipients')dnl
然后,我們可以按著輸入以下內(nèi)容。
- # cd ../cf
- # m4 ../m4/cf.m4 ./generic-solaris2.mc > ./sendmail.cf
- # cp ./sendmail.cf /etc/mail/
4.生成 access 文件及郵件服務器名稱的參數(shù)文件
- # cd /etc/mail
- # makemap dbm access < /dev/null
- # vi local-host-names
(該文件是一個文本文件,內(nèi)容為本地郵件服務器的域名和別名,它們之間要用回車分隔。詳見Readme文件的有關(guān)介紹)
5. 啟動Sendmail
- # /usr/lib/sendmail -bd -q30m
6. 編緝限制郵箱大小的程序
用sh命令編緝一個限制郵箱大小的程序,然后用操作系統(tǒng)的定時執(zhí)行功能crontab設(shè)定其執(zhí)行的頻率,內(nèi)容如下。
- # vi /etc/mail/limit_mailbox.sh
- # chmod u+x /etc/mail/limit_mailbox.sh
- # crontab -e
接著,我們可以輸入以下內(nèi)容。
0 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 * * * /etc/mail/limit_mailbox.sh 10
它表示在每天6:00~20:00間,每隔1小時啟動一次,檢查郵箱大小的sh命令。用戶也可根據(jù)實際情況進行調(diào)整。“10”表示郵箱大小的門限值為10MB。
四、附錄limit_mailbox.sh 源代碼
- #!/usr/bin/ksh
- # search the mailbox larger than MAXSIZE , then set this mailbox full and reject new mails
- error() {
- echo " "
- exit 1
- }
BIN=/usr/bin
MAIL=/etc/mail
#Sendmail 參數(shù)文件所在的目錄
MAILDIR=/var/mail
#存放郵箱文件的目錄
ACCESS=access.db
#用于臨時存放超過門限值的郵箱名
SUBACCESS=access.sub
#用于存放額外的收、轉(zhuǎn)發(fā)限制規(guī)則
- if [ -lt 1 ]; then
- error "Must set the MAX mailbox size with the command!"
- fi
- if [ -le 0 ] ; then
- error " Mailbox Size < 0, Failed"
- fi
- ((MAXSIZE=*1024*1024))
- if [ -f / ]; then
- /cat / > / ' '
- error "piping /sintos/,
- Failed"
- else
- > /' 'error "clearing /, Failed"
- fi
- cd ' 'error "entering Failed"
- for box in '/find .
- ! -user root -size +""c -type f -print'; do
- case in
- .|..|./.*.pop)
- ;;
- *)
- mailuser=
- echo "To:@
- ERROR:550 's Mailbox is full " >> /
- ;;
- esac
- done
- cd || error " entering Failed"
- /usr/sbin/makemap dbm access
- < ./ || error "makemaping access Failed"
- exit 0'
通過以上一系列的命令和方法,就可以設(shè)定sendmail 郵箱的大小
【編輯推薦】