被攻击前的防范
1、买服务
- CDN,CDN不仅可以实现加速的效果,对于隐藏真实服务器IP也有效果,还能有效防止DDOS攻击。
- 买高防的服务器
- 买云平台的攻击流量包
2、买硬件
- 购买硬件抗DDOS防火墙或流量清洗设备
3、脚本检测联动防火墙
写脚本,脚本内容是分析日志里面对网站访问次数超过限定值的IP的数量,当超过一定的数量,就应当将其加入到防火墙的拒绝列表里面,防火墙的拒绝列表也要定期清空,不能一直攻击某个IP地址,因为可能是这个IP是肉机。
//脚本示例
#!/bin/bash
/bin/netstat -na|grep ESTABLISHED|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -rn|head -10|grep -v -E ’192.168|127.0′|awk ‘{if ($2!=null && $1>4) {print $2}}’>/tmp/dropip
for i in $(cat /tmp/dropip)
do
/sbin/iptables -A INPUT -s $i -j DROP
echo "$i kill at date">>/var/log/ddos
done
4、提高ssh优先级
- 服务器应该把ssh的优先级提高,以防止被DDOS攻击时远程连接过慢的问题。
5、iptables应对畸形报文
//基本防护
iptables -P INPUT ACCEPT
iptables -F
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 1.1.1.1 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 2.2.2.2 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP
#防止SYN攻击 轻量级预防
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT
#防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃
iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#用Iptables抵御DDOS (参数与上相同)
iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
6、修改内核参数
通过sysctl和iptables来防范,对sysctl参数进行修改
$ sudo sysctl -a | grep ipv4 | grep syn
输出类似下面:
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_syncookies:是否打开SYN COOKIES的功能,“1”为打开,“2”关闭。
net.ipv4.tcp_max_syn_backlog:SYN队列的长度,加大队列长度可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_synack_retries和net.ipv4.tcp_syn_retries:定义SYN重试次数。
把如下加入到/etc/sysctl.conf即可,之后执行“sysctl -p”!
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
提高TCP连接能力
net.ipv4.tcp_rmem = 32768
net.ipv4.tcp_wmem = 32768
net.ipv4.sack=0
攻击后的应对
- 那么当直面DDOS攻击时,运维人员应该应该怎么做呢?如果自己的服务并不是关键的话,建议先将服务关闭,然后运行脚本干掉攻击源IP,然后再启动服务,当然这要建立在SSH服务能立刻登入的情况下。
- 如果服务器不能关闭,建议换IP,很多机房在遭受DDOS攻击时都会采用换IP的方式