找回密码
 注册
查看: 4914|回复: 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 -n
2 R/ [, N; |. M- A, q' x9 F: r执行后,将会显示服务器上所有的每个IP多少个连接数。
; S. P' f: d" d; H( @; O以下是我自己用VPS测试的结果:1 v" R* I) C/ q2 _, C4 i4 x
li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n& e1 W4 @, O( M7 V- H: u
1 114.226.9.132! o. N. h! w/ @6 z& t9 S" J
1 174.129.237.1578 R1 y: Z0 Y2 ~
1 58.60.118.1420 u5 T& [/ |/ z) s, {- u
1 Address! j. J$ r6 s$ W  k( M/ `( g1 T
1 servers)
7 x2 l6 X) o& _! L: A1 ~% d8 _2 118.26.131.78
$ r  K2 @/ C5 _; i& ?! O$ b3 123.125.1.202* m! Z7 P) c6 H6 b: E7 ?# P
3 220.248.43.1192 `# }7 e2 D$ c! w
4 117.36.231.253$ Q5 P, ^4 e; F# y* X
4 119.162.46.124
( J- Z/ ^  O4 H0 L3 z: c( m6 219.140.232.128
8 q# s  T, n$ ~& `6 n8 220.181.61.31) r" R: _  r5 j" a& e: H
2311 67.215.242.196
3 {+ U8 [% {# c  l# N! ^每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。- D9 y2 u- X, C: m

三、防范DDOS攻击的方法:

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

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

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

Linux内核提供了若干SYN相关设置,使用命令:4 f3 C: _/ q# |: ^$ z5 \
sysctl -a | grep syn
) F$ @9 i+ O5 G1 Y- b5 |2 d看到:7 z: m- b6 b( \/ G: I
net.ipv4.tcp_max_syn_backlog = 1024, Q2 c3 R; a; ]$ @- O2 a: Y+ X
net.ipv4.tcp_syncookies = 0
& [$ N8 o' Z/ hnet.ipv4.tcp_synack_retries = 5
* g4 u# O# y! ^# }' F  C* w9 B5 R! fnet.ipv4.tcp_syn_retries = 5

tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie+ A8 j( Y% ~4 i( k4 w+ z! k9 N
功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN
/ p- f4 i! H" m, g, O9 P的重试次数。

加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分
8 `/ H9 I% P+ x# `3 sSYN攻击,降低重试次数也有一定效果。

调整上述设置的方法是:
  ~$ a: \) x$ G1 A* ^2 m; u" C8 k  n9 A增加SYN队列长度到2048:
) V2 p# k; R  R2 psysctl -w net.ipv4.tcp_max_syn_backlog=2048$ u# K/ P& H) p9 ^6 t$ y) i
打开SYN COOKIE功能:1 u  \2 R& c5 N
sysctl -w net.ipv4.tcp_syncookies=1
  h& |- @; ^2 l# \3 |$ m- }* w降低重试次数:  F5 X. c' e4 ?' ^
sysctl -w net.ipv4.tcp_synack_retries=3: i) \7 I3 t6 a5 M8 K
sysctl -w net.ipv4.tcp_syn_retries=3

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

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

A.安装iptables和系统内核版本对应的内核模块kernel-smp-modules-connlimit
/ F; k8 s6 G; f" ?6 F+ TB. 配置相应的iptables规则
! r* P- j- p& j) s( [' X3 H9 U! B" G2 H示例如下:

(1)控制单个IP的最大并发连接数# g+ m; X* }' D& v) `' M
iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT7 g1 w9 I+ N6 ]( ?) M# ^
#允许单个IP的最大连接数为 308 c7 r2 |6 m: E4 E- L  {
(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数; K! k, A) m0 M
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 \
# Q# R4 p$ R9 [' Y% O0 x& K–hitcount 30 -j REJECT% C" [' u0 t7 o; P' P! W
iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT
  I- e+ \- \* r$ g  I/ H, ]#单个IP在60秒内只允许最多新建30个连接

(3)用iptables屏蔽IP
% a- ^7 ~+ r; u* y4 fiptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 --dport 80 --syn -j REJECT
8 r5 }3 z* u+ v3 J) B7 |% E指定端口的参数是--dport 80;多了--syn参数,可以自动检测sync攻击
9 [# R8 d( Q: n0 v9 Z(4)使用iptables禁止ping:
. A5 K0 S3 p7 N+ C7 D4 ciptables -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( @( ?3 s6 C9 t* |8 m7 Z: @: W
(5)允许某ip连接
0 c( g/ b2 `' }& k% ?iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s 192.168.0.51 --syn -j ACCEPT
0 @3 {7 v3 y9 i* I- `4 C' GC. 验证- F" i' n$ ~& i9 l: d
(1)工具:flood_connect.c(用来模拟攻击)- Z5 I4 ^' Z- V* D: R. I) O
(2)查看效果:+ C8 q( m2 c# B$ w' b: j
使用

watch ‘netstat -an | grep:21 | \ grep< 模拟攻击客户机的IP>| wc -l’
1 O- U% i* \% _/ N$ k实时查看模拟攻击客户机建立起来的连接数," j) [% E6 T2 _, v7 R% k7 U
使用
% k1 u3 d+ g# n% }  Zwatch ‘iptables -L -n -v | \grep< 模拟攻击客户机的IP>’
1 J  T) p. A+ c查看模拟攻击客户机被 DROP 的数据包数。" F) O9 D/ {! S( k& t0 c$ I0 ~
D.注意
8 `$ `. l  F# f- e为了增强iptables防止CC攻击的能力,最好调整一下ipt_recent的参数如下:* H! p( H2 B6 i
#cat/etc/modprobe.conf
9 X7 `. r1 ?2 X( W+ Eoptions ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60( T2 S/ G6 X# ], K5 R# n, C
#记录1000个IP地址,每个地址记录60个数据包
  n" w: {9 t5 |#modprobe ipt_recent

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

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

#!/bin/sh( J: n( R, l' T1 S3 K- P# N
cd /usr/local/nginx/var/log
1 B, q# }! j4 o) ?9 w, M9 o/ q' rtail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt" T2 e0 m* o9 u- ~
for i in `cat drop_ip.txt`
: @: t4 Z' ^. b& g& e% g3 b# mdo2 U3 Q. Q( |9 F( }/ d& ~
/sbin/iptables -I INPUT -s $i -j DROP;
& T; d# K  z/ E4 r3 Rdone6 }: N6 @* w% |* h2 c3 k
这shell 每几分钟执行一次,就可自动屏蔽那些不正常IP,相信大家都看的懂,下面是针对连接数屏蔽代码

#!/bin/sh8 s; b) S' V4 R2 t; A4 ?+ v: g
/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 y- O  T. U& ^for i in `cat drop_ip.txt`; [# G: a/ Y; r
do
4 y9 c* A* A2 q/sbin/iptables -I INPUT -s $i -j DROP;
* t, r( a  B# z; M  E; x9 k( E  Gdone
7 Y" {5 x' B. m. |/ e) _% D1 X  D说下,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
+ U; l/ F' x7 l/ m: t- X: ichmod 0700 install.sh //添加权限
2 z0 E1 k# P1 a6 R$ Z./install.sh //执行

(2)配置DDoS deflate

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

##### Paths of the script and other files5 T0 y& {6 c/ Z
PROGDIR=”/usr/local/ddos”
+ I. o9 o# {! l4 v' ]* hPROG=”/usr/local/ddos/ddos.sh”1 Q& f, q: D  N3 d* k# r1 i$ o" y- f
IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名单
6 v6 }) o$ r' v4 D8 f1 f+ fCRON=”/etc/cron.d/ddos.cron” //定时执行程序5 @$ s: B% L) o3 P/ O8 Z
APF=”/etc/apf/apf”
1 F9 u6 G1 q- `  ]" x. J0 QIPT=”/sbin/iptables”

##### frequency in minutes for running the script. ~3 s7 G0 N, R9 o! L
##### Caution: Every time this setting is changed run the script with –cron
- J& Q# _6 x; }- M3 s6 U, ~##### option so that the new frequency takes effect- b* F2 [1 `2 a$ ]# N- S: s
FREQ=1 //检查时间间隔,默认1分钟

##### How many connections define a bad IP? Indicate that below.
) P5 U9 {% Z0 d! o8 h. Y- L. {NO_OF_CONNECTIONS=150 //最大连接数,超过这个数IP就会被屏蔽,一般默认即可

##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
- G% t3 b9 m9 c0 y8 e  _: ~##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
5 W5 G/ l0 n6 F$ A9 w' pAPF_BAN=1 //使用APF还是iptables,推荐使用iptables

##### KILL=0 (Bad IPs are’nt banned good for interactive execution of script)
- V) X- p- v9 z8 a6 g3 ^##### KILL=1 (Recommended setting)
! w- W& Z6 z# N8 G' [& \* h. aKILL=1 //是否屏蔽IP,默认即可

#### An email is sent to the following address when an IP is banned.: y" v" A# _* G
##### Blank would suppress sending of mails
& @/ N' L, E+ F5 _EMAIL_TO=”root” //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可

##### Number of seconds the banned ip should remain in blacklist.
/ x9 e( R, ~2 q) bBAN_PERIOD=600 //禁用IP时间,默认600秒,可根据情况调整

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

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

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

mod_evasive是一个预防Apache 遭受DDos 攻击的模块,可以防止同一个IP 对相同URI 发出的大量请求,可设定的选项有:, b2 [. U2 x, X" a2 v
– 限制同一个IP 在一定秒数内请求一个页面或档案的次数。
6 {2 }9 b: n7 f* ~* T* Y1 ^– 限制同一个IP 一秒内只可发出50 个请求。
5 ^, l, O, B6 ]! _' V& A* L– 设定被禁止的 IP 封锁时间。


7 Y4 ~8 e$ c, _+ ?- k/ E1 k5 S2 e以下是 mod_evasive 的安装方法:

A. 先将原来的 httpd.conf 备份起来。
% G- @+ H3 w( P6 p! T5 L4 h

B. 到

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

tar zxvf mod_evasive_1.10.1.tar.gz
" X  b+ |+ f" {, Y& {cd mod_evasive/. L* V6 I$ j# O; a: |& s8 J
apxs -cia mod_evasive20.c
  w/ n& s! ?2 l3 m以上的apxs 会放在Apache 的bin 目录内;如果Apache 版本是1.3 的话,指令要改为:

apxs -cia mod_evasive.c
  Z9 l, Q7 c4 z6 f2 o6 `, l安装好mod_evasive 后,便要修改httpd.conf 内容。

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

DOSHashTableSize 30973 [. Z" H* b% m, J) S; E! Z2 |
DOSPageCount 5
9 C% L  Z& Q- W8 ODOSSiteCount 100
1 J8 {  r! b- Y; j: ]( T" _$ ?DOSPageInterval 2
. i2 S! x! w( v! t2 RDOSSiteInterval 2% W( [! |7 |) t/ q
DOSBlockingPeriod 10( t9 k2 V) S" i- N. T
DOSBlockingPeriod 600

DOSHashTableSize — 这是占用内存的大小,如果服务器比较繁忙,这个数值要设定大一点。- A0 |. ]9 a3 O0 J
DOSPageCount — 同一IP 在一个时段内可以存娶同一页面的次数,超过会被禁止。
, P/ g0 A2 |" X: k& \DOSSiteCount — 同一IP 在一个网站内可以占用多少object,超过会禁止。9 t# D  ?9 f) A; s: O6 w
DOSPageInterval — DOSPageCount 内的时段设定。+ P, P9 M$ _8 T2 n1 L
DOSSiteInterval — DOSSiteCount 的时间设定,以秒为单位。1 e5 v2 @6 W" Q& G
DOSBlockingPeriod — 当发现疑似攻击后,使用者会收到403 Forbidden,这是设定封锁的时间,以秒为单位。

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


, M2 b* I  d" \. b2 O% R

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-11 23:14 , Processed in 0.027030 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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