找回密码
 注册
查看: 4917|回复: 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
& v) G7 M: E0 r& ^9 X执行后,将会显示服务器上所有的每个IP多少个连接数。6 \% y! g% z0 l1 h
以下是我自己用VPS测试的结果:) {2 \9 N! f. v
li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n) U% I* o6 k8 S
1 114.226.9.132
# p! Z# K' v7 }6 ]1 174.129.237.157
5 ~7 D/ V- t1 U; a9 O3 D1 58.60.118.142
# k9 d- ?; s& K1 Address
, y3 e& q) V7 X9 V( Q' b8 I/ O. R5 E1 servers)7 ^* H1 D  g: f! F
2 118.26.131.78& L. X# P. f: C$ A
3 123.125.1.202
) _: I) o* `1 X% O, s3 220.248.43.119
  _# _# O% u) i4 117.36.231.253
# O) r; g+ h1 }3 j1 _) o- t7 c; M2 h4 119.162.46.124! Z3 m! I+ s3 A- u7 i
6 219.140.232.128
* S' Y0 _$ ]9 V) K8 220.181.61.31
2 i3 L9 U" v% k7 i& O+ Y1 B2311 67.215.242.196# w7 c& P/ g: i+ V
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。( L# q8 V! o1 E

三、防范DDOS攻击的方法:

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

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

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

Linux内核提供了若干SYN相关设置,使用命令:
" U# W* J; ?$ \: w8 [- f/ Qsysctl -a | grep syn
1 r6 {  [0 D3 A( m看到:& [* T6 m5 J2 c2 ~, M
net.ipv4.tcp_max_syn_backlog = 1024
& k3 L8 H4 G% T8 znet.ipv4.tcp_syncookies = 07 W7 v& k4 u+ ?6 f/ i6 j
net.ipv4.tcp_synack_retries = 54 y4 X+ Q/ s2 [: H1 b3 X- t
net.ipv4.tcp_syn_retries = 5

tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie
3 R. C8 B2 K6 i" N/ C功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN) K) k* ]7 g- {& C
的重试次数。

加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分
# [% h4 P% }) G4 g+ T; m  c8 n4 FSYN攻击,降低重试次数也有一定效果。

调整上述设置的方法是:, a& }: F8 n2 @1 l! d
增加SYN队列长度到2048:
: G6 y& Q- P/ Z0 Z" m( }- T4 Asysctl -w net.ipv4.tcp_max_syn_backlog=2048% L( ~/ E4 P0 @  n1 r% }
打开SYN COOKIE功能:
  n0 f7 J2 S; ~sysctl -w net.ipv4.tcp_syncookies=11 \, H% K2 ^2 u
降低重试次数:
% i7 g) z' D' ~7 bsysctl -w net.ipv4.tcp_synack_retries=3
! H* u( s" e: [, e% k+ D: }sysctl -w net.ipv4.tcp_syn_retries=3

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

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

A.安装iptables和系统内核版本对应的内核模块kernel-smp-modules-connlimit
! \# U# L% Z. p! X- C7 AB. 配置相应的iptables规则
: {% R+ F( M1 K2 V. _& F示例如下:

(1)控制单个IP的最大并发连接数  g# o% a) h+ U; B2 o3 E8 b
iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 50 -j REJECT) |9 P- A, R. i9 [1 E0 @
#允许单个IP的最大连接数为 30
* v( b2 |! ]. L(2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
8 t6 x4 H/ \0 d% F+ s+ s6 kiptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –update –seconds 60 \6 J. H+ U- I0 [; s9 I
–hitcount 30 -j REJECT
; i7 Z$ a" r# l5 {% \iptables -A INPUT -p tcp –dport 80 -m recent –name BAD_HTTP_ACCESS –set -j ACCEPT; {' i, Z1 ^7 \& d6 B$ _0 M* {0 v
#单个IP在60秒内只允许最多新建30个连接

(3)用iptables屏蔽IP% J0 ?0 d4 W) u5 P8 [0 K* R' B0 Z
iptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 --dport 80 --syn -j REJECT* {2 w9 {: s; s' f
指定端口的参数是--dport 80;多了--syn参数,可以自动检测sync攻击
% h& K) E4 ?. K: ^4 o* h6 S(4)使用iptables禁止ping:3 b. i" _$ `0 Y
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
" i! Q7 t" w( T) u(5)允许某ip连接% c- S! [8 m' L. x3 ~
iptables -I RH-Firewall-1-INPUT 1 -p tcp -m tcp -s 192.168.0.51 --syn -j ACCEPT' z$ k7 `, K0 u$ v7 ^' Q- w4 F
C. 验证
" G5 _' Q; A, a. ?, \. `+ s(1)工具:flood_connect.c(用来模拟攻击)
( `' w9 C$ s3 }' C! H9 O7 e0 v(2)查看效果:+ o% [, N! X9 e  p8 e# _
使用

watch ‘netstat -an | grep:21 | \ grep< 模拟攻击客户机的IP>| wc -l’
" C4 q8 j. v! s5 K: k实时查看模拟攻击客户机建立起来的连接数,& y' M- t% ^4 D( d  |
使用4 S0 ?7 T/ `) v
watch ‘iptables -L -n -v | \grep< 模拟攻击客户机的IP>’/ A. d7 `) T7 `- x, A
查看模拟攻击客户机被 DROP 的数据包数。# R3 }2 L; M& O0 J8 P$ M  l
D.注意* Z2 j. }: B; _2 r, {1 g' O1 l
为了增强iptables防止CC攻击的能力,最好调整一下ipt_recent的参数如下:, E% Y& d- K  F* L: E
#cat/etc/modprobe.conf0 ~; U6 f) B6 j- C3 G$ N  G8 n/ s
options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60( P: x1 A, D; G7 o
#记录1000个IP地址,每个地址记录60个数据包" C4 ?+ m% v( i2 }8 k8 b
#modprobe ipt_recent

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

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

#!/bin/sh1 z. T6 F: q3 z% D5 ?5 ^" c8 B* S
cd /usr/local/nginx/var/log$ c2 Z. s: _$ o7 D% x3 M3 w
tail access.log -n 1000 |grep vote.php | |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50)}' > drop_ip.txt
- E/ T. X  x/ G3 ffor i in `cat drop_ip.txt`. L: r; v; O) N/ |! N; X6 y
do
0 ~& R. h9 ~" l0 u# D/sbin/iptables -I INPUT -s $i -j DROP;
8 O3 x* P0 S# B+ }0 \& udone
) W: L* F  R% Q( u这shell 每几分钟执行一次,就可自动屏蔽那些不正常IP,相信大家都看的懂,下面是针对连接数屏蔽代码

#!/bin/sh
. H- ?+ e2 q6 y: a8 Y, Q/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" N% x; \+ O0 D" L( O
for i in `cat drop_ip.txt`
4 K" H" a7 L) L- |& |' {do% \. U$ ?2 \3 i  Y
/sbin/iptables -I INPUT -s $i -j DROP;% I( t- C1 P" F& C2 I4 |
done
7 O, n( y6 u1 ^说下,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: j" O1 u. X6 v/ P( m
chmod 0700 install.sh //添加权限
) G' d; J+ g) s7 F0 H/ j; {./install.sh //执行

(2)配置DDoS deflate

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

##### Paths of the script and other files( t7 V% T2 `: |
PROGDIR=”/usr/local/ddos”* E' x5 V% {, O5 A( C
PROG=”/usr/local/ddos/ddos.sh”
4 C) M$ t; p  FIGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名单
- r! x  G4 v  p/ d9 ^; b3 s7 SCRON=”/etc/cron.d/ddos.cron” //定时执行程序! n) O! C  B# n7 l( R8 b0 V. z
APF=”/etc/apf/apf”
9 Q' T6 i& J$ VIPT=”/sbin/iptables”

##### frequency in minutes for running the script
' u( f1 [0 h/ X# O##### Caution: Every time this setting is changed run the script with –cron
; J1 [2 d4 R$ f4 Y" S% b##### option so that the new frequency takes effect
, Z0 W4 P1 E$ DFREQ=1 //检查时间间隔,默认1分钟

##### How many connections define a bad IP? Indicate that below.1 z5 U: M0 C! o+ H0 t4 v) T* ]
NO_OF_CONNECTIONS=150 //最大连接数,超过这个数IP就会被屏蔽,一般默认即可

##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
" [! S4 T% A7 Q##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
% A* X$ U9 x+ \. |5 ~) ?, h) f: FAPF_BAN=1 //使用APF还是iptables,推荐使用iptables

