在Linux系统中,可以使用iptables和tc(traffic control)工具来限制访问频率。以下是两种方法的简要说明:
方法1:使用iptables和recent模块限制访问频率
sudo modprobe xt_recent
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH_LIMIT
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 1 --name SSH_LIMIT -j DROP
这些命令将创建一个名为SSH_LIMIT的列表,并将访问频率限制为每分钟一次。超过限制的连接将被丢弃。
方法2:使用tc(traffic control)工具限制访问频率
对于基于Debian的系统(如Ubuntu):
sudo apt-get install iproute2
对于基于RPM的系统(如CentOS、Fedora):
sudo yum install iproute
sudo tc qdisc add dev eth0 root handle 1: htb default 10
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
这里,将eth0替换为您要限制的网络接口名称。
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10
sudo tc qdisc add dev eth0 parent 1:10 handle 10: netem limit 1min
这些命令将创建一个子队列,并将访问频率限制为每分钟一次。超过限制的连接将被延迟处理。
注意:这些方法仅适用于IPv4流量。对于IPv6流量,需要使用ip6tables和相应的tc规则。