最轻量常用的是iptables connlimit模块限制:先加载nf_conntrack模块,再在INPUT链用--syn参数限制新建连接,并注意Docker需额外配置DOCKER-USER链。

用iptables的connlimit模块直接限制
这是最轻量、最常用、内核级实时生效的方式,适用于所有TCP服务(如SSH、HTTP、FTP),无需重启服务,配置后立即拦截超限新连接。
第一步:确认系统已加载nf_conntrack模块,执行lsmod | grep nf_conntrack,若无输出则运行sudo modprobe nf_conntrack启用。
第二步:添加限制规则,例如限制单IP对Web端口80最多50个并发连接:
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT --reject-with tcp-reset
第三步:必须加--syn参数才能只限制新建连接,避免误杀已有长连接(如Keep-Alive):
sudo iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 -j REJECT
注意:【规则必须插入INPUT链,不能放在FORWARD或OUTPUT链】,否则对本机监听的服务完全不生效;若使用Docker,需额外在DOCKER-USER链中重复配置。
通过Nginx配置按IP限制并发连接数
适用于HTTP/HTTPS流量,能与限速、鉴权等逻辑深度集成,但仅作用于Nginx处理的连接,不覆盖其他端口或直连服务。
方法一:在http块顶层定义共享内存区(不可省略,否则limit_conn无效):
limit_conn_zone $binary_remote_addr zone=perip:10m;
方法二:在server或location块中启用限制,例如限制每个IP最多8个并发连接:
limit_conn perip 8;
这一步操作起来很简单,直接把配置粘贴进nginx.conf对应位置即可。但必须强调:【limit_conn_zone必须写在http{}最外层,若误写进server{}内,Nginx启动时会报unknown limit_conn_zone错误】。
针对vsftpd服务单独设限
如果你只跑FTP服务且不想动防火墙或反向代理,vsftpd原生支持IP级连接控制,配置简洁、语义清晰。
编辑/etc/vsftpd/vsftpd.conf,添加两行:
max_per_ip=3
max_clients=50
前者限制每个IP最多3个并发FTP连接,后者限制全服务器总连接数上限为50。改完执行sudo systemctl restart vsftpd立即生效。


