##### KILL=0 (Bad IPs are’nt banned good for interactive execution of script)5 D7 M9 ]" w. r2 u) V
##### KILL=1 (Recommended setting)
+ H7 {( a$ ?! e1 ]% `, u- TKILL=1 //是否屏蔽IP,默认即可

#### An email is sent to the following address when an IP is banned.$ L1 I0 a6 n& ^+ V& }% p. H
##### Blank would suppress sending of mails2 k' |# {7 T8 ]% \
EMAIL_TO=”root” //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可

##### Number of seconds the banned ip should remain in blacklist.) |$ x1 S2 x0 p4 [
BAN_PERIOD=600 //禁用IP时间,默认600秒,可根据情况调整

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

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

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

mod_evasive是一个预防Apache 遭受DDos 攻击的模块,可以防止同一个IP 对相同URI 发出的大量请求,可设定的选项有:
/ B8 f- k. ?2 L– 限制同一个IP 在一定秒数内请求一个页面或档案的次数。
' p) I7 h) @! P( b- F9 `– 限制同一个IP 一秒内只可发出50 个请求。/ X5 b& u3 Y, Y% \# B, o
– 设定被禁止的 IP 封锁时间。


- t) M! f5 X, F2 Q  s* z8 b7 h0 _$ ~以下是 mod_evasive 的安装方法:

