顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


主題 - abelyang

頁: 1 [2]
31
昨天貼了兩次,但發現有 Bug, 所以又把它刪了...
這次我確定是可以的了 ~~檔中文信變通的做法
另外常在網上看大家貼自己的 procmailrc
有些 rule 都蠻長的,其實稍微用一下 Script 去處理的話
看起來就明亮許多....
http://phorum.study-area.org/viewtopic.php?t=17306 有解釋的東西
這裏我就不解譯了


PATH=$PATH
SHELL=/bin/sh
MAILDIR=/var/spool/mail
VERBOSE=yes
SENDMAIL=/usr/sbin/sendmail
LOGFILE=/var/spool/mail/procmail.log
tmp=`formail -zxSubject:`
# parser_subj 請參照問題一,不然你可用 mmencode, 但是自己要加判斷
# 是 mime 或 quote-print ...(沒聽過 !? 自己想辨法囉)
SUBJ=`/etc/parser_subj $tmp`
#SUBJ=`formail -zxSubject: | sed 's/=?.*?[bB]?\(.*\)=?=/\1/'| mmencode -u `

#這一個是要得信件的 BODY 段,我用於自動更新 patten 的判斷條件
# BODY 段頭尾的空白行要刪掉,
# 至於 FONT size 那一行是我個人的使用習慣,我用 Outlook Express
# 送出的信件都會有夾 HTML , 所以要將原來的本文抓出
BODY=`formail -I ""|sed -e '/^$/d' | grep '<FONT size=' | sed  's/.*<FONT.*>\(.*\)<\/FONT>.*/\1/'`
#本文(指中文)抓出後可能是 quote-print 或 mime
#所以使用 mmencode 來還原字串
# 註: 本處我只做中文處理,英文 (7bit) 的資料是不會有 Encoding 的
qpBODY=`echo $BODY | mmencode -q -u`
mimeBODY=`echo $BODY | mmencode -u`

# 這種用法也可以,因我不想另外判斷 Content-Transfer-Encoding=xxx
# 所以直接比較那種編碼是對的 (body 用在下面)
BODY=`  if [ ${#qpBODY} -gt ${#mimeBODY} ]
        then
                echo $qpBODY
        else
                echo $mimeBODY
        fi`
FROM=`formail -zxFrom:`
FROM=`echo ${FROM##*<}`
FROM=`echo ${FROM%%>}`
TO=`formail -zxTo:|tr ',' '\n'|  sed 's/\(.*\) \(.*\)/\2/'`
FILE=/home1/MAIL/mail-`echo $FROM-$SUBJ| sed -e s/' '/''/g`-`date +%Y%m%d-%H:%I:%S`.eml
attach=` formail -i "" | grep -i 'Name=' | cut -f 2 -d'=' | tail -1`

# Mail 的 Subject 或 Body 編碼有三種,
# 第一種就是原型,什麼都不編碼 "酷!學園"
# 第二種是 Mime 以 base64 以 6 bit 來編碼,base32 以 5 個 bit ,但Mail 都是用 base64
# 如: =?big5?B?jjfkdoooo=?= (這一段mime 我是隨意打的)
# 但是如果有一封信原中文標題是 "酷酷酷!學園" , 你以 6 個 bit 去算
# 排列完全不一樣, 或你可使用
# echo "酷!學園" | mmencode
# echo "酷酷酷!學園" | mmencode
# 你會發現這兩個的 mime patten 天差地遠...所以 procmailrc 中的 patten 就不是
# * ^Subject: 酷!學園      ---->有90%以上的機會會錯掉
# * ^Subject: =?big5?B?jjfkdoooo=?=  --->有75%的機會會錯掉,不過可以取巧,將四種可能都設上
# Mime 的編碼在 8bit email subjext 裏面我覺得大概佔到近八成左右,所以要多再注意
# 第三種稱為 QP (quote-print) , 直接還原 binary code 你有時會看到 =A3=BB...就是了

#將我要檔的中文主旨的字串列出
patten_list=`cat /etc/spam_patten.txt`

#以下判斷本封信主旨是否相似於 patten_list
# 如這封信主旨是 "酷酷酷酷酷酷!學園"  ,而 patten 中有 "酷!學園"
# 那這封信就會被擋掉, LASFOLDER 是 procmail 的預設變數之一
# 用於這封信的收件匣
LASTFOLDER=`    for patten in $patten_list
                do
                        pat="${SUBJ##*$patten}"
                        if [ "$pat" != "$SUBJ" ]
                        then
                                echo "/var/spool/mail/test"
                        fi
                done `

# 寫一封信給系統,主旨為 "add-procmail", 而 Body 段的字串
# 就會加到 spam_patten 的比對表中
:0 H
* ^Subject: add-procmail
| ( echo $BODY >> /etc/spam_patten.txt )

