前幾天,學生開始反應 WebMail 非常難連上,用 TOP 看了一下,處理程序大多都是 http 的連線
系統 idle 大部份都是 0% ~ 5%,顯然系統一直忙著處理 HTTP 的東西
再去看一下 HTTP 的 Log,天啊,系統上某個 URL 一直被大量的存取,原來是位學生放了首 MP3
一開始本懷疑是學生將檔案放在一個很「熱門」的網站,但因為「存取」的實在太過頻繁,可說是一種變相的 DoS 了
反查了一下 IP ,大部份都是來自同一個國家 ... ( 第一天,終於確定了系統為何 Loading 突然暴增 )
雖然在網路進出口放置了一台 IDP,但似乎不見它有何阻擋的行為,這還得與廠商討論此種連線是否為 DoS
為了解決這棘手的問題,我決定用最原始的方法,因確定所有連線都來自某個國家,所以初步的構想就是「擋住來自某個國家所有要求的連線」
首先連上此網站:http://trace.twnic.net.tw/ipstats/ ,此網站可以查看各國家 IP 分配之情形
接下來就要開始動一些手腳了,假設我要阻擋來自臺灣所有 IP 的連線,先點選臺灣後應該會看到下面這資訊
以第1項 58.86.0.0 可用的 IP 為 65536 來說,大概可以知道此網段為 58.86.0.0/16,只是有 420 項要算也要算很久,因此我用了一個小程式
首先在上述頁面按下 Ctrl + A 全選所有資料,複製到記事本後,刪掉前面幾行中文說明,僅保留 IP 相關資訊
並利用 Ctrl + H 取代的功能,把它變成這樣
1 58.86.0.0 65536 apnic 20050411
2 58.99.0.0 16384 apnic 20050429
..... (中間略 ) ....
420 222.251.0.0 32768 apnic 20040525
看出來了嗎?原本的各欄位都用一個空白做區隔,把它存成一個 denyip.txt 即可,接下來執行一個簡單的 PHP 程式,把它和文字檔放在一起執行
<?php
$fcontents = file ('denyip.txt');
while (list ($line_num, $line) = each ($fcontents)) {
$data = explode (" ", htmlspecialchars($line));
$a = 32 - log($data[2],2);
echo $data[1] . '/' . $a . '<br>';
}
?>
而我就只是做到這裡,把產生出來的資料鍵入至防火牆後,設定一下規則就好了,若想在 Apache 阻擋的話,程式再做一點修改就好了
用逆向思考的方式,改成僅要開放讓哪些人連就好,這也是一個方法,但就見人見智了
留言列表