服务器带宽限速防止挖矿占用:服务器带宽被挖矿占满?教你用
当服务器突然变慢、网站打不开,先别急着重启——很可能是被植入了挖矿程序,正悄悄用你的带宽挖币。
挖矿进程会大量发送数据包,跑满带宽后正常业务就会阻塞。
下面直接讲两种服务器带宽限速防止挖矿占用的实操办法,一个适合装了宝塔面板的用户,一个适合纯命令环境,按步骤执行就能见效。
准备工作
你需要一台Linux服务器(本文以CentOS 7/Ubuntu 20.04为例),并且拥有root权限。
如果安装了宝塔面板,可跳过命令行部分。
另外建议先安装流量监控工具,方便后续验证:
yum install -y epel-release && yum install -y iftop nethogs # CentOS系
apt update && apt install -y iftop nethogs # Ubuntu/Debian
方法一:宝塔面板带宽限制(推荐新手)
- 登录宝塔面板,进入左侧“监控”菜单,先看“实时流量”中哪个进程占用了大量出站带宽,记录PID或端口。
- 点击左侧“安全” → “系统防火墙” → “添加规则”。
- 规则类型选择“端口规则”,填上被挖矿进程占用的端口号(例如4444),协议TCP,动作“限制带宽”。
- 在“限制速度”处输入你要设定的上行/下行带宽,例如1024Kb/s(注意单位是Kb,不是KB)。
- 点击“提交”,如果提示规则已存在,可以先删除原来的再添加。
注意:宝塔的带宽限制是对整个端口的流量做限速,如果挖矿进程使用了多个端口,需要逐个添加。
方法二:tc命令端口限速(通用)
如果服务器没装宝塔,或者挖矿进程使用了随机端口,可以用tc直接对指定IP限速。
先找到挖矿进程对外连接的IP:
netstat -anp | grep ESTABLISHED | grep -v 127.0.0.1 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head
假设挖矿连接的目标IP是 192.168.1.100(替换为实际IP),用tc限速:
# 清除现有qdisc设置
tc qdisc del dev eth0 root 2>/dev/null
# 创建根队列
sudo tc qdisc add dev eth0 root handle 1: htb default 30
# 创建类别,限制该IP的带宽为500kbit(上行)
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 500kbit ceil 500kbit
# 添加过滤,匹配目标IP的流量
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.100 flowid 1:1
执行后该IP的上行带宽将被限制在500kbps。
如果要持久化,可将这些命令写入/etc/rc.local(并给予执行权限)。
避坑指南
- 别把SSH端口限掉:限速前先确认挖矿的连接不是你自己的SSH会话,否则会把自己卡出去。可以用
who命令查看当前登录IP。 - tc规则重启失效:临时用tc,重启后规则会消失。建议先测试效果,确认无误后再做持久化。
- 挖矿进程会伪装:有些挖矿程序会占用常规端口(如80/443),此时限速会同时影响正常网站,建议先用
nethogs把确切的挖矿进程PID找出来,再配合iptables限制该PID的流量。 - 宝塔带宽限制不精准:宝塔的限速是软限制,超过设定值后不会立即断流,会有一定延迟,适用于防滥用而不是精确控制。
效果验证
限速后立即用iftop -i eth0查看流量变化:
iftop -i eth0 -n -P
如果之前挖矿IP占了大量上行流量,现在会明显下降到你设置的值附近。
再用nethogs eth0确认具体进程的速率也符合预期。
最后打开网站测试正常访问,说明限速生效且未影响业务。
常见问题
Q:找不到挖矿进程的端口或IP怎么办?
A:使用nethogs实时观察流量,哪个进程连续发送大量数据包,基本就是挖矿程序。记下它的PID,然后lsof -p PID查看连接信息。
Q:限速后网站还是有波动?
A:挖矿程序可能已经利用多进程或分布式连接,建议先杀掉进程并清理定时任务(crontab -l),再配合防火墙封禁可疑IP。
Q:tc命令报错“Exclusive parameter bps required”怎么办?
A:tc 的 rate 参数后必须带单位,比如kbit、mbit。检查命令中是否漏了单位。
如果你还在被挖矿占用带宽困扰,按上面步骤操作一次就能恢复正常。
别忘了定期检查进程和定时任务,防患于未然。