互联网如同现实社会一样充满钩心斗角,网站被DDOS也成为站长最头疼的事。在没有硬防的情况下,寻找软件代替是最直接的方法,比如用 iptables,但是iptables不能在自动屏蔽,只能手动屏蔽。

一、什么是DDOS攻击?

DDoS也就是分布式拒绝服务攻击。它使用与普通的拒绝服务攻击同样的方法,但是发起攻击的源是多个。通常攻击者使用下载的工具渗透无保护的主机,当获得该主机的适当的访问权限后,攻击者在主机中安装软件的服务或进程。这些代理保持睡眠状态,直到从它们的主控端得到指令,对指定的目标发起拒绝服务攻击。

二、如何确认自己受到DDOS攻击?

在系统上执行:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

执行后,将会显示服务器上所有的每个IP多少个连接数。
    以下是我自己用VPS测试的结果:
      1 192.168.21.246
      1 192.168.21.36
      1 192.168.21.71
      1 192.204.26.65
      1 192.204.26.73
      1 205.209.180.55
      1 Address
      1 servers)
      3 192.168.21.28
      3 192.168.21.53
      4 192.168.21.15
      6 192.168.21.51
    每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。

三、防范DDOS攻击的方法:

一些常用的防DDOS攻击的方法,罗列如下:

1.增加硬件防火墙和增加硬件设备来承载和抵御DDOS攻击,最基本的方法,但成本比较高。

2.修改SYN设置抵御SYN攻击:

SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。

Linux内核提供了若干SYN相关设置,使用命令:

sysctl -a | grep syn

看到:
fs.quota.syncs = 150
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv6.conf.all.max_desync_factor = 600
net.ipv6.conf.default.max_desync_factor = 600
net.ipv6.conf.lo.max_desync_factor = 600
net.ipv6.conf.em1.max_desync_factor = 600
net.ipv6.conf.em2.max_desync_factor = 600
net.ipv6.conf.em3.max_desync_factor = 600
net.ipv6.conf.em4.max_desync_factor = 600
net.ipv6.conf.vmnet1.max_desync_factor = 600
net.ipv6.conf.vmnet8.max_desync_factor = 600

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

降低重试次数:

  1. sysctl -w net.ipv4.tcp_synack_retries=3

  2. sysctl -w net.ipv4.tcp_syn_retries=3

为了系统重启动时保持上述配置,可将上述命令加入到/etc/rc.d/rc.local文件中。

3.安装iptables对特定ip进行屏蔽。

A.安装iptables和系统内核版本对应的内核模块kernel-smp-modules-connlimit

B. 配置相应的iptables规则

示例如下:

(1)控制单个IP的最大并发连接数

iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT

#允许单个IP的最大连接数为 30

