2008年12月3日 星期三

telnet 的解析

作者: Baron. Wan

telnet localhost 25
example.com.tw ......
HELO gmail.com
MAIL FROM: < yyy @ gmail.com >
RCPT TO: < ggg @ uuu.com.tw >
DATA
from: < yyy @ gmail.com >
to: < ggg @ uuu.com.tw >
subject: test
test
.
QUIT

一封信件的檔頭解析如下:
Received: from gmail.com (localhost.localdomain [127.0.0.1])
by example.com.tw
for ggg @ uuu.com.tw
X-Envelope-From: yyy @ gmail.com
Return-Path: yyy @ gmail.com

那個 `by` 為實際發信的地址

procmail ~ 自己寄給自己?

作者: Baron. Wan

有垃圾信偽裝寄件者是自己, 然後寄給自己 O.O?!! 以下是比對了數封的相關垃圾信件後, 做出的處理動作....

:0 H
* ^[fF]rom:
{
FROMUSER=`grep "^[fF]rom:"|sed 's/^.* .* //'|sed 's/^.* //'`
TOUSER=`formail -xReceived:|grep "for"|head -1|sed 's/^.*for //'|awk -F" " '{print $1}'|sed 's/^/\ /'|sed 's/;$//'|sed 's/\ //'`
TOUSER2=`grep "^[tT]o:"|sed 's/^.* .* //'|sed 's/,//'|sed 's/^/\ /'|grep "${FROMUSER}"`
WHOISU=`if [ -n "${TOUSER2}" ]||[ "${FROMUSER}" = "${TOUSER}" ]&&[ -n "${FROMUSER}" ]; then echo "True"; else echo "False"; fi`

:0
* WHOISU ?? True
{
:0f
# to addition black list
| formail -i "X-SPAM-NOTUSER: MAILER_SPAM_NOTFROMUSER"
}
}

procmail ~ 紀錄發信位址

作者: Baron. Wan

:0 H
* ^Received:
{
FROM_MAILDOMAIN=`formail -xReceived:|grep "by"|tail -1|sed 's/^.*by //'|awk -F" " '{print $1}'`

:0f
| formail -i "X-SPAM-FROMDOMAIN: ${FROM_MAILDOMAIN}"
}

那個 Received:...by 是哪裡? 簡單的說 by 之後接的就是發信來源地!
這有甚麼作用呢? 作用很多的. 許多垃圾郵件經過觀察, 發送來源地竟然是在自己的Mail Server ?!! 很奇怪吧, 可是明明就沒中毒...其實一點也不奇怪, 你只要將 smtp 指向可接收外部信件的 mail server, 就可以由那台主機發信啦, 至於可以發送到哪裡, 那要看那台主機有沒有 Relay 囉, 不然只能寄送給主機內的User了. 可是這樣 自己人寄給自己人不就被擋了? 所以上面會去比對發信的來源地.