11,Apr,2011 | (459/0)功能强大的防DDOS攻击SHELL脚本
这几天服务器一直受到DDOS的攻击,目前只能通过封IP来源来暂时解决。IP不源变化多端,光靠手工来添加简直是恶梦,想了个方法,用SHELL来做。
比较简单,但很实用:) 以下内容根据作者原文进行适当的修改:)
1.编写脚本
mkdir /root/bin
vi /root/bin/dropip.sh
#!/bin/bash
/bin/netstat -na|grep ESTABLISHED|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -rn|head -10|grep -v -E ’192.168|127.0′|awk ‘{if ($2!=null && $1>4) {print $2}}’>/tmp/dropip
for i in $(cat /tmp/dropip)
do
/sbin/iptables -A INPUT -s $i -j DROP
echo "$i kill at `date`">>/var/log/ddos
done
2.增加执行权限
chmod +x /root/bin/dropip.sh
3.添加到计划任务,每分钟执行一次
crontab -e
*/1 * * * * /root/bin/dropip.sh
说明:
以上脚本比较简单,但很实用,最重要的是第二行,获取ESTABLISHED连接数最多的前10个ip并写入临时文件/tmp/dropip,排除了内部ip段192.168|127.0开头的.通过for循环将dropip里面的ip通过iptables全部drop掉,然后写到日志文件/var/log/ddos
原文: http://blog.liuts.com/post/101/#topreply
比较简单,但很实用:) 以下内容根据作者原文进行适当的修改:)
1.编写脚本
mkdir /root/bin
vi /root/bin/dropip.sh
#!/bin/bash
/bin/netstat -na|grep ESTABLISHED|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -rn|head -10|grep -v -E ’192.168|127.0′|awk ‘{if ($2!=null && $1>4) {print $2}}’>/tmp/dropip
for i in $(cat /tmp/dropip)
do
/sbin/iptables -A INPUT -s $i -j DROP
echo "$i kill at `date`">>/var/log/ddos
done
2.增加执行权限
chmod +x /root/bin/dropip.sh
3.添加到计划任务,每分钟执行一次
crontab -e
*/1 * * * * /root/bin/dropip.sh
说明:
以上脚本比较简单,但很实用,最重要的是第二行,获取ESTABLISHED连接数最多的前10个ip并写入临时文件/tmp/dropip,排除了内部ip段192.168|127.0开头的.通过for循环将dropip里面的ip通过iptables全部drop掉,然后写到日志文件/var/log/ddos
原文: http://blog.liuts.com/post/101/#topreply
11,Apr,2011 | (475/0)不错的网站压力测试工具webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。
1、适用系统:Linux
2、编译安装:
wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
3、使用:
4、测试结果示例:
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://127.0.0.1/test.jpg
500 clients, running 30 sec.
Speed=3230 pages/min, 11614212 bytes/sec.
Requests: 1615 susceed, 0 failed.
1、适用系统:Linux
2、编译安装:
引用
wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
3、使用:
引用
webbench -c 500 -t 30 http://127.0.0.1/test.jpg
4、测试结果示例:
引用
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
Benchmarking: GET http://127.0.0.1/test.jpg
500 clients, running 30 sec.
Speed=3230 pages/min, 11614212 bytes/sec.
Requests: 1615 susceed, 0 failed.
11,Apr,2011 | (795/1)nagios+139邮件短信通知报警文档v1.1
由于移动增加了飞信api接口,在Linux命令行下使用飞信客户端需要图片验证码,以前一直使用良好的报警系统一下失灵了。随时掌握服务器状态多重要呀,这是我们运维必须要做的。
申请139邮箱,成功申请后配置邮件到达短信通知,使用长格式。139邮件短信通知这个功能好用,而且免费:)缺点:短信报警有延时,不如linux命令行飞信报警快
139邮箱申请:http://mail.10086.cn/
http://caspian.dotconf.net/menu/Software/SendEmail/
1.下载
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
2.编译安装
tar xvzf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56/
cp sendEmail /usr/local/bin
chmod +x /usr/local/bin/sendEmail
3.测试邮件发送:
/usr/local/bin/sendEmail -f hugwww@163.com -t hugwww@139.com -s smtp.163.com -u "send by hugwww" -xu hugwww -xp gaojinbo.com -m "邮件发送成功,good"
4.编写nagios报警脚本(略),这个简单,适当修改一下即可
http://blog.hackroad.com/read.php/417.htm
5.拿出手机,nagios报警邮件会以短信方式发送到你的手机
解释:
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu 表示SMTP验证的用户名
-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)
-m 表示邮件的内容
如果你不带-m参数的话,就会提示你自行输入
完成!
申请139邮箱,成功申请后配置邮件到达短信通知,使用长格式。139邮件短信通知这个功能好用,而且免费:)缺点:短信报警有延时,不如linux命令行飞信报警快
139邮箱申请:http://mail.10086.cn/
http://caspian.dotconf.net/menu/Software/SendEmail/
1.下载
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
2.编译安装
tar xvzf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56/
cp sendEmail /usr/local/bin
chmod +x /usr/local/bin/sendEmail
3.测试邮件发送:
/usr/local/bin/sendEmail -f hugwww@163.com -t hugwww@139.com -s smtp.163.com -u "send by hugwww" -xu hugwww -xp gaojinbo.com -m "邮件发送成功,good"
4.编写nagios报警脚本(略),这个简单,适当修改一下即可
http://blog.hackroad.com/read.php/417.htm
5.拿出手机,nagios报警邮件会以短信方式发送到你的手机
解释:
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu 表示SMTP验证的用户名
-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)
-m 表示邮件的内容
如果你不带-m参数的话,就会提示你自行输入
完成!
11,Apr,2011 | (569/0)Nagios飞信linux短信报警脚本配置
1.编写发送脚本
vi sendsms.sh
#!/bin/bash
fetionDir=/usr/local/fetion/
cd $fetionDir
DIR=`pwd`
user=13724506486
pwd=gjb88888
for phone in `cat $DIR/phonelist.txt`
do
echo "$phone" | sed ‘/^[ \t]*$/d’ | sed ‘s/^[ \t]*//’ | sed ‘s/[ \t]*$//’ | grep ‘^1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]‘
if (($? == 0 ));then
if [[ -f $DIR/msg.txt ]];then
echo "================" >> msg.txt
fi
phone=`echo "$phone" | sed ‘s/^[ \t]*//’ | sed ‘s/[ \t]*$//’`
echo "sms $phone $1" >> $DIR/msg.txt
echo "quit" >> $DIR/msg.txt
$fetionDir/fetion –mobile=$user –pwd=$pwd –to=$phone –msg-utf8="$1"
else
continue
fi
done
vi sendsms.sh
#!/bin/bash
fetionDir=/usr/local/fetion/
cd $fetionDir
DIR=`pwd`
user=13724506486
pwd=gjb88888
for phone in `cat $DIR/phonelist.txt`
do
echo "$phone" | sed ‘/^[ \t]*$/d’ | sed ‘s/^[ \t]*//’ | sed ‘s/[ \t]*$//’ | grep ‘^1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]‘
if (($? == 0 ));then
if [[ -f $DIR/msg.txt ]];then
echo "================" >> msg.txt
fi
phone=`echo "$phone" | sed ‘s/^[ \t]*//’ | sed ‘s/[ \t]*$//’`
echo "sms $phone $1" >> $DIR/msg.txt
echo "quit" >> $DIR/msg.txt
$fetionDir/fetion –mobile=$user –pwd=$pwd –to=$phone –msg-utf8="$1"
else
continue
fi
done
11,Apr,2011 | (541/0)php nginx pathinfo支持配置
nginx path_info支持,php path_info,nginx pathinfo,nginx下安装php168,根据以下配置,就能很方便地在nginx上安装配置php168了,linux+nginx+php+php168,
环境:
Centos 5.5 x86_64
php 5.2.10
nginx 0.8.x
修改nginx主机配置文件:
server {
listen 80;
server_name gaojinbo.com;
location / {
root /var/www/gaojinbo.com;
index index.html index.htm index.php;
}
location ~ ^(.+\.php)(.*)$ {
root /var/www/gaojinbo.com;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
复制的时候注意编码:)
完成!
环境:
Centos 5.5 x86_64
php 5.2.10
nginx 0.8.x
修改nginx主机配置文件:
server {
listen 80;
server_name gaojinbo.com;
location / {
root /var/www/gaojinbo.com;
index index.html index.htm index.php;
}
location ~ ^(.+\.php)(.*)$ {
root /var/www/gaojinbo.com;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
复制的时候注意编码:)
完成!
11,Apr,2011 | (374/0)linux下用iptables搭建DMZ网络V1.1
需求:
1.局域网所有电脑禁用访问外网
2.解决上网问题
3.保证内网数据安全
4.网上查找的资料方便局域网使用
解决方法:
1.使用linux搭建DMZ网络
2.在dmz网络里面用win2003终端服务实现上网
3.内网只能访问dmz的终端服务
4.dmz网络不能访问内网
5.网上查找的资料放在win2003终端服务器共享上,只允许特殊权限用户访问,然后转发
6.内网数据安全,设置bios密码,禁用usb/光驱,只允许硬盘引导(略)
环境:
linux防火墙 eth0 192.168.5.1(dmz) eth1 192.168.1.45(接内网)
win2003终端1 eth0 192.168.5.10(dmz)
win2003终端2 eth0 192.168.5.11(dmz)
win2003终端3 eth0 192.168.5.12(dmz)
1.局域网所有电脑禁用访问外网
2.解决上网问题
3.保证内网数据安全
4.网上查找的资料方便局域网使用
解决方法:
1.使用linux搭建DMZ网络
2.在dmz网络里面用win2003终端服务实现上网
3.内网只能访问dmz的终端服务
4.dmz网络不能访问内网
5.网上查找的资料放在win2003终端服务器共享上,只允许特殊权限用户访问,然后转发
6.内网数据安全,设置bios密码,禁用usb/光驱,只允许硬盘引导(略)
环境:
linux防火墙 eth0 192.168.5.1(dmz) eth1 192.168.1.45(接内网)
win2003终端1 eth0 192.168.5.10(dmz)
win2003终端2 eth0 192.168.5.11(dmz)
win2003终端3 eth0 192.168.5.12(dmz)
11,Apr,2011 | (268/0)配置crontab
很多时候我们是用root账号来进行管理linux系统,要以其他用户如www-data来定时执行任务,可以通过以下方法实现:
crontab -e -u www-data
*/1 * * * * /usr/bin/php5 /www/web/gaojinbo.com/crond/index.php >>/tmp/cront.txt
查看www-data用户cron
crontab -l -u www-data
crontab -e -u www-data
*/1 * * * * /usr/bin/php5 /www/web/gaojinbo.com/crond/index.php >>/tmp/cront.txt
查看www-data用户cron
crontab -l -u www-data
11,Apr,2011 | (806/0)mysql负载均衡完美解决方案
1.环境:
mysql 5
ubuntu10.04 x86_64
mdb1 eth0 192.168.5.11
mdb2 eth0 192.168.5.12
sdb1 eth0 192.168.5.21
sdb2 eth0 192.168.5.22
sdb3 eth0 192.168.5.23
sdb4 eth0 192.168.5.24
haproxy
eth0 192.168.5.10 (mdb vip write)
eth1 192.168.5.20 (sdb vip read)
说明:mdb vip用于DB的写,sdb vip用于DB读,实现读写分离和负载均衡,带故障检测自动切换
2.架构图
web1 web2 web3
| | |
—————————-
|
haproxy(lb db write/read)
|
———————————-
| |
mdb1 mdb2
| |
————– —————-
| | | |
sdb1 sdb2 sdb3 sdb4
说明:
1)mdb1和mdb1配置成主-主模式,相互同步,通过haproxy提供一个lb的写ip
2)sdb1和sdb2配置为mdb1的从,sdb3和sdb4配置为mdb2的从
3)sdb1,sdb2,sdb3,sdb4这4台从库,通过haproxy提供一个lb的读ip
4) 当mdb2停止复制,mdb1为主库,haproxy停止发送请求到mdb2和sdb3,sdb4
5) 当mdb1停止复制,mdb2为主库,haproxy停止发送请求到mdb1和sdb1,sdb2
6) 当mdb1和mdb2同时停止复制,这时2台主库变成readonly模式,数据库不能写入
7)当mdb2 offline时,mdb1进入backup mode,停止发送请求到mdb2,sdb3,sdb4
8)当mdb1 offline时,mdb2进入backup mode,停止发送请求到mdb1,sdb1,sdb2
9) 当mdb1 mdb2同时offline,整个DB停止工作
mysql 5
ubuntu10.04 x86_64
mdb1 eth0 192.168.5.11
mdb2 eth0 192.168.5.12
sdb1 eth0 192.168.5.21
sdb2 eth0 192.168.5.22
sdb3 eth0 192.168.5.23
sdb4 eth0 192.168.5.24
haproxy
eth0 192.168.5.10 (mdb vip write)
eth1 192.168.5.20 (sdb vip read)
说明:mdb vip用于DB的写,sdb vip用于DB读,实现读写分离和负载均衡,带故障检测自动切换
2.架构图
web1 web2 web3
| | |
—————————-
|
haproxy(lb db write/read)
|
———————————-
| |
mdb1 mdb2
| |
————– —————-
| | | |
sdb1 sdb2 sdb3 sdb4
说明:
1)mdb1和mdb1配置成主-主模式,相互同步,通过haproxy提供一个lb的写ip
2)sdb1和sdb2配置为mdb1的从,sdb3和sdb4配置为mdb2的从
3)sdb1,sdb2,sdb3,sdb4这4台从库,通过haproxy提供一个lb的读ip
4) 当mdb2停止复制,mdb1为主库,haproxy停止发送请求到mdb2和sdb3,sdb4
5) 当mdb1停止复制,mdb2为主库,haproxy停止发送请求到mdb1和sdb1,sdb2
6) 当mdb1和mdb2同时停止复制,这时2台主库变成readonly模式,数据库不能写入
7)当mdb2 offline时,mdb1进入backup mode,停止发送请求到mdb2,sdb3,sdb4
8)当mdb1 offline时,mdb2进入backup mode,停止发送请求到mdb1,sdb1,sdb2
9) 当mdb1 mdb2同时offline,整个DB停止工作
11,Apr,2011 | (517/0)Linux下crontab命令的用法
任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:

