Linux系统下使用iftop结合iptables服务解决带宽被恶意请求的问题
? 最近博客总时不时的打不开,出现数据库连接错误,或者是打开巨慢。不知道哪个s.b盯着我不放,打开控制面板,发现能登录,但是登录非常缓慢,最后挤进来后,看到流量可视化图,上下行一直流量一直居高不下。服务器带宽是10M的,流量高达100000kb!,说明直接将整个服务器带宽占满,Nginx并发数也很高,频繁访问网站,导致CPU占用率过高,因为有几个微服务在mysql中运行,导致本来占用就高的mysql服务宕机
? 吸取了这次教训我准备将mysql与web服务分离部署,不放在一个服务器上,mysql服务器采用自建存储服务器搭建MySQL服务,因为是专线,所以有公网IP 直接映射3306端口到公网 并做好防护即可。
下面进入正题 使用iftop结合iptables服务解决带宽被恶意请求的问题
主要通过2个步骤来实现
- 使用iftop 工具查出来是哪些个IP地址在请求主机的带宽资源,找出耗带宽的元凶
- 找出耗带宽的IP地址或者段,分析是out方向还是in方向,使用iptables规则来进行控制
安装 iftop 工具
yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel
接着输入 iftop -n 运行
- 左侧表示自己的服务器的内网ip
- 中间的<= =>这两个左右箭头,表示的是流量的方向
- 右侧表示请求或发送的ip
- 最右侧表示流量信息
可以看到,排行第一的流量消耗最大,并且是右箭头。反映出本地内网ip正朝着xxx.xxx.xxx.xxx这个ip疯狂发送数据,导致服务器带宽占满,无法访问,知道这个ip后,就可以利用 iptables 屏蔽这个ip
禁止某个IP访问服务器
使用IPTABLES 丢弃某个源ip的访问
iptables -I INPUT -s 地址 -j DROP
iptables -A OUTPUT -d 地址 -j DROP
看到主要流量是从out方向出去的,那就直接在OUT方向设置策略
iptables -A OUTPUT -d [IPADDRESS] -j DROP
屏蔽掉后,在看流量统计已经恢复到了正常状态
相关参数说明
iptables相关参数: 禁止此IP访问服务器:
- iptables -I INPUT -s 1.2.3.4 -j DROP
- iptables -A INPUT -s 1.2.3.4 -j DROP
禁止服务器访问此IP:
- iptables -A OUTPUT -d 1.2.3.4 -j DROP
如果要封某个网段:
- iptables -I INPUT -s 1.2.3.0/24 -j DROP
清空屏蔽IP:
- iptables -t filter -D INPUT -s 1.2.3.4 -j DROP
- iptables -t filter -D OUTPUT -d 1.2.3.4 -j DROP
一键清空所有规则:
查看:
- iptables -L INPUT
- iptables -L
处理IP碎片数量,防止攻击,允许每秒100:
- iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包:
- iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
|