Milter-limit控制postfix發(fā)信頻率
>要在postfix 中限制一個(gè)用戶(hù)發(fā)信的數(shù)量,發(fā)到某個(gè)域的數(shù)量,和頻率需要一種控制機(jī)制!
milter-limit 是Sendmail 的一個(gè)filter,用于限制用戶(hù)發(fā)郵件的數(shù)量,以防止郵件服務(wù)器 被非法用于發(fā)送垃圾郵件,它可以實(shí)現(xiàn)對(duì)指定的客戶(hù)端IP、收件人、發(fā)件人進(jìn)行限制。該 filter可以不做任何修改即可用于Postfix中 到www. 下載 (需要注冊(cè)) http://www. 安裝 注意,在安裝操作系統(tǒng)的時(shí)候安裝sendmail的所有組件,這個(gè)軟件的安裝需要用到sendmail 的相關(guān)文件,如果沒(méi)有安裝下面的編譯安裝會(huì)出現(xiàn)錯(cuò)誤! 下載:如下的軟件: db-4.8.26.tar.gz (可能不需要安裝) milter-limit-0.14.tar.gz libsnert-1.73.11.tar.gz # tar -zxvf libsnert-1.73.11.tar.gz # tar -zxvf milter-limit-0.14.tar.gz #cd com/snert/src/lib # ./configure --with-db=/usr # 檢查是否有Berkeley DB 支持 # make build # cd ../milter-limit # ./configure --enable-run-user=postfix --enable-run-group=postfix # make build # make install 安裝完畢: 下面設(shè)置postix 修改 /etc/postfix/main.cf 添加參數(shù): smtpd_milters = unix:/var/run/milter/milter-limit.socket 過(guò)濾規(guī)則: milter-limit 的規(guī)則文件寫(xiě)在/etc/mail/access 中,然后用makemap 來(lái)生成 makemap hash /etc/mail/access.db < /etc/mail/acces # 請(qǐng)注意access.db權(quán)限不能為可執(zhí)行,并且可以讓postfix 用戶(hù)能夠讀取 /etc/mail/access 文件的規(guī)則包括 milter-limit-Connect: # 客戶(hù)端連接IP milter-limit-From: # 發(fā)件人地址 milter-limit-To: # 收件人地址 milter-limit-Auth: # 通過(guò)SMTP認(rèn)證的發(fā)件人 支持以下匹配規(guī)則 [network/cidr]limit 無(wú)類(lèi)域間路由 !pattern!limit 簡(jiǎn)單文本匹配 /regex/limit POSIX正則表達(dá)式 limit:時(shí)間單位可以是秒(s)、分鐘(m)、小時(shí)(h)、天(d)、星期(w) 格式: messages ‘/’ time [unit] # 發(fā)往sina.com域限制在1小時(shí)發(fā)送2封郵件 策略: 啟動(dòng)參數(shù): policy=reject none 什么都不做 tag 給郵件標(biāo)題打標(biāo)簽 啟動(dòng)參數(shù):subject-tag=[SPAM] quarantine 將郵件送入隔離隊(duì)列(不發(fā)送,需要通過(guò)命令激活). later 不接收郵件,提示發(fā)送端發(fā)送延遲消息,郵件仍舊在發(fā)送端的隊(duì)列中,稍候重試 reject 拒絕郵件(默認(rèn)值) discard 直接丟棄 啟動(dòng)命令 /usr/local/sbin/milter-limit verbose=all policy=later -start 如果需要調(diào)試使用 verbose=all 在/var/log/maillog 中查看日志 其他參數(shù)用 -help 參數(shù)查看 postfix 基本參數(shù)設(shè)置 smtp_skip_4xx_greeting = yes smtp_skip_5xx_greeting = yes default_destination_concurrency_limit = 2 #同一IP并發(fā)連接 initial_destination_concurrency = 2 smtp_helo_name = mail.test.com # 本機(jī)對(duì)外真實(shí)域名 smtpd_milters = inet:localhost:8891,unix:/var/run/milter/milter-limit.socket 測(cè)試發(fā)送郵件,如果在一小時(shí)呢發(fā)送超過(guò)2封每秒,會(huì)被拒絕投遞 查看日志: tail /var/log/maillog 如下信息 說(shuō)明控制能正常功能工作了 Mar 11 19:20:18 mail milter-limit[5613]: 00004 NOQUEUE: limit max=2 seconds=3600 Mar 11 19:20:18 mail milter-limit[5613]: cache get {milter-limit-to:sina.com} Mar 11 19:20:18 mail milter-limit[5613]: 00004 NOQUEUE: cache get key={milter-limit-to:sina.com} value={1268309916, 2} rc=0 Mar 11 19:20:18 mail milter-limit[5613]: 00004 NOQUEUE: isOverLimit(8d50100, 8d4fbe8) {milter-limit-to:sina.com, 2/1h, 2, 4b98df9c} rc=1 Mar 11 19:20:18 mail milter-limit[5613]: 00004 NOQUEUE: reply 450 4.7.1 has exceeded 2 messages per 1 hour Mar 11 19:20:18 mail postfix/smtpd[5618]: NOQUEUE: milter-reject: RCPT from unknown[192.168.1.109]: 450 4.7.1 has exceeded 2 messag 這個(gè)是其中的一個(gè)控制,還有很多其他的設(shè)置。 這其中有個(gè)問(wèn)題,對(duì)于我們的發(fā)信系統(tǒng)來(lái)說(shuō),原因在于:發(fā)信一旦超過(guò)限制,就把信直接給reject掉了,這樣發(fā)送任務(wù)終止了,需要等待時(shí)間再次發(fā)送,但是這戲都是系統(tǒng)自動(dòng)進(jìn)行的,一旦斷掉就終止發(fā)信了 會(huì)不會(huì)有一種機(jī)制將超過(guò)的信保持在發(fā)送隊(duì)列中,等到過(guò)了罰值繼續(xù)發(fā)送?? 我還沒(méi)有找到這個(gè)解決的方法,希望有哪位高人知道怎么做,那多謝指導(dǎo)啊 呵呵,這對(duì)發(fā)信量少的企業(yè)郵件有很大幫助,免去了被利用發(fā)送垃圾郵件的危險(xiǎn) |
|
來(lái)自: 昵稱(chēng)6656145 > 《linux》