iT邦幫忙

0

虛擬mail server問題

各位前輩好:
弟目前有遇到一些虛擬mail server問題,
是這樣子的,
系統是postfix,
而常常困擾有公司內用戶大量發信的行為,
造成頻寬與io的負荷,
想向前輩請教,
在tail -f /var/log/maillog一秒都好幾百行的情況下,
該怎麼樣才能第一時間抓出該用戶的ip或網域並阻止大量發信行為(kill process ?)
煩請前輩指點方向,
感謝~

557557 iT邦新手 4 級 ‧ 2011-03-08 20:52:50 檢舉
你們真厲害
我看都看不懂...暈~~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

8
逮丸逮丸
iT邦大師 1 級 ‧ 2011-03-07 14:08:05
最佳解答

一、較根本的解決法:
參考 Postfix Performance Tuning 裡的:
Measures against clients that make too many connections
這一段內容,列出了postfix可以限制client送信頻率的參數。
中文介紹可參閱:
postfix2.2以後帶有發信頻率控制的控制

二、用簡單的shell script 可立刻查發信IP的頻率:
1.整個mail.log檔

<pre class="c" name="code">fgrep " connect from " /var/log/mail.log | sed -e 's/.*\[\(.*\)\]/\1/'|sort| uniq -c| sort -n

2.前1000行
<pre class="c" name="code">tail -1000 /var/log/mail.log | fgrep " connect from " | sed -e 's/.[(.)]/\1/'|sort| uniq -c| sort -n

3.用 awk 來算次數:建一個 count.awk 檔
<pre class="c" name="code">{
freq[$1]++
}
END {
for (ip in freq)
printf "%d\t%s\n", freq[ip], ip
}

然後執行
<pre class="c" name="code">tail -1000 /var/log/mail.log | fgrep " connect from " | sed -e 's/.[(.)]/\1/'| awk -f /path/to/count.awk |sort -n |sort -n

出來的結果會類似這樣:(不用awk:)
<pre class="c" name="code"> 2 195.24.212.3
2 220.228.9.18
5 190.84.237.250
18 203.161.109.116

(用awk:)
<pre class="c" name="code">1 83.151.151.51
1 85.182.175.4
1 96.31.247.154
6 190.84.237.250
19 203.161.109.116

nikediou iT邦新手 5 級 ‧ 2011-03-07 16:49:41 檢舉

感謝前輩指點方向^^希望有疑問能夠再直接向您討教~謝謝!謝謝! ^^

我要發表回答

立即登入回答