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

一、什么是DDOS***?

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

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

在系统上执行:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
执行后,将会显示服务器上所有的每个IP多少个连接数。
以下是我自己用VPS测试的结果:
li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 114.226.9.132
1 174.129.237.157
1 58.60.118.142
1 Address
1 servers)
2 118.26.131.78
3 123.125.1.202
3 220.248.43.119
4 117.36.231.253
4 119.162.46.124
6 219.140.232.128
8 220.181.61.31
2311 67.215.242.196
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。

三、防范DDOS***的方法:

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

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

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

Linux内核提供了若干SYN相关设置,使用命令:
sysctl -a | grep syn
看到:
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5

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
降低重试次数:
sysctl -w net.ipv4.tcp_synack_retries=3
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秒)内允许新建立的连接数
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 \
–hitcount 30 -j REJECT
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的参数如下:
#cat/etc/modprobe.conf
options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60
#记录1000个IP地址,每个地址记录60个数据包
#modprobe ipt_recent

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

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

#!/bin/sh
cd /usr/local/nginx/var/log
tail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt
for i in `cat drop_ip.txt`
do
/sbin/iptables -I INPUT -s $i -j DROP;
done
这shell 每几分钟执行一次,就可自动屏蔽那些不正常IP,相信大家都看的懂,下面是针对连接数屏蔽代码

#!/bin/sh
/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
for i in `cat drop_ip.txt`
do
/sbin/iptables -I INPUT -s $i -j DROP;
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

wget
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

##### 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秒,可根据情况调整

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

喜欢折腾的可以用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. 到

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

tar zxvf mod_evasive_1.10.1.tar.gz
cd mod_evasive/
apxs -cia mod_evasive20.c
以上的apxs 会放在Apache 的bin 目录内;如果Apache 版本是1.3 的话,指令要改为:

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

D. 开启 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,这是设定封锁的时间,以秒为单位。

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

转载于:https://blog.51cto.com/dihaifeng/1561220

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

  1. linux如何批量处理图片名,Linux下批量修改图片名称的方法详解

    我们都知道,要修改文件夹下的图片名称很容易,那么有什么方法能够快速批量修改图片名称呢?这篇文章主要为大家介绍了linux系统中如何批量修改图片文件名的案例演示,如果想修改linux文件夹下的图片名称, ...

  2. Linux下的tar归档及解压缩功能详解

    Linux下的tar归档及解压缩功能详解 一.Linux下解压缩工具 二.gzip工具的使用方法 三.其他解压缩工具 一.Linux下解压缩工具 二.gzip工具的使用方法 三.其他解压缩工具 一.L ...

  3. linux 子域dns,linux下搭建DNS子域及相关授权详解

    linux下搭建DNS子域及相关授权详解forward功能是本地无法解析的域名,转发给指定DNS服务器 forward only; 所有无法解析的域名,都转发给指定DNS服务器,必须有解析结果 for ...

  4. Linux环境下怎么使用pip,linux下pip的安装步骤及使用详解

    linux下pip的安装步骤及使用详解 pip类似RedHat里面的yum,安装软件非常方便.下面话不多说,来看看详细的介绍: pip下载:# wget "https://pypi.pyth ...

  5. linux nginx编译详解,Linux下nginx编译安装教程和编译参数详解

    这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备 1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码 代码如下:# ...

  6. linux下搭建DNS子域及相关授权详解

    linux下搭建DNS子域及相关授权详解 forward功能是本地无法解析的域名,转发给指定DNS服务器 forward only; 所有无法解析的域名,都转发给指定DNS服务器,必须有解析结果 fo ...

  7. linux下mysql数据库基础及客户端命令详解

    linux下mysql数据库基础及客户端命令详解 1.mysql数据库存储引擎: SHOW ENGINES;   #查看mysql支持的存储引擎 常见有如下两个存储引擎: MyISAM:每表三个文件: ...

  8. Linux下解析域名命令-dig 命令使用详解

    Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息.dig 命令主要用来从 DNS 域名服务器查询主机地址信息.dig的全称是 (dom ...

  9. linux做子域dns,linux下搭建DNS子域及相关授权详解

    linux下搭建DNS子域及相关授权详解 forward功能是本地无法解析的域名,转发给指定DNS服务器 forward only; 所有无法解析的域名,都转发给指定DNS服务器,必须有解析结果 fo ...

最新文章

  1. Vector Field Histogram(VFH+ algorithm(向量直方图避障))
  2. html文字依次显示,利用定时器和css3动画制作文字依次渐变显示的效果
  3. java 读取 邮件 附件,JavaMail 中对附件下载的处理
  4. Exchange2010部署边缘服务器
  5. python 内存溢出能捕获吗_python之记录一次内存溢出
  6. win10创建mysql数据库吗_win10 sqlite3创建的数据库文件在哪
  7. android launcher主要功能_Android 或有新变化,语音搜索进一步强化
  8. vue生命周期心得体会800字
  9. python滚动条翻页爬取数据_scrapy实践之翻页爬取的实现
  10. maven 启动项目默认tomcat6更换为tomcat7或其他版本
  11. Bitvise SSH Client连接Linux服务器教程和使用
  12. oracle 设置输出显示,oracle输出语句
  13. 友华改设备标识命令_PT632 G_2装备指令
  14. Elasticsearch聚合学习之二:区间聚合
  15. Docker入门-常用指令总结与归纳
  16. 揭秘跨境电商亚马逊测评的培训骗局!千万不要上当受骗!
  17. RabbitMQ高可用集群搭建
  18. 给你100万条数据的一张表,你将如何查询优化?
  19. 质数乘积 -LintCode
  20. AWS云计算技术架构探索系列之一-开篇

热门文章

  1. 在windows中python安装sit-packages路径位置 在Pycharm中导入opencv不能自动代码补全问题
  2. 统计某一时刻的在线人数
  3. 原理分析之三:初始化(配置文件读取和解析)
  4. mysql中表名为关键字的处理方法
  5. 黑马程序员:从零基础到精通的前端学习路线
  6. ffmpeg参数说明
  7. 解决Failed to load class org.slf4j.impl.StaticLoggerBinder
  8. Metrics.NET源码阅读笔记
  9. 用扫描的方式实现Rosenfeld and Pfaltz提出的距离变换!
  10. 安卓音频输出采样率_只有AirPods配有姓名吗?安卓的这些无线耳机也不错