通过命令查看服务器上一共开了多少的 php-cgi 进程
ps -fe |grep "php"|grep -v "grep"|wc -l
查看已经有多少个php-cgi进程用来处理tcp请求
netstat -anop |grep "php"|grep -v "grep"|wc -l
ps -fe |grep "php"|grep -v "grep"|wc -l
查看已经有多少个php-cgi进程用来处理tcp请求
netstat -anop |grep "php"|grep -v "grep"|wc -l
#! /bin/sh
# 防止SYN_RECV攻击的脚本
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
# 设置某个ip需要被列入黑名单的时间,单位是分钟
TIME_ZONE=30
DATE_ZONE=30
SYN_critical=500
DATE=$(date +%Y%m%d)
HOUR=$(date +%H)
MINITE=$(date +%M)
DATE_AGO=$(date -d "$DATE_ZONE days ago" +%Y%m%d)
DATE_1D_AGO=$(date -d "1 days ago" +%Y%m%d)
TIME_AGO=$(date -d "$TIME_ZONE min ago" +%H%M)
# 正常日志
LOG=/home/tools/syn_flood/syn.log
# 30分钟前的ip记录
LOG_ago=/home/tools/syn_flood/syn.log.ago
# 30分钟以内的ip记录
LOG_current=/home/tools/syn_flood/syn.log.current
#设置轮转日志的大小范围,单位k
LIMIT=16384
export PATH TIME_ZONE DATE_ZONE SYN_critical DATE HOUR MINITE DATE_AGO DATE_1D_AGO TIME_AGO
# 将proc文件系统的文件放入tmp
cat /proc/net/tcp6 /proc/net/tcp 2>/dev/null > /tmp/syn_recv
# 取到黑名单列表
awk '{print $2,$3,$4}' /tmp/syn_recv | awk '
BEGIN { # set fs
FS = "[ ]*|:" ; }
# 只处理第五列是SYN_RECV的行
( $5 ~ /03/ ){
# get ipv4addr from file /proc/net/tcp
if (length($1) == 8)
{
rem_addr_ip4 = strtonum("0x"substr($3,1,2)) ;
rem_addr_ip3 = strtonum("0x"substr($3,3,2)) ;
rem_addr_ip2 = strtonum("0x"substr($3,5,2)) ;
rem_addr_ip1 = strtonum("0x"substr($3,7,2)) ;
}
else
# get ipv6addr from file /proc/net/tcp6
{
rem_addr_ip4 = strtonum("0x"substr($3,25,2)) ;
rem_addr_ip3 = strtonum("0x"substr($3,27,2)) ;
rem_addr_ip2 = strtonum("0x"substr($3,29,2)) ;
rem_addr_ip1 = strtonum("0x"substr($3,31,2)) ;
}
printf("%d.%d.%d.%d\n",rem_addr_ip1,rem_addr_ip2,rem_addr_ip3,rem_addr_ip4);
}' | uniq -c | grep -v '192.168.' | awk 'BEGIN{
SYN_critical = ENVIRON["SYN_critical"];
DATE = ENVIRON["DATE"];
HOUR = ENVIRON["HOUR"];
MINITE = ENVIRON["MINITE"];
}
( $1 >= SYN_critical ){ printf("[ %d %d%d ] %s %d\n",DATE,HOUR,MINITE,$2,$1) }' >> $LOG
# 得到旧的ip列表
if [ $HOUR = "00" ] && [ $MINITE -le 30 ]
then
export DATE=$DATE_1D_AGO
fi
awk 'BEGIN{
DATE = ENVIRON["DATE"];
time_ago = ENVIRON["TIME_AGO"];
}
( $2 == DATE && $3 < time_ago ){ print $5 }' $LOG | uniq > $LOG_ago
# 得到30分钟内的ip列表
awk 'BEGIN{
DATE = ENVIRON["DATE"];
time_ago = ENVIRON["TIME_AGO"];
}
( $2 == DATE && $3 > time_ago ){ print $5 }' $LOG | uniq > $LOG_current
NUM_LOG_ago=$(wc -l $LOG_ago | awk '{print $1}' )
NUM_LOG_current=$(wc -l $LOG_current | awk '{print $1}' )
# 看iptables是否运行
IPTAB_STATUS=$(service iptables status | grep -c 'Firewall is stopped.')
# 如果30分钟以前有ip被列入黑名单,则删除掉
if [ $NUM_LOG_ago -ge 1 ]
then
if [ $IPTAB_STATUS -eq 0 ]
then
for IP in $(cat $LOG_ago)
do
# 确认此ip是否在当前iptables列表中,在则删除该ip
NUM_ip=$(grep -c $IP /etc/sysconfig/iptables)
if [ $NUM_ip -ge 1 ]
then
iptables -D INPUT -s $IP -i eth0 -j DROP
service iptables save
fi
done
fi
fi
# 处理30分钟内的ip列表,如果不在iptables里,则判断iptables的状态,并加入黑名单
if [ $NUM_LOG_current -ge 1 ]
then
# 看iptables是否打开
if [ $IPTAB_STATUS -eq 1 ]
then
service iptables start
fi
# 把ip加进去
for IP in $(cat $LOG_current)
do
# 确认此ip是否在当前iptables列表中,不在则加进去
NUM_ip=$(grep -c $IP /etc/sysconfig/iptables)
if [ $NUM_ip -eq 0 ]
then
iptables -A INPUT -s $IP -i eth0 -j DROP
service iptables save
fi
done
fi
# 如果iptables列表为空,判断其状态,如果是start ,则stop它
if [ $IPTAB_STATUS -eq 0 ]
then
# 判断iptables列表是否为空
NUM=$(iptables -L -n | wc -l)
if [ $NUM -eq 8 ]
then
service iptables stop
fi
fi
# 按大小轮转日志,注意,日志轮转都放在晚上1点,这样节省脚本每次运行的if判断开销
################################## 日志轮转 #######################################
#if [ $HOUR == "01" ]
# then
# size=$(ls -l -k $LOG | cut -d " " -f 6)
#
# echo "$LOG size is $size, limit is $LIMIT"
#
# if [ $size -ge $LIMIT ]
#
# then
#
# echo "rolling log file"
# awk 'BEGIN{
# DATE = ENVIRON["DATE"];
# time_ago = ENVIRON["TIME_AGO"];
# }
#
# ( $1 == DATE && $3 > time_ago ){ print }' $LOG > /tmp/syn_log_tmp
# cp $LOG $LOG.$DATE
# mv -f /tmp/syn_log_tmp $LOG
#
# else
#
# echo "not big enough"
#
# fi
#
# # 按日期轮转日志
# # 如果30天前有日志,说明是该到轮转的时候了
# DATE_NUM=$(grep "$DATE_AGO" $LOG | head | wc -l | awk '{print $1}')
# if [ $DATE_NUM -ge 1 ]
# then
# awk 'BEGIN{
# DATE = ENVIRON["DATE"];
# time_ago = ENVIRON["TIME_AGO"];
# }
#
# ( $1 == DATE && $3 > time_ago ){ print }' $LOG > /tmp/syn_log_tmp
# cp $LOG $LOG.$DATE
# mv -f /tmp/syn_log_tmp $LOG
#
# fi
#
#fi
################################## 日志轮转 #######################################
众所周知,RedHat AS4需要付费升级,现在介绍一种第三方升级方法
第一步:下载第三方软件
#wget http://apt.sw.be/packages/apt/apt-0.5.15lor ... _64.rpm (注意,不同的版本不一样)
第二步:下载rpm的密钥
#wget http-://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
第三步:安装第三方软件apt-get
#rpm -Uvh ./pt-0.5.15cnc6-4.2.el4.rf.i386.rpm
第四步:导入rpm密钥
#rpm --import RPM-GPG-KEY.dag.txt
第五步:编辑文件,让apt-get知道去哪里找升级包和密钥
#vi /etc/apt/sources.list.d/dag.list
添加下面一行:
#rpm http://apt.sw.be/ redhat/el4/en/i386 dag
保存退出
第六步:升级、安装
更新数据库
#apt-get update
真正的升级
#apt-get upgrade
第一步:下载第三方软件
#wget http://apt.sw.be/packages/apt/apt-0.5.15lor ... _64.rpm (注意,不同的版本不一样)
第二步:下载rpm的密钥
#wget http-://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
第三步:安装第三方软件apt-get
#rpm -Uvh ./pt-0.5.15cnc6-4.2.el4.rf.i386.rpm
第四步:导入rpm密钥
#rpm --import RPM-GPG-KEY.dag.txt
第五步:编辑文件,让apt-get知道去哪里找升级包和密钥
#vi /etc/apt/sources.list.d/dag.list
添加下面一行:
#rpm http://apt.sw.be/ redhat/el4/en/i386 dag
保存退出
第六步:升级、安装
更新数据库
#apt-get update
真正的升级
#apt-get upgrade
软件:rsync-2.6.8-3.1(一般系统默认安装)、inotify-tools-3.14.tar.gz
主机:Linux-Master:10.10.50.217(源主机)、Linux-Slave:10.10.50.151
=======================================================
1、介绍
Inotify 是文件系统事件监控机制,作为 dnotify 的有效替代。dnotify 是较早内核支持的文件监控机制。Inotify 是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。
主机:Linux-Master:10.10.50.217(源主机)、Linux-Slave:10.10.50.151
=======================================================
1、介绍
Inotify 是文件系统事件监控机制,作为 dnotify 的有效替代。dnotify 是较早内核支持的文件监控机制。Inotify 是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。
我的Linode十分繁忙,在跑一些密集操作数据库的Rake任务时尤其如此。但我观察发现,Linode服务器的4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态。
不了解Linux是如何调度的,但在Linode的这种状态下,显然有优化的余地。除了处理正常任务,CPU#0还需要处理各种中断。因此,若能将CPU#0分担的任务摊派到其他CPU核心上,可以预见,系统的处理能力将有更大的提升。
不了解Linux是如何调度的,但在Linode的这种状态下,显然有优化的余地。除了处理正常任务,CPU#0还需要处理各种中断。因此,若能将CPU#0分担的任务摊派到其他CPU核心上,可以预见,系统的处理能力将有更大的提升。
CentOS 5 VPS上配置pptpd作为VPN服务器
美国VPS的一大用途就是做为加密的VPN服务器,在国内连上这些VPN服务器就可以无限制访问互联网。常用的VPN服务器一般分两种,一种是SSL VPN,代表软件有openvpn,这个VPN软件有Windows下的客户端软件;另外一种是pptpd VPN,Windows自带这种VPN的客户端支持。本文记录了在CentOS 5 VPS下安装pptpd VPN服务器的过程。
美国VPS的一大用途就是做为加密的VPN服务器,在国内连上这些VPN服务器就可以无限制访问互联网。常用的VPN服务器一般分两种,一种是SSL VPN,代表软件有openvpn,这个VPN软件有Windows下的客户端软件;另外一种是pptpd VPN,Windows自带这种VPN的客户端支持。本文记录了在CentOS 5 VPS下安装pptpd VPN服务器的过程。
实验环境:
(1) 公司所有game服务器,只允许一个外网ip去访问,需要维护服务器,必须先拨号到指定外网ip。
(2) 公司与总部通信都是走vpn通道,公司内部ip与vpn设备下是不同网段,需要在vpn设备下接一台双网卡服务器
解决方案:通过linux下的pptp协议,远程用户能通过支持点对点协议的所有操作系统,安全访问网络.
(1) 公司所有game服务器,只允许一个外网ip去访问,需要维护服务器,必须先拨号到指定外网ip。
(2) 公司与总部通信都是走vpn通道,公司内部ip与vpn设备下是不同网段,需要在vpn设备下接一台双网卡服务器
解决方案:通过linux下的pptp协议,远程用户能通过支持点对点协议的所有操作系统,安全访问网络.
前言:谈到Linux下的web生产环境,大家就会想到apache这个开源服务器软件.apache可以整合大多数应用,比如jsp,php,cgi,python等等,但是apache过于臃肿以及对静态文件响应过于缓慢让很多使用者感到头疼.而nginx作为新崛起的服务器软件,在很多方面超出apache,定位也很明确:高性能的 HTTP 和反向代理服务器.因而,本篇主要讲的是nginx作为前端,apache作为后端的应用环境搭建过程.
为什么不使用nginx+php(fastcgi)作为生产环境?我提出我的看法.
为什么不使用nginx+php(fastcgi)作为生产环境?我提出我的看法.
Linux在启动过程中会出现一些故障,导致系统无法正常启动,本文列举了几个应用单用户模式、GRUB命令操作、Linux救援模式的典型故障修复案例。
一、单用户模式
Linux提供了单用户模式(类似Windows安全模式),可以在最小环境中进行系统维护。在单用户模式(运行级别1)中,Linux引导进入根shell,网络被禁用,只有少数进程运行。单用户模式可以用来修改文件系统损坏、还原配置文件、移动用户数据等。
以下列举了几个单用户模式修复系统故障的典型案例:
案例一:硬盘扇区错乱
一、单用户模式
Linux提供了单用户模式(类似Windows安全模式),可以在最小环境中进行系统维护。在单用户模式(运行级别1)中,Linux引导进入根shell,网络被禁用,只有少数进程运行。单用户模式可以用来修改文件系统损坏、还原配置文件、移动用户数据等。
以下列举了几个单用户模式修复系统故障的典型案例:
案例一:硬盘扇区错乱
转自:http://roland.blog.51cto.com/227050/131804
试验目的:
当开机引导程序GRUB损坏(在本试验中用GRUB代指boot loader)时我们无法成功引导系统,这时候我们需要使用Linux rescue(Linux救援模式)对系统的引导程序进行修复。
试验环境:
操作系统:RedHat Enterprise Linux 5 (RHEL5)
相关软件:GRUB 系统引导管理器,Linux安装光盘(第一张)或者Linux.iso引导文件。
试验要求:
模拟系统引导程序GRUB损坏无法正常进入系统,通过Linux rescue模式进行修复,使系统可以正常引导和登录。
试验目的:
当开机引导程序GRUB损坏(在本试验中用GRUB代指boot loader)时我们无法成功引导系统,这时候我们需要使用Linux rescue(Linux救援模式)对系统的引导程序进行修复。
试验环境:
操作系统:RedHat Enterprise Linux 5 (RHEL5)
相关软件:GRUB 系统引导管理器,Linux安装光盘(第一张)或者Linux.iso引导文件。
试验要求:
模拟系统引导程序GRUB损坏无法正常进入系统,通过Linux rescue模式进行修复,使系统可以正常引导和登录。