zoukankan      html  css  js  c++  java
  • Debian防御DDOS(简易版本)

    DDOS攻击主要还是靠硬防,不过,对于一些小的骚扰,可以采用DDoS deflate+iptables的方法减轻。

    =================================================================

    一、DDoS deflate

    DDoS deflate官方网站:http://deflate.medialayer.com/

    如何确认是否受到DDOS攻击?
    执行:netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
    执行后,将会显示服务器上所有的每个IP多少个连接数。

    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
    1 106.11.68.13
    1 Address
    1 servers)
    2 39.69.84.165
    6 125.65.242.94
    132 127.0.0.1
    每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。

    1、安装DDoS deflate

    wget http://www.inetbase.com/scripts/ddos/install.sh //下载DDoS deflate
    chmod 0700 install.sh //添加权限
    ./install.sh //执行


    2、配置DDoS deflate

    下面是DDoS deflate的默认配置位于/usr/local/ddos/ddos.conf ,内容如下:

    ##### Paths of the script and other files
    PROGDIR="/usr/local/ddos"
    PROG="/usr/local/ddos/ddos.sh"
    IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list" //IP地址白名单
    CRON="/etc/cron.d/ddos.cron" //定时执行程序
    APF="/etc/apf/apf"
    IPT="/sbin/iptables"

    ##### frequency in minutes for running the script
    ##### Caution: Every time this setting is changed, run the script with --cron
    ##### option so that the new frequency takes effect
    FREQ=1 //检查时间间隔,默认1分钟

    ##### How many connections define a bad IP? Indicate that below.
    NO_OF_CONNECTIONS=150 //最大连接数,超过这个数IP就会被屏蔽,一般默认即可

    ##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
    ##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
    APF_BAN=1 //使用APF还是iptables。推荐使用iptables,将APF_BAN的值改为0即可。

    ##### KILL=0 (Bad IPs are'nt banned, good for interactive execution of script)
    ##### KILL=1 (Recommended setting)
    KILL=1 //是否屏蔽IP,默认即可

    ##### An email is sent to the following address when an IP is banned.
    ##### Blank would suppress sending of mails
    EMAIL_TO="root" //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可

    ##### Number of seconds the banned ip should remain in blacklist.
    BAN_PERIOD=600 //禁用IP时间,默认600秒,可根据情况调整
    用户可根据给默认配置文件加上的注释提示内容,修改配置文件。

    查看/usr/local/ddos/ddos.sh文件的第117行

    netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST

    修改为以下代码即可!

    netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sed -n ‘/[0-9]/p’ | sort | uniq -c | sort -nr > $BAD_IP_LIST

    =================================================================

    二、iptables

    SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。SYN Flood攻击虽然原理简单,但是造成的危害却十分严重。
    首先检测,两种方法:
    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
    netstat -alnt | awk '{print $5}' |awk -F ":" '{print $1}' | sort | uniq -c |sort -n

    初步先制定iptables关于单个IP并发TCP连接

    限制连往本机的web服务,1个C段的IP的并发连接不超过100个,超过的被拒绝:
    #iptables -I INPUT -p tcp --dport 80 -m iplimit --iplimit-above 100 --iplimit-mask 24 -j REJECT
    延伸例子:
    限制连往本机的telnet单个IP并发连接为2个,超过的连接被拒绝:
    #iptables -I INPUT -p tcp --dport 23 -m iplimit --iplimit-above 2 -j REJECT

    iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT
    #限制连往本机的web服务,1个C段的IP的并发连接不超过100个,超过的被拒绝:
    延伸例子:
    限制连往本机的telnet单个IP并发连接为2个,超过的连接被拒绝:
    #iptables -I INPUT -p tcp --dport 23 -m connlimit --connlimit-above 2 -j REJECT

     iplimit模块不可用,现改用connlimit

    防止同步包洪水(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 -t mangle -A POSTROUTING -p tcp --syn -m connlimit --connlimit-above 20 -j LOG --log-level 4 --log-prefix "iptables: "
    iptables -t mangle -A POSTROUTING -p tcp --syn -m connlimit --connlimit-above 20 -j DROP
    #控制单个IP的最大并发连接数(我设置了最大并发连接数为20)

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

     

  • 相关阅读:
    NHibernate中的Clear和Flush方法
    什么是POCO类
    node-vuecli 脚手架安装
    layui表单引入ueditor遇坑记
    PHP的九个超全局变量
    PHP的八个魔术常量
    PHP的七个数组指针函数
    TP6.0多应用模式隐藏路由中的应用名
    TP6.0中的密码验证逻辑、验证器的使用
    Vue 侦听器 watch
  • 原文地址:https://www.cnblogs.com/sunky/p/6751412.html
Copyright © 2011-2022 走看看