《运维--PlayBook》更新中.......!请访问: https://ops.cnmysql.com

DDOS防护抵御方法 不指定

kangyang , 2015/08/20 09:55 , 黑客攻防 , 评论(0) , 阅读(6186) , Via 本站原创
在安全领域,DDoS(分布式拒绝服务攻击)简单粗暴,是常见攻击方法。而网站型应用,由于有公开的域名和IP,并使用特定的通信协议(TCP),很容易被发起DDoS攻击。友好速搭上线9个月以来,遭受DDoS攻击超过20次,有些攻击流量规模超过100Gbps。

用来区分DDoS攻击类型的名词很多,比如SYN Flood、UDP Flood、ICMP Flood、CC攻击等。从防护角度看,主要可以分为两种类型:带宽消耗型和资源消耗型。
带宽消耗型攻击
带宽消耗型攻击,目的是封堵系统的网络出入口,大都是基于简单网络协议,比如UDP或ICMP,向指定IP发送大量数据包。这类攻击,只能通过增加网络带宽来防御,如果流量特别大,超过了机房网络的承受范围,那只能使用第三方的流量清洗服务,例如安全宝、腾讯大禹系统等。
点击在新窗口中浏览此图片
这类清洗服务,主要提供两类帮助:

域名通过CNAME解析,隐藏应用真实IP
域名解析的IP结果,是防护IP地址,攻击的流量只先到防护的机房,应用的真实IP,只对防护服务商可见。

流量清洗,筛选健康流量发回源站
服务商会通过技术手段,将攻击流量拦截,并筛选出健康流量发给应用。
资源消耗型攻击
资源消耗型攻击,主要目的是耗尽系统资源,比如SYN Flood,会导致主机建立大量TCP连接,耗尽系统句柄,CC攻击发起大量正常请求,超出业务应用的处理上限。这类攻击的流量大小,与攻击者使用的肉鸡数量有关。如果流量特别大,也需要使用上面提到的流量清洗服务。如果流量规模不大,可以通过简单的脚本,识别出攻击代理的IP,并进行屏蔽来防御。

网站使用的HTTP或SSL协议,都是基于传输层TCP协议的应用,TCP协议中的状态变化如下:
点击在新窗口中浏览此图片
可以通过识别不同状态的TCP连接数量,来判断是否攻击IP。

例如,SYN Flood攻击,就是通过建立处于SYN状态的TCP连接,消耗服务器的句柄,遭受这种攻击时,服务器可以查看到,很多TCP连接处于syn-recv状态。

而CC攻击,通常都是向网站发起大量请求,与服务器建立大量TCP连接,状态大都处于established,time-wait,close-wait。

通过 Linux 系统中的ss命令,可以查看各种状态的TCP连接:
ss -ntu state syn-recv state established state time-wait
通过查看IP的TCP连接状态和数量,就能判断出这个IP是否用于DDoS攻击。

基于这个思路,针对资源消耗型攻击,我们开发了一个简单的脚本工具:AntiDDoS。在服务器上部署启动后,会定时查看TCP连接,超过指定连接数量的IP,会被加入iptables屏蔽一段时间,并发邮件通知系统管理员。

下载链接:
https://github.com/yeezon/AntiDDoS

iptables简单防护
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT      #每秒中最多允许5个新连接
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT  #防止各种端口扫描
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT     #Ping洪水攻击(Ping of Death


屏蔽一个IP
# iptables -I INPUT -s 192.168.0.1 -j DROP

怎么防止别人ping我??
# iptables -A INPUT -p icmp -j DROP

防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT

防止各种端口扫描
# 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

# NMAP FIN/URG/PSH
# iptables -A INPUT -i eth0 -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP


iptables 屏蔽IP 不指定

kangyang , 2014/09/15 14:50 , 黑客攻防 , 评论(0) , 阅读(3000) , Via 本站原创

IPdeny 下载以国家代码编制好的 IP 地址列表,比如下载 cn.zone:
有了国家的所有 IP 地址,要想屏蔽这些 IP 就很容易了,直接写个脚本逐行读取 cn.zone 文件并加入到 iptables 中:

#!/bin/bash
# Block traffic from a specific country
# written by vpsee.com

COUNTRY="cn"
IPTABLES=/sbin/iptables
EGREP=/bin/egrep

if [ "$(id -u)" != "0" ]; then
   echo "you must be root" 1>&2
   exit 1
fi

resetrules() {
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
}

resetrules

for c in $COUNTRY
do
        country_file=$c.zone

        IPS=$($EGREP -v "^#|^$" $country_file)
        for ip in $IPS
        do
           echo "blocking $ip"
           $IPTABLES -A INPUT -s $ip -j DROP
        done
done

exit 0


以上脚本可以延伸成防ddos攻击!


Tags: ,
服务器出现缓慢的状况可能由很多事情导致,比如错误的配置,脚本和差的硬件。但是有时候它可能因为有人对你的服务器用DoS或者DDoS进行洪水攻击。

DoS攻击或者DDoS攻击是试图让机器或者网络资源不可用的攻击。这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行,信用卡支付网管,甚至根域名服务器,DOS攻击的实施通常迫使目标重启计算机或者消耗资源,使他们不再提供服务或者妨碍用户,访客访问。

在这篇小文章中,你可以知道在受到攻击之后如何在终端中使用netstat命令检查你的服务器。

一些例子和解释

netstat -na
显示所有连接到服务器的活跃的网络连接
netstat -an | grep :80 | sort
只显示连接到80段口的活跃的网络连接,80是http端口,这对于web服务器非常有用,并且对结果排序.对于你从许多的连接中找出单个发动洪水攻击IP非常有用
netstat -n -p|grep SYN_REC | wc -l
这个命令对于在服务器上找出活跃的SYNC_REC非常有用,数量应该很低,最好少于5.
在dos攻击和邮件炸弹,这个数字可能非常高.然而值通常依赖于系统,所以高的值可能平分给另外的服务器.
netstat -n -p | grep SYN_REC | sort -u
列出所有包含的IP地址而不仅仅是计数.
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出所有不同的IP地址节点发送SYN_REC的连接状态
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
使用netstat命令来计算每个IP地址对服务器的连接数量
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出使用tcp和udp连接到服务器的数目
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: -f 1|sort|uniq -c|sort -nk 1
显示并且列出连接到80端口IP地址和连接数.80被用来作为HTTP

如何缓解DDoS攻击

当你发现攻击你服务器的IP你可以使用下面的命令来关闭他们的连接:

iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT

请注意你必须用你使用netstat命令找到的IP数替换$IPADRESS

在完成以上的命令,使用下面的命令杀掉所有httpd连接,清除你的系统,然后重启httpd服务。

killall -KILL httpd service httpd start #For Red Hat systems /etc/init/d/apache2 restart #For Debian systems
Tags: ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]