酷!學園

站務相關 => Study-Area 公開討論版 => 主題作者是: netman 於 2002-11-28 16:14

主題: 關於砍站
作者: netman2002-11-28 16:14
由於目前的 phorum 與 www 都放在同一台較慢的機器上(Pentium Pro 200),負載能力備受考驗。今天曾因 "砍站" 行為而兩度中斷服務。

有鑑於此,在硬體設備改善之前,本站開始每 5 分鍾檢查 http 連線一次,若同一 IP 之連線數目超過 16 ,則被禁止連線,然後每 1 小時清一次舊記錄。

若您的連線不幸被擋掉,請於一小時後再嘗試,並確保連線數目不會太高。諸所不便,敬請原諒。

特此公告。謝謝!
主題: Re: 關於砍站
作者: CKS2002-11-28 17:01
引述: "netman"
若同一 IP 之連線數目超過 16 ,則被禁止連線,然後每 1 小時清一次舊記錄。

請問此IP所指為何?16是指開十六個瀏覽器嗎?
主題: 關於砍站
作者: VBird2002-11-28 17:02
原來學園也為此所苦吶!
為了大家的閱讀環境與網路傳輸品質,
希望大家不要再砍站了!
否則權益受損的將會是砍站者!
主題: 關於砍站
作者: CKS2002-11-28 17:08
引述: "VBird"
原來學園也為此所苦吶!
為了大家的閱讀環境與網路傳輸品質,
希望大家不要再砍站了!
否則權益受損的將會是砍站者!

何謂「砍站」?
主題: 關於砍站
作者: VBird2002-11-28 17:34
就是使用類似多點連續下載軟體將整個網站的資料下載到自己電腦中的行為!
著名的有 telport, getright 等等!
這種砍站的行為,由於會產生很多的封包連線要求,所以造成 CPU 的負荷!
可以查看一下程序及 CPU loading 即可瞭解!
主題: 關於砍站
作者: CKS2002-11-28 18:31
引述: "VBird"
就是使用類似多點連續下載軟體將整個網站的資料下載到自己電腦中的行為!
著名的有 telport, getright 等等!
這種砍站的行為,由於會產生很多的封包連線要求,所以造成 CPU 的負荷!
可以查看一下程序及 CPU loading 即可瞭解!

瞭解了,謝謝!
主題: 關於砍站
作者: damon2002-11-28 20:00
可否考慮提供離線閱讀網頁內容的壓縮檔?這樣可以減少一些線上閱讀的流量與loading ?
有人要抓網頁內容離線閱讀的話也比較不會像現在這樣造成大家的不便
主題: 關於砍站
作者: duncanlo2002-11-28 23:52
phpbb上的newsgroup gateway!
用nntp可read可post(中文ok),
缺點是文章直接可以整個dump回去...
主題: 關於砍站
作者: netman2002-11-29 02:58
引述: "damon"
可否考慮提供離線閱讀網頁內容的壓縮檔?這樣可以減少一些線上閱讀的流量與loading ?
有人要抓網頁內容離線閱讀的話也比較不會像現在這樣造成大家的不便


若是事先來信問我要,我會用 tar 包好,然後請對方來 download 。
但,要是不管三七二十一就來砍站,真不是很喜歡。
之前 loading 不重還好,但自從將 phorum 搬過來自後,
就實在吃不消....

