• 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

     

  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/sunky/p/6751412.html
Copyright © 2020-2023  润新知