找回密码
 注册
查看: 4916|回复: 1

linux下防DDOS攻击软件及使用方法详解

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2016-8-24 11:22:02 | 显示全部楼层 |阅读模式

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

一、什么是DDOS攻击?

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

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

在系统上执行:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n8 R# o# t* C' s8 q0 B
执行后,将会显示服务器上所有的每个IP多少个连接数。
: N" n  b1 Y' G' s9 F' f, {7 d以下是我自己用VPS测试的结果:3 X4 I1 a) D: l* a; u  h) h
li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n6 v6 S* s& M. u0 T' ~" o
1 114.226.9.132
- Q. ~) Y. z7 x+ k( ^1 174.129.237.157
. ]; g9 \! S; g* P1 58.60.118.1426 z4 e# t% w8 K4 v" S1 r+ e' m6 V
1 Address
1 ~0 p4 s( B5 L5 M- O3 S8 U1 servers)' j' @$ W7 q0 z& I# F$ D+ t
2 118.26.131.787 X; ?, w2 Q, @* e
3 123.125.1.202
: b+ g+ Q6 U2 t) k3 220.248.43.119
. i( I3 I  R; g# ^' [4 117.36.231.253: j3 j' V. A" v; g& l5 Z( m* _! Z
4 119.162.46.124
! z/ c8 b9 m9 Q4 F6 219.140.232.128
) y/ ^  }$ d' f% `0 B* C# l. y8 220.181.61.31) j' \/ d- }6 P, ]( i% N; f5 v# r2 {
2311 67.215.242.196  Z6 `* [; `8 p$ R( {
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。
) l0 H) O- o6 M

三、防范DDOS攻击的方法:

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

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

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

Linux内核提供了若干SYN相关设置,使用命令:- d  q  I. E% y
sysctl -a | grep syn
) U! ^% L) [2 W  ~看到:
# P- U2 d" W* U1 @# snet.ipv4.tcp_max_syn_backlog = 1024
, a2 F* X" G# g5 N: f( e! wnet.ipv4.tcp_syncookies = 0
$ X  O8 y+ d( O/ H+ y' k! o& ?net.ipv4.tcp_synack_retries = 5
. S$ I# C0 e; r* _2 i; \3 _$ b  H8 mnet.ipv4.tcp_syn_retries = 5

tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie
# s  P  v* O& A" C# F, p/ e% b8 O功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN7 t, E- \& [' W# j
的重试次数。

加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分, u$ A1 S3 ~* P3 ~1 T/ e& E- r
SYN攻击,降低重试次数也有一定效果。

调整上述设置的方法是:) r# e# s% }  E& `: X/ X2 }
增加SYN队列长度到2048:1 n9 f" Q! H6 g/ O+ E
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
% @) @1 {/ H5 E" i; G! N: [  k打开SYN COOKIE功能:" s/ A$ A; B. _' y5 z
sysctl -w net.ipv4.tcp_syncookies=1
; i  O8 o" i. B1 b4 L5 k! |  G! F降低重试次数:
4 j# J) O9 z- G# M' usysctl -w net.ipv4.tcp_synack_retries=3
+ |$ e- ^5 m8 M# R7 o# F8 Lsysctl -w net.ipv4.tcp_syn_retries=3

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

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

A.安装iptables和系统内核版本对应的内核模块kernel-smp-modules-connlimit1 C5 a+ X' \3 G% c* t. X/ D0 s- |
B. 配置相应的iptables规则& @7 a6 G6 O: u: j+ M: n! G+ X# y: y
示例如下:

(1)控制单个IP的最大并发连接数7 v4 A# q, u2 t5 f; D2 u  Y, S: C
iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT, B/ Q2 j( x$ C; A8 j" S# P
#允许单个IP的最大连接数为 30
  P: c: {1 Y/ h4 y3 V: ]) P& R* R0 [(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数3 V! @, Z  Y4 S3 U
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 \: e( M( X' T7 f  J
–hitcount 30 -j REJECT4 w8 v' J+ o! U# g
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT  D1 b% h+ p7 R5 S8 p( L4 x' D% O( j
#单个IP在60秒内只允许最多新建30个连接

(3)用iptables屏蔽IP; s. g2 d, ^2 |" J  ?  _
iptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 --dport 80 --syn -j REJECT
% I+ v2 I$ y% P5 Y7 @指定端口的参数是--dport 80;多了--syn参数,可以自动检测sync攻击/ C- s; x0 ]$ x! Z9 F% _! y" N
(4)使用iptables禁止ping:4 `! O  y; }) `/ {% H! ?. ^
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
% w0 ?( J  ?8 F. O(5)允许某ip连接5 X/ j( g2 w6 F9 Q# @7 U
iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s 192.168.0.51 --syn -j ACCEPT
& Y' u0 S- N* i; g% [C. 验证
. Q* C4 \( q0 q3 |; I& P(1)工具:flood_connect.c(用来模拟攻击)
- ^0 E4 U$ c& H+ d! w( v* d(2)查看效果:
9 j+ U( c! W7 \8 C8 e6 i使用

watch ‘netstat -an | grep:21 | \ grep< 模拟攻击客户机的IP>| wc -l’
1 f" j  o7 y+ y/ ^0 T实时查看模拟攻击客户机建立起来的连接数,
3 v2 V7 B* p5 Y5 B+ e使用8 z2 U0 H0 L  \( `: T3 Q; Y& {
watch ‘iptables -L -n -v | \grep< 模拟攻击客户机的IP>’# r% [* g4 f0 o5 W8 f, q
查看模拟攻击客户机被 DROP 的数据包数。" n8 U8 j! ?4 h7 w& d" Z- \6 a
D.注意
* g) ?$ A! d$ H& N为了增强iptables防止CC攻击的能力,最好调整一下ipt_recent的参数如下:% G) P' m, C2 N0 s6 z8 r
#cat/etc/modprobe.conf% p) s  h) I* Q7 y) o
options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60- R3 t) O2 ?4 b- C6 A; B0 H
#记录1000个IP地址,每个地址记录60个数据包5 U' e' ^" h# N2 M
#modprobe ipt_recent

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

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

#!/bin/sh% O8 V7 Y6 h0 U, o4 h6 S  K4 I3 v3 n
cd /usr/local/nginx/var/log7 Q1 u& Z5 W' V
tail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt
6 S: j$ y: t7 ~for i in `cat drop_ip.txt`2 L7 u+ w6 \; d& K* a
do
! C  b- S9 V' m6 J2 u# g/sbin/iptables -I INPUT -s $i -j DROP;5 {9 P3 p, B, D* x5 V% d% J# Z" G* A+ N
done# H+ b! l' m" J# _( Q, V2 f; f3 p
这shell 每几分钟执行一次,就可自动屏蔽那些不正常IP,相信大家都看的懂,下面是针对连接数屏蔽代码

#!/bin/sh6 d$ N5 F, `, [! F- S
/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
5 t. F7 x$ [) c5 N) ~5 hfor i in `cat drop_ip.txt`
7 w* E) K/ t6 v6 j( Zdo5 |7 [! ~9 H+ b% g: G
/sbin/iptables -I INPUT -s $i -j DROP;
5 r- ~5 W" N9 j. J7 ^$ hdone* Y$ |( B& d2 x8 z2 @& G6 \% r/ ^
说下,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( E2 c+ R  F, k, @5 C4 r
chmod 0700 install.sh //添加权限$ H1 a1 r* y; X
./install.sh //执行

(2)配置DDoS deflate

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

##### Paths of the script and other files- P( l: S/ f7 ^( R/ F' g
PROGDIR=”/usr/local/ddos”, |" h, l* k5 U) t
PROG=”/usr/local/ddos/ddos.sh”
5 G4 ?6 s+ @% H2 KIGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名单9 Y" C6 [. q9 l! U2 p
CRON=”/etc/cron.d/ddos.cron” //定时执行程序
' N5 V( b+ Z  `7 SAPF=”/etc/apf/apf”; Y( J: @2 P. ?0 ~
IPT=”/sbin/iptables”

##### frequency in minutes for running the script5 q! j, G# o. x% e2 H
##### Caution: Every time this setting is changed run the script with –cron
# s3 [2 `4 p* T. x##### option so that the new frequency takes effect$ @9 _! j' |! i+ ?' y5 r
FREQ=1 //检查时间间隔,默认1分钟

##### How many connections define a bad IP? Indicate that below.
( |; {$ V+ v  I; P. zNO_OF_CONNECTIONS=150 //最大连接数,超过这个数IP就会被屏蔽,一般默认即可

##### APF_BAN=1 (Make sure your APF version is atleast 0.96)5 A2 |( o9 B' B% _7 ?
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)+ n' F+ {0 a( \" V9 K% ^4 o
APF_BAN=1 //使用APF还是iptables,推荐使用iptables

##### KILL=0 (Bad IPs are’nt banned good for interactive execution of script)
, y4 q/ y7 E, z" U# V! u##### KILL=1 (Recommended setting)6 x  n; H7 ]0 l! I3 s
KILL=1 //是否屏蔽IP,默认即可

#### An email is sent to the following address when an IP is banned.8 v! E$ Z) j; D% Y+ K! n: r
##### Blank would suppress sending of mails
+ [7 v- S" ^+ F" y  m/ gEMAIL_TO=”root” //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可

##### Number of seconds the banned ip should remain in blacklist.
7 |* m7 L2 B% VBAN_PERIOD=600 //禁用IP时间,默认600秒,可根据情况调整

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

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

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

mod_evasive是一个预防Apache 遭受DDos 攻击的模块,可以防止同一个IP 对相同URI 发出的大量请求,可设定的选项有:
. O  l# \- c' ?# m$ Z3 D$ W6 [3 Q1 l– 限制同一个IP 在一定秒数内请求一个页面或档案的次数。2 \3 ^, ~1 b) q; @( ]. H7 k3 W
– 限制同一个IP 一秒内只可发出50 个请求。
$ b2 {9 Q4 n  F+ P1 S– 设定被禁止的 IP 封锁时间。

$ Z) l3 R5 H5 a8 b% b4 e
以下是 mod_evasive 的安装方法:

A. 先将原来的 httpd.conf 备份起来。* M. ^1 H+ n3 t. K

B. 到

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

tar zxvf mod_evasive_1.10.1.tar.gz! P7 ^- [2 K; {$ u2 z1 m- C; G) ?  y
cd mod_evasive/
4 U! D7 U6 h+ X' i& d; sapxs -cia mod_evasive20.c
4 r( M  H+ K! A: d以上的apxs 会放在Apache 的bin 目录内;如果Apache 版本是1.3 的话,指令要改为:

apxs -cia mod_evasive.c
* [/ P3 s3 t2 K7 R. T1 K" C5 S7 ?安装好mod_evasive 后,便要修改httpd.conf 内容。

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

DOSHashTableSize 30978 s- j$ _% d& [/ U: W
DOSPageCount 5; H* @. V/ s+ ~* g
DOSSiteCount 1005 z- {, J  c& V3 |
DOSPageInterval 2! E3 b& E4 k1 q# `
DOSSiteInterval 2
. N* C7 l9 N4 m4 A3 T* b/ c" LDOSBlockingPeriod 103 m8 A3 g4 P" P7 b1 ]
DOSBlockingPeriod 600

DOSHashTableSize — 这是占用内存的大小,如果服务器比较繁忙,这个数值要设定大一点。
  X/ i& ~! c% J# Y# }/ @/ oDOSPageCount — 同一IP 在一个时段内可以存娶同一页面的次数,超过会被禁止。
- i  [0 r* V2 zDOSSiteCount — 同一IP 在一个网站内可以占用多少object,超过会禁止。1 G  k( B0 A5 [6 o7 u
DOSPageInterval — DOSPageCount 内的时段设定。
7 Y3 }4 W. H) q4 V# XDOSSiteInterval — DOSSiteCount 的时间设定,以秒为单位。
) X6 d, {4 ?) J2 f4 x2 X. `. RDOSBlockingPeriod — 当发现疑似攻击后,使用者会收到403 Forbidden,这是设定封锁的时间,以秒为单位。

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

9 p3 ~$ s& \( |' P  p4 Q9 Q

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2017-3-8 23:50:29 来自手机 | 显示全部楼层
最好的方法就是不要使用过大的权限配置,DOS使用的基本上都是其他用户攻击,777权限过大,不好。系统用户不允许root登陆,普通用户需要每隔段时间修改一次密码,进程用户最好使用普通用户,如果功能一样最好是同一个用户启动守护进程,这样权限就不会过大的出现。比如Apache使用www,那么php用户也用www的用户就能规避权限问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:10 , Processed in 0.067736 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表