利用netstat 工具来检测查看SYN连接
    netstat -n -p -t
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 192.168.0.200:5050 192.168.0.38:48892 TIME_WAIT -
    tcp 0 0 192.168.0.200:5050 192.168.0.38:36604 TIME_WAIT -
    tcp 0 0 192.168.0.200:5050 192.168.0.38:52988 TIME_WAIT -
    tcp 0 0 192.168.0.200:5050 192.168.0.38:38911 TIME_WAIT -
    tcp 0 0 192.168.0.200:5050 192.168.0.38:58623 TIME_WAIT -
    tcp 0 0 192.168.0.200:43690 192.168.0.200:61616 ESTABLISHED 10415/java
    当然我上面的都是正常连接。当然TIME_WAIT如果占比过多,肯定也是不正常的。(要么受到了攻击,要么需要参数调优。)

    而受到DDOS恶意攻击的情况下会在系统中看到的,很多连接处于SYN_RECV状态(在WINDOWS系统中是SYN_RECEIVED状态)源IP地址都是随机的,表明这是一种带有IP欺骗的SYN攻击。
    tcp 0 10.11.11.11:23 124.173.152.8:25882 SYN_RECV-
    tcp 0 10.11.11.11:23 236.15.133.204:2577 SYN_RECV-
    tcp 0 10.11.11.11:23 127.160.6.129:51748 SYN_RECV-

    具体主机的端口状态有以下几种:
    CLOSED:无连接是活动的或正在进行
    LISTEN:服务器在等待进入呼叫
    SYN_RECV:一个连接请求已经到达,等待确认
    SYN_SENT:应用已经开始,打开一个连接
    ESTABLISHED:正常数据传输状态
    FIN_WAIT1:应用说它已经完成
    FIN_WAIT2:另一边已同意释放
    ITMED_WAIT:等待所有分组死掉
    CLOSING:两边同时尝试关闭
    TIME_WAIT:另一边已初始化一个释放
    LAST_ACK:等待所有分组死掉

    cc攻击主要攻击页面,模拟很多用户来不断的访问网站,导致系统资源被大量占用,那么在Linux系统中,我们要如何知道自己是否被cc攻击了呢?
    查看所有80端口的连接数
      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
    查询访问最频繁的IP:

    awk ‘{print $1}’ access.log|sort | uniq -c |sort -n -k 1 -r|more
    查询访问最频繁的URL:
    awk ‘{print $7}’ access.log|sort | uniq -c |sort -n -k 1 -r|more
    根据访问IP统计UV:
    awk ‘{print $1}’ access.log|sort | uniq -c |wc -l
    统计访问URL统计PV:
    awk ‘{print $7}’ access.log|wc -l
    通过日志查看当天指定ip访问次数过的url和访问次数:
    cat access.log | grep “222.132.90.94” | awk ‘{print $7}’ | sort | uniq -c | sort -nr
    通过日志查看含有send的url,统计ip地址的总连接数:
    cat access.log | grep “send” | awk ‘{print $1}’ | sort | uniq -c | sort -nr
      查找较多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
      封单个IP的命令是:
      iptables -I INPUT -s 211.1.0.0 -j DROP
      封IP段的命令是:
      iptables -I INPUT -s 211.1.0.0/16 -j DROP
      iptables -I INPUT -s 211.2.0.0/16 -j DROP
      iptables -I INPUT -s 211.3.0.0/16 -j DROP
      封整个段的命令是:
      iptables -I INPUT -s 211.0.0.0/8 -j DROP
      封几个段的命令是:
      iptables -I INPUT -s 61.37.80.0/24 -j DROP
      iptables -I INPUT -s 61.37.81.0/24 -j DROP
      想在服务器启动自运行的话有三个方法:
      1、把它加到/etc/rc.local中
      2、iptables-save 》/etc/sysconfig/iptables可以把你当前的iptables规则放到/etc/sysconfig/iptables中,系统启动iptables时自动执
      行。
      3、service iptables save 也可以把你当前的iptables规则放/etc/sysconfig/iptables中,系统启动iptables时自动执行。
      后两种更好此,一般iptables服务会在network服务之前启来,更安全。
      解封的话:
      iptables -D INPUT -s IP地址 -j REJECT
      iptables -F 全清掉了
      相较于Windows系统下cc攻击的查看,Linux系统的查看相对复杂些,也比较难懂,需要一定的系统知识储备。

    参考:http://blog.sina.com.cn/s/blog_a6dcb5bd01017ayg.html