# 同上,只是將某一字串後 spam_patten 中拿掉
:0 H
* ^Subject: del-procmail
| (     grep -v `echo $BODY` /etc/spam_patten.txt > /tmp/spam_patten.txt;cp -f /tmp/spam_patten.txt /etc/spam_patten.txt; )

# 所有的郵件都會經過中文的檢查條件,而巳 assgin $LASTFOLDER 值(見上)
# 所以此處巳完全不用判斷了
:0 H
* ^Subject: .*
$LASTFOLDER


有興趣的人可以去試試看囉 ~~
週而復始的常看到有人問如何檔中文信,
這只是一個方法而以

32
Network 討論版 / 假信多注意~~別上當了
« 於: 2003-07-03 19:31 »
Return-Path: <info@ms1.hinet.net>
Received: from ms1.hinet.net (info@ms1a.hinet.net [168.95.5.1])
   by xxx.net.tw (8.12.9/8.12.9) with ESMTP id h63BNPwg023488
   for <xxx@xxxnet.tw>; Thu, 3 Jul 2003 19:23:25 +0800
Received: (from info@localhost)
   by ms1.hinet.net (8.8.8/8.8.8) id TAA12799
   for xxx@xxx.net.tw; Thu, 3 Jul 2003 19:23:24 +0800 (CST)
Date: Thu, 3 Jul 2003 19:23:24 +0800 (CST)
From: info@ms1.hinet.net
Message-Id: <200307031123.TAA12799@ms1.hinet.net>
Status:  

Subject:HiNet客服中心系統自動回函

敬啟者
  您好!
  本信箱因本日收到的郵件數量甚為龐大,無法立即回覆您的來函,深感抱歉!請您務必耐心等候,本公司將盡速回覆您的問題,在此特別提醒您:
如果台端的問題有關E-mail信箱需排除障礙,請您務必隨函附上您的E-mail
password以利我們進行測試!
  若是您的信箱已經發生無法收信的問題,為避免回覆的郵件無法送達您的信箱,煩請您電洽0800080412 # 9尋求客服人員之協助,或請您另附一個E-mail 信箱,俾利本公司回覆您的問題。
不便之處,尚祈見諒!

中華電信數據分公司HiNet客服中心    敬啟  

Subject: Your HiNet E-Mail Auto-Reply

Dear Sir/Madam

Greeting.

Due to an over capacity of e-mail request, we are unable to reply to your e-mail at this time. We apologize for the inconvenience. Please wait. We will answer your e-mail request in the order that it was received as soon as possible.

Please remember to:
1. If you encounter difficulty accessing your e-mail account, please leave your e-mail account name and password along with your message for us to expedite your service.

2. If you experience difficulty sending/receiving your e-mail, please contact 0800-080-412 extension 9 for assistance

33
系統安全討論版 / SOC 監控中心
« 於: 2003-07-03 02:13 »
引用
精誠SOC主要服務內容包括Check Point防火牆、入侵偵測、弱點評估、網頁監控等委外服務機制,與風險評估、資安事件、漏洞分析等顧問諮詢服務,強調以點、線、面的整體防護概念,提供客戶全面性的資訊安全防護。精誠SOC的收費可依大型、中型、小型企業不同需求而定,大型企業大多已購買完善的資安產品,也設有專人負責管理資訊安全設備,所以精誠SOC主要提供外在風險評估、資安事件諮詢等顧問諮詢服務,費用大約是20~180萬;而中型企業大都已購買Check Point防火牆,所以偏好採購精誠SOC的入侵偵測系統(IDS)及外在風險評估服務,費用大約需要10~100萬;至於小型企業,最需要的是防火牆代管服務,約需要2~40萬的費用

以上是精誠網站上的一些資訊 