Crontab命令的格式为:crontab –l|-r|-e|-i [username],其参数含义如表一:

crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:
Crontab命令的格式为:crontab –l|-r|-e|-i [username],其参数含义如表一:
11,Apr,2011 | (296/0)Linux连接状态netstat
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
返回结果示例:
引用
LAST_ACK 1
SYN_RECV 1
CLOSE_WAIT 33
ESTABLISHED 217
FIN_WAIT1 15
FIN_WAIT2 16
TIME_WAIT 46697
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
11,Apr,2011 | (416/0)flashcache安装测试V1.0
Flashcache是Facebook技术团队的又一力作,最初是为加速MySQL设计的。Flashcache是在Linux层面的,所以任何受磁盘IO困绕的软件或应用都可以方便的使用。
Flashcache将普通的SAS盘(/dev/sda)和一个高速的SSD(/dev/sdb)虚拟成一个带缓存的块设备(/dev/mapper/cachedev)。
1.环境:
dell r610
ubuntu 10.04 x86_64 kernel 2.6.32-29
磁盘:
raid1 SAS 146G *2 /分区ext4和swap
ssd 100G *1 /flashcache使用xfs
/dev/sda6 /www xfs sas
/dev/sdb1 /flashcache xfs ssd
Flashcache on 2.6.18, 2.6.20 and 2.6.27-32. We have tested
Flashcache on 2.6.18, 2.6.20, 2.6.27 and 2.6.32.
Flashcache将普通的SAS盘(/dev/sda)和一个高速的SSD(/dev/sdb)虚拟成一个带缓存的块设备(/dev/mapper/cachedev)。
1.环境:
dell r610
ubuntu 10.04 x86_64 kernel 2.6.32-29
磁盘:
raid1 SAS 146G *2 /分区ext4和swap
ssd 100G *1 /flashcache使用xfs
/dev/sda6 /www xfs sas
/dev/sdb1 /flashcache xfs ssd
Flashcache on 2.6.18, 2.6.20 and 2.6.27-32. We have tested
Flashcache on 2.6.18, 2.6.20, 2.6.27 and 2.6.32.
11,Apr,2011 | (379/0)iometer磁盘性能测试文档V1.0
ubuntu 10.04 64位下编译安装iometer,利用iometer对磁盘进行测试。Iometer是一个免费的开源的测试磁盘性能的工具。和其他磁盘工具相比,可以测试I/O的传输率和平均的I/O响应时间。其第一个版本10年前就已经出来了,当时是用于Windows NT。但它现在仍是一款很有用的工具,因为它也可以在Windows XP/2003下工做,甚至与Vista和Windows 2008下。 Iometer支持许多不同的设置。
官方网站:http://www.iometer.org/
环境:
192.168.1.115 ubuntu 10.04 x86_64
192.168.1.116 win7 x86
官方网站:http://www.iometer.org/
环境:
192.168.1.115 ubuntu 10.04 x86_64
192.168.1.116 win7 x86









