ddos攻击是一种非常常见的黑客攻击服务器手法
根据wiki的说法:
拒绝服务攻击(英语:denial-of-service attack,简称DoS攻击)亦称洪水攻击,是一种网络攻击手法,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。
当黑客使用网络上两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击时,称为分布式拒绝服务攻击(distributed denial-of-service attack,简称DDoS攻击)。
我们在面对ddos的时候,常用的防御办法有CDN,硬件防火墙,或者专业的安全软件。但是有时候我们的服务器被黑客发现了真实的后端IP,这时,服务器就要面对来自攻击方的直接洪水攻击,在没有专业防火墙和软件的情况下怎么办呢?
针对linux系统的本身安全防御能力,比如内核层面的防御参数,防火墙等,我们可以充分利用这些基础条件做一些临时的“救急防御”。
首先,我们需要对攻击的IP做出一定的识别,我们知道ddos的攻击特征是发送大量的模拟正常的请求,那就意味着一个ip会发送大量的请求,也就是会在服务器上建立多个连接,我们可通过如下命令找出连接数过多的IP。
netstat -unt |egrep -v "servers|Address|127.0.0.1"|awk '{print $5}'|awk -F: '{print $1}'|sort |uniq -c|sort -nr |awk '{if($1>100){print $2}}'
注意这里的关键最后的 if($1>100) 这个判断,可以按照你机器的实际情况来改变这个数值去查询,不一定要100,可以是你认为异常的重复数值。
这个命令的意思是找出那些重复连接数超过一定数量的IP,也就是可疑的IP。
如果对方攻击并不高级的话,IP数量应该就不会很多,这时我们可以手动通过将IP加进iptables的黑名单来拦截从此IP发来的攻击流量。
iptables命令如下:
iptables -A input -s 192.168.4.11 -j DROP
如果IP特别多呢?
也没有关系,我们写一个简单的for循环即可:
for i in $(netstat -unt |egrep -v "servers|Address|127.0.0.1"|awk '{print $5}'|awk -F: '{print $1}'|sort |uniq -c|sort -nr |awk '{if($1>100){print $2}}');do iptables -A input -s $i -j DROP;done
这样一个简单的操作就可以马上有效的拦截大部分攻击流量,但这并不能完全解决问题,我们最好还是安装专业的硬件防火墙设备或者专业的安全软件,使用CDN的时候也要小心不要暴露了后端服务器的真实地址。
另外,如果是nginx服务器的话也可以分析被攻击这段时间内的nginx访问日志中的IP来筛选出攻击者IP,方法类似。