想看今天慘況嗎:
(http://study-area.ks.edu.tw/images/www.study-area.org_cpu-day.png)

為此,我寫了一個 script 來擋,
有需要的朋友可參考:
代碼: [選擇]
#!/bin/bash

HTTP_LIST=/root/http.list
HTTP_LIST_TMP=/root/http.list.tmp
CONN_NU=24

for i in $(cat $HTTP_LIST); do
        /sbin/iptables -D INPUT -p TCP --dport 80 -s $i -j DROP 2>/dev/null
done

cat /dev/null > $HTTP_LIST

# block http
netstat -na | grep ':80' | awk '{print $5}' | cut -d: -f1 \
        | sort | sed '/0.0.0.0/d' > $HTTP_LIST_TMP
for i in $(cat $HTTP_LIST_TMP | uniq); do
        if [ $(cat $HTTP_LIST_TMP | grep $i | wc -l) -gt $CONN_NU ]; then
                echo $i >> $HTTP_LIST
        fi
done
for i in $(cat $HTTP_LIST); do
        /sbin/iptables -I INPUT -p TCP --dport 80 -s $i -j DROP
done


然後,我寫個 crontab ,讓它每兩分鍾跑一次。
這樣,我也不必再管它是否每一小時清舊規則了(與前面公佈的規則有所改良):
要修改連線的限制數目,就修改 CONN_NU 變數,
若是偶發性的超過限制,只要不在 script running 被抓到,那是 okay 的,
就算被誤抓,最多兩分鍾就可解除(用 -D 從舊 list 中移除)。
但若是砍站,應該會為持好一陣子的 high rate connection ,
那就每次 script running 都會被擋...
若想調整 running 時間間隔,那就改 crontab 就好。

若大家有更好的設計,歡迎分享。
主題: 關於砍站
作者: duncanlo2002-11-29 23:10
有個小問題,
有程式可以把phpBB內容整個mirror回去嗎?
主題: 關於砍站
作者: netman2002-11-29 23:24
引述: "duncanlo"
有個小問題,
有程式可以把phpBB內容整個mirror回去嗎?


您是指砍站還是指檔案同步?

若是後者,用 rsync 軟體吧。若是前者,我就不知道了,
但是在 loading 最重的時侯,我發現 cpu 都給 httpd 與 mysqld 吃光了!我猜是砍站軟體不夠 smart 所至吧?
主題: Re: 關於砍站
作者: paulso2002-11-29 23:45
引述: "netman"
由於目前的 phorum 與 www 都放在同一台較慢的機器上(Pentium Pro 200),負載能力備受考驗。


怪不得有時連線上來那麼慢。
主題: Re: 關於砍站
作者: 逸晨2002-11-30 09:16
引述: "paulso"
引述: "netman"
由於目前的 phorum 與 www 都放在同一台較慢的機器上(Pentium Pro 200),負載能力備受考驗。


怪不得有時連線上來那麼慢。

非但慢,我這兒還慢到連逾時哩 @@
害得粉想拿起電話打到中華電信去罵一罵
因為以為又是中華搞的烏龍  :oops:
幸好沒打,不然這隻烏龍就要自己吃了  :wink:
主題: Re: 關於砍站
作者: paulso2002-11-30 09:52
引述: "逸晨"
引述: "paulso"
引述: "netman"
由於目前的 phorum 與 www 都放在同一台較慢的機器上(Pentium Pro 200),負載能力備受考驗。


怪不得有時連線上來那麼慢。

非但慢,我這兒還慢到連逾時哩 @@
害得粉想拿起電話打到中華電信去罵一罵
因為以為又是中華搞的烏龍  :oops:
幸好沒打,不然這隻烏龍就要自己吃了  :wink:


我也試過Time out@@
主題: 關於砍站
作者: netman2002-12-01 23:32
Okay,我作了一些修改,主要增加了  cpu loading 的檢測,
若是低於 85% ,則不作攔阻。

新版如下:
代碼: [選擇]
#!/bin/bash
# Purpose: to block httpd connection
# Author: netman(netman@study-area.org)
# Lisence: GPL
# Date: 2002/12/01
# Version: 0.91

#-- change log --#
# Version 0.90
#       * Script created
# Version 0.91
#       1) add test for size of list file
#       2) add test for cpu loading
#

HTTP_LIST=/root/http.list
HTTP_LIST_TMP=${HTTP_LIST}.tmp
CONN_NU=16

#-- remove old rules --#
if [ -s $HTTP_LIST ]; then
        for i in $(cat $HTTP_LIST); do
          /sbin/iptables -D INPUT -p TCP --dport 80 -s $i -j DROP 2>/dev/null
        done
        #-- clean up list --#
        cat /dev/null > $HTTP_LIST
fi

#-- block http if loading is greater than 85 persent --#
if [ "$(/usr/bin/sar -u 1 3 | tail -1 | awk '{print $5}' \
        | sed 's/\..*$//')" -gt "85" ]; then
        netstat -na | grep ':80' | awk '{print $5}' | cut -d: -f1 \
                | sort | sed '/0.0.0.0/d' > $HTTP_LIST_TMP
        for i in $(cat $HTTP_LIST_TMP | uniq); do
          if [ $(cat $HTTP_LIST_TMP | grep $i | wc -l) -gt $CONN_NU ]; then
                echo $i >> $HTTP_LIST
          fi
        done
        for i in $(cat $HTTP_LIST); do
                /sbin/iptables -I INPUT -p TCP --dport 80 -s $i -j DROP
        done
fi
exit 0
主題: 關於砍站
作者: saga2002-12-01 23:56
砍站當然不好啦。
可是硬體如果更新的話大家用起來可能就會更快啦。
也許可以來個徵硬體更新的活動  :p

--------
如果有的話,我就捐個 D600 。
主題: 關於砍站
作者: netman2002-12-02 00:03
引述: "saga"
砍站當然不好啦。
可是硬體如果更新的話大家用起來可能就會更快啦。
也許可以來個徵硬體更新的活動  :p

--------
如果有的話,我就捐個 D600 。


謝謝!

由於當前主機所在機房為縣網中心,不是我們想更新硬題就更新的,限制很多,公文流程繁瑣...  :(

當然,我會嘗試申請看看的...  ^_^
無論如何,還是非常感謝您的建議!
主題: 關於砍站
作者: netman2002-12-02 13:15
嗯~~~ 發現開得太鬆的話,還是遭殃...  :(
因此,再補上一些檢測及限制:

代碼: [選擇]
#!/bin/bash
# Purpose: to block httpd connection
# Author: netman(netman@study-area.org)
# Lisence: GPL
# Date: 2002/12/02
# Version: 0.92

#-- change log --#
# Version 0.90
#       * Script created
# Version 0.91
#       1) add test for size of list file
#       2) add test for cpu loading
# Version 0.92
#       1) separate cpu loading test into system and user
#       2) add test for httpd connection number

LIMIT_CNU=24
CL_S=10
CL_U=75
HC_N=300
HC_U=30
HTTP_LIST=/root/http.list
HTTP_LIST_TMP=${HTTP_LIST}.tmp
netstat -na | grep ':80' | awk '{print $5}' | cut -d: -f1 \
        | sort | sed '/0.0.0.0/d' > $HTTP_LIST_TMP
cpuload=$(/usr/bin/sar -u 1 3 | tail -1 | awk '{print $3":"$5}')
cpuusr=$(echo ${cpuload%:*} | sed 's/\..*$//')
cpusys=$(echo ${cpuload#*:} | sed 's/\..*$//')
http_cn=$(/bin/netstat -na | grep ':80' | wc -l)
http_un=$(cat $HTTP_LIST_TMP | uniq | wc -l)
#echo    "       limit   current"
#echo    "CL_U:  $CL_U   $cpuusr"
#echo    "CL_S:  $CL_S   $cpusys"
#echo    "HC_N:  $HC_N   $http_cn"
#echo    "HC_U:  $HC_U   $http_un"

#-- remove old rules --#
if [ -s $HTTP_LIST ]; then
        for i in $(cat $HTTP_LIST); do
          /sbin/iptables -D INPUT -p TCP --dport 80 -s $i -j DROP 2>/dev/null
        done
        #-- clean up list --#
        cat /dev/null > $HTTP_LIST
fi

#-- block http if loading reach the limis --#
if [ "$cpusys" -gt "$CL_S" -o "$cpuusr" -gt "$CL_U" -o \
        "$http_cn" -gt "$HC_N" -o "$http_un" -gt "$HC_U" ]
then
        for i in $(cat $HTTP_LIST_TMP | uniq); do
          if [ $(cat $HTTP_LIST_TMP | grep $i | wc -l) -gt $LIMIT_CNU ]; then
                echo $i >> $HTTP_LIST
          fi
        done
        for i in $(cat $HTTP_LIST); do
                /sbin/iptables -I INPUT -p TCP --dport 80 -s $i -j DROP
        done
fi
exit 0
主題: 關於砍站
作者: CKS2002-12-02 13:30
netman,辛苦您了,謝謝!

早上連了好久,都連不上,等等等、、、
想了好久:一定又是砍站,打電話給您,關機,不通。又打給梁楓,也是一樣。
後來上網時,首先看到VBird,是他修復的嗎?
可否建立聯絡管道,以便迅速解決此類問題?
主題: Re: 關於砍站
作者: CKS2002-12-02 13:39
引述: "netman"
由於目前的 phorum 與 www 都放在同一台較慢的機器上(Pentium Pro 200),負載能力備受考驗。今天曾因 "砍站" 行為而兩度中斷服務。

若是將www 搬移到另外一個地方,會不會比較容易處理?
主題: 關於砍站
作者: netman2002-12-03 15:01
今天再次改良了 script,目前是,只要在如下條件之一:

然後就會抓出當時超過 24 個 connection 的主機,
再將之 block 掉。

我是用 crontab 每 2 分鍾跑,每次抓一次清單,
然後保持 5 份記錄,若您的 IP 出現其中 3 次,才會擋...
(通常是那些"頑強"的砍站者)
當然,您要是本站"忠實"擁躉(每次連線超多且每抓必中)、同時使用固定 IP 的話,那可以來信告訴我,將您的 IP 加入豁免清單中。
遺憾的是:若透過 isp proxy 而導致誤判,我目前還沒良策.... 希望大家能提供機制。謝謝!

最新版本的 script (v0.93),其內容如下:
代碼: [選擇]
#!/bin/bash
# Purpose: to block httpd connection
# Author: netman(netman@study-area.org)
# Lisence: GPL
# Date: 2002/12/03
# Version: 0.93

#-- change log --#
# Version 0.90
#       * Script created
# Version 0.91
#       1) add test for size of list file
#       2) add test for cpu loading
# Version 0.92
#       1) separate cpu loading test into system and user
#       2) add test for httpd connection number
# Version 0.93
#       1) change to block frequently existed list
#       2) add excepted list

FREQ_NU=3
LIMIT_CNU=24
CL_S=10
CL_U=75
HC_N=300
HC_U=30
HTTP_LIST=/root/http.list
HTTP_LIST_OLD=${HTTP_LIST}.old
HTTP_LIST_TMP=${HTTP_LIST}.tmp
FREQ_LIST=${HTTP_LIST}.freq
EXCP_LIST=${HTTP_LIST}.excp
netstat -na | grep ':80' | awk '{print $5}' | cut -d: -f1 \
        | sort | sed '/0.0.0.0/d' > $HTTP_LIST_TMP
cpuload=$(/usr/bin/sar -u 1 3 | tail -1 | awk '{print $3":"$5}')
cpuusr=$(echo ${cpuload%:*} | sed 's/\..*$//')
cpusys=$(echo ${cpuload#*:} | sed 's/\..*$//')
http_cn=$(/bin/netstat -na | grep ':80' | wc -l | awk '{print $1}')
http_un=$(cat $HTTP_LIST_TMP | uniq | wc -l | awk '{print $1}')
echo    "       limit   current"
echo    "CL_U:  $CL_U   $cpuusr"
echo    "CL_S:  $CL_S   $cpusys"
echo    "HC_N:  $HC_N   $http_cn"
echo    "HC_U:  $HC_U   $http_un"

#-- remove old rules --#
if [ -s $HTTP_LIST -o -s $FREQ_LIST ]; then
        for i in $(cat $FREQ_LIST); do
          /sbin/iptables -D INPUT -p TCP --dport 80 -s $i -j DROP 2>/dev/null
        done
        #-- update lists --#
        mv ${HTTP_LIST}.4 ${HTTP_LIST}.5
        mv ${HTTP_LIST}.3 ${HTTP_LIST}.4
        mv ${HTTP_LIST}.2 ${HTTP_LIST}.3
        mv ${HTTP_LIST}.1 ${HTTP_LIST}.2
        mv ${HTTP_LIST}  ${HTTP_LIST}.1
        touch $HTTP_LIST
        cat /dev/null > $FREQ_LIST
fi

#-- block http if limits are reached --#
if [ "$cpusys" -gt "$CL_S" -o "$cpuusr" -gt "$CL_U" -o \
        "$http_cn" -gt "$HC_N" -o "$http_un" -gt "$HC_U" ]
then
        #-- collect high rate connection --#
        for i in $(cat $HTTP_LIST_TMP | uniq); do
          if [ $(cat $HTTP_LIST_TMP | grep $i | wc -l) -gt $LIMIT_CNU ]; then
                echo $i >> $HTTP_LIST
          fi
        done
        #-- block frequent list --#
        for i in $(cat ${HTTP_LIST}.[1-5] | sort | uniq); do
          if [ $(cat ${HTTP_LIST}.[1-5] | grep $i | wc -l) -gt $FREQ_NU ]; then
                echo $i >> $FREQ_LIST
          fi
        done
        #-- make exception --#
        if [ -s $EXCP_LIST ]; then
                cat /dev/null > $HTTP_LIST_TMP
                for i in $(cat $EXCP_LIST); do
                  grep -v $i $FREQ_LIST >> $HTTP_LIST_TMP
                  mv $HTTP_LIST_TMP $FREQ_LIST
                done
        fi
        #-- start blocking --#
        for i in $(cat $FREQ_LIST); do
                /sbin/iptables -I INPUT -p TCP --dport 80 -s $i -j DROP
        done
fi
exit 0
主題: 關於砍站
作者: dou2002-12-03 18:38
anyway... 其實在 iptables1.2.7a 的 patch-o-matic 裡.
有一個  ip-limit 的 patch.

做的事情是一樣的...
他可以限制單一 IP 連線不得超過 多少個.
或是 Class C, .. 不能超過多少個連線...

但有個限制, 只能限制 tcp connections.  :o

http://www.netfilter.org/documentation/pomlist/pom-base.html#iplimit
主題: 關於砍站
作者: netman2002-12-04 18:06
多謝 dou 兄的資訊!

不過,我目前還不需要 implement patch-o-matic ,
但您得提議給了我一個很好的 idea :
也就是將 DROP 改成 limit ,
然後再將 limit 清單抓出來,彷照連線清單再將出現次數高的連線 DROP 掉。至於 DROP 規則的移除,將由其它 script 來定期清除...

今天晚上下課後我再來改,到時再將新版 post 給大家參考。
主題: 關於砍站
作者: netman2002-12-05 16:34
Okay,今天再改良一下,主要是引入了 limit 機制。
當前的設計概念如下:


曾有網友建議用 cbq 來限制,不過由於實作上我並沒把握,或許可考慮在將來的版本提供。

當前的版本 v0.94 ,其內容如下:
代碼: [選擇]
#!/bin/bash
# Purpose: to block httpd connection
# Author: netman(netman@study-area.org)
# Lisence: GPL
# Date: 2002/12/05
# Version: 0.94

#-- change log --#
# Version 0.90
#       * Script created
# Version 0.91
#       1) add test for size of list file
#       2) add test for cpu loading
# Version 0.92
#       1) separate cpu loading test into system and user
#       2) add test for httpd connection number
# Version 0.93
#       1) change to block frequently existed list
#       2) add excepted list
# Version 0.94
#       1) remove list-file size testing which was added in v0.91
#       2) change iptables' rule from DROP to limit
#       3) create drop list for most limited connections

LIMIT_CNU=24    # max number of conncetion allowed at the time
LIMIT_NU=3      # max number of time allowed in the source list
DROP_NU=3       # max number of time allowed in the limit list
CL_S=10         # CPU loading for system
CL_U=75         # CPU loading for user
HC_N=300        # HTTP connection number for session
HC_U=30         # HTTP connection number for source
IPT_LTD=3       # limited number of packet in iptables rules
HTTP_PORT=80    # HTTP port number
HTTP_LIST=/root/http.list
HTTP_LIST_TMP=${HTTP_LIST}.tmp
LIMIT_LIST=${HTTP_LIST}.limit; touch ${HTTP_LIST}.limit
DROP_LIST=${HTTP_LIST}.drop; touch ${HTTP_LIST}.drop
EXCP_LIST=${HTTP_LIST}.excp; touch ${HTTP_LIST}.excp
#-- create source list --#
netstat -na | grep ":$HTTP_PORT" | awk '{print $5}' | cut -d: -f1 \
        | sort | sed '/0.0.0.0/d' > $HTTP_LIST_TMP
cpuload=$(/usr/bin/sar -u 1 3 | tail -1 | awk '{print $3":"$5}')
cpuusr=$(echo ${cpuload%:*} | sed 's/\..*$//')
cpusys=$(echo ${cpuload#*:} | sed 's/\..*$//')
http_cn=$(/bin/netstat -na | grep ":$HTTP_PORT" | wc -l | awk '{print $1}')
http_un=$(cat $HTTP_LIST_TMP | uniq | wc -l | awk '{print $1}')
echo    "       limit   current"
echo    "CL_U:  $CL_U   $cpuusr"
echo    "CL_S:  $CL_S   $cpusys"
echo    "HC_N:  $HC_N   $http_cn"
echo    "HC_U:  $HC_U   $http_un"

#-- remove old limit rules --#
for i in $(cat $LIMIT_LIST); do
        /sbin/iptables -D INPUT -p TCP --dport $HTTP_PORT -s $i \
                -m limit --limit 1/s -j ACCEPT
done
#-- remove old drop rules --#
for i in $(cat $DROP_LIST); do
        /sbin/iptables -D INPUT -p TCP --dport $HTTP_PORT -s $i -j DROP
done
cat /dev/null > $DROP_LIST
#-- update lists --#
for i in $HTTP_LIST $LIMIT_LIST; do
        touch ${i}.1 ${i}.2 ${i}.3 ${i}.4
        mv ${i}.4 ${i}.5
        mv ${i}.3 ${i}.4
        mv ${i}.2 ${i}.3
        mv ${i}.1 ${i}.2
        mv ${i} ${i}.1
        cat ${i}.[1-5] > ${i}.new
        touch $i
done

#-- limiting http connection --#
if [ "$cpusys" -gt "$CL_S" -o "$cpuusr" -gt "$CL_U" -o \
        "$http_cn" -gt "$HC_N" -o "$http_un" -gt "$HC_U" ]
then

        #-- function: create list --#
        cr_list () {
                for i in $(cat $1 | sort | uniq); do
                  if [ "$(cat $1 | grep $i | wc -l)" -gt "$2" ]; then
                        echo $i >> $3
                  fi
                done
        }

        #-- collect high rate connection --#
        cr_list $HTTP_LIST_TMP $LIMIT_CNU $HTTP_LIST
        #-- create limit list --#
        cr_list ${HTTP_LIST}.new $LIMIT_NU $LIMIT_LIST
        #-- make exception --#
        if [ -s $EXCP_LIST ]; then
                cat /dev/null > $HTTP_LIST_TMP
                for i in $(cat $EXCP_LIST); do
                  grep -v $i $LIMIT_LIST >> $HTTP_LIST_TMP
                  mv $HTTP_LIST_TMP $LIMIT_LIST
                done
        fi
        #-- create drop list --#
        cr_list ${LIMIT_LIST}.new $DROP_NU $DROP_LIST
        #-- start limit --#
        for i in $(cat $LIMIT_LIST); do
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT -s $i \
                        -m limit --limit ${IPT_LTD}/s -j ACCEPT
        done
        #-- start blocking --#
        for i in $(cat $DROP_LIST); do
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT -s $i -j DROP
        done
fi
exit 0
主題: 關於砍站
作者: netman2002-12-13 14:24
BUG FIX:

因發線 limit 規則中的 $IPT_LTD/s 若大於 1/s  會被改為 nnnnnnn/day ,且在移除舊規則時也不一致(我的疏忽, sorry)。
本 script 已作修改,並更新至 v0.95 版。若有引用本 script 的朋友請更新:

代碼: [選擇]
#!/bin/bash
# Purpose: to block httpd connection
# Author: netman(netman@study-area.org)
# Lisence: GPL
# Date: 2002/12/13
# Version: 0.95

#-- change log --#
# Version 0.90
#       * Script created
# Version 0.91
#       1) add test for size of list file
#       2) add test for cpu loading
# Version 0.92
#       1) separate cpu loading test into system and user
#       2) add test for httpd connection number
# Version 0.93
#       1) change to block frequently existed list
#       2) add excepted list
# Version 0.94
#       1) remove list-file size testing which was added in v0.91
#       2) change iptables' rule from DROP to limit
#       3) create drop list for most limited connections
# Version 0.95
#       1) remove IPT_LTD variable and hardcode the limit rule to 1/s


LIMIT_CNU=24    # max number of conncetion allowed at the time
LIMIT_NU=3      # max number of time allowed in the source list
DROP_NU=3       # max number of time allowed in the limit list
CL_S=8          # CPU loading for system
CL_U=65         # CPU loading for user
HC_N=200        # HTTP connection number for session
HC_U=20         # HTTP connection number for source
HTTP_PORT=80    # HTTP port number
HTTP_LIST=/root/http.list
HTTP_LIST_TMP=${HTTP_LIST}.tmp
LIMIT_LIST=${HTTP_LIST}.limit; touch ${HTTP_LIST}.limit
DROP_LIST=${HTTP_LIST}.drop; touch ${HTTP_LIST}.drop
EXCP_LIST=${HTTP_LIST}.excp; touch ${HTTP_LIST}.excp
#-- create source list --#
touch $HTTP_LIST_TMP
netstat -na | grep ":$HTTP_PORT" | awk '{print $5}' | cut -d: -f1 \
        | sort | sed '/0.0.0.0/d' > $HTTP_LIST_TMP
cpuload=$(/usr/bin/sar -u 1 3 | tail -1 | awk '{print $3":"$5}')
cpuusr=$(echo ${cpuload%:*} | sed 's/\..*$//')
cpusys=$(echo ${cpuload#*:} | sed 's/\..*$//')
http_cn=$(/bin/netstat -na | grep ":$HTTP_PORT" | wc -l | awk '{print $1}')
http_un=$(cat $HTTP_LIST_TMP | uniq | wc -l | awk '{print $1}')
echo    "       limit   current"
echo    "CL_U:  $CL_U   $cpuusr"
echo    "CL_S:  $CL_S   $cpusys"
echo    "HC_N:  $HC_N   $http_cn"
echo    "HC_U:  $HC_U   $http_un"

#-- remove old limit rules --#
for i in $(cat $LIMIT_LIST); do
        /sbin/iptables -D INPUT -p TCP --dport $HTTP_PORT -s $i \
                -m limit --limit 1/s -j ACCEPT
done
#-- remove old drop rules --#
for i in $(cat $DROP_LIST); do
        /sbin/iptables -D INPUT -p TCP --dport $HTTP_PORT -s $i -j DROP
done
cat /dev/null > $DROP_LIST
#-- update lists --#
for i in $HTTP_LIST $LIMIT_LIST; do
        touch ${i}.1 ${i}.2 ${i}.3 ${i}.4
        mv ${i}.4 ${i}.5
        mv ${i}.3 ${i}.4
        mv ${i}.2 ${i}.3
        mv ${i}.1 ${i}.2
        mv ${i} ${i}.1
        cat ${i}.[1-5] > ${i}.new
        touch $i
done

#-- limiting http connection --#
if [ "$cpusys" -gt "$CL_S" -o "$cpuusr" -gt "$CL_U" -o \
        "$http_cn" -gt "$HC_N" -o "$http_un" -gt "$HC_U" ]
then

        #-- function: create list --#
        cr_list () {
                for i in $(cat $1 | sort | uniq); do
                  if [ "$(cat $1 | grep $i | wc -l)" -gt "$2" ]; then
                        echo $i >> $3
                  fi
                done
        }

        #-- collect high rate connection --#
        cr_list $HTTP_LIST_TMP $LIMIT_CNU $HTTP_LIST
        #-- create limit list --#
        cr_list ${HTTP_LIST}.new $LIMIT_NU $LIMIT_LIST
        #-- make exception --#
        if [ -s $EXCP_LIST ]; then
                cat /dev/null > $HTTP_LIST_TMP
                for i in $(cat $EXCP_LIST); do
                  grep -v $i $LIMIT_LIST >> $HTTP_LIST_TMP
                  mv $HTTP_LIST_TMP $LIMIT_LIST
                done
        fi
        #-- create drop list --#
        cr_list ${LIMIT_LIST}.new $DROP_NU $DROP_LIST
        #-- start limit --#
        for i in $(cat $LIMIT_LIST); do
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT -s $i \
                        -m limit --limit 1/s -j ACCEPT
        done
        #-- start blocking --#
        for i in $(cat $DROP_LIST); do
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT -s $i -j DROP
        done
fi
exit 0
主題: 關於砍站
作者: netman2002-12-18 16:32
我將 v0.95 版包好,有需要的來這抓吧:

http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz
主題: 關於砍站
作者: netman2002-12-22 17:45
今天再度與砍站者奮站,也再次改良了 script ,
除了將限制調得更嚴之外,還增加了一個 "永久 block list" :


然則,砍站者將永久被 drop ,但我還是建議另寫一個  crontab ,
定期(每天、或每星期)清一次規則。
tips:若您有安裝 portsentry 的話,請留意 /etc/cron.d/portsentry 的設定,
因為它 "預設" 每 6 小時就清一次 iptables 。

關於本 script 的最新版本,為 v0.97,可從下面下載:
http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz
(註:下午發表的 v0.96 有個 bug,若已下載請更新。)

v0.97 的 code 如下(請幫忙 debug):

代碼: [選擇]
#!/bin/bash
# Purpose: to block httpd connection
# Author: netman(netman@study-area.org)
# Lisence: GPL
# Date: 2002/12/22
# Version: 0.97

#-- change log --#
# Version 0.90
#       * Script created
# Version 0.91
#       1) add test for size of list file
#       2) add test for cpu loading
# Version 0.92
#       1) separate cpu loading test into system and user
#       2) add test for httpd connection number
# Version 0.93
#       1) change to block frequently existed list
#       2) add excepted list
# Version 0.94
#       1) remove list-file size testing which was added in v0.91
#       2) change iptables' rule from DROP to limit
#       3) create drop list for most limited connections
# Version 0.95
#       1) remove IPT_LTD variable and hardcode the limit rule to 1/s
# Version 0.96
#       1) change based dir to /root/BLOCK
#       2) create PERM_LIST for permanent drop
# Version 0.97
#       1) bug fix: clean PERM_LIST at every running

HTTP_NU=16      # connection number to be added to list
LIMIT_NU=3      # number to be limited
DROP_NU=3       # number to be dropped
PERM_NU=4       # number to be dropped permanently
CL_S=8          # CPU loading for system
CL_U=65         # CPU loading for user
HC_N=200        # HTTP connection number for session
HC_U=20         # HTTP connection number for source
HTTP_PORT=80    # HTTP port number
BASED_DIR=/root/BLOCK
HTTP_LIST=${BASED_DIR}/http.list
HTTP_LIST_TMP=${HTTP_LIST}.tmp
LIMIT_LIST=${HTTP_LIST}.limit; touch ${HTTP_LIST}.limit
DROP_LIST=${HTTP_LIST}.drop; touch ${HTTP_LIST}.drop
PERM_LIST=${HTTP_LIST}.perm; touch ${HTTP_LIST}.perm
EXCP_LIST=${HTTP_LIST}.excp; touch ${HTTP_LIST}.excp

#-- create based dir --#
if [ ! -d $BASED_DIR ]; then
        mkdir $BASED_DIR || {
                echo "$0: ERROR: can NOT create directory $BASED_DIR."
                exit 1
        }
fi

#-- create source list --#
touch $HTTP_LIST_TMP
netstat -na | grep ":$HTTP_PORT" | awk '{print $5}' | cut -d: -f1 \
        | sort | sed '/0.0.0.0/d' > $HTTP_LIST_TMP
cpuload=$(/usr/bin/sar -u 1 3 | tail -1 | awk '{print $3":"$5}')
cpuusr=$(echo ${cpuload%:*} | sed 's/\..*$//')
cpusys=$(echo ${cpuload#*:} | sed 's/\..*$//')
http_cn=$(/bin/netstat -na | grep ":$HTTP_PORT" | wc -l | awk '{print $1}')
http_un=$(cat $HTTP_LIST_TMP | uniq | wc -l | awk '{print $1}')
echo    "       limit   current"
echo    "CL_U:  $CL_U   $cpuusr"
echo    "CL_S:  $CL_S   $cpusys"
echo    "HC_N:  $HC_N   $http_cn"
echo    "HC_U:  $HC_U   $http_un"

#-- remove old limit rules --#
for i in $(cat $LIMIT_LIST); do
        echo remove $i from LIMIT
        /sbin/iptables -D INPUT -p TCP --dport $HTTP_PORT -s $i \
                -m limit --limit 1/s -j ACCEPT
done
#-- remove old drop rules --#
for i in $(cat $DROP_LIST); do
        echo remove $i from DROP
        /sbin/iptables -D INPUT -p TCP --dport $HTTP_PORT -s $i -j DROP
done

#-- clean up PERM_LIST --#
cat /dev/null > $PERM_LIST
#-- update lists --#
for i in $HTTP_LIST $LIMIT_LIST $DROP_LIST; do
        if [ -s $i -o "$i" != "$DROP_LIST" ]; then
                touch ${i}.1 ${i}.2 ${i}.3 ${i}.4
                mv ${i}.4 ${i}.5
                mv ${i}.3 ${i}.4
                mv ${i}.2 ${i}.3
                mv ${i}.1 ${i}.2
                mv ${i} ${i}.1
                cat ${i}.[1-5] > ${i}.new
                touch $i
        fi
done

#-- limiting http connection --#
if [ "$cpusys" -gt "$CL_S" -o "$cpuusr" -gt "$CL_U" -o \
        "$http_cn" -gt "$HC_N" -o "$http_un" -gt "$HC_U" ]
then

        #-- function: create list --#
        cr_list () {
                for i in $(cat $1 | sort | uniq); do
                  if [ "$(cat $1 | grep $i | wc -l)" -ge "$2" ]; then
                        echo $i >> $3
                  fi
                done
        }

        #-- collect high rate connection --#
        cr_list $HTTP_LIST_TMP $HTTP_NU $HTTP_LIST
        #-- create limit list --#
        cr_list ${HTTP_LIST}.new $LIMIT_NU $LIMIT_LIST
        #-- make exception --#
        if [ -s $EXCP_LIST ]; then
                cat /dev/null > $HTTP_LIST_TMP
                for i in $(cat $EXCP_LIST); do
                  grep -v $i $LIMIT_LIST >> $HTTP_LIST_TMP
                  mv $HTTP_LIST_TMP $LIMIT_LIST
                done
        fi
        #-- create drop list --#
        cr_list ${LIMIT_LIST}.new $DROP_NU $DROP_LIST
        #-- create permanent drop list --#
        cr_list ${DROP_LIST}.new $PERM_NU $PERM_LIST


        #-- start limit --#
        for i in $(cat $LIMIT_LIST); do
                echo LIMIT $i
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT -s $i \
                        -m limit --limit 1/s -j ACCEPT
        done
        #-- start blocking --#
        for i in $(cat $DROP_LIST); do
                echo DROP $i
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT -s $i -j DROP
        done
        #-- start permanent blocking --#
        for i in $(cat $PERM_LIST); do
                echo permanently DROP $i
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT -s $i \
                        --sport 1024:65535 -j DROP
        done

fi
exit 0
主題: 關於砍站
作者: wessley2002-12-22 18:33
我有兩個想法....
1. 把 www 移出來.......
2. 搜尋結果的文章能自動 tar 出來給人下載(當然要按我要下載,才 tar)???我想可能做不到吧?????
主題: 關於砍站
作者: netman2002-12-23 00:15
引述: "wessley"
我有兩個想法....
1. 把 www 移出來.......
2. 搜尋結果的文章能自動 tar 出來給人下載(當然要按我要下載,才 tar)???我想可能做不到吧?????


多謝建議!不過:
1) 到哪去?之後又如何防范?
2) 嗯... 逐篇抓如何?
主題: 關於砍站
作者: netman2002-12-23 00:20
還是有 BUG !!

這次重新設計了清單的更新規則,同時也修補了 perm drop 規則的疏忽。

最新版本已為 v0.98,可從下面下載:
http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

code 如下(唉,越來越長了... 請幫忙 debug):

代碼: [選擇]
#!/bin/bash
# Purpose: to block httpd connection
# Author: netman(netman@study-area.org)
# Lisence: GPL
# Date: 2002/12/23
# Version: 0.98

#-- change log --#
# Version 0.90
#       * Script created
# Version 0.91
#       1) add test for size of list file
#       2) add test for cpu loading
# Version 0.92
#       1) separate cpu loading test into system and user
#       2) add test for httpd connection number
# Version 0.93
#       1) change to block frequently existed list
#       2) add excepted list
# Version 0.94
#       1) remove list-file size testing which was added in v0.91
#       2) change iptables' rule from DROP to limit
#       3) create drop list for most limited connections
# Version 0.95
#       1) remove IPT_LTD variable and hardcode the limit rule to 1/s
# Version 0.96
#       1) change based dir to /root/BLOCK
#       2) create PERM_LIST for permanent drop
# Version 0.97
#       1) bug fix: clean PERM_LIST at every running
# Version 0.98
#       1) change to update list upon new source found or time base
#       2) bug fix: make PERM_IST clean properly


HTTP_NU=16      # connection number to be added to list
LIMIT_NU=3      # number to be limited
LIMIT_MIN=30    # number of limit minutes
DROP_NU=3       # number to be dropped
DROP_HR=3       # number of drop hours
PERM_NU=4       # number to be dropped permanently
PERM_DAY=1      # number of perm drop days
CL_S=8          # CPU loading for system
CL_U=65         # CPU loading for user
HC_N=200        # HTTP connection number for session
HC_U=20         # HTTP connection number for source
HTTP_PORT=80    # HTTP port number
BASED_DIR=/root/BLOCK
HTTP_LIST=${BASED_DIR}/http.list #; touch $HTTP_LIST $HTTP_LIST.new
HTTP_LIST_TMP=${HTTP_LIST}.tmp
LIMIT_LIST=${HTTP_LIST}.limit; touch --date="$LIMIT_MIN minutes ago" $LIMIT_LIST
DROP_LIST=${HTTP_LIST}.drop; touch --date="$DROP_HR hours ago" $DROP_LIST
PERM_LIST=${HTTP_LIST}.perm; touch --date="$PERM_DAY days ago" $PERM_LIST
EXCP_LIST=${HTTP_LIST}.excp; touch $EXCP_LIST

#-- create based dir --#
if [ ! -d $BASED_DIR ]; then
        mkdir $BASED_DIR || {
                echo "$0: ERROR: can NOT create directory $BASED_DIR."
                exit 1
        }
fi

#-- create source list --#
touch $HTTP_LIST_TMP
netstat -na | grep ":$HTTP_PORT" | awk '{print $5}' | cut -d: -f1 \
        | sort | sed '/0.0.0.0/d' > $HTTP_LIST_TMP
cpuload=$(/usr/bin/sar -u 1 3 | tail -1 | awk '{print $3":"$5}')
cpuusr=$(echo ${cpuload%:*} | sed 's/\..*$//')
cpusys=$(echo ${cpuload#*:} | sed 's/\..*$//')
http_cn=$(/bin/netstat -na | grep ":$HTTP_PORT" | wc -l | awk '{print $1}')
http_un=$(cat $HTTP_LIST_TMP | uniq | wc -l | awk '{print $1}')
echo    "       limit   current"
echo    "CL_U:  $CL_U   $cpuusr"
echo    "CL_S:  $CL_S   $cpusys"
echo    "HC_N:  $HC_N   $http_cn"
echo    "HC_U:  $HC_U   $http_un"

#-- function update lists --#
ud_list () {
        for i in $@; do
                touch ${1}.1 ${1}.2 ${1}.3 ${1}.4
                mv ${i}.4 ${i}.5
                mv ${i}.3 ${i}.4
                mv ${i}.2 ${i}.3
                mv ${i}.1 ${i}.2
                mv ${i} ${i}.1
                cat ${i}.[1-5] > ${i}.new
                touch $i
        done
}
if [ -s $HTTP_LIST -o $HTTP_LIST.new -ot $HTTP_LIST ]; then
        #-- remove old limit rules --#
        for i in $(cat $LIMIT_LIST); do
                echo remove $i from LIMIT
                /sbin/iptables -D INPUT -p TCP --dport $HTTP_PORT \
                        -s $i -m limit --limit 1/s -j ACCEPT
        done
        #-- update http list --#
        ud_list $HTTP_LIST
fi
if [ -s $LIMIT_LIST -o $LIMIT_LIST.new -ot $LIMIT_LIST ]; then
        #-- remove old drop rules --#
        for i in $(cat $DROP_LIST); do
                echo remove $i from DROP
                /sbin/iptables -D INPUT -p TCP --dport $HTTP_PORT \
                        -s $i -j DROP
        done
        #-- update limit list --#
        ud_list $LIMIT_LIST
fi
if [ -s $DROP_LIST -o $DROP_LIST.new -ot $DROP_LIST ]; then
        #-- update limit list --#
        ud_list $DROP_LIST
        #-- clean perm list --#
        cat /dev/null > $PERM_LIST
fi

#-- limiting http connection --#
if [ "$cpusys" -gt "$CL_S" -o "$cpuusr" -gt "$CL_U" -o \
        "$http_cn" -gt "$HC_N" -o "$http_un" -gt "$HC_U" ]
then

        #-- function: create list --#
        cr_list () {
                for i in $(cat $1 | sort | uniq); do
                  if [ "$(cat $1 | grep $i | wc -l)" -ge "$2" ]; then
                        echo $i >> $3
                  fi
                done
        }

        #-- collect high rate connection --#
        cr_list $HTTP_LIST_TMP $HTTP_NU $HTTP_LIST
        #-- create limit list --#
        if [ -s $HTTP_LIST ]; then
                cr_list ${HTTP_LIST}.new $LIMIT_NU $LIMIT_LIST
                #-- make exception --#
                if [ -s $EXCP_LIST ]; then
                        cat /dev/null > $HTTP_LIST_TMP
                        for i in $(cat $EXCP_LIST); do
                          grep -v $i $LIMIT_LIST >> $HTTP_LIST_TMP
                          mv $HTTP_LIST_TMP $LIMIT_LIST
                        done
                fi
        fi
        #-- create drop list --#
        if [ -s $LIMIT_LIST ]; then
                cr_list ${LIMIT_LIST}.new $DROP_NU $DROP_LIST
        fi
        #-- create perm list --#
        if [ -s $DROP_LIST ]; then
                cr_list ${DROP_LIST}.new $PERM_NU $PERM_LIST
        fi

        #-- start limit --#
        for i in $(cat $LIMIT_LIST); do
                echo LIMIT $i
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT -s $i \
                        -m limit --limit 1/s -j ACCEPT
        done
        #-- start blocking --#
        for i in $(cat $DROP_LIST); do
                echo DROP $i
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT -s $i -j DROP
        done
        #-- start permanent blocking --#
        for i in $(cat $PERM_LIST); do
                echo permanently DROP $i
                /sbin/iptables -I INPUT -p TCP --dport $HTTP_PORT \
                        -s $i --syn -j DROP
        done

fi
exit 0
主題: 關於砍站
作者: netman2002-12-27 17:26
最新版本已升級到 v0.99 了...
發現 0.98 還是有被砍的危險,這次修改主要在於:
# Version 0.99
#       1) add detection for running process of script
#       2) add limit rule to OUTPUT
#       3) remove SYN factor from permanent drop rule

我不再貼 code 上來了,有抓過舊版的請更新:
http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz
主題: 關於砍站
作者: netman2003-01-03 12:41
change log:

# Version 1.00
#       1) add detection for httpd daemon, restart while missing.
# Version 1.01
#       1) change httpd daemon detection from netstat to ps
#       2) add detection for DROP rules before permanet drop
# Version 1.02
#       1) add removal of Semaphore Arrays of apache
#       2) add -i interface elements in permanet drop rule
#       3) bug fix: change --dport to --sport in OUTPUT limit
主題: 關於砍站
作者: netman2003-01-09 18:21
change log

# Version 1.03
#       1) change process detection from PID file to ps command
#       2) bug fix: add path to iptables-save command
主題: 關於砍站
作者: netman2003-01-13 15:11
# Version 1.04
#       1) bug fix: correct detection method of script process
主題: 關於砍站
作者: netman2003-01-14 14:56
# Version 1.05
#       1) bug fix: correct time stamp assignment for list files
#       2) bug fix: correct touch command in up_list function
主題: 關於砍站
作者: duncanlo2003-01-14 17:13
有些站可以拒絕用flashget,telport之類的軟體來mirror web site,
也許可以參考它們的作法....
主題: 關於砍站
作者: netman2003-01-14 23:04
不知道有 document 可以指點一下嗎?
主題: 關於砍站
作者: eric_liao2003-01-29 16:59
於 httpd.conf 修改
代碼: [選擇]

        AllowOverride All
        BrowserMatch "Mozilla" browser
        Order deny,allow
        allow from env=browser
        deny from all


不過,這只能防君子,因為像 teleport 這類軟體都能偽裝身份為 IE 。
主題: 關於砍站
作者: VBird2003-01-29 19:42
引述: "eric_liao"
於 httpd.conf 修改
代碼: [選擇]

        AllowOverride All
        BrowserMatch "Mozilla" browser
        Order deny,allow
        allow from env=browser
        deny from all


不過,這只能防君子,因為像 teleport 這類軟體都能偽裝身份為 IE 。
這個方法用途不大!因為目前的砍站軟體都能夠『假裝』瀏覽器了! @_@
主題: 關於砍站
作者: zxcvbn1012003-02-18 00:04
我的作法是送cookie給對方,即使他們能假裝成瀏覽器
但沒辦法接受cookie
不過
如果堅持不開cookie的就進不來
如果換電腦或cookie不見的
就要再做一次接受cookie的動作
然後再進網站
我用了以後
就比較好了
但是還是防不了像pchome/openfind之類的搜索引擎
已經叫所有機器人都不要來了
不過他們的反應很遲鈍
偶而還是會晃進來
只好直接將這些ip給block掉


引述: "VBird"
引述: "eric_liao"
於 httpd.conf 修改
代碼: [選擇]

        AllowOverride All
        BrowserMatch "Mozilla" browser
        Order deny,allow
        allow from env=browser
        deny from all


不過,這只能防君子,因為像 teleport 這類軟體都能偽裝身份為 IE 。
這個方法用途不大!因為目前的砍站軟體都能夠『假裝』瀏覽器了! @_@
主題: 關於砍站
作者: VBird2003-02-27 13:35
Kenny 大哥:

最近改寫了砍站軟體的抵擋方式,使用偵測 syn 這個 tcp 封包的方法,
可以修正不小心將使用 proxy 連上的使用者『擋住』的窘境!
http://phorum.vbird.org/viewtopic.php?t=18
主題: 關於砍站
作者: netman2003-02-28 18:12
我們的學員 wilson 兄也提供了一個不錯的方法,不知大家能幫忙測試看看嗎:
引述: "wilson"
您好:

在逛外面的網站時 發現某個站無法以砍站軟體(我teleport pro測試)
模仿該站的作法後 在我機器上測試一下 發現teleport pro也無法砍我的資料了
如果學長覺得有需要的話 不妨試試.
在https下新增一個檔案  檔案名為robots.txt(只有兩行)
內容:User-agent: *
   Disallow: /
  :P
主題: 關於砍站
作者: VBird2003-02-28 19:02
不過我覺得有點怕怕的~
因為如果有分析過 apache 的 log file 會發現,
這個檔案一再地被嘗試讀取,
那就是 nimda 病毒的『魔爪』啦!
果真如此的話,那麼是否有可能這個檔案被利用來做壞事呢?
我不清楚啦!所以要請教大家說! ^_^
主題: 關於砍站
作者: duncanlo2003-03-01 10:42
那算是假病毒嗎?

不知道有沒有辦法,
讓中毒攻擊別人的主機自我毀滅,
我想別人會理解我大義滅親(不知親在那兒)的作法...
主題: 可將文件做整理
作者: dken2003-03-05 01:59

也許可以將文件資料整理起來,做成單一html檔,或其他文件格式,來讓使用者download,如此可限制流量,也可以避免砍站的情況,這算是治本的方式吧... :)
主題: Re: 可將文件做整理
作者: netman2003-05-27 23:57
引述: "dken"

也許可以將文件資料整理起來,做成單一html檔,或其他文件格式,來讓使用者download,如此可限制流量,也可以避免砍站的情況,這算是治本的方式吧... :)

我們(很早以前)已提供整個 web 的 tarball :
http://study-area.ks.edu.tw/html.tgz
也提供最新的 modify_log :
http://www.study-area.org/modify_log.txt

應是"仁至義盡"了吧?
主題: 關於砍站
作者: netman2003-05-27 23:58
最新 block script 更新:

# Version 1.07
#       1) add decection for TIME_WAIT peer
#       2) improve exeception list determination

下載:
http://www.study-area.org/linux/src/block.http.sh.tgz
主題: 關於砍站
作者: 2003-05-28 00:25
netman兄:
請教一下,在IE把網頁設定成離線瀏覽(包含多層鏈結)是不是就是
種砍站行為,如果加上排程定期更新的話是否更糟?
主題: 關於砍站
作者: netman2003-05-28 00:29
引述: "任俠"
netman兄:
請教一下,在IE把網頁設定成離線瀏覽(包含多層鏈結)是不是就是
種砍站行為,如果加上排程定期更新的話是否更糟?

嗯,有可能...
因為 script 是跟據 netstat 的結果來判斷的。
主題: 關於砍站
作者: dark2003-05-28 06:46
若是無惡意的誤開過多連結.. 而遭 drop , 但幾分鐘後有上來失誤一次
只因不知道主機有防砍站設定... 我想這樣情況大有人在

是否能在 drop 之前(或之後) , 將他導向警告網頁呢...? (或對話訊息告知)


ps : 跳出了 "最新 10 篇文章" , 用搜尋才找到這裡
這篇已經進入寫程式或安全管理範圍了說... ^^
主題: 關於砍站
作者: VBird2003-05-28 11:15
引述: "dark"
若是無惡意的誤開過多連結.. 而遭 drop , 但幾分鐘後有上來失誤一次
只因不知道主機有防砍站設定... 我想這樣情況大有人在

是否能在 drop 之前(或之後) , 將他導向警告網頁呢...? (或對話訊息告知)


ps : 跳出了 "最新 10 篇文章" , 用搜尋才找到這裡
這篇已經進入寫程式或安全管理範圍了說... ^^
應該沒有太大的關係吧!
因為我記得 netman 大哥寫的防砍站程式是依據 CPU loading 來決定是否進行偵測,
並且擋掉該 IP 的時間也不長(只有幾分鐘),
如果對方是正常使用的讀者,應該不可能感到任何不便的才對!
主題: 關於砍站
作者: netman2003-05-28 12:28
引述: "dark"
若是無惡意的誤開過多連結.. 而遭 drop , 但幾分鐘後有上來失誤一次
只因不知道主機有防砍站設定... 我想這樣情況大有人在

是否能在 drop 之前(或之後) , 將他導向警告網頁呢...? (或對話訊息告知)


追蹤一下 script ,或看一下舊討論,你會發現如下構思:



現在的標準有所修改,同時再增加一項:看看  TIME_WAIT 的連線數目是否超過指定限制:

代碼: [選擇]

CL_S=8          # CPU loading for system
CL_U=65         # CPU loading for user
HC_N=200        # HTTP connection number for session
HC_U=20         # HTTP connection number for source
TW_N=40         # TIME_WAIT number for session
.....
cpuload=$(/usr/bin/sar -u 1 3 | tail -1 | awk '{print $3":"$5}')
cpuusr=$(echo ${cpuload%:*} | sed 's/\..*$//')
cpusys=$(echo ${cpuload#*:} | sed 's/\..*$//')
http_cn=$(/bin/netstat -na | grep ":$HTTP_PORT" | wc -l | awk '{print $1}')
http_un=$(cat $HTTP_LIST_TMP | uniq | wc -l | awk '{print $1}')
http_tw=$(cat $HTTP_TW_TMP | wc -l | awk '{print $1}')
......
if [ "$cpusys" -gt "$CL_S" -o "$cpuusr" -gt "$CL_U" -o "$http_cn" -gt "$HC_N" \
        -o "$http_un" -gt "$HC_U" -o "$http_tw" -gt "$TW_N" ]
then
.....
主題: 關於砍站
作者: paulso2003-06-03 00:15
我在香港這邊連過來很久哦... 開7~8個瀏覽器,只有兩至三個能 access 伺服器,其他的在等待,等到那兩個瀏覽器取完資料,才到其他
由其是那些有20多貼的 topic,取得非常慢

所以只要一天太多人發了文,回到家,開很多個視窗,10多個... (機乎我會看所有的新文章)
有些等得太久,會變成"找不到伺服器",從而弄到我看文章的速度大跌...
主題: 關於砍站
作者: duncanlo2003-06-03 00:23
不知道香港從那兒連台灣比較快,
也可以可以弄個R-Proxy...
主題: 關於砍站
作者: netman2003-06-03 13:56
嗯... 可能是線路原因:因為 tarnet 對國外的頻寬本來就不高...
我所寫的 script ,並沒在  phorum 上執行啦,所以不會擋你的連線。
主題: 關於砍站
作者: twu22003-06-03 16:41
國外連進來的確很慢.
我後來是使用家中的 ADSL 線路來當 proxy, 這樣子就快很多了.
主題: 關於砍站
作者: paulso2003-06-03 18:52
很慘 T-T
要小心不能開太多視窗...
主題: 關於砍站
作者: netman2003-06-03 22:58
引述: "paulso"
很慘 T-T
要小心不能開太多視窗...

說過了:與開多少視窗無關,因為這邊(phorum)沒擋...
原因應是 tarnet (phorum 所在的學術網) 與海外頻寬的限制。
主題: 關於砍站
作者: paulso2003-06-04 01:10
很慘耶T.T
主題: 關於砍站
作者: paulso2003-06-05 18:38
:evil:  :evil:  :evil:

(http://s01.no-ip.org/~paulso/picture/1.jpg)

你們看看右下角,我等 load 完這頁足足一小時有多,其中的等倒變成了「找不到伺服器」...

traceroute 結果如下:
代碼: [選擇]
# traceroute phorum.study-area.org
traceroute to phorum.study-area.org (140.113.27.184), 30 hops max, 38 byte packets
 1  192.168.0.1 (192.168.0.1)  0.602 ms  2.167 ms  5.820 ms
 2  061238116001.ctinets.com (61.238.116.1)  3.604 ms  1.984 ms  1.822 ms
 3  203185019110.ctinets.com (203.185.19.110)  2.462 ms  3.489 ms  3.076 ms
 4  061238030230.ctinets.com (61.238.30.230)  7.176 ms  4.716 ms  4.108 ms
 5  192.168.3.3 (192.168.3.3)  5.984 ms  7.744 ms *
 6  * 192.168.3.4 (192.168.3.4)  8.538 ms  3.737 ms
 7  agc2-RGE.hkix.net (202.40.161.189)  6.353 ms  7.912 ms  5.830 ms
 8  pos0-1-622M.cr1.HKG1.gblx.net (203.192.134.129)  6.409 ms  8.341 ms  7.867 ms
 9  203.192.134.178 (203.192.134.178)  26.979 ms  23.807 ms  24.996 ms
10  so1-0-0-622M.ar1.TPE3.gblx.net (203.192.171.74)  23.933 ms  29.455 ms  28.152 ms
11  * Tanet-MOE.so-0-2-1.ar1.TPE3.gblx.net (203.192.143.166)  30.123 ms  34.536 ms
12  203.72.43.2 (203.72.43.2)  29.958 ms  27.003 ms *
13  TANetBackbone-NCTU.edu.tw (192.83.196.113)  33.631 ms  33.729 ms  31.863 ms
14  * 203.72.43.194 (203.72.43.194)  33.968 ms  28.700 ms
15  * * *

有兩點:
一、在第 6, 10, 14 停頓了一會(有 * 的為停頓一會)
二、在第 4 之後,那是出了我的 isp,為何到了 c class ip 的?
主題: 關於砍站
作者: duncanlo2003-06-06 00:38
這個桌面跟垃圾場一樣,
整個丟了吧...
主題: 關於砍站
作者: paulso2003-06-06 00:44
已經整理好沒用的已刪= .=
主題: 關於砍站
作者: mimeory2003-06-06 02:09
我以為我的桌面已經夠亂的了...
沒想到有人比我還亂....
主題: 關於砍站
作者: dark2003-06-06 03:03
小弟也想知道 , 為何上了 internet 還有 192.168 開頭的出現
而且還能路由回來

(paulso 學長桌面還不算亂呀... ^^  解析度能調這麼高真好 , 能放的多)
主題: 關於砍站
作者: twu22003-06-06 10:53
你在香港, 但是學園在 TANET 中.
TANET 的對國外線路是有流量管制的, 這個也不是學園本身可以解決的, 除非換到別 ISP 中.

我也常年在國外, 剛開始也是慢的受不了, 後來就把自已家中的 squid 開放出來使用, 經由國外到 hinet 再到 tanet 就很快了.

看看你能不能找到台灣這邊有 proxy server 可以提供給你使用的.
如果找不到.... 再發個 pm 給我 (留下你的 email), 我給你一組 id/password 使用我這兒的 squid 連到學園.
主題: 關於砍站
作者: paulso2003-06-06 11:46
龜速可是時間性的,由 6pm 開始到 12am,龜~~~~~
在早上和更晚還算可以,那只好委屈一下

traceroute www.yahoo.com 結果如下
代碼: [選擇]
# traceroute www.yahoo.com
traceroute: Warning: www.yahoo.com has multiple addresses; using 66.218.70.49
traceroute to www.yahoo.akadns.net (66.218.70.49), 30 hops max, 38 byte packets
 1  192.168.0.1 (192.168.0.1)  0.657 ms  0.501 ms  0.524 ms
 2  061238116001.ctinets.com (61.238.116.1)  2.195 ms  2.131 ms  1.397 ms
 3  203185019110.ctinets.com (203.185.19.110)  2.036 ms  1.831 ms  1.472 ms
 4  061238030230.ctinets.com (61.238.30.230)  4.497 ms  3.431 ms  3.227 ms
 5  192.168.3.3 (192.168.3.3)  2.837 ms  2.373 ms  2.101 ms
 6  134.159.127.5 (134.159.127.5)  5.680 ms  5.938 ms  4.591 ms
 7  i-7-0.wwh-core01.net.reach.com (202.84.221.161)  6.163 ms  4.886 ms  5.575 ms
 8  i-12-3.sjc-core01.net.reach.com (202.84.143.49)  170.480 ms  171.374 ms  170.516 ms
 9  i-13-0.paix-core01.net.reach.com (202.84.143.249)  171.494 ms  170.122 ms  170.792 ms
10  * i-3-2.paix05.net.reach.com (202.84.251.70)  171.265 ms  174.805 ms
11  yahoo.paix05.net.reach.com (134.159.63.22)  236.937 ms  235.280 ms  235.269 ms
12  vl28.bas1.scd.yahoo.com (216.115.101.42)  236.382 ms  235.950 ms  236.108 ms
13  w18.www.scd.yahoo.com (66.218.70.49)  235.739 ms  237.242 ms  236.809 ms

在第 6 還是有個 192.168.x.x 的路由器,跟著我一試本地網
代碼: [選擇]
# traceroute hk.yahoo.com
traceroute to hk.yahoo.com (202.1.233.111), 30 hops max, 38 byte packets
 1  192.168.0.1 (192.168.0.1)  0.492 ms  0.388 ms  0.447 ms
 2  061238116001.ctinets.com (61.238.116.1)  1.321 ms  1.067 ms  1.091 ms
 3  203185019110.ctinets.com (203.185.19.110)  2.833 ms  1.951 ms  2.082 ms
 4  061238030230.ctinets.com (61.238.30.230)  2.799 ms  2.540 ms  3.150 ms
 5  192.168.3.3 (192.168.3.3)  3.033 ms  2.341 ms  2.150 ms
 6  192.168.3.4 (192.168.3.4)  2.411 ms  2.962 ms  2.096 ms
 7  yahoo1-RGE.hkix.net (202.40.161.185)  5.470 ms  5.774 ms  3.972 ms
 8  alteon1.hkg.yahoo.com (202.1.233.118)  4.732 ms  5.329 ms  5.957 ms

還是有個 192.168 的路由器 :\
主題: 關於砍站
作者: huckly2003-06-06 11:57
應該是 isp 內部 routing
主題: 關於砍站
作者: ozakipw2003-06-21 16:55
對不起~~問一下~~裡面的script中有一段 /usr/sbin/sar

我沒這檔案請問是少裝啥套件??我用redhat 9.0
主題: 關於砍站
作者: netman2003-06-22 19:41
哦?還是在 /usr/bin/sar 呢?
若都沒有,將 sysstat 套件裝一裝?
主題: 關於砍站
作者: VBird2003-06-23 01:09
引述: "netman"
哦?還是在 /usr/bin/sar 呢?
若都沒有,將 sysstat 套件裝一裝?
這一套似乎是在 Red Hat 上面才預設會安裝的咚咚!
在 Mandrake 與 OpenLinux 似乎都不是預設的安裝套件吶!
http://linux.vbird.org/download/index.php#sysstat
主題: 關於砍站
作者: ozakipw2003-06-23 10:10
引述: "VBird"
引述: "netman"
哦?還是在 /usr/bin/sar 呢?
若都沒有,將 sysstat 套件裝一裝?
這一套似乎是在 Red Hat 上面才預設會安裝的咚咚!
在 Mandrake 與 OpenLinux 似乎都不是預設的安裝套件吶!
http://linux.vbird.org/download/index.php#sysstat


瞭解~~收到....3q..
另外要感謝這篇文章,因小弟的Apache最近被DDoS攻擊到照三餐"趴"...這東西剛好可以拿來檔該攻擊.....剛溫啊... :lol:
主題: 關於砍站
作者: wilson2003-07-17 02:40
引述: "netman"
我們的學員 wilson 兄也提供了一個不錯的方法,不知大家能幫忙測試看看嗎:
引述: "wilson"
您好:

在逛外面的網站時 發現某個站無法以砍站軟體(我teleport pro測試)
模仿該站的作法後 在我機器上測試一下 發現teleport pro也無法砍我的資料了
如果學長覺得有需要的話 不妨試試.
在https下新增一個檔案  檔案名為robots.txt(只有兩行)
內容:User-agent: *
   Disallow: /
  :P


http://www.robotstxt.org/wc/exclusion-admin.html
主題: 關於砍站
作者: netman2003-08-25 11:54
block.http.sh is updated:

# Date: 2003/08/25
# Version: 1.08

# Version 1.08
#       1) BugFix: using lock file to determine running process.
主題: 關於砍站
作者: netman2003-08-26 01:22
# Date: 2003/08/26
# Version: 1.09

# Version 1.09
#       1) BugFix: keep permanent list from flushing out.
主題: 關於砍站
作者: netman2003-08-27 23:56
# Date: 2003/08/27
# Version: 1.10

# Version 1.10
#       1) BugFix: fixed pid path.
主題: 關於砍站
作者: netman2003-08-28 16:54
# Date: 2003/08/28
# Version: 1.11

# Version 1.11
#       1) imporve pid dedection method.

download:
http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

記得要用 crontab 來跑 script 哦~~
主題: 关于 Embedded System
作者: lfsjg2003-09-22 08:41
初探 Embedded System 为什么打不开呀???
主題: 關於砍站
作者: bensonwu2003-09-25 02:17
引述: "wilson"
引述: "netman"
我們的學員 wilson 兄也提供了一個不錯的方法,不知大家能幫忙測試看看嗎:
引述: "wilson"
您好:

在逛外面的網站時 發現某個站無法以砍站軟體(我teleport pro測試)
模仿該站的作法後 在我機器上測試一下 發現teleport pro也無法砍我的資料了
如果學長覺得有需要的話 不妨試試.
在https下新增一個檔案  檔案名為robots.txt(只有兩行)
內容:User-agent: *
   Disallow: /
  :P


http://www.robotstxt.org/wc/exclusion-admin.html


看了這一系列的文章 真是過癮 :)

既然Teleport及spambot這一類的user-agent 是屬於不友善的robots
是以靠robots.txt或htaccess或rewrite等手法仍無法有效避免砍站
所以我相信netman大大的這支script對有需要的人幫助很大!
主題: 關於砍站
作者: wiz2003-10-03 02:09
感謝netman大大,所提供的script。
目前使用上發現一些問題 (v1.11)

1. http.list.perm 不會自動產生,必須增加
   第94行:
   touch $EXCP_LIST $PERM_LIST

2. 第137行
    touch $HTTP_LIST_TMP
    這個動作應該不必要,因為下面接下來的動作就是
     ...........  > $HTTP_LIST_TMP

3. 另外LIMIT到底有沒有需要??
    在我這邊因為連線會瞬間暴增(有人用"多點傳輸"的方式抓東西),
   因此先Limit某個來源,似乎沒什麼用,因為連線已被佔滿。
   因此我自己把script修改一下,不使用Limit,只要連線超過10個(同一個來源)
   就直接drop。
主題: 關於砍站
作者: netman2003-10-03 14:22
嗯﹗那不錯...

能否回報一下你的版本?看來我們直接引用就行了...  ^_^
主題: 關於砍站
作者: wiz2003-10-03 18:04
針對 v1.11 所修改的地方:
1. http.list.perm 不會自動產生..
2. 第137行 touch $HTTP_LIST_TMP 這個動作應該不必要
3. 不使用Limit這個phrase,當連線數超過10個,直接drop
http://august.cs.tku.edu.tw/~wiz/block.patch
主題: 關於砍站
作者: netman2003-10-04 00:58
thank you!

等我 patch 完,再包給大家...  ^_^ 謝謝 wiz 兄﹗
主題: 關於砍站
作者: wiz2003-10-04 01:12
引述: "netman"
thank you!

等我 patch 完,再包給大家...  ^_^ 謝謝 wiz 兄﹗

我剛剛發現到一個問題,因為我碰到的狀況是會瞬間連線暴增,
但netman大大所寫的script中,裡面所用iptable規則一開始好像是
只擋port 80,若被抓太多次就是完全不給進。
雖然有擋起來,可是那些已佔滿的連線必須等一段時間過後才會釋放,
因為我對iptables是現學現賣.. ^^",所以想問一下,有無方法可以立即釋放
那些連線??  謝謝
主題: 關於砍站
作者: netman2003-10-04 01:46
哦、、、、這個我也不確定,
重新 restart httpd 看看囉...
因為那是 tcp/ip 的連線特徵,若不是主動 close 的話,則交到 time_out 來 close 。
而且,httpd 還用到 keep alive 機制,連線或許要等更長...
主題: 關於砍站
作者: netman2003-10-04 02:58
okay,path 完畢...  ^_^

http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

2003/10/04

# Version 1.12
#       1) set up HTTP_SCRIPT & HTTP_CMD variables
#       2) create PERM_LIST by using touch command
#       3) remove touch command for HTTP_LIST_TMP
#       4) remove all LIMIT rules, dump to DROP directly.

注意:
1) 要是用 wiz 兄的 patch ,要留意其中的 httpd 程式的 script 及 process name
2) 帶 limit 規則的 v1.11 版仍可從如下地方下載:
http://study-area.ks.edu.tw/linux/src/block.http-1.11.sh.tgz

補充說明一個一直沒提到的注意地方:
建議將 127.0.0.1 加入 $EXCP_LIST 中,以免將本機給誤擋住了...
若有多個 IP 要豁免,請用 '|' 將各 ip 串於同一行內,如:
127.0.0.1|1.2.3.4|4.3.2.1
主題: 關於砍站
作者: wiz2003-10-04 10:32
這一兩天的心得:
我這邊的情況比較特別,因為會有好幾個人(有時候會達到2,30個),用多點傳輸
的方式抓東西,因此連線會瞬間暴增,用偵測的方法有點緩不濟急,因此我想何不
直接限制??
(這是急就章研究出來的 ^^")
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
若先這樣限制,然後再搭配script去偵測,不知道會不會比較有效??
(因為是剛剛想出來的,還不知道效果,因為"激戰"要晚上才會發生)。

另外,netman 大大,在你的script中有設置 EXT_IF=eth0 這個變數,
但在iptable 的參數中,並沒有加上 -i $EXT_IF, 是否加上去會使得
程式比較週延??
主題: 關於砍站
作者: wiz2003-10-04 14:31
我剛剛又做了一點修正:
http://august.cs.tku.edu.tw/~wiz/block.http.sh
1. 之前是若抓到"n次"才會被抓入drop名單(netman大大原本的script是limit),
   我發現這個似乎沒什麼效果,因為砍站的人一定是開著軟體抓,所以等到
   "抓到n次"後在檔,似乎有點慢。因此我把這個移掉,若連線超過n個,直接
   drop掉(反正若是錯抓,兩分鐘後還是會解禁)
2. 我忽略掉 EXCP_LIST 的功能,我把它程式補上去

3. 我把 -i $EXT_IF 加進去iptables 的參數列中,這樣應該會比較週延。

另外有關直接限制,原本是用
iptables -A FORWARD -p tcp --dport 80 --syn -m limit --limit 1/s -j ACCEPT
可是似乎用這個比較正確
iptables -A INPUT -p tcp --syn --dport 80 -m limit --limit 1/s -j ACCEPT
這還要再研究一下.. ^^"
主題: 關於砍站
作者: netman2003-10-04 21:15
1)看你的 crontab 設定囉,基本上,只要能"撐"一段時間就行。
2)加上為妙
3)嗯... 可能你的環境與我不一樣:
我只是在"單機"上作業,不是用在  gateway firewall 上。
因此設 -i 跟不設  -i 沒差多少。
請跟據實際情況來調整吧。

因為是單機,因此我沒用到 FORWARD 。
且,若設 --sync 的話,那只限制每一條 tcp 連線的"第一個"個封包,其餘不限。
請自行斟酌。
主題: 關於砍站
作者: wiz2003-10-04 23:15
因為我覺得原本的Limit概念滿好的(可惜我這需要更強硬的作法 ^^"),
只是原本程式中,是被抓到"n次"後,才加入limit名單...
這樣可能有點喪失Limit的原意 (我覺得Limit應該是懷疑有可能進行
砍站行為,於是先限制他)。

另外原本的程式有些動作是多餘的
ex: http_un=$(cat $HTTP_LIST_TMP | uniq | wc -l | awk '{print $1}')
==> http_un=$(uniq $HTTP_LIST_TMP | wc -l)

我稍微整理一下
http://august.cs.tku.edu.tw/~wiz/block.http_op.sh
主題: 關於砍站
作者: netman2003-10-04 23:38
嗯... 我的 script 本來就不想太"硬"啦,所以才會思考那麼多,
要不然,回到最初期的版本:只要被抓,馬上 block ﹗那麼寫起來應該很簡單的,也不用改目前這支 script 了。

再,我是發現從 wc -l 輸出的結果,不用 awk 來處理,會抓不到啦...
至於 uniq ,的確可以免 cat 。

不過,我發現之前的 limit 有重大疏失:若下面沒有 DROP 規則,無效﹗
我再改一下 v1.11 好了...
主題: 關於砍站
作者: netman2003-10-05 00:04
嗯... 看來,我還是將 LIMIT 機制加回來好了...  ^_^

最新版:
http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

2003-10-04
# Version 1.13
#       1) put back the LIMIT rules
#       2) BugFix: add DROP rules to each limit host.
#       3) remove OUTPUT limit

至於沒有 limit 的版本,我保留如下:
http://study-area.ks.edu.tw/linux/src/block.http-1.12.sh.tgz

若已下載之前的版本,請更新至 v1.12 或 v.1.3 ...
當然,還請繼續幫忙測試及回報哦、、、  ^_^

特別感謝 wiz 兄﹗
主題: 關於砍站
作者: netman2003-10-05 01:07
update AGAIN:

http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

2003-10-04
# Version 1.14
#       1) add program checking for certain packages.
#       2) fix line order for first running.
主題: 關於砍站
作者: wiz2003-10-05 22:36
引述: "netman"
嗯... 我的 script 本來就不想太"硬"啦,所以才會思考那麼多,
要不然,回到最初期的版本:只要被抓,馬上 block ﹗那麼寫起來應該很簡單的,也不用改目前這支 script 了。

再,我是發現從 wc -l 輸出的結果,不用 awk 來處理,會抓不到啦...
至於 uniq ,的確可以免 cat 。

不過,我發現之前的 limit 有重大疏失:若下面沒有 DROP 規則,無效﹗
我再改一下 v1.11 好了...


從wc -l輸出的結果後已經是一個數字,除非你用wc 而已,所以不必要在 awk 去抓第一個數字
我把v1.14 稍微修改一下,這樣會比較有效率
http://august.cs.tku.edu.tw/~wiz/v1.14.patch
主題: 關於砍站
作者: paikang2003-10-05 23:05
不曉得有沒有辦法判斷如果 mySQL 的 connections 太多.
立刻停止 apache. 等待 10秒後, 再重新啟動...
--
因為我的站雖然加上了這個 script. 但是還是會發生 connections 太多的情形...
看來就像有一用很多 Thread 一直 reload 的感覺....
但 apache 一旦重啟後. 又好了...
但過不久還是會發生... 這樣攻防幾個小時後. 就會停止了.. 好像攻擊者去睡覺一樣 (笑)
隔天差不多同時段又會發生 ~_~
我實在沒輒了 T.T
主題: 關於砍站
作者: wiz2003-10-05 23:44
引述: "paikang"
不曉得有沒有辦法判斷如果 mySQL 的 connections 太多.
立刻停止 apache. 等待 10秒後, 再重新啟動...
--
因為我的站雖然加上了這個 script. 但是還是會發生 connections 太多的情形...
看來就像有一用很多 Thread 一直 reload 的感覺....
但 apache 一旦重啟後. 又好了...
但過不久還是會發生... 這樣攻防幾個小時後. 就會停止了.. 好像攻擊者去睡覺一樣 (笑)
隔天差不多同時段又會發生 ~_~
我實在沒輒了 T.T


為什麼mysql的連線太多要停掉apache??
主題: 關於砍站
作者: paikang2003-10-06 00:10
因為停掉 mysql 我怕會有資料 lost...
而停掉 apache. 則暫時讓 mysql 不接收來自 apache (phpBB) 的 SQL 命令...
把 mysql 目前所有的 connections 要處理的 SQL 命令處理完.
再開 apache...
--
純個人想法~
主題: 關於砍站
作者: wiz2003-10-06 00:29
引述: "paikang"
因為停掉 mysql 我怕會有資料 lost...
而停掉 apache. 則暫時讓 mysql 不接收來自 apache (phpBB) 的 SQL 命令...
把 mysql 目前所有的 connections 要處理的 SQL 命令處理完.
再開 apache...
--
純個人想法~

還是不懂...
你的問題在於"連線太多"而使得整台機器停擺,還是只有apache停擺
(or mysql)
主題: 關於砍站
作者: paikang2003-10-06 00:46
應該是說 連線太多 導致 mysql loading 過重.
進而影響主機. apache.... 的效能
--
上面所指的 connections 是指 mysql connetions 不是 http connections...
(也就是指在 mysql 裡. 下 SHOW PROCESSLIST 命令所產生的那些列表)
主題: 關於砍站
作者: netman2003-10-06 13:33
引述: "wiz"
從wc -l輸出的結果後已經是一個數字,除非你用wc 而已,所以不必要在 awk 去抓第一個數字
我把v1.14 稍微修改一下,這樣會比較有效率
http://august.cs.tku.edu.tw/~wiz/v1.14.patch

wc -l 的問題,之前是卡在數字前的"縮排"上,不果我不確定現在的版本如何?若實際可以,那就拿掉 awk 吧。

你的 patch 我等有空再試,修改後再跟大家 update 。
主題: 關於砍站
作者: netman2003-10-06 13:45
引述: "paikang"
應該是說 連線太多 導致 mysql loading 過重.
進而影響主機. apache.... 的效能
--
上面所指的 connections 是指 mysql connetions 不是 http connections...
(也就是指在 mysql 裡. 下 SHOW PROCESSLIST 命令所產生的那些列表)


script 是用 gerp ':80 ' 抓 netstat -na 的結果,因此只會得到 httpd 的 connection 。
如果還要抓 mysql (3306) 的話,將 grep 改一下:
grep -E ':80 | :3306 '

具體的位置,請自己找找吧。
主題: 關於砍站
作者: netman2003-10-06 14:41
最新版本:

http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

2003-10-06

# Version 1.15
#       1) BugFix: get rid off the softquote(") from program check
#       2) new define IPCS_CMD & HTTP_USER variable for ipcs detection
#       3) improve performance by patching some text filtering pipe line

再次感謝 wiz 兄﹗請大家繼續幫忙測試哦...  ^_^

ps. to wiz 兄:
您的 patch 中這行:
grep -v -f  $EXCP_LIST $LIMIT_LIST \
我補上了 -E 的 option 。
因為我建議 EXCP_LIST 用 "|" 來分隔多個 IP 的...
主題: 關於砍站
作者: wiz2003-10-06 17:14
netman大大的動作真快! ^^

因為在我這邊每兩分鐘執行一次,有時候會發現前一次執行的時候卡在那邊,
然後下一次再執行時就都blok住了,我猜可能是一時系統load太重使得前
一次來不及執行完。所以我才想看看能不能減少不必要的動作,增加效率。
剛剛又看了一次程式碼,發現瓶頸在cr_list()這邊,雖然程式碼很簡潔,
但執行起來卻是最費工夫的地方,我把他改寫一下:
1. 修改 ud_list(): 把其中的
    cat ${i}.[1-5] > ${i}.new  改成 sort ${i}.[1-5] > ${i}.new

2. 改寫 cr_list(): 因為所有的input都已經排序過,所以只要one pass就能計算
                   相同address的數目就行了.
代碼: [選擇]

#-- because input file are sorted --#
cr_list () {
        address="0.0.0.0"
        count=1
        for i in $(cat $1); do
          if [ $address != $i ]; then
               if [ $count -ge $2 ]; then
                    echo $address >> $3
               fi
               address=$i
               count=1
          else
               count=`expr $count + 1`
          fi
       done
# The last address can't be echoed because the for-loop encounts EOF.
       if [ $count -ge $2 ] ; then
            echo $address >> $3
       fi
}

因為是急急忙忙改的,一時又想不出來如何寫的更好,所以有點dirty. ^^"
主題: 關於砍站
作者: netman2003-10-07 00:01
cool! 太好了... wiz 兄的修改讓我想到 workable 跟 effective 的差異...  ^_^

等我再改一下,再公佈 v1.16 吧...  感恩哦...
主題: 關於砍站
作者: netman2003-10-07 01:14
最新版本:

http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

2003-10-07

# Version 1.16
#       1) replace cat by sort in ud_list function
#       2) rewrite cr_list function
主題: 關於砍站
作者: netman2003-10-07 02:46
最新版本:

http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

2003-10-07

# Version 1.17
#       1) BugFix: change --sport to --dport for limit rules
#       2) improve performance by patching some text filtering pipe line
主題: 關於砍站
作者: netman2003-10-08 01:52
最新版本:

http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

2003-10-08

# Version 1.18
#       1) BugFIx: add PATH for crontab running
主題: 關於砍站
作者: netman2003-11-27 02:33
最新版本:

http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

2003-11-27

# Version 1.20
#       1) BugFix: correct syntac in pipe line of ipcs detection
主題: 關於砍站
作者: Darkhero2003-11-30 12:42
引述: "netman"
最新版本:

http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz

2003-11-27

# Version 1.20
#       1) BugFix: correct syntac in pipe line of ipcs detection


感想...
這可以當作是 Study-area 的一個 OpenSouce Project 了..
可以考慮再 SourceForge 開一個 Project?...

或是... Study-Area 開一個 cvs 吧..^_^..
主題: 關於砍站
作者: netman2004-05-06 16:38
代碼: [選擇]
# Date: 2004/05/06

# Version 1.21
#       1) BugFix: improve PID determination method
#       2) BugFix: correct TIME_WAIT number teermination


最新版可抓:
http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz
主題: Re: 關於砍站
作者: harrier2004-05-06 17:54
引述: "netman"
由於目前的 phorum 與 www 都放在同一台較慢的機器上(Pentium Pro 200),負載能力備受考驗。今天曾因 "砍站" 行為而兩度中斷服務。


接受 Pentium II 400 SBC 的捐贈否?   XD

不過沒 DRAM 也沒 BackPlane...
主題: Re: 關於砍站
作者: netman2004-05-06 21:28
引述: "harrier"
接受 Pentium II 400 SBC 的捐贈否?   XD

不過沒 DRAM 也沒 BackPlane...

啊... 感謝感謝﹗
不過,現在的機器已不成問題了,因為討論版已經放置在其他機器了。
而這台 pro200 用來跑靜態網頁也足夠了...  ^_^
主題: 關於砍站
作者: netman2004-05-18 17:17
代碼: [選擇]
# Date: 2004/05/18

# Version 1.22
#       1) BugFix: correct PERM_LIST re-sorting method
#       2) BugFix: touch back list file in ud_list function


最新版可抓:
http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz
主題: 關於砍站
作者: netman2004-05-28 16:14
代碼: [選擇]
# Date: 2004/05/28

# Version 1.22
#       1) BugFix: correct PERM_LIST sorting method
#       2) BugFix: correct cr_list function, which was having one ip only.


最新版可抓:
http://study-area.ks.edu.tw/linux/src/block.http.sh.tgz
主題: 關於砍站
作者: rbcteam2004-06-08 18:22
您好:
我是http://www.roundballcity.com圓球城市的站務人員,
近3~4個月我們的網站經常會在台灣時間 中午及凌晨 12:00 前後發生
(最近甚至一個下午都連不上)
cpu loading 及 cpu usage 飆昇,同時也會發生 mysql request 遽增,
然後整台主機就當掉了(或是ping 的到但是連不上)。
因此我們也一再搬家,目前用的是單一主機的方案,
環境是:
os:freebsd 5.1
apache 1.3.31, mysql 4.0, php 4.3.1
--------------------------------------------------------
因為主機在美國,所以只能用 ssh 連上去
目前也有安裝 webmin 及 phpMyAdmin
----------------------------------------------------------
使用 netstat 檢查網路連線時,經常會看到 超過 20 個連線的 ip,
(這些連線都是連 http 服務)
懷疑可能是有人砍站。
經朋友介紹,發現貴站有提供一支防砍站的程式,
因為我對 unix-like 平台並不熟,同時對於 bash 也不是很了解,
(我對 windows 平台較熟,在 windows 平台使用過 apache 及 mysql
  對程式是幾乎不懂)

本來想自己慢慢搞清楚這支 程式
但是因為目前狀況越來越糟,
所以想冒昧請教您,

這支程式能不能在 FREEBSD 5.1 平台上使用?

需要那些套件的配合?
看程式內容應該是需要 iptable,
如果 iptable 沒有安裝,是不是只要安裝上去就可以了?

我們的另一個站管在安裝apache時 user 是設為 www
是不是在程式中的 HTTP_USER 要改為 www

因為我曾經利用 netstat 發現有大量連線(15~40)的 ip,
是不是有人工的方法可以將這些 IP 寫到一個檔裡面,阻檔這些 IP?

我應該看那一個 log?
我有看過 http-access.log
但是看不出什麼東西,
而且從 netstat 中看到的 大量連線 ip ,
在  http-access.log  都沒看到,
所以想請教是不是我看錯log。
----------------------------------------------------
我個人是因為佩服圓球的站長長期自費維持這樣一個站台,
所以才義務幫忙圓球的站長架站,
xoops 架起來是蠻簡單的,
但是現在發生這種狀況就超出我的能力啦,
想來是蠻不自量力的,
希望能得到你您的幫助。
----------------------------------------------------------------


thanks

RBC_TEAM
主題: 關於砍站
作者: netman2004-06-08 23:16
哦,因為 script 是針對 linux 環境設計的,
其中調用的一些命令(如 iptables)恐怕在 freebsd 上沒法使用。
要轉移的話,可能需要懂 freebsd 的朋友幫忙,這方面我就無能為力了...

不過,就我所了解,freebsd 應改不會那麼容易被砍倒吧?
因為我們的 phorum 也是在 freebsd 上,且也常會被砍。
目前尚未發生過因砍站而當機的情形。
或許,你請朋友幫忙看看真正的原因?
主題: 關於砍站
作者: 梁楓2004-06-09 00:13
誤會...
phorum 我也有一隻自動在防砍站的scripts... 不過寫的很簡漏...
所以並非 phorum 沒有在防砍站!

之前phorum 也有因被砍站而暫時無法回應的狀況!

修改以下的 $Max_Connect_Number 即是最多能有多少連線
超過的話這個ip就會被deny掉...

我是放在crontab 每五分鐘跑一次
每天delete 一次 950 這行條件!

代碼: [選擇]

#!/usr/bin/perl
# 防砍站小程式
# 肉腳梁楓製作
# v 0.0超級不穩版
# 製作日期:2003.1.31
# 版權 GPL

# 資料設定

$Max_Connect_Number = 50;       # 最多能有多少連結
$IPFW_Number = 950;             # 防火牆規則設定在第幾條規則 沒必要可以不動
$PATH = '/tmp/';                # 暫存檔路徑
$Netstat = 'temp1';             #暫存檔1 沒必要就不用亂動了!
$CN = 'temp2';                  #暫存檔2 沒必要就不用亂動了!C

#系統設定

$USR_BIN_PATH = '/usr/bin/';
$BIN_PATH = '/bin/';
$SBIN_PATH = '/sbin/';


#以下就可以不用動了

system("$USR_BIN_PATH"."netstat -na > $PATH$Netstat");

open(IPFW,$PATH.$Netstat);
open(IPFW2,">$PATH$CN") ||die("can't open IPFW2 file\n");

while($line = <IPFW>){
        $line =~ s/ +/,/g;
        print IPFW2 "$line" || die("can't input IPFW2");

}
close IPFW;
close IPFW2;
system("$BIN_PATH"."rm -rf $PATH$Netstat");
system("$USR_BIN_PATH"."cut -f 1,5 -d , $PATH$CN > $PATH$Netstat");
open(IPFW,$PATH.$Netstat);
open(IPFW2,">$PATH$CN");
while(<IPFW>){
        ($line[0],$line[1],$line[2]) = split(/,/);
        chomp($_);

        chomp($line[0],$line[1]);
        if($line[0] eq "tcp4"){
                ($IP[0],$IP[1],$IP[2],$IP[3]) = split(/\./,$line[1]);
                if($IP[0] > 1 and $IP[0] != 127){
                        if($IP[0] == 203 and $IP[1] == 160 and $IP[2] >=224 and $IP[2] <=255){}else{
                                print IPFW2 "$IP[0].$IP[1].$IP[2].$IP[3]\n";
                        }
                }
        }
}
close IPFW;
close IPFW2;
system("$USR_BIN_PATH"."sort $PATH$CN | $USR_BIN_PATH"."uniq -c > $PATH$Netstat");

open(IPFW,$PATH.$Netstat);
open(IPFW2,">$PATH$CN");
while($line = <IPFW>){
        $line =~ s/ +/,/g;
        ($IP[0],$IP[1],$IP[2])=split(/\,/,$line);
        if($IP[1] >= $Max_Connect_Number){
                chomp($IP[2]);
                system("$SBIN_PATH"."ipfw add $IPFW_Number deny IP from $IP[2] to me");
                system("$SBIN_PATH"."ipfw add $IPFW_Number deny IP from me to $IP[2]");
                print "$SBIN_PATH"."ipfw add $IPFW_Number deny IP from $IP[2] to me\n";
        }
}
close IPFW;
close IPFW2;
system("$BIN_PATH"."rm -rf $PATH$Netstat;rm -rf $PATH$CN");
主題: 關於砍站
作者: netman2004-06-09 00:57
哦... 原來小基哥早就寫好了,怎麼都沒聽你說過呢?
主題: 關於砍站
作者: 梁楓2004-06-09 01:03
有說啊 @@
很久以前就有說了哩 @@
如果認真找一下的話...應該還能找到當時的罪證 haha
主題: 關於砍站
作者: rbcteam2004-06-09 11:00
請問  梁楓 兄 這支程式 是擺上去就能用嗎?
排程我會設,
但是其他的技術細節能否麻煩說明一下,
譬如
必須有那些套件,這個我知道要用 which 去查
或是要建立什麼檔案之類的。

我們這兩天幾乎完全不能連線,
直到把討論區給關了,
狀況才好一些。
發常感謝。
主題: 關於砍站
作者: 梁楓2004-06-09 12:40
只要有ipfw 應該就能用吧
我幾乎沒有使用其它要特別安裝的程式

不過記得用root 執行
並且要支援ipfw的功能
主題: 關於砍站
作者: Darkhero2004-06-09 14:31
剛剛去看了您的圓球城市...
真是非常棒的籃球運動資訊網站...

希望梁楓大大的程式能幫上你的忙...讓你的網站更穩定更好..^_^...
主題: 關於砍站
作者: rbcteam2004-06-09 14:50
再請教 梁楓 兄
我是設 每5分鐘跑一次,
只要有 15 個連線就攔截

不過在用手動執行時
有時會出現以下訊息(IP 的部分會不同):

ipfw: getsockopt(IP_FW_ADD): Protocol not available
ipfw: getsockopt(IP_FW_ADD): Protocol not available
/sbin/ipfw add 950 deny IP from 202.136.164.105 to me
這是代表執行成功嗎?
還有一個問題是,
如果要看 log 該看那一個?
我想知道攔到那些 IP 的話要如何得知?

謝謝
主題: 關於砍站
作者: 梁楓2004-06-09 14:58
設15 個連結我比較怕只要有 NAT 就可能會超過,稍微在用大一點吧!

看來你的ipfw 並沒有啟動?
在終端機下只打“ipfw show”給我看一下?
主題: 關於砍站
作者: rbcteam2004-06-09 15:53
訊息如下:
su-2.05b# ipfw show
ipfw: getsockopt(IP_FW_GET): Protocol not available
沒有啟動的話,該如何啟動?
主題: 關於砍站
作者: 梁楓2004-06-09 16:22
沒有啟動就有點麻煩了...要用外掛的...

不然 @@ 你借我一個可以sudo 的帳號
我進去幫你看? XD
主題: 關於砍站
作者: damon2004-06-09 18:16
直接load ipfw module不就好了,搜尋一下,以前statue有貼過方法
主題: 關於砍站
作者: 梁楓2004-06-09 19:04
damon 對一個真的不懂freebsd的人,要做那些還是有難度的...
* 主要是我懶的一個一個把指令背出來啦...
主題: 關於砍站
作者: Darkhero2004-06-10 10:20
引述: "梁楓"
主要是我懶的一個一個把指令背出來啦...

我想這才是重點....
主題: 關於砍站
作者: netman2004-06-10 13:30
今天 phorum 好慢....
我用 route add -host x.x.x.x 127.0.0.1 將一些線斷掉才好轉。
看來又被砍了,小基加油啊~~~
主題: 關於砍站
作者: 梁楓2004-06-10 13:45
現在砍站只有直接檢查同時間有幾個同IP的上線
我設為超過50個才給他deny掉!

應該是因為這樣吧,因為是用netstat 得到訊息
所以恐怕不知道那邊是經過nat上來的 ><
怕會誤砍!
主題: 關於砍站
作者: DannisChen2004-07-01 11:03
梁兄:
代碼: [選擇]

                system("$SBIN_PATH"."ipfw add $IPFW_Number deny IP from $IP[2] to me");
                system("$SBIN_PATH"."ipfw add $IPFW_Number deny IP from me to $IP[2]");


第二行有效嗎? 我這裡 ipfw show 的結果
12345     23809      1112825 deny ip from 4.23.29.135 to me
12345         0            0 deny ip from me to 4.23.29.135

第二段永遠是 0 蛋
主題: 關於砍站
作者: DannisChen2004-07-01 11:22
再問一下:
如果我不要 ban 掉某個 ip , 這樣子改可以嗎? 我不會寫 perl , 請協助謝謝.
代碼: [選擇]

        if($IP[1] >= $Max_Connect_Number){
                chomp($IP[2]);
                if($IP[2] <> "xxx.xxx.xxx.xxx"){
                        system("$SBIN_PATH"."ipfw add $IPFW_Number deny IP from $IP[2] to me");
                        system("$SBIN_PATH"."ipfw add $IPFW_Number deny IP from me to $IP[2]");
                        print "$SBIN_PATH"."ipfw add $IPFW_Number deny IP from $IP[2] to me\n";
                }
        }
主題: 關於砍站
作者: 梁楓2004-07-01 13:09
引述: "DannisChen"
梁兄:
代碼: [選擇]

                system("$SBIN_PATH"."ipfw add $IPFW_Number deny IP from $IP[2] to me");
                system("$SBIN_PATH"."ipfw add $IPFW_Number deny IP from me to $IP[2]");


第二行有效嗎? 我這裡 ipfw show 的結果
12345     23809      1112825 deny ip from 4.23.29.135 to me
12345         0            0 deny ip from me to 4.23.29.135

第二段永遠是 0 蛋


這二個有不同的效果
一個是由本地到遠端
一個是由逺端到本地

為的是避免ban掉的時候,對方在傳大檔


比如你的防火牆規則在12345條,你不想ban掉的只要設在12345之前就行了
主題: 關於砍站
作者: kingbbs2004-10-07 09:27
請問一下~

CL_U: 75 <--- 我已經設到 80
CL_S: 10 <--- 這也設到 30
HC_N: 300 <--- 這個加到  2000
HC_U: 30 <--- 這固加到 255

每5分 run 一次,結果沒30分鐘,大約就擋下了近 100 個 IP ..@@
針對線上總人數約 600~900 人的 server 來說,這好像誤擋率滿高的..
是否可以請教各位,指點一下小弟該如何去設定呢 ?

OS -> Fedora RC1
HW -> P4-1.8G + 512ECC RAM

在人多時,隨便被砍一下 loading 就破 300 了...
主題: 關於砍站
作者: netman2004-10-07 11:30
嗯, 我的 script 只適用在"小站"啦...
若是訪問量太高, 用 shell script 本身就是一個錯誤...  ^_^
主題: 關於砍站
作者: kingbbs2004-10-07 16:43
引述: "netman"
嗯, 我的 script 只適用在"小站"啦...
若是訪問量太高, 用 shell script 本身就是一個錯誤...  ^_^


您就別客氣了~ 就請指導一下小弟,該怎麼去調整即吧 8) ..

像鳥哥的網站有時也是數百人在線上,還是小弟該改用鳥哥的 script 呢 ?
主題: 關於砍站
作者: netman2004-10-07 16:59
嗯, 不是客氣啦...
因為流量大時, 處理的資料很多, 用 shell script 會應付不來.
若你能解決問題就最好, 用誰寫的都可以...
主題: 可否請教安裝方法呢 不好意思
作者: yeh1052004-12-15 02:43
Deaar 各位大大,

     因我是菜鳥 可否問一下 安裝步驟呢 是用ROOT 設 crotab
     及直接跑他就好了嗎,有沒要新增檔案或其他注意的.
     不好意思問那基本問題 因我不懂會怕怕 可否指導一下  謝謝 ..
主題: 關於砍站
作者: netman2004-12-15 12:50
是的, 將 script 裝好後, 就設定 crontab 就行了.
只是偷懶一直沒寫好設定細節, 你或可參考前面的討論看看的.

此外, 另一好友 song 兄亦提出過他的修改版本, 很值得大家參觀:
http://www.ossacc.org/Members/song/about_block.http.sh
主題: 關於砍站
作者: bjhuang2005-02-06 02:34
這是我的netstat -na部分結果,大部分的IP都是不完整的,不知道為何會這樣?這種IP似乎用這隻script檔不到,有辦法解決嗎?

代碼: [選擇]

tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:1469 TIME_WAIT
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:3517 TIME_WAIT
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:66.249.64.:40927 TIME_WAIT
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:2165 ESTABLISHED
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4214 TIME_WAIT
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:3881 TIME_WAIT
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4268 TIME_WAIT
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4387 ESTABLISHED
tcp        0    234 ::ffff:220.135.58.20:80 ::ffff:205.250.15:63667 ESTABLISHED
tcp        0    631 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4259 ESTABLISHED
tcp        0    627 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4261 ESTABLISHED
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4198 TIME_WAIT
tcp        0    631 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4248 ESTABLISHED
tcp        0    631 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4254 ESTABLISHED
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:66.249.64.:52346 TIME_WAIT
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4048 ESTABLISHED
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:61.229.217.:4670 TIME_WAIT
tcp        0    625 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4297 ESTABLISHED
tcp        0    629 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:4298 ESTABLISHED
tcp        0   1185 ::ffff:220.135.58.20:80 ::ffff:205.250.15:61913 ESTABLISHED
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:3906 TIME_WAIT
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:211.74.62.2:2136 TIME_WAIT
tcp        0     52 ::ffff:220.135.58.20:22 ::ffff:218.166.205:4197 ESTABLISHED
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:1671 TIME_WAIT
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:139.175.55.:1286 ESTABLISHED
tcp        0      0 ::ffff:220.135.58.20:80 ::ffff:66.249.64.:64849 TIME_WAIT
u
主題: 關於砍站
作者: netman2005-02-13 01:23
sorry, 若 IP 不完整, 那我的 script 就沒用了~~~
主題: 關於砍站
作者: rexkyo2005-07-07 18:17
各位學長大家好 ^^"
因為公司這陣子有需要用到防砍站測試~
系統:Fedora 3
下載最新版後~ 執行結果如下!
這樣是正常的嗎@@"
我是用另依台電腦作砍站測試~

代碼: [選擇]
[root@localhost /]# sh block.http.sh
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
warning, got duplicate tcp line.
        limit   current
CL_U:   5       92
CL_S:   1       7
HC_N:   200     190
HC_U:   20      1
TW_N:   20      210
主題: 關於砍站
作者: paicaso2006-09-29 20:27
可請大大再提供一下檔案嗎
主題: 關於砍站
作者: paicaso2006-10-01 02:20
http://study-area.org/linux/src/block.http.sh.tgz
主題: 關於砍站
作者: paicaso2006-10-01 03:03
請問與鳥哥之"砍站軟體與 Nimda 病毒的抵擋 scripts:"
http://linux.vbird.org/linux_server/0360apache.php#getsites
以防火牆方式來阻擋這些惡意IP之主要差異有哪些
謝謝
主題: 關於砍站
作者: netman2006-10-01 16:31
to rexkyo :
連續多跑幾次就會發現效果了...  ^_^

to paicaso:
鳥哥的 script 我沒詳細研究過.
不過, 我猜原理都差不多: 先按條件抓出 IP, 然後擋掉.

p.s.
我的這隻 script 好久沒維護了. 現在或許有更方便更有效的方法吧?
主題: 關於砍站
作者: shchin2006-10-05 12:18
目前用FC4  LINUX
TW_N設20 不過TIME_WAIT也會出現一二百個 不知道什麼原因?
另外 這程式能不能 擋過多的SYN_RECV ? 因為 SYN_REVC我都有好幾百個
我這個小站最多就30多人
跑那麼多SYN_REVC 應該是被SYN攻擊了
用SYN_COOKIE 設1 好像沒用@@
這二天被煩死
想說這程式可能有點用
不過還是速度還是快不起來
有沒有什麼好方法
查了所有SYN的防禦
用了好像都沒用