一、前言
随着现代互联网科技的快速发展,网络服务器的安全也逐渐成为各大企业开始关注的焦点。服务器后台的安全保证关系着整个网络数据的命脉,所以服务器的安全防范也逐渐称为各大企业关注的重点。
其中较为常见的攻击为ddos攻击,所谓ddos攻击,指的是分布式拒绝服务攻击,分布式拒绝服务攻击可以使很多的计算机在同一时间遭受到攻击,使攻击的目标无法正常使用。一种是一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时向一个或数个目标发动攻击,或者多个攻击者同时向一个或数个目标发动攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。
分布式拒绝服务攻击已经出现了很多次,导致很多的大型网站都出现了无法进行操作的情况,这样不仅会影响到用户的正常使用,同时也会造成巨大的经济损失。
分布式拒绝服务攻击方式在进行攻击的时候,可以对源IP地址进行伪造,这样就使得这种攻击在发生的时候隐蔽性是非常好的,同时要对攻击进行检测也是非常困难的,因此这种攻击方式也称为了非常难以防范的攻击。
其已经不再是大型互联网网站需要关心的事情了。
二、常见的攻击类型
服务器的攻击分为四类,CC攻击,SYN攻击,UDP攻击,TCP洪水攻击。
以下分别介绍下当被攻击时,出现的症状,以及如何判断服务器是否被攻击。
第一种:CC类攻击
CC攻击是DDoS(分布式拒绝服务)的一种,这是一种比DDOS流氓行为更具有技术含量的一种攻击方式,CC攻击完全模拟正常访问行为,没有虚假IP,也没有大的流量异常,但一样会造成你的服务器无法正常连接,一条ADSL【拨号动态IP】的普通用户发起的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 -an,若观察到大量的ETABLISHED的连接状态,单个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 -an,若观察到大量的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 -anlp | grep :80 | awk {'print $5'} | cut -d: -f1 | sort | uniq -c | sort -nk 1 # 列出所有连接到本机80端口的IP地址和其他连接数
可以利用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_syn_backlog=1280 # syn队列,默认1024,》 1280可能工作不稳定,需要修改内核源码参数
sysctl -w net.ipv4.tcp_synack_retries=2 # syn-ack握手状态重试次数,默认5,遭受sync
sysctl -w net.ipv4.tcp_syn_retries=2 # 外向syn握手重试次数,默认4
可以通过下列命令查看
[root@localhost server]# 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
当通过执行:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
显示每个IP几个、十几个或者几十个连接数都还算比较正常,如果成百上千就不正常了
可以通过上述的判断来进行分析,让我们能准确的判断出存在的问题是什么。
TCP洪水攻击检测
可以通过查看日志
tail -f /var/log/messages
检查连接数增多,并且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 -an grep SYN_RECV more
以下配置,第一段参数是最重要的,第二段参数是辅助的,其余参数是其他作用的:
vim /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洪水攻击方法
1、通过调整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文件中。
2、防止同步包洪水(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
三、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,为企业的网络保持一个永不宕机的服务状态。