将设为首页浏览此站
开启辅助访问 天气与日历 收藏本站联系我们切换到窄版

易陆发现论坛

 找回密码
 开始注册
查看: 3910|回复: 1
收起左侧

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

[复制链接]
发表于 2016-8-24 11:22:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?开始注册

x

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

一、什么是DDOS攻击?

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

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

在系统上执行:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 e3 F: x9 a! ]# L3 D& J3 J& O: A执行后,将会显示服务器上所有的每个IP多少个连接数。
) w. {9 O0 d8 t3 q% Z6 r# o$ e以下是我自己用VPS测试的结果:+ ~6 \! t7 Z* B# B5 U9 Q+ Y
li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
7 P( m& P! \: f# ]( J2 \6 N! K# L1 114.226.9.132
- t5 u+ t1 n# N+ f4 M4 @+ x' y1 174.129.237.157+ |5 ]7 V* ]' j9 a' \0 ^' ~
1 58.60.118.142* w8 b# N" A0 |9 B" ~3 P/ p5 `
1 Address
" v2 A+ `& m0 e" I- X" w; j9 r1 servers); U% i: W8 a5 Y- K; X
2 118.26.131.78
1 G7 P7 t* J  m6 r1 {3 123.125.1.2028 n# q$ J* j9 H6 u2 S
3 220.248.43.1194 Q( m0 q( b7 U% b5 g; a. H" L0 ]
4 117.36.231.253% ~4 M9 |  G5 E+ v- Y& a
4 119.162.46.124
! Q6 D+ n/ }( @* Y/ l: T' N! [6 219.140.232.128
  W$ W- ?( @: o6 x5 O8 220.181.61.31! O, ~) B* H7 O! S8 e9 U* c
2311 67.215.242.196" T+ |3 E& n4 A* M  L" W; ~0 M
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。4 K4 W9 H8 M: a; H. \/ J

三、防范DDOS攻击的方法:

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

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

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

Linux内核提供了若干SYN相关设置,使用命令:: J) b/ n. j" l+ e! d3 n
sysctl -a | grep syn. `! U5 S2 W# e. ?3 P5 R3 n
看到:
# X  N; t$ p7 Jnet.ipv4.tcp_max_syn_backlog = 1024  m9 U2 a% E* O  a1 B) _3 \/ R
net.ipv4.tcp_syncookies = 0
+ F1 Q' I) z* s$ W# o7 t0 f3 anet.ipv4.tcp_synack_retries = 5
; r7 ^5 Q4 }. lnet.ipv4.tcp_syn_retries = 5

tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie
2 q+ N: h& r3 A4 C* b功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN2 n6 D# s, H7 ~, @8 I" X4 b
的重试次数。

加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分
# L  X: Q7 X/ @- ]/ T# Q+ g. x. ~SYN攻击,降低重试次数也有一定效果。

调整上述设置的方法是:
. r& H  t( O2 l增加SYN队列长度到2048:, G, B! i( p3 g0 ]
sysctl -w net.ipv4.tcp_max_syn_backlog=20487 d  h) L6 j8 ~9 }7 @$ q* K
打开SYN COOKIE功能:3 k0 b7 c8 n8 \3 w& C1 h4 [
sysctl -w net.ipv4.tcp_syncookies=1, K9 _8 p# X+ ~* U1 X  }
降低重试次数:7 L5 s3 p. W! o  I! ^8 {% J7 I4 j# N
sysctl -w net.ipv4.tcp_synack_retries=39 N6 k( }, b/ P- T8 C
sysctl -w net.ipv4.tcp_syn_retries=3

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

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

A.安装iptables和系统内核版本对应的内核模块kernel-smp-modules-connlimit. Q1 p% P+ }; t1 D
B. 配置相应的iptables规则
; F7 k& w/ I5 a& ]- a+ w$ Q示例如下:

(1)控制单个IP的最大并发连接数
+ S5 y  ~7 }( h9 I- B5 b3 ?iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT+ X4 U, w; p( g
#允许单个IP的最大连接数为 30# x# m! ~- @. s. a( B
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数  i. U# T3 n' ?# i" x$ a. E
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 \
. |# {4 N$ `4 A1 p6 j& W–hitcount 30 -j REJECT
% |; L/ N- Q/ Ziptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT
2 p% S  t2 |) x! `. F/ |5 U/ H#单个IP在60秒内只允许最多新建30个连接

(3)用iptables屏蔽IP
9 H2 _. n' k3 O. Giptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 --dport 80 --syn -j REJECT
$ ?* y0 G. E" A- \" X; a) }指定端口的参数是--dport 80;多了--syn参数,可以自动检测sync攻击
" \( x8 w" g8 t6 ?& E(4)使用iptables禁止ping:0 O4 I# n2 [2 O& p" U1 {$ Q
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+ r4 S6 x3 \2 e' N1 j0 W* I2 h
(5)允许某ip连接8 A: B# T, ^$ j; _9 o% a
iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s 192.168.0.51 --syn -j ACCEPT8 E- a' u' H6 m9 o7 v
C. 验证; X. F/ W. v4 |
(1)工具:flood_connect.c(用来模拟攻击)( Q+ A! Y5 X9 Q) g3 h
(2)查看效果:
  s1 t4 X: b/ M& }2 f使用

watch ‘netstat -an | grep:21 | \ grep< 模拟攻击客户机的IP>| wc -l’
7 ?9 O9 W$ K2 G. P1 c& h实时查看模拟攻击客户机建立起来的连接数,! w: {- ]$ \) |6 J. q9 A
使用; v$ y2 J0 x. F0 G9 x* y
watch ‘iptables -L -n -v | \grep< 模拟攻击客户机的IP>’) {: X9 B0 p# [- k1 g/ G* S' p' z% }
查看模拟攻击客户机被 DROP 的数据包数。
8 p; _) D  G; v% h) C; wD.注意
- H% _( e6 ]* v# a为了增强iptables防止CC攻击的能力,最好调整一下ipt_recent的参数如下:
' `) Y6 J' T3 b' C#cat/etc/modprobe.conf9 ?) s8 q0 S$ O* H
options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60* o0 {( F7 q* G+ X3 U
#记录1000个IP地址,每个地址记录60个数据包
2 P/ E9 q  p8 ^) L' z#modprobe ipt_recent

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

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

#!/bin/sh/ n6 p/ v$ P" ]" J/ N2 {& z
cd /usr/local/nginx/var/log
! S% T0 {8 s% N0 ctail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt
* M* B  y! a5 U- i$ dfor i in `cat drop_ip.txt`5 |8 H- E6 o: F% W( `' `$ S" F! g
do
; A% @  J$ [/ N: D/sbin/iptables -I INPUT -s $i -j DROP;
; a' I! G; A# `0 e0 {/ h* u  j2 N* Fdone2 q7 N% ]9 w& z1 @/ _
这shell 每几分钟执行一次,就可自动屏蔽那些不正常IP,相信大家都看的懂,下面是针对连接数屏蔽代码

#!/bin/sh
2 N4 s7 G( [9 o8 x9 y8 v6 [4 T/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
; F) b& M" F; }0 Ufor i in `cat drop_ip.txt`
+ U0 b3 e7 `" f1 o' X/ Y# f. O) r* Fdo
; q" T( O* r* F2 w/sbin/iptables -I INPUT -s $i -j DROP;
/ l% _: ^% w: t" Idone* V, A3 g* }' h  t, j
说下,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( j9 P- a$ p; ~7 C5 P8 X
chmod 0700 install.sh //添加权限
+ F' H' Z/ O$ b# W./install.sh //执行

(2)配置DDoS deflate

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

##### Paths of the script and other files$ k0 b, n8 S; {* ]7 |" e' N2 H
PROGDIR=”/usr/local/ddos”
# }7 H, [( U9 v* yPROG=”/usr/local/ddos/ddos.sh”
/ e: ?2 w% F+ P7 {! u& }IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名单
, t) }3 m, S. s" r/ s, R/ ICRON=”/etc/cron.d/ddos.cron” //定时执行程序
( `( x, m2 _; e1 @7 m  S. fAPF=”/etc/apf/apf”
4 E, q8 z& v: P) jIPT=”/sbin/iptables”

##### frequency in minutes for running the script
) E# v% k* k/ W: H/ C% n##### Caution: Every time this setting is changed run the script with –cron
8 H- }% W: T' |! W% g* o##### option so that the new frequency takes effect* a- A2 G/ O$ U; R
FREQ=1 //检查时间间隔,默认1分钟

##### How many connections define a bad IP? Indicate that below.: d) l! Z/ Y2 D- h
NO_OF_CONNECTIONS=150 //最大连接数,超过这个数IP就会被屏蔽,一般默认即可

##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
. p+ t6 n  t( _9 ^+ `5 }, x##### APF_BAN=0 (Uses iptables for banning ips instead of APF)7 _1 Q, m4 b& C( b# y4 I3 ?
APF_BAN=1 //使用APF还是iptables,推荐使用iptables

##### KILL=0 (Bad IPs are’nt banned good for interactive execution of script)
4 F& p1 L+ e. }1 g" V  o##### KILL=1 (Recommended setting)% n0 a% `/ b9 e1 f9 I
KILL=1 //是否屏蔽IP,默认即可

#### An email is sent to the following address when an IP is banned.
! k: S5 e/ w# [1 @7 J##### Blank would suppress sending of mails
! H6 E! \1 c% s5 i7 w& l& Q* oEMAIL_TO=”root” //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可

##### Number of seconds the banned ip should remain in blacklist.1 Z+ L4 V$ G8 F9 _0 y: `, B
BAN_PERIOD=600 //禁用IP时间,默认600秒,可根据情况调整

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

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

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

mod_evasive是一个预防Apache 遭受DDos 攻击的模块,可以防止同一个IP 对相同URI 发出的大量请求,可设定的选项有:5 Q- b9 [6 W+ U  I
– 限制同一个IP 在一定秒数内请求一个页面或档案的次数。9 P  Y! n/ o+ _2 o' W* a
– 限制同一个IP 一秒内只可发出50 个请求。
* P& s/ `4 I0 v9 U; i% B5 v; u– 设定被禁止的 IP 封锁时间。

4 x" W' e& `( K4 q/ l0 O
以下是 mod_evasive 的安装方法:

A. 先将原来的 httpd.conf 备份起来。
) @2 E5 B8 P9 d# o. G$ k: n

B. 到

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

tar zxvf mod_evasive_1.10.1.tar.gz
1 d' c. Y. A# h0 v: R2 f3 Bcd mod_evasive/5 X( F7 i6 [) O3 ?, D( ^( c3 @9 Z
apxs -cia mod_evasive20.c
% h) {# x" o9 P' }6 v以上的apxs 会放在Apache 的bin 目录内;如果Apache 版本是1.3 的话,指令要改为:

apxs -cia mod_evasive.c( \5 ?8 w; A1 ~- N# V; z  I+ Q
安装好mod_evasive 后,便要修改httpd.conf 内容。

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

DOSHashTableSize 3097
: L8 f' ]6 Z0 N. JDOSPageCount 59 }% G% ?. ~; Z( Y# P0 e  a
DOSSiteCount 100
0 `* g6 L- U3 z. l  RDOSPageInterval 2' [, t1 k- V( _. Z( S
DOSSiteInterval 2: v/ ~, {" d6 O% u& u
DOSBlockingPeriod 10' B7 Y% |! M. N* n* L0 f
DOSBlockingPeriod 600

DOSHashTableSize — 这是占用内存的大小,如果服务器比较繁忙,这个数值要设定大一点。& b0 ^# P+ s' t! i' P% X5 F. o" g
DOSPageCount — 同一IP 在一个时段内可以存娶同一页面的次数,超过会被禁止。: y" X: Z4 l- W; x0 B+ e
DOSSiteCount — 同一IP 在一个网站内可以占用多少object,超过会禁止。
( w9 `* j; ~9 V1 [1 v- CDOSPageInterval — DOSPageCount 内的时段设定。5 K9 l+ O$ {0 R: C
DOSSiteInterval — DOSSiteCount 的时间设定,以秒为单位。
( u) D9 v1 b- P: nDOSBlockingPeriod — 当发现疑似攻击后,使用者会收到403 Forbidden,这是设定封锁的时间,以秒为单位。

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


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

本版积分规则

关闭

站长推荐上一条 /4 下一条

如有购买积分卡请联系497906712

QQ|返回首页|Archiver|手机版|小黑屋|易陆发现 点击这里给我发消息

GMT+8, 2022-5-26 00:28 , Processed in 0.045856 second(s), 22 queries .

Powered by LR.LINUX.cloud bbs168x X3.2 Licensed

© 2012-2022 Comsenz Inc.

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