前言
虚拟主机服务商在运营过程中可能会受到黑客攻击,常见的攻击方式有SYN,DDOS等。通过更换IP,查找被攻击的站点可能避开攻击,但是中断服务的时间比较长。比较彻底的解决方法是添置硬件防火墙。不过,硬件防火墙价格比较昂贵。可以考虑利用Linux 系统本身提供的防火墙功能来防御。SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。 Linux内核提供了若干SYN相关的配置,加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分 SYN攻击,降低重试次数也有一定效果。而DDOS则是通过使网络过载来干扰甚至阻断正常的网络通讯。通过向服务器提交大量请求,使服务器超负荷。阻断某一用户访问服务器阻断某服务与特定系统或个人的通讯。可以通过配置防火墙或者使用脚本工具来防范
防范措施
通过sysctl和iptables来防范
对sysctl参数进行修改
1 | $ sudo sysctl -a | grep ipv4 | grep syn |
输出类似下面:
1 | net.ipv4.tcp_max_syn_backlog = 1024 |
把如下加入到/etc/sysctl.conf即可,之后执行“sysctl -p”!
1 | net.ipv4.tcp_syncookies = 1 |
提高TCP连接能力
1 | net.ipv4.tcp_rmem = 32768 |
使用iptables
命令:
1 | netstat -an | grep ":80" | grep ESTABLISHED |
来查看哪些IP可疑~比如:221.238.196.83这个ip连接较多,并很可疑,并不希望它再次与221.238.196.81有连接。可使用命令:
1 | iptables -A INPUT -s 221.238.196.83 -p tcp -j DROP |
将来自221.238.196.83的包丢弃。
对于伪造源IP地址的SYN FLOOD攻击。该方法无效
其他参考
防止同步包洪水(Sync Flood)
1 | iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT |
也有人写作
1 | iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT |
–limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改防止各种端口扫描
1 | iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT |
Ping洪水攻击(Ping of Death)
1 | iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT |
使用DDoS deflate自动屏蔽攻击ip
DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址,在检测到某个结点超过预设的限 制时,该程序会通过APF或IPTABLES禁止或阻挡这些IP。
DDoS deflate官方网站:http://deflate.medialayer.com/
如何确认是否受到DDOS攻击?
执行:
1 | netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n |
以下是我自己用VPS测试的结果:
1 | li88-99:~# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n |
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。
1、安装DDoS deflate
1 | wget http://www.inetbase.com/scripts/ddos/install.sh //下载DDoS deflate |
2、配置DDoS deflate
下面是DDoS deflate的默认配置位于/usr/local/ddos/ddos.conf ,内容如下:
1 | ##### Paths of the script and other files |
3、选项
1 | /usr/local/ddos/ddos.sh -h //查看选项 |
4、卸载
1 | wget http://www.inetbase.com/scripts/ddos/uninstall.ddos |
使用以上方法可以缓解一些攻击。如果服务器是nginx的话可以按照
1、打开nginx访问日志
1 | log_format access '$remote_addr - $remote_user [$time_local] "$request" ' |
2、观察nginx日志
1 | more /usr/local/nginx/logs/access.log |
查看哪些ip重复很严重。
(1)agent的特征
比如:MSIE 5.01
配置nginx
1 | location /{ |
将ip加入iptable内
1 | iptables -A INPUT -s 202.195.62.113 -j DROP |
我发现的 攻击时代理+ddos
搜索ip均为代理地址。日志最后一部分为真实ip(重复很多)。
如何查看user_agent
在地址栏输入:
1 | javascript:alert(navigator.userAgent) |
回车就会弹出当前使用的浏览器的useragent.
1 | ps:ie和firefox的user—agent |
注意:都含有Windows NT 5.1。
“Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)”(这个应该就是攻击者使用user_agent).