(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数

  1. iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 \ –hitcount 30 -j REJECT

  2. iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT

#单个IP在60秒内只允许最多新建30个连接

(3)用iptables屏蔽IP

iptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 --dport 80 --syn -j REJECT

指定端口的参数是--dport 80;多了--syn参数,可以自动检测sync攻击

(4)使用iptables禁止ping:

iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT-A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT --reject-with icmp-port-unreachable

(5)允许某ip连接

iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s 192.168.0.51 --syn -j ACCEPT

C. 验证

(1)工具:flood_connect.c(用来模拟攻击)
   (2)查看效果:
    使用

watch ‘netstat -an | grep:21 | \ grep< 模拟攻击客户机的IP>| wc -l’
    实时查看模拟攻击客户机建立起来的连接数,
    使用
    watch ‘iptables -L -n -v | \grep< 模拟攻击客户机的IP>’
    查看模拟攻击客户机被 DROP 的数据包数。

D.注意

为了增强iptables防止CC攻击的能力,最好调整一下ipt_recent的参数如下:

  1. #cat/etc/modprobe.conf

  2. options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60

  3. #记录1000个IP地址,每个地址记录60个数据包

  4. #modprobe ipt_recent

E.可编写脚本自动提娶攻击ip然后自动屏蔽:

  1. */2 * * * * /usr/local/nginx/var/log/drop.sh

  2. #!/bin/sh

  3. cd /usr/local/nginx/var/log

  4. tail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt

  5. for i in `cat drop_ip.txt`

  6. do

  7. /sbin/iptables -I INPUT -s $i -j DROP;

  8. done

这shell 每几分钟执行一次,就可自动屏蔽那些不正常IP,相信大家都看的懂,下面是针对连接数屏蔽代码

  1. #!/bin/sh

  2. /bin/netstat -ant |grep 80 |awk '{print $5}' |awk -F : '{print $1}' |sort |uniq -c |sort -rn |grep -v -E '192.168|127.0' |awk '{if ($2!=null && $1>50)}' > drop_ip.txt

  3. for i in `cat drop_ip.txt`

  4. do

  5. /sbin/iptables -I INPUT -s $i -j DROP;

  6. done

说下,grep -v -E '192.168|127.0' 也就是排除内网IP,免得把自己给屏蔽了,当然还可以加些自己的IP。

4.安装DDoS deflate自动抵御DDOS攻击

DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址,在检测到某个结点超过预设的限制时,该程序会通过APF或IPTABLES禁止或阻挡这些IP.

DDoS deflate官方网站:

(1)安装DDoS deflate

  1. wget chmod 0700 install.sh //添加权限

  2. ./install.sh //执行

(2)配置DDoS deflate

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

  1. ##### Paths of the script and other files

  2. PROGDIR=”/usr/local/ddos”

  3. PROG=”/usr/local/ddos/ddos.sh”

  4. IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名单

  5. CRON=”/etc/cron.d/ddos.cron” //定时执行程序

  6. APF=”/etc/apf/apf”

  7. IPT=”/sbin/iptables”

  8. ##### frequency in minutes for running the script

  9. ##### Caution: Every time this setting is changed run the script with –cron

  10. ##### option so that the new frequency takes effect

  11. FREQ=1 //检查时间间隔,默认1分钟

  12. ##### How many connections define a bad IP? Indicate that below.

  13. NO_OF_CONNECTIONS=150 //最大连接数,超过这个数IP就会被屏蔽,一般默认即可

  14. ##### APF_BAN=1 (Make sure your APF version is atleast 0.96)

  15. ##### APF_BAN=0 (Uses iptables for banning ips instead of APF)

  16. APF_BAN=1 //使用APF还是iptables,推荐使用iptables

  17. ##### KILL=0 (Bad IPs are’nt banned good for interactive execution of script)

  18. ##### KILL=1 (Recommended setting)

  19. KILL=1 //是否屏蔽IP,默认即可

  20. #### An email is sent to the following address when an IP is banned.

  21. ##### Blank would suppress sending of mails

  22. EMAIL_TO=”root” //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可

  23. ##### Number of seconds the banned ip should remain in blacklist.

  24. BAN_PERIOD=600 //禁用IP时间,默认600秒,可根据情况调整

用户可根据给默认配置文件加上的注释提示内容,修岗?置文件。

喜欢折腾的可以用Web压力测试软件(《web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程》)测试一下效果,这东西只能防御小流量的攻击了,聊胜于无吧。

5.APACHE上安装mod_evasive 组件增强抵御力

mod_evasive是一个预防Apache 遭受DDos 攻击的模块,可以防止同一个IP 对相同URI 发出的大量请求,可设定的选项有:

  • 限制同一个IP 在一定秒数内请求一个页面或档案的次数。
  • 限制同一个IP 一秒内只可发出50 个请求。
  • 设定被禁止的 IP 封锁时间。

以下是 mod_evasive 的安装方法:

A. 先将原来的 httpd.conf 备份起来。

B. 在指令模式解压及编译 mod_evasive:

  1. tar zxvf mod_evasive_1.10.1.tar.gz

  2. cd mod_evasive/

  3. apxs -cia mod_evasive20.c

以上的apxs 会放在Apache 的bin 目录内;如果Apache 版本是1.3 的话,指令要改为:

apxs -cia mod_evasive.c
   安装好mod_evasive 后,便要修改httpd.conf 内容。

C. 开启 httpd.conf,加入以内容:

DOSHashTableSize 3097
   DOSPageCount 5
   DOSSiteCount 100
   DOSPageInterval 2
   DOSSiteInterval 2
   DOSBlockingPeriod 10
   DOSBlockingPeriod 600

DOSHashTableSize — 这是占用内存的大小,如果服务器比较繁忙,这个数值要设定大一点。

DOSPageCount — 同一IP 在一个时段内可以存娶同一页面的次数,超过会被禁止。
   DOSSiteCount — 同一IP 在一个网站内可以占用多少object,超过会禁止。
   DOSPageInterval — DOSPageCount 内的时段设定。
   DOSSiteInterval — DOSSiteCount 的时间设定,以秒为单位。
   DOSBlockingPeriod — 当发现疑似攻击后,使用者会收到403 Forbidden,这是设定封锁的时间,以秒为单位。

D. 最后重新启动 Apache 即可。

linux下防DDOS攻击软件及使用方法详解相关推荐

  1. linux apache中文名称图片,linux下解决apache不支持中文名的方法详解!

    Submitted by felix on 2007, November 16, 11:51 AM. 猪之技术

  2. Linux下防御ddos攻击

    1.Linux下防御ddos攻击 导读 Linux服务器在运营过程中可能会受到黑客攻击,常见的攻击方式有SYN,DDOS等.通过更换IP,查找被攻击的站点可能避开攻击,但是中断服务的时间比较长.比较彻 ...

  3. linux在vi创建文件,Linux下创建文本文件(vi/vim命令使用详解)

    vi test.txt 或者 vim test.txt 再或者 touch test.txt vim是vi的升级版,指令更多,功能更强. 下面是收集的vim用法,当在vim里面要实现退出,首先要做的是 ...

  4. linux c多进程多线程,linux下的C\C++多进程多线程编程实例详解

    linux下的C\C++多进程多线程编程实例详解 1.多进程编程 #include #include #include int main() { pid_t child_pid; /* 创建一个子进程 ...

  5. 创建三个并发进程linux,Linux下几种并发服务器的实现模式(详解)

    1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发. 2>循环服务器和并发服务器 1.循 ...

  6. dns日志级别 linux,linux下DNS服务器视图view及日志系统详解

    linux下DNS服务器视图view及日志系统详解DNS服务器ACL:在named.conf文件中定义ACL功能如同bash当中定义变量,便于后续引用 ACL格式: acl ACL名称 { IP地址1 ...

  7. 1 linux下tcp并发服务器的几种设计的模式套路,Linux下几种并发服务器的实现模式(详解)...

    1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发. 2>循环服务器和并发服务器 1.循 ...

  8. Linux如何重启oracle监听,Linux下重启oracle服务及监听器和实例详解

    一.在Linux下重启Oracle数据库及监听器: 方法1: 用root以ssh登录到linux,打开终端输入以下命令: cd $ORACLE_HOME #进入到oracle的安装目录 dbstart ...

  9. linux中apache配置文件在哪,linux网站服务Apache的安装与配置方法详解

    这篇文章介绍下linux网站服务apache的安装与配置方法,包括挂载光盘,安装http服务,管理httpd服务,httpd的配置文件几大部分.具体详情可以参考下文. 1.挂载光盘 自己习惯将光盘挂载 ...

最新文章

  1. python和R对dataframe的分组聚合操作:dplyr、groupby、agg、group_by、nunique、reset_index、rename、summarise、n_distinct
  2. 网易二面:Kafka为什么吞吐量大、速度快?
  3. OVS对VXLAN解封包(二)
  4. 【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )
  5. mysql适配器_MySQL适配器PyMySQL详解
  6. 华为鸿蒙15日上市,华为鸿蒙什么时候上市
  7. Hyperledger Fabric 核心模块(3)cryptogen 工具
  8. python strip函数用法_python strip()函数 介绍
  9. .NET Core 2.0 开源Office组件 NPOI
  10. 德佑地产房产经纪人区域总监访谈:有肌肉,更有内涵!
  11. dataearth可视域分析_在线三维实景建模及分析
  12. RDP协议详细解析(五)
  13. Zsh安装及常用操作
  14. CF1041B Buying a TV Set
  15. github 上适合java初学者跟的项目
  16. 硬盘助手写入文件的正确提取
  17. falcon-agent模块代码里执行sys.CmdOutBytes命令导致的问题
  18. EasyUI Combobox 的 onChange,onSelect,onClick 事件
  19. a标签实现下载图片功能
  20. 如何创建lpar通过HMC/VIOS(动态加disk)

热门文章

  1. Hyper Thread
  2. 近期Android错误
  3. 基于java设计的图书管理系统
  4. 在anaconda环境中安装tflearn模块
  5. 【华展云】2017年5月第一周官方公告
  6. wince系统报错异常总结
  7. 3. 尚融宝相关知识
  8. PDF转Word方法小罗列
  9. c语言编程单向,C语言单向链表的表示与实现实例详解
  10. Mac系统给移动硬盘分区(图文)