黑帽联盟

 找回密码
 会员注册
查看: 1290|回复: 0
打印 上一主题 下一主题

[脚本语言] 防止Apache并发连接太多,超负荷运行导致系统崩溃

[复制链接]

895

主题

38

听众

3322

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情

    前天 13:01
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    当网站被恶意攻击时,又没有硬防的情况下,可以使用下面方法,此方法是定期检查Apache的进程数,发现连接过多然后自动重启Apache,虽然有些笨,但还是比较有效的.

    新建一Shell脚本文件,命名为checkapache,内容如下:
    1. #!/bin/sh -e
    2. #
    3. # Check overload apache2
    4. #

    5. #最大Apache进程数,超过则重启Apache
    6. maxpids=600
    7. #检查进程时间间隔
    8. interval=10
    9. #日志文件
    10. logfile=”/var/log/checkapache.log”
    11. 以上文件内容大致意思是每隔10秒种检查一次Apache进程数,如果超过600个Apache进程,则重启Apache服务,当然,这个maxpids和Interval参数依服务器承受能力而定。
    12. echo ” Starting CheckApache MaxConn: $maxpids ” >> $logfile
    13. date >> $logfile
    14. while [ 1 ]
    15. do
    16. pnums=$(ps ax | grep “[/]usr/sbin/apache2″ | wc -l)
    17. if [ “$pnums” = “0″ ]; then
    18. sleep 5
    19. echo “**********************************************” >> $logfile
    20. date >> $logfile
    21. echo “———Starting apache2….—————” >> $logfile
    22. /etc/init.d/apache2 start >> $logfile
    23. fi
    24. #pids=$(ps ax | grep “[/]usr/sbin/apache2″ | awk ‘{print $1}’)
    25. if [ $pnums -gt $maxpids ]; then
    26. #echo $pnums
    27. #for i in $pids; do
    28. #    kill $i
    29. #done
    30. #sleep 10
    31. echo “**********************************************” >> $logfile
    32. date >> $logfile
    33. echo “Too much pids: $pnums ..Re Starting apache2….” >> $logfile
    34. /etc/init.d/apache2 stop >> $logfile
    35. sleep 5
    36. /etc/init.d/apache2 start >> $logfile
    37. sleep 2
    38. fi
    39. sleep $interval
    40. done
    复制代码
    为了保障checkapache能正常运行工作,新建一个Cron来定时驱动另一个Shell文件checkrun,定期检查checkapache是否正常工作,checkrun的内容如下:
    1. #!/bin/sh -e
    2. # /var/log/checkrun
    3. #
    4. # Written by rocdk890
    5. DAEMON=/var/log/checkapache
    6. PIDFILE=/var/log/checkapache.pid
    7. NAME=ChechApache
    8. test -x $DAEMON || exit 0
    9. . /lib/lsb/init-functions
    10. if [ -f $PIDFILE ]
    11. then
    12. PID=`cat $PIDFILE`
    13. if [ “x$PID” != “x” ] && kill -0 $PID 2>/dev/null ; then
    14. STATUS=”PID: $PID :running”
    15. RUNNING=1
    16. else
    17. STATUS=”PID $PID :not running”
    18. RUNNING=0
    19. fi
    20. else
    21. STATUS=”NO PIDFILE:not running”
    22. RUNNING=0
    23. fi
    24. echo ” * $STATUS”
    25. case “$1″ in
    26. start)
    27. log_begin_msg “Starting Apache-Check server: $NAME”
    28. if [ $RUNNING = 1 ]; then
    29. log_begin_msg “is running”
    30. else
    31. sudo start-stop-daemon –start –background -m –pidfile $PIDFILE –exec $DAEMON && log_end_msg 0 || log_end_msg 1
    32. fi
    33. ;;
    34. stop)
    35. log_begin_msg “Stopping Apache-Check server: $NAME”
    36. kill -9 $PID && log_end_msg 0 || log_end_msg 1
    37. #sudo start-stop-daemon –stop –pidfile $PIDFILE –signal 1 –exec $DAEMON && log_end_msg 0 || log_end_msg 1
    38. ;;
    39. *)
    40. log_success_msg “Usage: $DEAMON {start|stop}”
    41. exit 1
    42. ;;
    43. esac
    44. exit 0
    复制代码
    此checkrun脚本由Cron定期执行,检查checkapache这个脚本是否运行正常,如果发现checkapache没有运行,则重新启动它。

    cron新加指令代码行如:*/1 * * * * /var/log/checkshd start

    意即每一分钟检查一次,可以定期检查一下日志文件/var/log/checkapache.log的内容,掌握Apache服务器的运行状态.
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部