感谢大大的分享
我来补充一下LINUX的简单防砍站的方法
建立一个档名为block_http
内容如下
复制程式
 
#!/bin/sh
## 以下请自行依照您的环境进行合宜的设定
# 设定网页伺服器的通讯埠号, 一般通用的埠号为 80
HTTP_PORT="80"
# 设定要忽略的 IP, 每个 IP 以 "|" 隔开, 这些 IP 将永远不会被阻挡。
# 此变数数请务必至少设定一个 IP, 否则会造成 script 无法运作
SKIP_IPS="127.0.0.1|0.0.0.0"
# 设定允许同时连线网页伺服器的次数
MAX_TRY=10
# 设定一个链名, 所有阻挡特定 IP 的规则将统一放置于此链中
BLOCKCHAIN="blockhttp"
## 以下设定一般情形下保留预设值即可
# 记录档的路径与档案名称
LOGFILE="/var/log/block_http.log"
# 记录档内的日期格式, 关于格式的代号与意义, 请执行 man date 阅读其说明文件
DATEFMT="%Y/%m/%d %R"
# 设定系统执行档的路径
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# 设定阻挡特定 IP 的函式
blockip () {
   [ "`iptables -L -n | grep $BLOCKCHAIN | wc -l`" -lt 2 ] && {
      iptables -N $BLOCKCHAIN
      iptables -A INPUT -j $BLOCKCHAIN
   }
   iptables -L $BLOCKCHAIN -n | grep $1 >/dev/null 2>&1 || \
   iptables -A $BLOCKCHAIN -s $1 -j DROP
}
# 列出目前所有连线, 并计算各 IP 的重复次数
netstat -tn | awk "/:$HTTP_PORT .*TIME_WAIT/ { 
   match(\$5, /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/);
   ip=substr(\$5, RSTART, RLENGTH)
   if ( ip ~ /$SKIP_IPS/ ) {}
   else print ip}" | \
sort | uniq -c | \
while read num ip; do
   # 如果 $num 内的数字大于 $MAX_TRY 所指定的次数, 则使用 blockip 函式
   # 阻挡 $ip 的连线
   if [ "$num" -ge "$MAX_TRY" ]; then
      blockip $ip
      echo "`date +"$DATEFMT"` blocking $ip... CONN=$num" >> $LOGFILE
   fi
done
 将此档放入/usr/local/bin/的目录下
然后执行 crontab -e 加入内容如下
复制程式
* /2 * * * * /usr/local/bin/block_http
 如果不懂用法,请参考这里
http://linux.vbird.org/lin...30cron.php以上设定每隔2分钟检查一次,检查若发现某个IP连线次数超过MAX_TRY的值,就阻挡该IP
------------------------------------------------------------------------
每隔一段时间,自动清除BLOCKCHAIN
crontab -e 
复制程式
00 01 * * * /sbin/iptables -F blockhttp