要導入 資訊安全管理系統(ISMS),其中有一項是監控中心 SOC
就上述入容,技術面,以
iptables/Netscreen 當 Firewall
Snort 做入侵偵測 (其實有許多 IDS廠商根本就是 Copy snort style 後拿出來賣)
Nessus 跑弱點評估 (這個我常用,也常更新 nasl )
tripwire 做檔案檢查
及 Log 分析程式
並用資料庫綜合上述資訊及主機資訊
不知道這樣看來有沒有什麼不足的,純粹看 SOC 的技術面(不看人的因素,不好 Control,感覺起來應是足夠了,不過就怕我有漏掉什麼重要的功能?
大家有什麼建議嗎?

國內的廠商我們大概都來找過我們了,不過總價太高我們付不起 :cry:

奮鬥了好幾天,報表的部份大概都可以處理
為了圖表上一點 (pixel) 的資料如何對應到那筆資料庫真是找番天了

34
這種流量統計的資訊對一般人可能沒有用
但對和網路相關的行業而言或許有用也不一定

[root@pc071 etc]# rndc-confgen
# Start of rndc.conf 設定一 rndc.conf ,建議與 named.conf 同一目錄
key "rndc-key" {
        algorithm hmac-md5;
        secret "lnWw5u3Jlr/8jaTpjfWF6w==";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
#在 named.conf 中加入如下設定
 controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };

在啟動 DNS 後,即可使用 rndc 來檢測系統
 
[root@pc071 etc]# rndc
Usage: rndc [-c config] [-s server] [-p port]
        [-k key-file ] [-y key] [-V] command

command is one of the following:

  reload        Reload configuration file and zones.
  reload zone [class [view]]
                Reload a single zone.
  refresh zone [class [view]]
                Schedule immediate maintenance for a zone.
  reconfig      Reload configuration file and new zones only.
  stats         Write server statistics to the statistics file.
  querylog      Toggle query logging.
  dumpdb        Dump cache(s) to the dump file (named_dump.db).
  stop          Save pending updates to master files and stop the server.
  halt          Stop the server without saving pending updates.
  trace         Increment debugging level by one.
  trace level   Change the debugging level.
  notrace       Set debugging level to 0.
  flush         Flushes all of the server's caches.
  flush [view]  Flushes the server's cache for a view.
  status        Display status of the server.
  *restart      Restart the server.


就本章主題而言,我們要了解的是流量,故可使用下列指令來看:
rndc –c /etc/rndc.conf –s localhost stats

此時會產生三個檔案於 directory 的目錄裏,我們就其中的 named.stats 來看其內容
[root@pc071 named]# cat named.stats
+++ Statistics Dump +++ (1050394961)
success 4087      #查詢成功的量
referral 0      #referral 的量
nxrrset 0      #找不到記錄的量
nxdomain 56421   #找不到網域名稱
recursion 6765   #遞迴查詢次數
failure 6722      #失敗的量
--- Statistics Dump --- (1050394961)
+++ Statistics Dump +++ (1050395022)
success 4087
referral 0
nxrrset 0
nxdomain 56423
recursion 6765
failure 6722
--- Statistics Dump --- (1050395022)
上述例子中,Statistics 中間的值為每一次 stats 之狀況,而我們若欲有精確而有效的查詢與回應統計,除了時間因素要考量外,尚需注意這些值的意涵:
查詢數:全部數值總合
回應數:除 failure 外之總合
上述的格式是固定的,故我們可以準備一套方法來產生其流量資料,
我們可以產生 mrtg 格式之記錄

#dns-flow.sh
rndc -s localhost -c /etc/rndc.conf stats  #產生 namd.stats 供統計用
sum=0
#查詢量
for c in `cut -f 2 -d' ' /var/named/named.stats | tail -7 | head -6 `   #取得數值部份
do
sum=`expr $sum + $c`      #加總
done
echo $sum            #stdout 供 mrtg 使用
sum=0
#回應量
for c in `cut -f 2 -d' ' /var/named/named.stats | tail -7 | head -5 `
do
sum=`expr $sum + $c`
done
echo $sum
上述僅是一個簡短的 Shell Script,我們可以將其加到排程中,讓其固定時間可以產生結果:

 
使用 mrtg
如果您上面都了解了,這一節的設定其實就會很簡單,本節並教授 mrtg 的安裝,僅列出 mrtg 的設定供您參考,詳細 mrtg 的設定您可用搜尋引擎找到許多,或直接參考官方網站 http://www.mrtg.org
#/usr/local/etc/mrtg
#…前略
Target[xxx.com.tw]: `sh dns-flow.sh `
MaxBytes[xxx.com.tw]: 2500
Title[xxx.com.tw]: xxx.com.tw
Legend1[xxx.com.tw]: DNS查詢(次數/秒)
Legend2[xxx.com.tw]: DNS回應(次數/秒)
LegendI[xxx.com.tw]: DNS查詢
LegendO[xxx.com.tw]: DNS回應
YLegend[xxx.com.tw]: Q. per second
PageTop[xxx.com.tw]: <h1>xxx.com.tw</h1>
  <table>
  <tr><td>位  置:</td><td>….</td></tr>
  <tr><td>負 責 人:</td><td>….</td></tr>
  <tr><td>電話:</td><td>….</td></tr>
  </table>
# ..後略

   搭配 mrtg 及 dns-flow,我們可以定一個更完整的排程,以讓 mrtg 產生正確的流量資料:
   # crontab job
   */5 * * * * /usr/local/bin/mrtg /use/local/etc/mrtg.cfg


如果一切設定皆無問題,您即可以 Broswer 連到 mrtg 網頁查看,
而若您意欲於圖上顯示多條不同線形資料(如:Success/Recursion..等六類),
則您可參考 rrdtools(http://www.rrdtool.org) 之用法,
於 mrtg 的網站上可以找到資料或相關連結。


那如果 Nameserver 有多部怎麼辨 ~~這種問題用類似 FTP 的方法解決就可以了
如果你有做研究的打算, 你還可以試試 A/NS/MX/...等不同 RR 的流量統計
或是將 TTL 值做一個變化,藉以觀察 TTL 值對 DNS 查詢量的影響
你會發現 TTL 值設多少對你的網路有一個最佳解

補允一下, bind 的 source code 中附了一個工具
bind-9.2.2/contrib/queryperf
你可以拿這個工具去測你的機器上跑 DNS 的效率
我用 PIII-450/128RAM ,BIND 9.2.2 , 大概可以到 500 Q/s
而且在流量上就可以顥示出來了

35
雜七雜八 / 算數題
« 於: 2003-07-01 23:49 »
偷閒一下
算了一下文章數 (用 Excel)
引用
目前總共發表了 64105 篇文章

和所有的版本的文章數加起來 62447 有一點點的差距...
這是好奇這是什麼原因呢 ? phpBB 計數的問題嗎 ?
還是有什麼版面是沒有顯現的呢 ?

36
系統安全討論版 / Sendmail Advisory
« 於: 2003-07-01 13:54 »
sendmail 的 問題
http://www.cert.org/advisories/CA-2003-12.html

sendmail 的 exploit code
http://www.securityfocus.com/bid/6991/exploit/

奇怪, 我怎麼沒收到 CERT/CC 的 Advirsory.....
是收到 Snort 的 Rule Update 通知才知道這件事...

snort 的 rule
alert tcp $EXTERNAL_NET any -> $SMTP_SERVERS 25 (msg:"SMTP Content-Transfer-Encoding overflow attempt"; flow:to_server,established; content:"Content-Transfer-Encoding\:"; byte_test:1,<,256,100,relative; content:!"|0a|"; within:100; reference:cve,CAN-2003-0161; reference:url,www.cert.org/advisories/CA-2003-12.html; classtype:attempted-admin; sid:2183; rev:1;)

注意哦 ~~是 gain root 哦

37
原來文章我貼在一大篇的後面,我想可能很多人沒有注意到
所以把他拉出來獨立寫成一篇,不過有些雜亂,
不過這本來就是工程師的本性不是嗎  :D

代碼: [選擇]
# file /etc/procmailrc
# 前面這幾個變數很重要尤其是 USER/HOME 等這些系統預設
# INCLUDERC 也是一個重要的用法,只是這裏我沒有列出來
# 我記得 man procmail 裏面有寫
# log 在初學時是一定要開的,並且也可以用 mailstat 來看到統計

# 以下的這些變數 man procmailrc 會說明的更多更詳細
PATH=$PATH
SHELL=/bin/sh
MAILDIR=/var/spool/mail

#表示要開啟 procmail 的記錄
VERBOSE=yes
SENDMAIL=/usr/sbin/sendmail

#Log 到什麼檔案
LOGFILE=/home1/MAIL/procmail.log

#收件人的 home 目錄
#如果這封信是寄給 abelyang, 那他的 $HOME 就是 /home/abelyang
USER=$HOME

#收件人, ${USER##*/}  結果就 abelyang, man bash
USER=`echo ${USER##*/}@xxx.net.tw`

#主旨 , 但主指可能編碼過 (qp or mine), 請看最後的一隻 perl 程式,幫你
#解碼,同樣的事也可使用 mmencode 做到
#formail 的用法請 man 就有夠看了, formail -zxMAIL_HEAD_FIELD 可以取出
#MAIL HEADER 的欄位意義
SUBJ=`formail -zxSubject: `

# ppp <ppp@ppp.com.tw> paser to ppp@ppp.com.tw
# 如果你要什麼 Return-Path 或其他的參考 formail
# 至於 ${FROM##*<} 這種變數的 paser 你 man bash
#或參考一些 Shell Script 講變數控制的章節
FROM=`formail -zxFrom:`
FROM=`echo ${FROM##*<}`
FROM=`echo ${FROM%%>}`

# sed 用法請自己去查,這段主要在取出多個收件者
# 如果這封信給 a b c 三個人,在 to 的地方是寫成 a,b,c
# tr 在於將 ',' 換成斷行 , sed 在於取出 abelyang <abelyang@xxx.net.tw>
# 中的 <abelyang@xxx.net.tw> 的值,要先斷行的原因則是在於 sed 的處理需要
TO=`formail -zxTo:|tr ',' '\n'| sed 's/\(.*\) \(.*\)/\2/'`

# 定義另存新檔的檔名, .eml 是 outlook 用的附檔名
FILE=/home1/MAIL/mail-`echo $FROM-$SUBJ| sed -e s/' '/''/g`-`date +%Y%m%d-%H:%I:%S`.eml

# 只要收到 mail 就直接先另存新檔, chown 是為了 Apache 處理用
tmp=`formail > $FILE;chown apache.apache $FILE`

#這段較容易誤判...抓 Attach file 的檔案名稱
attach=` formail -i "" | grep -i 'Name=' | cut -f 2 -d'=' | tail -1`

# 以上的處理,重點在於對 procmail 的環境變數的了解, 及 formail 的應用是不是看懂了
# 所以我們有了 寄件人(FROM)/收件人(TO)/實際收件人才(USER)/主旨(SUBJ)/附件(attach)
# 這封信的備份(FILE)
#-------------------------------------------------------

#很多了不了解 H B 或其他如 w h b f ..等棋標的意義, 可以 man procmailrc , 每一項都有
#解釋, 僅就我用到的做一些解釋好了
# H Header 信件的表頭段
# B Body 信件的本文段
#   這裏用 HB 是因為 attachment 的資訊有時會在 header, 有時會在 body 內
#   大寫 HB 和小寫 hb 其實是差不多的,只不過大寫用 egrep 處理而以
# f Filter 是一個很重要的用法,做二次處理用,這裏的義意在於符合這個過慮條件的
#   要有兩個處理動作(看 exitcode),一個放資料庫, 一個放 crash
# w Wait 的意思,要等 那一段( script) 處理完後才可以做存到 crash 的動作
# h Header    ,參考 H

# 如果你要檔一封就告訴 User 說你被檔了....那你的信對 User 來說只是增加
# 困擾而以,所以這種作法個人覺得是不夠實際的,應該是一個 Summary 的 report


:0 HB
* ^.*Content-Type:.*
# 夾帶附件名稱 ,這裏沒有換行
* ^.*[nN]ame=.*\.(wav|pif|bat|vbs|js|exe|com|hta|dll|scr|js|asd|chm| lnk|nws|ocx|reg|shb|shs|vb|vbe|ws[cfh]|EXE|PIF|BAT|VBS|JS|COM|HTA|SCR|JS|ASD|CHM|LNK|NWS|OCX|RE|G|SHB|SHS|VB|VBE|WS[CFH])
# 寄件人不為 apache, 因為我的 Web 是用 apache 的身份在跑的,
# 沒有這一條取回原信時又被檔了
* ! ^From: apache.*
{
# fwh 下的 command 沒有斷行
# 句尾沒有 \ 的就是沒有換行哦,每一行要用 \ 接起來讓它成為一個 command
# 一定要加 \ , 不然就寫成一行, 切記 !!
# email = TO 的值 <abelyang@xxx.net.tw> 要去掉 '<' '>' 符號
# delete 那一行的目的在於這封信寄給一個 group 時 (aliases) , 這個 group
# 如果有 10 個人,沒有經過這個時間值 500 (五分鐘,用 DB 的 data type 有關)
# 的判斷,你會存了 100 (10^2) 筆(每人十筆)記錄在資料庫
# 原因和 procmail 的運作有關,你可自身去體會囉
:0 fwh
|( for email in $TO;\
   do \
    email=`echo ${email##*<}`;\
    email=`echo ${email%%>}`;\
    echo "delete from SPAM where MAIL_FROM='$FROM' and SUBJ='$SUBJ' and USERNAME ='$USER' and CREATE_TIME+500>now()"|mysql procmail -u username;\
    echo "INSERT IN TO SPAM(MAIL_FROM, RCPT_TO,SUBJ, FILE_NAME,USERNAME, MAIL_TYPE ) VALUES('$FROM','$email','$SUBJ','$FILE','$USER',2)"| mysql -u username procmail ;\
   done );
# 無條件存入 crash ...雖然我的 rule 很多,但沒有一條是存入 /dev/null 的
:0
/var/spool/mail/crash
}





DB 的內容:
代碼: [選擇]
CREATE TABLE SPAM (
SN int(20) NOT NULL auto_increment,
MAIL_FROM varchar(255) default NULL, --寄件人
RCPT_TO varchar(255) default NULL, --收件人, 可能是 aliases
SUBJ varchar(255) default NULL, --主旨
FILE_NAME varchar(255) NOT NULL default '',--這封信另存新檔的名稱
CREATE_TIME timestamp(14) NOT NULL, --收件時間,為 yyyymmddhhiiss
MAIL_TYPE tinyint(2) default '1', --是廣告信還是附件為危險檔案
USERNAME varchar(64) NOT NULL default '',--實際收件人
PRIMARY KEY (SN)
) TYPE=MyISAM;




如果你怕在 /home1/MAIL 的檔案太多可以用 crontab 去刪掉過期的(例:三天)如:
代碼: [選擇]
00 1,13 * * 3,4,5,6 find /home1/MAIL -atime +3 -exec rm -f {} \;

好了,信可以另存新檔,也可統一進垃圾桶,並有一份清單存到資料庫 ~~
這時候你就可以寫一個寄信程式 (shell,php,perl...),去查資料庫,
並將每天的檔件 Summary Report 寄給 USER 看,並在 Mail 中讓他以CGI 的
方式取回信件,我個人是用 php 寫的,在 mail 中以 html 程現 report
並以 GET 的方式連結
代碼: [選擇]
http://webmail.xxx.net.tw/action.php?to=".urlencode($RCPT_TO)."&subject=".urlencode($SUBJ)
就可以取回信了
這裏有一點你要特別注意的就是不要直接 用像 cat $FILE| sendmail -oi -t $USER 這種方式
因為有些病毒可能會直接在 MUA 上發作,而是將這封信 Attachment , 並附上一段警語
可能較恰當


為了這些東西我記得當時我看了這些 man page (還有一大堆不相甘的就不列了)
procmail
procmailrc
procmailex
formail

常看到網路上有人在問這個問題~~可是我從來沒有看過人解過,
我是幾乎都看 man page 學的

有人可能想知道中文怎麼檔吧 ~~ 等我有時間再來分享囉
(提示: 善用 :0 fwh 那段就可以了)


解 mail encoding 程式,如果程式名叫做 mail_parser 好了
./mail_parser 編碼過的字串
mail 有兩種編碼方式,一種是 QP , 一種是 Mine64,
因為當初做這個時並不知道有 mmencode 這種指令
 還讓我看了半天的標準 XD

代碼: [選擇]
#!/usr/bin/perl
    $sub=$ARGV[0];
    if ($sub=~ /=\?\S+\?\l(\S)\?/) {
      if ($1 =~ /[Qq]/) {
        $sub=decode_qp($sub);
      }
      elsif ($1 =~ /[Bb]/) {
        $sub=decode_base64($sub);
      }
    }
    elsif ($sub=~ /=[a-fA-F0-9][a-fA-F0-9]/) {
      $sub=decode_qp($sub);
    }
    $subject.=$sub;
print $subject;    
sub decode_qp {
        my($string) = @_;
        @buffer=split(/\?/,$string);
        $string = $buffer[3] if ($buffer[3] ne "");
        $string =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge;
        $string =~ /\?=(.*)/;
        $string =~ tr/_/ /;
        $buffer[4]=~s/^=//;
        $buffer[0]=~s/=$//;
        $string="$buffer[0]$string$buffer[4]";
        return($string);
}

sub decode_base64 {
        my($string) = @_;
        my($string2);
        @buffer=split(/\?/,$string);
        $string = $buffer[3] if ($buffer[3] ne "");
        $string =~ s/=+$//;
        $string =~ tr|A-Za-z0-9+/| -_|;
        while($string =~ /(.{1,60})/gs) {
                my($string3) = chr(32+length($1)*3/4);
                $string2 .= unpack("u",$string3 . $1 );
        }
        $buffer[4]=~s/^=//;
        $buffer[0]=~s/=$//;
        $string2="$buffer[0]$string2$buffer[4]";
        return($string2);
}

38
雜七雜八 / 流量統計
« 於: 2003-06-30 15:06 »
流量統計 ~~
TWNIC 七月份起將公布 Root Server 及 Whois Server 的流量統計
有興趣的人可以去看看哦 ~ (只公布月及年的部份, 日和星期 Security 的考量)
先賭為快 :




39
拾人牙慧 / [DNS]用 DB 做 DNS 服務
« 於: 2003-06-30 13:32 »
http://www.powerdns.com/downloads/index.php
可以參考看看哦~~用 DB 做的 DNS Server
省去 Zone file 的很多問題, 且用 DB 做可以提供更大的彈性
網域名稱的相關管理更容易了

40
拾人牙慧 / 以 DB 做 帳號的認證
« 於: 2003-06-30 01:16 »
http://www.mysql.com 有提供一個 libnss-mysql,
這個東西讓你可以用 DB 來做帳號的認證
所有的服務幾乎都有包含在內 ( telnet/pop3/imap....)
實際的東西可以到這找
http://libnss-mysql.sourceforge.net/
我個人是覺得很好用~~不過我向來都懶得將這些東西寫成文件
只要知道怎麼找並且看得懂就好了...
用 DB 比用 file 來得好 control 許多 ,
且如果你用 apache 1.x 版的, 可以加掛 mod_mysql_auth,
就可以做到和 .htaccess (Http Auth) 用同一套密碼
也可以將 Radius 整合進去,甚至像我一樣,將 pptpd/pppd (VPN)的 chap-secret
都整合進去 (我有改 source code, 讓他去查 DB 做認證啦,不然它那會呢! 不過差點被
chapms.c 搞死)

那用 apache 2.x 的怎辨,可以到這找
http://search.cpan.org/search?m=all&q=Apache&s=21
用 Perl 做的 Auth mod, 一樣可以讓你查 DB 做認證

自己去體會囉 ~~如何讓那麼多的服務共用一套認證來源
或說, 如何讓那麼多機器的那麼多服務共用一套認證來源....

41
http://rs.twnic.net.tw/DNS92/
TWNIC 的免費 DNS 教育訓練課程....純技術性質
只要擁有 .tw 的域名就可以參加

http://cdns.twnic.net.tw/seminar2003/
主要在於 IP及TEL 的技術探討,其中有很多你沒有接觸過的主題哦
(SIP/Enum/IPv6....)

42
Linux 討論版 / [DNS] 設定檢測
« 於: 2003-06-29 10:43 »
http://www.dnsreport.com/
這裏可以幫你檢測你的 DNS 設定上的問題哦 ~~
我是覺得對一般人應該蠻好用的 ...

43
我想大家第一個連想的可能就是 SNMP , 但是我個人並不喜歡 SNMP
純綷喜好問題, 因為 SNMP 常有 Advisory/Vuln, 就像 ssh 一樣,
雖然近幾個月來都沒有再出現問題了, 但是.....信心問題  :oops:
也不和我說 RPC (NFS) 或 R 族, 還是 samba (smbmount) 的方法, 這些
東西我個人是都不用的....不過如果有人想貢獻給大家也是很好的...

通常, 一般人主機最常使用的莫過於 使用
FTP
Telnet
Mail
HTTP

當然還有其他的,但這些可能是最多人的選擇...
FTP :
   ftp -n ftp_site <<!
   user username   password
   FTP_Command_here
   !
   your_parser_script_here

   Remote 固定產生某個檔案,而 Local 再固定去抓回來處理即可
   (或著你自己要反過來, Remote 送來, 你再處理)

TELNET:
   有人可以告訢我類似的做法嗎 ?

MAIL:
   僅以 Sendmail+Procmail 舉例
#/etc/procmailrc
#Set Var 略
:0 HB
* Subject: Info
# 其他的條件自己訂
|(formail -I "" | sed -e '/^$/d' > /root/log; your_process_script_here);

formail -I "" 表示我只要標題為 Info 的信件的本文段(就是不要 header)
sed 指定在截掉頭尾的空白行
轉存成另一個檔案後再去處理它 (你也可以不轉而用 | (pipe,用 > 或 >> 你自己看時機)
這個和 FTP 的機制其實差不多,只是 Remote 發信來, 你可以馬上 Update

HTTP:
就是用 CGI 囉, 但最好是用 https 的方式
我個人是較徧好 wget 和 curl 的指令

有人知道  telnet 做法嗎 ?
不要告訴我加裝什麼東西,或自己寫程式
這樣太沒有共通性了....

44
以下有部份取自原來我貼在 VBird 的文章
Apache 的 VH 其實設法相當多種,
相信大多數都是這種設法
<VirtualHost 1.2.3.80:80>
ServerAdmin admin@xxx.com.tw
DocumentRoot /home/httpd/html/enum
ServerName VH1.xxx.com.tw
ErrorLog logs/VH1-error.log
CustomLog logs/VH2-access_log common
</VirtualHost>
因為書本上教的,但是你改了這些值, httpd 要重新啟動...
高明點用 rewrite modules: (要有 RE 的基礎)
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.host\.com(.*) /home/$1$2

這樣只要新增 /home 目錄下的目錄就是新增 VirtualHost 了,且 httpd 不需重開
(有很多不同設法, http://httpd.apache.org/docs/misc/rewriteguide.html)

另外一種方法:Mass Virtual Hosting (亦不需要重啟 httpd)
UseCanonicalName on
CustomLog /home/www/access_log "%{VHOST}e %h %l %u %t \"%r\" %>s %b" :
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/etc/vhost.map #路徑自己設
RewriteCond %{REQUEST_URI} !^/commonurl1/.*
RewriteCond %{REQUEST_URI} !^/commonurl2/.*
RewriteCond %{REQUEST_URI} !^/commonurlN/.*
RewriteCond %{HTTP_HOST} !^$
RewriteCond ${lowercase:%{HTTP_HOST}|NONE} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1 [E=VHOST:${lowercase:%{HTTP_HOST}}]

#/etc/vhost.map 檔,加一行並新增對應目錄就是一個 VirtualHost
www1.xxx.com.tw:80 /home/www/www1
www2.xxx.com.tw:80 /home/www/www2
#這個方法也是 rewrite 的一種,且亦不需重新啟動 httpd,但是 httpd.conf 中要
#enable 這兩行 或是 complier 時以 static link 方式編進 httpd core
# rewrite 雖不容易懂,但懂了後就很好用
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c



最後一種方法最簡單:
UseCanonicalName Off
VirtualDocumentRoot /home/www/%0

#%0 就是 HOST_NAME,像 www.xxx.com.tw ,一個目錄就是一個 Virtual,
#詳細用法可以看這裏哦
# http://httpd.apache.org/docs-2.1/mod/mod_vhost_alias.html

%N 的意義
0 the whole name
1 the first part
2 the second part
-1 the last part
-2 the penultimate part
2+ the second and all subsequent parts
-2+ the penultimate and all preceding parts
1+ and -1+ the same as 0

通常若您做網站代管這種業務,目錄都會再依序分層,有學過資料結構和演算法的話,你就知道一個平的目錄,不如一個有深度規畫的目錄來的好:
/home/www/tw/com/xxx/
/home/www/tw/org/yyy/
那就是
VirtualDocumentRoot /home/www/....你自己去實驗了哦...


以上是 VH 的設定法,我們假設 IP 為 1.2.3.80, 那我們再來看看 dns 的部份

$TTL 3600
$ORIGIN xxx.com.tw.
@ IN SOA dummy.xxx.com.tw. admin.xxx.com.tw. (
    1 38400 3600 864000 86400)
      IN  NS   ns1
      IN  NS   ns2
      IN MX 10 mail
ns1 IN   A  1.2.3.4
ns2 IN   A  1.2.3.5
mail IN  A  1.2.3.4
www IN A  1.2.3.80  
; 以上都是一般的設定狀況...最後再加一筆
*     IN  A  1.2.3.80

這樣的 zone file 的內容,只要是查 除了 ns1/ns2/mail/www 外,
查 a.xxx.com.tw 或 xxxxxxxxxx.xxx.com.tw 得到的結果都是
1.2.3.80, 這也是大家習慣的萬用字元的用法

我們依據以下設法(httpd.conf):
UseCanonicalName Off
VirtualDocumentRoot /home/www/%0

在 /home/www/  之下, 你每建一個 ???.xxx.com.tw 的目錄
(不含巳指明且不同 IP 的),就是建立一個 虛擬主機哦
EZ 吧 ~~我自己幾乎都是用這樣的做法,至少較最多人用的方法
都簡單許多哦

姨~什麼時候變 "榮譽博士" ?
好~改天再來貼一點獨門絶活
( :P 哈 一定不是獨門....但是都是自己 study 來的)

45
酷!學園 精華區 / syslogd server 做法 (教學)
« 於: 2003-06-18 23:54 »
我想有些人可能都管著數部的 Unix-Like 的機器吧
我自己為例,要 handle 的機器至少超過 30 部,其中以
Linux 為主,但是也有 Sun/IRIX/FreeBSD,所以一些
日常的 Log 簡直非人力所能及...(至少總合超過 1G/天)
更何況其分佈那麼廣...

所以,在做 log 的分析前,首先要考慮的是如何集中這些 log
詳細的作法你可以 man syslogd 或 man syslogd.conf
我是只看這兩個就學會了,多花點時間看 man page 很多東西都
比書本上詳細許多哦 ~~

先講 server 的部份吧 ~~
很簡單
syslogd -r 就可以啟動了,但是建議你 syslogd.conf 還是 調一下較好
因為如果你的機器一多, messages 這個檔案會大很快做一些簡單的分類即可
亦請記得替 /etc/rc.d/init.d/syslogd 這個 script 中的 syslogd 加上
以免下次開機失效

#/etc/syslogd.conf
# kern 的訊息要顯示在 terminal tty1 上就是這一台機器
kern.*                                                  /dev/tty1
#kern 也要存起來
kern.*                                                  /var/log/kernel
#下message 你自己看調不調吧,我是沒有調,但我覺得還是調一下較好
*.info;mail.none;news.none;authpriv.none;cron.none      /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  /var/log/maillog
cron.*                                                  /var/log/cron
#同 kernel 處
*.emerg                                                 /dev/tty1
*.emerg                                                 /var/log/critical
*.crit                                                  /dev/tty1
*.crit                                                  /var/log/critical
#localN 在 linux 上很多沒有用,但是在其他的unix平台上有的服務會用到
local1.*                                                /var/log/local1
local2.*                                                /var/log/local2
local3.*                                                /var/log/local3
local4.*                                                /var/log/local4
local5.*                                                /var/log/local5
local6.*                                                /var/log/local6
local7.*                                                /var/log/local7        

其實就算你不改也沒有關係,看你自己的需求了

syslogd 的 client 端
#/etc/syslogd.conf
# 你原來的設定
*.info;mail.none;authpriv.none;cron.none        /var/log/messages
改成
*.info;mail.none;authpriv.none;cron.none        @log_server_ip

其他項目請自行參照
重新啟動就會生效了
請注意, syslogd 預設是走 514/udp 的 port , firewall 處請自行對應



log 的樣子,比原來的樣子多了一個 hostname
Jun 18 23:36:58 host1 named[2882]: client 140.127.183.160#2139: update forwarding denied
Jun 18 23:36:58 host1 named[2882]: client 218.162.43.119#4109: update forwarding denied
Jun 18 23:39:48 host2 Snort Realtime Performance (Wed Jun 18 23:39:48 2003)
Jun 18 23:39:48 host2 Protocol Byte Flows - %Total Flow
Jun 18 23:39:48 host2 PacketLen - %TotalPackets
Jun 18 23:37:05 host3 named[11739]: client 210.66.152.116#61972: updating zone 'himark.com.tw/IN': update failed: 'RRset exists (value dependent)' prerequisite not satisfied (NXRRSET)    

好了, log 集中了你就可以開始分析的工作了, 還可以避免原機器入侵後給你刪除syslog
的困擾...(很多 wrom 是直接 rm -f /var/log/ 的),分析的工具你可以到
http://www.securityfocus.com/tools/category/1
多的讓你試不完 ...一切看你的需求而定
了 ?

頁: 1 [2]