限制新连接数(预防性控制)
通过防火墙规则限制单个IP的连接数,防止资源滥用:
# 使用更现代的nftables(示例:限制SSH连接) sudo nft add table inet filter sudo nft add chain inet filter input { type filter hook input priority 0; } sudo nft add rule inet filter input tcp dport 22 ct count over 5 reject
适用场景:防御DDoS攻击或防止单个IP耗尽资源。
通过Web服务器配置限制连接
针对Nginx/Apache等服务的连接控制:
-
Nginx配置(修改
nginx.conf
):http { limit_conn_zone $binary_remote_addr zone=perip:10m; server { location / { limit_conn perip 5; # 每个IP最多5个连接 } } }
重启服务:
sudo systemctl restart nginx
-
Apache配置(需启用
mod_ratelimit
):<IfModule mod_ratelimit.c> <Location "/"> SetOutputFilter RATE_LIMIT MaxRate 100 # 每秒最多100个连接 </Location> </IfModule>
强制关闭现有连接
使用网络工具断开已建立的连接:
- 查找目标连接(以SSH为例):
sudo ss -tpn dst :22 # 查看所有SSH连接(含PID和IP)
- 关闭连接:
- 通过进程ID终止:
sudo kill -9 <PID> # 结束对应进程
- 使用
tcpkill
(需安装dsniff
包):sudo tcpkill -i eth0 host 192.168.1.100 # 断开指定IP的所有连接
- 通过进程ID终止:
调整系统级连接参数
修改内核参数优化连接管理:
# 降低TIME_WAIT状态连接的回收时间(秒) sudo sysctl -w net.ipv4.tcp_fin_timeout=15 # 限制半连接队列大小(防御SYN Flood) sudo sysctl -w net.ipv4.tcp_max_syn_backlog=2048 # 持久化配置:将参数写入/etc/sysctl.conf echo "net.ipv4.tcp_fin_timeout=15" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
注意事项
- 操作风险:强制断开连接可能导致用户数据丢失,生产环境需谨慎。
- 性能影响:过度限制连接数可能误伤正常流量,建议监控后调整(工具:
netstat
,ss
,nload
)。 - 安全原则:优先通过防火墙或服务配置预防问题,而非事后处理。
- 备份配置:修改关键文件前备份(如
cp /etc/nginx/nginx.conf ~/nginx.conf.bak
)。
引用说明
- Linux内核参数文档:
man tcp
(终端查看) - iptables官方指南:netfilter.org
- Nginx连接限制模块:nginx.org/docs
- 系统工具手册页:
man ss
,man sysctl
,man tcpkill
重要提示:本文方法需root权限操作,建议在测试环境验证后再部署到生产服务器,对于复杂攻击场景,建议结合专业防火墙(如Cloudflare)或安全团队协作处理。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5411.html