TA的每日心情 | 怒 前天 13:01 |
---|
签到天数: 1643 天 [LV.Master]伴坛终老
|
当网站被恶意攻击时,又没有硬防的情况下,可以使用下面方法,此方法是定期检查Apache的进程数,发现连接过多然后自动重启Apache,虽然有些笨,但还是比较有效的.
新建一Shell脚本文件,命名为checkapache,内容如下:- #!/bin/sh -e
- #
- # Check overload apache2
- #
- #最大Apache进程数,超过则重启Apache
- maxpids=600
- #检查进程时间间隔
- interval=10
- #日志文件
- logfile=”/var/log/checkapache.log”
- 以上文件内容大致意思是每隔10秒种检查一次Apache进程数,如果超过600个Apache进程,则重启Apache服务,当然,这个maxpids和Interval参数依服务器承受能力而定。
- echo ” Starting CheckApache MaxConn: $maxpids ” >> $logfile
- date >> $logfile
- while [ 1 ]
- do
- pnums=$(ps ax | grep “[/]usr/sbin/apache2″ | wc -l)
- if [ “$pnums” = “0″ ]; then
- sleep 5
- echo “**********************************************” >> $logfile
- date >> $logfile
- echo “———Starting apache2….—————” >> $logfile
- /etc/init.d/apache2 start >> $logfile
- fi
- #pids=$(ps ax | grep “[/]usr/sbin/apache2″ | awk ‘{print $1}’)
- if [ $pnums -gt $maxpids ]; then
- #echo $pnums
- #for i in $pids; do
- # kill $i
- #done
- #sleep 10
- echo “**********************************************” >> $logfile
- date >> $logfile
- echo “Too much pids: $pnums ..Re Starting apache2….” >> $logfile
- /etc/init.d/apache2 stop >> $logfile
- sleep 5
- /etc/init.d/apache2 start >> $logfile
- sleep 2
- fi
- sleep $interval
- done
复制代码 为了保障checkapache能正常运行工作,新建一个Cron来定时驱动另一个Shell文件checkrun,定期检查checkapache是否正常工作,checkrun的内容如下:- #!/bin/sh -e
- # /var/log/checkrun
- #
- # Written by rocdk890
- DAEMON=/var/log/checkapache
- PIDFILE=/var/log/checkapache.pid
- NAME=ChechApache
- test -x $DAEMON || exit 0
- . /lib/lsb/init-functions
- if [ -f $PIDFILE ]
- then
- PID=`cat $PIDFILE`
- if [ “x$PID” != “x” ] && kill -0 $PID 2>/dev/null ; then
- STATUS=”PID: $PID :running”
- RUNNING=1
- else
- STATUS=”PID $PID :not running”
- RUNNING=0
- fi
- else
- STATUS=”NO PIDFILE:not running”
- RUNNING=0
- fi
- echo ” * $STATUS”
- case “$1″ in
- start)
- log_begin_msg “Starting Apache-Check server: $NAME”
- if [ $RUNNING = 1 ]; then
- log_begin_msg “is running”
- else
- sudo start-stop-daemon –start –background -m –pidfile $PIDFILE –exec $DAEMON && log_end_msg 0 || log_end_msg 1
- fi
- ;;
- stop)
- log_begin_msg “Stopping Apache-Check server: $NAME”
- kill -9 $PID && log_end_msg 0 || log_end_msg 1
- #sudo start-stop-daemon –stop –pidfile $PIDFILE –signal 1 –exec $DAEMON && log_end_msg 0 || log_end_msg 1
- ;;
- *)
- log_success_msg “Usage: $DEAMON {start|stop}”
- exit 1
- ;;
- esac
- exit 0
复制代码 此checkrun脚本由Cron定期执行,检查checkapache这个脚本是否运行正常,如果发现checkapache没有运行,则重新启动它。
cron新加指令代码行如:*/1 * * * * /var/log/checkshd start
意即每一分钟检查一次,可以定期检查一下日志文件/var/log/checkapache.log的内容,掌握Apache服务器的运行状态.
|
|