iT邦幫忙

0

sendmail 如何查詢是哪一個user在發垃圾郵件

目前分公司的mail server 是使用sendmail
之前中華電信跟我們說 我們在發垃圾郵件
但是我有去測試過我們的mail server 沒有open realy
我可以怎樣去做查詢是serveer的問題
還是user端的問題

或者是說如果我將sendmail 改成Postfix
我要怎樣去做
需要注意哪些地方
原本的user的資料是不是還會在
我的linux系統是 fedora core 5 的版本

有人可以跟我說改怎麼去做
或者是要找哪方面的資料
不會linux的 網管
謝謝

2 個回答

20
逮丸逮丸
iT邦大師 1 級 ‧ 2009-12-07 09:46:37
最佳解答

確認哪個IP發垃圾信
如果可以的話,請ISP提供垃圾信的原始檔,
才看得出,所謂的垃圾信是怎樣子、
更重要的是才看得出原信件中的原始發信IP。

一般linux Mail server是設成以IP為範圍為依據,
來提供寄信的服務,所以無法從寄信記錄直接知道是誰寄,
最多只知從何IP發信;
除非是設成要用帳號密碼認證,
較能確認是誰寄的。

快查哪個IP寄最多信
如果一時無法獲得上述的原始圾垃信資料,
從 mail server 上的記錄檔來查,
看哪個 IP 的寄信記錄多,
可利用以下簡單的 script 來看哪個IP 寄信記錄多。
先 cd /var/log
用 nano 或 pico 簡單的編輯器編一個叫 count_from.pl 的檔案,
貼上以下內容:

<pre class="c" name="code">
$filename = ARGV[0];
%count=();
open(FH,"./$filename");

while(<FH>) {
chomp;
if ($_ =~ m/from/) {
$_ =~ m/.*\[(.*)\].*\[(.*)\].*/ ;
$iptimes = $2;
$count{$iptimes}++;
#print "$iptimes -- $count{$iptimes}\n"
                   }
}
close(FH);

@sortvalue = sort { $count{$a} <=> $count{$b} } keys %count;

foreach $timess (@sortvalue) {
print "$timess --> $count{$timess}\n";
}

然後
<pre class="c" name="code">
perl count_from.pl maillog
# 若跑太長太快,可用以下指令來分頁
perl count_from.pl maillog | less

可跑出在 maillog 檔裡,
哪些 IP 寄了幾封信。

建議
換 postfix 卻仍以 IP 範圍為允許寄信的條件,
同樣的問題一樣可能會出現。
如果沒有為 sendmail, postfix 做額外功能設定的話,
換不換 postfix,應該影響不大,
除非在這些 mail server 上再加上 過濾相關機制。
如果 對 linux 是新手,
又要把公司正在運作 mail 服務的 linux 做調整的話,
建議改用 本站右邊的 OpenfindSunGate 的整合郵件軟體解決方案。
最好找一台 PC 來安裝測試上述的軟體,
再取代原有的 Mail Server。
因這些 web 界面的管理機制,
應都把大部份的需求都考慮到了。

而不用冒險在 Linux 上即學即用在 公司的服務上。
如果也不想用維護另台PC裝mail軟體的話,
或者買硬體的 mailbox 也可行,
這樣就不需在 mail server 上花太多心力。

10
jay0123
iT邦高手 2 級 ‧ 2009-12-08 10:00:53

我照以上做

perl count_from.pl maillog

syntax error at count_from.pl line 1, near "ARGV["
Execution of count_from.pl aborted due to compilation errors.

看來第一列有問題說

把 ARGV[0] 的地方,改成 $ARGV[0] 就可以了,
少了一個 $ 。

我要發表回答

立即登入回答