查看所有80端口的连接数
Java代码
- netstat -nat|grep -i ‘80‘|wc -l
- 对连接的IP按连接数量进行排序
- netstat -ntu | awk ‘{print $5}‘ | cut -d: -f1 | sort | uniq -c | sort -n
- 查看TCP连接状态
- netstat -nat |awk ‘{print $6}‘|sort|uniq -c|sort -rn
- netstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}‘
- netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}‘
- netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}‘
- netstat -n |awk ‘/^tcp/ {print $NF}‘|sort|uniq -c|sort -rn
- netstat -ant | awk ‘{print $NF}‘ | grep -v ‘[a-z]‘ | sort | uniq -c
- 查看80端口连接数最多的20个IP
- netstat -anlp|grep 80|grep tcp|awk ‘{print $5}‘|awk -F: ‘{print $1}‘|sort|uniq -c|sort -nr|head -n20
- netstat -ant |awk ‘/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A,i}‘ |sort -rn|head -n20
- 用tcpdump嗅探80端口的访问看看谁最高
- tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." ‘{print $1″."$2″."$3″."$4}‘ | sort | uniq -c | sort -nr |head -20
- 查找较多time_wait连接
- netstat -n|grep TIME_WAIT|awk ‘{print $5}‘|sort|uniq -c|sort -rn|head -n20
- 查找较多的SYN连接
- netstat -an | grep SYN | awk ‘{print $5}‘ | awk -F: ‘{print $1}‘ | sort | uniq -c | sort -nr | more
================================
防范DDOS攻击脚本
#防止SYN攻击 轻量级预防
iptables -N syn-flood
iptables -A INPUT -p tcp –syn -j syn-flood
iptables -I syn-flood -p tcp -m limit –limit 3/s –limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT
#防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃
iptables -A INPUT -i eth0 -p tcp –syn -m connlimit –connlimit-above 15 -j DROP
iptables -A INPUT -p tcp -m state –state ESTABLISHED,RELATED -j ACCEPT
#用Iptables抵御DDOS (参数与上相同)
iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
##########################################################
防范CC攻击
当apache站点受到严重的cc攻击,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。
1.系统要求
(1)LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,但是也是可以实现的)。
(2)iptables版本:1.3.7
2. 安装
安装iptables1.3.7和系统内核版本对应的内核模块kernel-smp-modules-connlimit
3. 配置相应的iptables规则
示例如下:
(1)控制单个IP的最大并发连接数
Java代码
- iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT
#允许单个IP的最大连接数为 30
#默认iptables模块不包含connlimit,需要自己单独编译加载,请参考该地址
http://sookk8.blog.51cto.com/455855/280372 不编译内核加载connlimit模块
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
Java代码
- iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
#单个IP在60秒内只允许最多新建30个连接
4. 验证
(1)工具:flood_connect.c(用来模拟攻击)
(2)查看效果:
使用
Java代码
- watch ‘netstat -an | grep:21 | grep<模拟攻击客户机的IP>| wc -l‘
实时查看模拟攻击客户机建立起来的连接数,
使用
Java代码
- watch ‘iptables -L -n -v | \grep<模拟攻击客户机的IP>‘
查看模拟攻击客户机被 DROP 的数据包数。
5.注意
为了增强iptables防止CC攻击的能力,最好调整一下ipt_recent的参数如下:
Java代码
- #cat/etc/modprobe.conf options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60
#记录1000个IP地址,每个地址记录60个数据包 #modprobe ipt_recent
===========================
Nginx 版本信息:
nginx version: nginx/0.8.53
Nginx日志配置项:
Java代码
- access_log /data0/logs/access.log combined;
Nginx日志格式:
Java代码
- $remote_addr – $remote_user [$time_local] $request $status $apache_bytes_sent $http_referer $http_user_agent
- 127.0.0.1 - - [24/Mar/2011:12:45:07 +0800] "GET /fcgi_bin/xxx.fcgi?id=xxx HTTP/1.0" 200 160 "-" "Mozilla/4.0"
通过日志查看当天访问页面排前10的url:
Java代码
- #>cat access.log | grep "24/Mar/2011" | awk ‘{print $7}‘ | sort | uniq -c | sort -nr | head -n 10
通过日志查看当天ip连接数,统计ip地址的总连接数
Java代码
- #>cat access.log | grep "24/Mar/2011" | awk ‘{print $1}‘ | sort | uniq -c | sort –nr
- 38 112.97.192.16
- 20 117.136.31.145
- 19 112.97.192.31
- 3 61.156.31.20
- 2 209.213.40.6
- 1 222.76.85.28
通过日志查看当天访问次数最多的10个IP ,只需要在上一个命令后加上head命令
Java代码
- #>cat access.log | grep "24/Mar/2011" |awk ‘{print $3}‘|sort |uniq -c|sort -nr|head –n 10
- 38 112.97.192.16
- 20 117.136.31.145
- 19 112.97.192.31
- 3 61.156.31.20
- 2 209.213.40.6
- 1 222.76.85.28
通过日志查看当天访问次数最多的10个IP
Java代码
- #>awk ‘{print $1}‘ access.log |sort |uniq -c|sort -nr|head
- 10680 10.0.21.17
- 1702 10.0.20.167
- 823 10.0.20.51
- 504 10.0.20.255
- 215 58.60.188.61
- 192 183.17.161.216
- 38 112.97.192.16
- 20 117.136.31.145
- 19 112.97.192.31
- 6 113.106.88.10
通过日志查看当天指定ip访问次数过的url和访问次数:
Java代码
- #>cat access.log | grep "10.0.21.17" | awk ‘{print $7}‘ | sort | uniq -c
- cat access.log | grep "10.0.21.17" | awk ‘{print $7}‘ | uniq -c | sort -nr | head -n 20
- 224 /test/themes/default/img/logo_index.gif
- 224 /test/themes/default/img/bg_index_head.jpg
- 224 /test/themes/default/img/bg_index.gif
- 219 /test/vc.php
- 219 /
- 213 /misc/js/global.js
- 211 /misc/jsext/popup.ext.js
- 211 /misc/js/common.js
- 210 /sladmin/home
- 197 /misc/js/flib.js
通过日志查看当天访问次数最多的时间段
Java代码
- #>awk ‘{print $4}‘ access.log | grep "24/Mar/2011" |cut -c 14-18|sort|uniq -c|sort -nr|head
- 24 16:49
- 19 16:17
- 16 16:51
- 11 16:48
- 4 16:50
- 3 16:52
- 1 20:09
- 1 20:05
- 1 20:03
- 1 19:55
rails日志查询ip访问的排行榜
Ruby代码
- cat production.log | grep ‘2010-10-31‘ | awk ‘{print $4}‘| sort -u | wc
-----------------
持续的监视某块网卡的数据流量
其中 eht0 对应你想要监视的网卡 bytes 对应中文版系统的“字节”
1 代表 1秒钟刷新一次
Java代码
- watch -n 1 "/sbin/ifconfig eth0 | grep bytes"
------------------
# sar -n DEV -u 1 10
看看当前网络流量
# iostat -t 1 10
看看当前硬盘读写速度
----------------------
查看文件大小
du -h --max-depth=1 /路径