网络和现实社会一样,充满勾心斗角,网站被DDOS成为站长们最头疼的问题。在没有硬防御的情况下,找软件替代是最直接的方法,比如用iptables。但是iptables不能自动屏蔽,所以只能手动屏蔽。
1.什么是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个地址
1台服务器)
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三次握手的原理,发送大量网络数据包建立连接,但实际上并没有建立连接,最终导致被攻击服务器的网络队列已满,正常用户无法访问。
Linux内核提供了几个与SYN相关的设置,使用命令:
sysctl -a | grep合成
参见:
net . IP v4 . 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 cookies吗?
函数,可以防止一些SYN攻击。Tcp_SYNack_retries和tcp_syn_retries定义syn。
重试次数。
增加SYN队列的长度可以容纳更多等待连接的网络连接,开启SYN Cookie可以阻塞其中的一部分。
SYN攻击,减少重试次数也有一定效果。
调整上述设置的方法是:
将SYN队列长度增加到2048:
sysctl-w net . IP v4 . TCP _ max _ syn _ backlog=2048
打开SYN COOKIE功能:
sysctl-w net . IP v4 . TCP _ syncookies=1
减少重试次数:
sysctl-w net . IP v4 . TCP _ synack _ retries=3
sysctl-w net . IP v4 . TCP _ syn _ retries=3
为了在系统重启时保持上述配置,可以将上述命令添加到/etc/rc.d/rc.local文件中。
3.安装iptables屏蔽特定ip。
A.安装与iptables和系统内核版本对应的内核模块kernel-smp-modules-connlimit。
B.配置相应的iptables规则
例子如下:
(1)控制单个IP的最大并发连接数
iptables -I输入-p TCP-d端口80米连接限制-连接限制-高于50j拒绝
#单个IP允许的最大连接数是30
(2)控制单个IP在一定时间内(如60秒)允许新建立的连接数
iptables-A INPUT-p TCPdport 80-m recentname BAD _ HTTP _ accessupdateseconds 60 \
点击计数30 -j拒绝
iptables-A INPUT-p TCPdport 80-m recentname BAD _ HTTP _ ACCESSset-j ACCEPT
#单个IP在60秒内最多只允许30个新连接。
(3)使用iptables进行IP屏蔽
iptables-I RH-lok kit-0-50-输入1-p TCP-m TCP-s 213.8.166.227-d端口80 - syn -j拒绝
指定端口的参数是-dport 80;多syn参数可以自动检测同步攻击。
(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接受
C.确认
(1)工具:flood_connect.c(用于模拟攻击)
(2)检查效果:
使用
watch watch ' netstat-an | grep:21 | \ grep模拟攻击客户端的IP | WC-L '
查看实时模拟攻击客户端建立的连接数,
使用
观看“iptables-l-n-v | \ grep模拟攻击客户端的IP”
检查模拟攻击客户端丢弃的数据包数量。
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 $150)}' drop_ip.txt
为我在'猫滴_ip.txt '
做
/sbin/iptables-I INPUT-s $ I-j DROP;
完成的
这个外壳每隔几分钟执行一次,它可以自动阻止那些异常的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 $150)}' drop_ip.txt
为我在'猫滴_ip.txt '
做
/sbin/iptables-I INPUT-s $ I-j DROP;
完成的
换句话说,grep -v -E '192.168|127.0 '的意思是排除内网IP,这样才不会把自己屏蔽掉。当然,你也可以加入一些自己的IP。
4.安装DDOSdeflate自动防御DDoS攻击:
DDoSdeflate是一个免费的脚本,用于防止和缓解DDoS攻击。它通过netstat监控和跟踪大量网络连接的IP地址,当检测到某个节点超过预设的限制时,程序会通过APF或IPTABLES禁止或屏蔽这些IP地址。
DDoSdeflate官网:
(1)安装DDoSdeflate。
wget
Mod0700Install.sh//Add权限。/install.sh //执行
(2)配置DDoSdeflate
以下是位于/usr/local/ddos/ddos.conf中的DDoSdeflate的默认配置,内容如下:
#####脚本和其他文件的路径
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 '
#####运行脚本的频率(分钟)
#####注意:每次更改此设置时,请使用cron运行脚本
#####选项,以便新频率生效
FREQ=1 //检查时间间隔,默认为1分钟
#####多少个连接定义一个坏IP?请在下面注明。
NO_OF_CONNECTIONS=150 //最大连接数,如果超过这个数,IP将被阻塞,这通常是默认的。
##### APF_BAN=1(确保您的APF版本至少为0.96)
##### APF_BAN=0(使用iptables而不是APF来禁止IP)
APF_BAN=1 //要使用APF或iptables,建议使用iptables。
##### KILL=0(不良IP不会被禁止,有利于脚本的交互执行)
##### KILL=1(推荐设置)
KILL=1 //是否屏蔽IP,默认就可以了。
####当一个IP被禁止时,一封电子邮件被发送到以下地址。
#####空白将禁止发送邮件
EMAIL_TO='root' //当IP被阻止时,向指定邮箱发送电子邮件。建议用,换成自己的邮箱就行了。
#####被禁止的ip应该保留在黑名单中的秒数。
BAN_PERIOD=600 //禁用IP时间,默认为600秒,可根据情况调整。
用户可以根据添加到默认配置文件中的评论内容来修改帖子。放置文件。
喜欢的话可以用Web压力测试软件(《web服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程》)测试一下效果。这个东西只能防御小流量攻击。聊胜于无。
5.在5上安装mod _ evangelicate组件。阿帕奇增强弹性
mod _ evangelicate是防止Apache受到DDos攻击的模块,可以防止同一个IP发送同一个URI。