常见流量攻击
服务器的攻击分为四类,cc攻击、syn攻击、udp攻击、tcp洪水攻击。那么当被攻击时会出现哪些症状呢,我们是如何来判断服务器是否被攻击,属于哪种攻击类型?
第一种类型:CC类攻击
CC攻击是DDoS(分布式拒绝服务)的一种,这种一种比DDOS流氓行为更具有技术含量的一种攻击方式,CC攻击完全模拟正常访问行为,没有虚假IP,也没有大的流量异常,但一样会造成您的服务器无法正常连接,一条ADSL的普通用户发起的CC攻击就可以干掉一台高性能的服务器。
服务器呗CC攻击时,会出现80端口关闭的现象,即出现丢包和高延迟的现象, 因为80端口被大量的垃圾数据堵塞导致正常的连接被中止。可以通过在CMD命令窗口输入命令 netstat -an 来查看,如果看到类似如下大量显示雷同的连接记录基本就可以被CC攻击了:
……
TCP 192.168.1.3:80 192.168.1.6:2205 SYN_RECEIVED 4
A.网站出现service unavailable提示
B.CPU占用率很高
C.网络连接状态:netstat –na,若观察到大量的ESTABLISHED的连接状态 单个IP高达几十条甚至上百条
D.外部无法打开网站,软重启后短期内恢复正常,几分钟后又无法访问。
CC类攻击检测
第一条命令:
tcpdump -s0 -A -n -i any | grep -o -E '(GET|POST|HEAD) .*'
正常的输出结果类似于这样
POST /ajax/validator.php HTTP/1.1
第二种类型:SYN类攻击
A.CPU占用很高
B.网络连接状态:netstat –na,若观察到大量的SYN_RECEIVED的连接状态
SYN类攻击检测
netstat -na 显示所有活动的网络连接
netstat -an | grep :80 | sort 显示所有80端口的网络连接并排序。80端口为http端口
netstat -n -p | grep SYN_REC | wc -l 查看当前有多少活动的SYNC_REC连接,最好值小于5.
netstat -n -p | grep SYN_REC | sort -u 列出所有连接过的IP地址
netstat -n -p | grep SYN_REC | awk ‘{print $5}’ | awk -F: ‘{print $1}’ 列出所有发送SYN_REC连接节点的IP地址
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
使用netstat命令计算每个主机连接到本机的连接数
netstat -anp | grep ‘tcp|udp’ | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n 列出所有连接到本机的udp或者tcp连接的数量
netstat -ntu | grep ESTAB | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr 检查ESTABLISHED 连接并且列出每个IP地址的连接数量
Netstat -plan|grep :80| awk {‘print $5’} | cut -d: -f1 | sort | uniq -c | sort -nk 1 列出所有连接到本机80端口的IP地址和其他连接数
1、利用netstat 工具来检测查看SYN连接
netstat -n -p -t |wc -l
防护SYN类攻击措施
防范也主要从两方面入手,一是sysctl的自身的关于syn方面的配置,二是防火墙策略上。
sysctl -w net.ipv4.tcp_syncookies=1 # tcp syncookie,默认关闭
sysctl -w net.ipv4.tcp_max_syn_backlog=1280 # syn队列,默认1024,》 1280可能工作不稳定,需要修改内核源码参数
sysctl -w net.ipv4.tcp_synack_retries=2 # syn-ack握手状态重试次数,默认5,遭受syn-flood攻击时改为1或2
sysctl -w net.ipv4.tcp_syn_retries=2 # 外向syn握手重试次数,默认4
通过下列命令查看。
[root@localhost nginx]# sysctl -a|grep syn
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
fs.quota.syncs = 25
如未受到攻击,上面的参数不建议修改。据说有增加主机的不稳定性的风险。
第三种类型:UDP类攻击
A.观察网卡状况 每秒接受大量的数据包
B.网络状态:netstat –na TCP信息正常
UDP类攻击检测
检测udp端口
检测端口是否打开:nc -zuv ip 端口
服务器监听端口:nc -l -u ip 端口(可以发送和接受信息)
客户端检测端口:nc -u ip 端口(可以发送和接受信息)
查看监听的tup端口:ss -ant
查看监听的udp端口:ss -anu
查看所有协议端口:ss -ano
第四种类型:TCP洪水攻击
A.CPU占用很高
B.netstat –na,若观察到大量的ESTABLISHED的连接状态 单个IP高达几十条甚至上百条,属于正常。 查看TCP端口连接数
查看网络连接总数
# netstat -an |wc -l
查看某个特定ip的连接数
# netstat -an |grep 8.8.8.8 |wc -l
查看连接数等待time_wait状态连接数
# netstat -an |grep TIME_WAIT|wc -l
查看建立稳定连接数量
# netstat -an |grep ESTABLISHED |wc -l
查看不同状态的连接数
# netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'
查看每个ip跟服务器建立的连接数
# netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
(PS:正则解析:显示第5列,-F : 以:分割,显示列,sort 排序,uniq -c统计排序过程中的重复行,sort -rn 按纯数字进行逆序排序)
查看每个ip建立的ESTABLISHED/TIME_OUT状态的连接数
# netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
以下是我自己用VPS测试的结果:
root:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 114.226.9.xx
1 174.129.237.xx
1 58.60.118.xx
1 Address
1 servers)
2 118.26.131.xx
3 123.125.1.x
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。
上述所讲到的判断分析,让我们能准确的判断存在的问题是什么,怎么第一时间来解决问题。让我们能更好的维护我们的网站安全。
TCP洪水攻击检测
# tail -f /var/log/messages
Apr 18 11:21:56 web5 kernel: possible SYN flooding on port 80. Sending cookies.
检查连接数增多,并且SYN_RECV 连接特别多:
检查连接数增多,并且SYN_RECV 连接特别多:
# netstat -n awk '/^tcp/ { S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 16855
CLOSE_WAIT 21
SYN_SENT 99
FIN_WAIT1 229
根据经验,正常时检查连接数如下:
# netstat -n awk '/^tcp/ { S[$NF]} END {for(a in S) print a, S[a]}'
根据netstat查看到的对方IP特征:
# netstat -na grep SYN_RECV more
以下配置,第一段参数是最重要的,第二段参数是辅助的,其余参数是其他作用的:
# vi /etc/sysctl.conf
net.ipv4.tcp_synack_retries=0
#半连接队列长度
net.ipv4.tcp_max_syn_backlog=200000
#系统允许的文件句柄的最大数目,因为连接需要占用文件句柄
fs.file-max=819200
#用来应对突发的大并发connect 请求
net.core.somaxconn=65536
#最大的TCP 数据接收缓冲(字节)
net.core.rmem_max=1024123000
#最大的TCP 数据发送缓冲(字节)
net.core.wmem_max=16777216
#网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog=165536
#本机主动连接其他机器时的端口分配范围
net.ipv4.ip_local_port_range=1000065535
使配置生效:
# sysctl -p
注意,以下参数面对外网时,不要打开。因为副作用很明显,具体原因请google,如果已打开请显式改为0,然后执行sysctl -p关闭。因为经过试验,大量TIME_WAIT状态的连接对系统没太大影响:
#当出现 半连接 队列溢出时向对方发送syncookies,调大 半连接 队列后没必要
net.ipv4.tcp_syncookies=0
#TIME_WAIT状态的连接重用功能
net.ipv4.tcp_tw_reuse=0
#时间戳选项,与前面net.ipv4.tcp_tw_reuse参数配合
net.ipv4.tcp_timestamps=0
#TIME_WAIT状态的连接回收功能
net.ipv4.tcp_tw_recycle=0
防御TCP洪水攻击方法
通过调整tcp参数来防范DDOS攻击 sysctl -a | grep syn 看到:SYN相关的配置 net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie 功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN 的重试次数。加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分 SYN攻击,降低重试次数也有一定效果。 调整上述设置的方法是:
增加SYN队列长度到2048:
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
打开SYN COOKIE功能:
sysctl -w net.ipv4.tcp_syncookies=1
降低重试次数:
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_syn_retries=3
为了系统重启动时保持上述配置,可将上述命令加入到/etc/rc.d/rc.local文件中。
防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
也有人写作
#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
--limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改
防止各种端口扫描
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Ping洪水攻击(Ping of Death)
# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
扩展
问题1:解决time_wait连接数大量问题
查询到time_wait连接数过多情况下,调整内核参数:/etc/sysctl.conf
# vim /etc/sysctl.conf
添加以下配置文件:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 300
让配置生效
# /sbin/sysctl -p
参数详解:
1.net.ipv4.tcp_syncookies = 1 表示开启 syn cookies 。当出现 syn 等待队列溢出时,启用 cookies 来处理,可防范少量 syn ***,默认为 0 ,表示关闭;
2.net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将 time-wait sockets 重新用于新的 tcp 连接,默认为 0 ,表示关闭;
3.net.ipv4.tcp_tw_recycle = 1 表示开启 tcp 连接中 time-wait sockets 的快速回收,默认为 0 ,表示关闭。
4.net.ipv4.tcp_fin_timeout 修改系靳默认的 timeout 时间
如果以上配置调优后性能还不理想,可继续修改一下配置:
# vim /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 1200 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000 #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
默认为180000,改为5000。
对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
问题2:ESTABLISHED连接数过大问题
怎么解决请求结束后依然存在大量ESTABLISHED没有被释放
初步推断是tomcat服务器回收session时出了问题,这个一般都跟服务器的Timeout设置有联系。
查看tomcat的配置文件 server.xml
Copy
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
*****
检查配置得出20000毫秒的时候acceptCount=”100” ,明显不合理,最大连接数也太小了吧。
所以进一步优化:
Copy
connectionTimeout="20000" 改为 connectionTimeout="100"
acceptCount="100"改为acceptCount="5000"
DDoS攻击防御方法
**1. 过滤不必要的服务和端口:**可以使用Inexpress、Express、Forwarding等工具来过滤不必要的服务和端口,即在路由器上过滤假IP。比如Cisco公司的CEF(Cisco Express Forwarding)可以针对封包Source IP和Routing Table做比较,并加以过滤。只开放服务端口成为目前很多服务器的流行做法,例如WWW服务器那么只开放80而将其他所有端口关闭或在防火墙上做阻止策略。 **2. 异常流量的清洗过滤:**通过DDOS硬件防火墙对异常流量的清洗过滤,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判断外来访问流量是否正常,进一步将异常流量禁止过滤。单台负载每秒可防御800-927万个syn攻击包。
**3. 分布式集群防御:**这是目前网络安全界防御大规模DDOS攻击的最有效办法。分布式集群防御的特点是在每个节点服务器配置多个IP地址(负载均衡),并且每个节点能承受不低于10G的DDOS攻击,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护角度去影响企业的安全执行决策。
**4. 高防智能DNS解析:**高智能DNS解析系统与DDOS防御系统的完美结合,为企业提供对抗新兴安全威胁的超级检测功能。它颠覆了传统一个域名对应一个镜像的做法,智能根据用户的上网路线将DNS解析请求解析到用户所属网络的服务器。同时智能DNS解析系统还有宕机检测功能,随时可将瘫痪的服务器IP智能更换成正常服务器IP,为企业的网络保持一个永不宕机的服务状态。
参考链接 :
https://www.cnblogs.com/mydomain/archive/2013/05/14/3079002.html
https://www.cnblogs.com/hello-sky/p/11598954.html
五种简单CC攻击解决方案 http://www.anxinidc.com/faq/anquan/126.html
linux检测及防止DDOS攻击的技巧(2) http://www.xitongzhijia.net/xtjc/20150608/50328_2.html
TCP洪水攻击(DDOS)诊断与防护http://blog.sina.com.cn/s/blog_6f82cb740101j7z0.html
服务器被ddos攻击?分析如何防止DDOS攻击? :https://blog.csdn.net/weixin_34407348/article/details/86013716?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase
DDos攻击的常见方法及防御方法 https://www.cnblogs.com/larry-luo/p/10208074.html
原文地址:https://blog.csdn.net/qq_40907977/article/details/106897732