在Debian系统中,可以使用 iptables
来限制访问速度。具体来说,可以使用 hashlimit
模块来限制每个源IP的速率。以下是一个基本的示例,展示如何限制某个IP的上传速度为1000KB/秒(8Mbps):
iptables -A FORWARD -m limit -d 208.8.14.53 --limit 700/s --limit-burst 100 -j ACCEPT
这条命令的意思是:
-A FORWARD
:将规则添加到FORWARD链。-m limit
:使用限制模块。-d 208.8.14.53
:限制目标IP为208.8.14.53。--limit 700/s
:限制每秒700个数据包。--limit-burst 100
:允许突发最多100个数据包。还可以使用 hashlimit
来限制连接数,例如限制每个IP每分钟最多建立5个新的SSH连接:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit-name SSH --hashlimit-above 5/min --hashlimit-mode srcip -j REJECT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource -j ACCEPT
第一条命令的意思是:
-A INPUT
:将规则添加到INPUT链。-p tcp
:匹配TCP协议。--dport 22
:匹配端口22(SSH)。-m state --state NEW
:只匹配新的连接。-m hashlimit --hashlimit-name SSH
:使用名为SSH的hashlimit。--hashlimit-above 5/min
:每分钟超过5个连接拒绝。--hashlimit-mode srcip
:基于源IP进行限制。-j REJECT
:拒绝匹配的数据包。请注意,使用 hashlimit
模块时,hashlimit-name
必须是唯一的,否则可能会导致数据包被多条规则重复处理。
另外,还可以使用 tc
(流量控制)工具来实现更复杂的限速功能。tc
允许你使用令牌桶算法来控制流量速率。以下是一个简单的示例,展示如何使用 tc
限制某个IP的上传速度为100KB/s:
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip src 208.8.14.53 flowid 1:1
这条命令的意思是:
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
:在 eth0
设备上添加一个令牌桶控制器,限制速率为1Mbps,突发流量为32kbit,延迟为400ms。tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip src 208.8.14.53 flowid 1:1
:添加一个过滤器,匹配源IP为208.8.14.53的数据包,并将其分配到令牌桶控制器。这些方法可以帮助你在Debian系统中有效地限制访问速度,保护系统资源不被过度占用。