A. 先将原来的 httpd.conf 备份起来。7 j) K$ k+ `( U6 B

B. 到

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

tar zxvf mod_evasive_1.10.1.tar.gz. T9 z1 U; k8 B% x7 A
cd mod_evasive/- _1 g) R3 d% @2 c8 S: _6 _# m0 I: f
apxs -cia mod_evasive20.c: h7 S' j: \% J! I/ W
以上的apxs 会放在Apache 的bin 目录内;如果Apache 版本是1.3 的话,指令要改为:

apxs -cia mod_evasive.c
% H4 S6 P' P+ \9 A% t" B安装好mod_evasive 后,便要修改httpd.conf 内容。

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

DOSHashTableSize 3097
4 B9 u; {5 q) C9 T% ~DOSPageCount 5; M+ l- _% F! v5 W9 d5 e# A
DOSSiteCount 100  X/ g8 t: O5 R5 ]! E' B
DOSPageInterval 23 t5 p, `+ k! ?) j
DOSSiteInterval 2# x: ~* \4 I) g) j
DOSBlockingPeriod 10
% z; ?7 _6 [' N9 g) ~/ d+ PDOSBlockingPeriod 600

DOSHashTableSize — 这是占用内存的大小,如果服务器比较繁忙,这个数值要设定大一点。
" u6 M9 g3 J' D3 S2 CDOSPageCount — 同一IP 在一个时段内可以存娶同一页面的次数,超过会被禁止。8 s5 u+ @8 J, a
DOSSiteCount — 同一IP 在一个网站内可以占用多少object,超过会禁止。( d/ i& d) F1 H  a, N  V; ?! U
DOSPageInterval — DOSPageCount 内的时段设定。+ F- Z6 C$ w& d5 b) N+ c/ Z
DOSSiteInterval — DOSSiteCount 的时间设定,以秒为单位。
# p) E& l* A) X9 ?: f' a1 I  `# DDOSBlockingPeriod — 当发现疑似攻击后,使用者会收到403 Forbidden,这是设定封锁的时间,以秒为单位。

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


. }3 k5 g3 u! T" L

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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