誤會...
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");