作者 主題: 關於砍站  (閱讀 195761 次)

0 會員 與 1 訪客 正在閱讀本文。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #90 於: 2003-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 兄﹗

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #91 於: 2003-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.

wiz

  • 可愛的小學生
  • *
  • 文章數: 14
    • 檢視個人資料
關於砍站
« 回覆 #92 於: 2003-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

paikang

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
關於砍站
« 回覆 #93 於: 2003-10-05 23:05 »
不曉得有沒有辦法判斷如果 mySQL 的 connections 太多.
立刻停止 apache. 等待 10秒後, 再重新啟動...
--
因為我的站雖然加上了這個 script. 但是還是會發生 connections 太多的情形...
看來就像有一用很多 Thread 一直 reload 的感覺....
但 apache 一旦重啟後. 又好了...
但過不久還是會發生... 這樣攻防幾個小時後. 就會停止了.. 好像攻擊者去睡覺一樣 (笑)
隔天差不多同時段又會發生 ~_~
我實在沒輒了 T.T

wiz

  • 可愛的小學生
  • *
  • 文章數: 14
    • 檢視個人資料
關於砍站
« 回覆 #94 於: 2003-10-05 23:44 »
引述: "paikang"
不曉得有沒有辦法判斷如果 mySQL 的 connections 太多.
立刻停止 apache. 等待 10秒後, 再重新啟動...
--
因為我的站雖然加上了這個 script. 但是還是會發生 connections 太多的情形...
看來就像有一用很多 Thread 一直 reload 的感覺....
但 apache 一旦重啟後. 又好了...
但過不久還是會發生... 這樣攻防幾個小時後. 就會停止了.. 好像攻擊者去睡覺一樣 (笑)
隔天差不多同時段又會發生 ~_~
我實在沒輒了 T.T


為什麼mysql的連線太多要停掉apache??

paikang

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
關於砍站
« 回覆 #95 於: 2003-10-06 00:10 »
因為停掉 mysql 我怕會有資料 lost...
而停掉 apache. 則暫時讓 mysql 不接收來自 apache (phpBB) 的 SQL 命令...
把 mysql 目前所有的 connections 要處理的 SQL 命令處理完.
再開 apache...
--
純個人想法~

wiz

  • 可愛的小學生
  • *
  • 文章數: 14
    • 檢視個人資料
關於砍站
« 回覆 #96 於: 2003-10-06 00:29 »
引述: "paikang"
因為停掉 mysql 我怕會有資料 lost...
而停掉 apache. 則暫時讓 mysql 不接收來自 apache (phpBB) 的 SQL 命令...
把 mysql 目前所有的 connections 要處理的 SQL 命令處理完.
再開 apache...
--
純個人想法~

還是不懂...
你的問題在於"連線太多"而使得整台機器停擺,還是只有apache停擺
(or mysql)

paikang

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
關於砍站
« 回覆 #97 於: 2003-10-06 00:46 »
應該是說 連線太多 導致 mysql loading 過重.
進而影響主機. apache.... 的效能
--
上面所指的 connections 是指 mysql connetions 不是 http connections...
(也就是指在 mysql 裡. 下 SHOW PROCESSLIST 命令所產生的那些列表)

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #98 於: 2003-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 。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #99 於: 2003-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 '

具體的位置,請自己找找吧。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #100 於: 2003-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 的...

wiz

  • 可愛的小學生
  • *
  • 文章數: 14
    • 檢視個人資料
關於砍站
« 回覆 #101 於: 2003-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. ^^"

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #102 於: 2003-10-07 00:01 »
cool! 太好了... wiz 兄的修改讓我想到 workable 跟 effective 的差異...  ^_^

等我再改一下,再公佈 v1.16 吧...  感恩哦...

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #103 於: 2003-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

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #104 於: 2003-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

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #105 於: 2003-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

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #106 於: 2003-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

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
關於砍站
« 回覆 #107 於: 2003-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 吧..^_^..
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #108 於: 2004-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

harrier

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 1856
  • 性別: 男
    • 檢視個人資料
    • 國屬武裝兵
Re: 關於砍站
« 回覆 #109 於: 2004-05-06 17:54 »
引述: "netman"
由於目前的 phorum 與 www 都放在同一台較慢的機器上(Pentium Pro 200),負載能力備受考驗。今天曾因 "砍站" 行為而兩度中斷服務。


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

不過沒 DRAM 也沒 BackPlane...
...90Net(90:1200/1203),GameNET(99:700/707),ALLNet(92:9200/3111),InfoNet(30:100/103)..MaximusCBCS(浮懷),AirNet,TenderNet,StormNet,FidoNet...
<<- www.nas.vg ->>

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
Re: 關於砍站
« 回覆 #110 於: 2004-05-06 21:28 »
引述: "harrier"
接受 Pentium II 400 SBC 的捐贈否?   XD

不過沒 DRAM 也沒 BackPlane...

啊... 感謝感謝﹗
不過,現在的機器已不成問題了,因為討論版已經放置在其他機器了。
而這台 pro200 用來跑靜態網頁也足夠了...  ^_^

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #111 於: 2004-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

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #112 於: 2004-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

rbcteam

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
    • http://www.roundballcity.com/
關於砍站
« 回覆 #113 於: 2004-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

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #114 於: 2004-06-08 23:16 »
哦,因為 script 是針對 linux 環境設計的,
其中調用的一些命令(如 iptables)恐怕在 freebsd 上沒法使用。
要轉移的話,可能需要懂 freebsd 的朋友幫忙,這方面我就無能為力了...

不過,就我所了解,freebsd 應改不會那麼容易被砍倒吧?
因為我們的 phorum 也是在 freebsd 上,且也常會被砍。
目前尚未發生過因砍站而當機的情形。
或許,你請朋友幫忙看看真正的原因?

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
關於砍站
« 回覆 #115 於: 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");

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
關於砍站
« 回覆 #116 於: 2004-06-09 00:57 »
哦... 原來小基哥早就寫好了,怎麼都沒聽你說過呢?

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
關於砍站
« 回覆 #117 於: 2004-06-09 01:03 »
有說啊 @@
很久以前就有說了哩 @@
如果認真找一下的話...應該還能找到當時的罪證 haha

rbcteam

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
    • http://www.roundballcity.com/
關於砍站
« 回覆 #118 於: 2004-06-09 11:00 »
請問  梁楓 兄 這支程式 是擺上去就能用嗎?
排程我會設,
但是其他的技術細節能否麻煩說明一下,
譬如
必須有那些套件,這個我知道要用 which 去查
或是要建立什麼檔案之類的。

我們這兩天幾乎完全不能連線,
直到把討論區給關了,
狀況才好一些。
發常感謝。

梁楓

  • 俺是博士!
  • *****
  • 文章數: 6220
    • 檢視個人資料
關於砍站
« 回覆 #119 於: 2004-06-09 12:40 »
只要有ipfw 應該就能用吧
我幾乎沒有使用其它要特別安裝的程式

不過記得用root 執行
並且要支援ipfw的功能