如何限制单IP10个并发连接

限制新连接数(预防性控制)

通过防火墙规则限制单个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>

强制关闭现有连接

使用网络工具断开已建立的连接:

  1. 查找目标连接(以SSH为例):
    sudo ss -tpn dst :22  # 查看所有SSH连接(含PID和IP)
  2. 关闭连接:
    • 通过进程ID终止:
      sudo kill -9 <PID>   # 结束对应进程
    • 使用tcpkill(需安装dsniff包):
      sudo tcpkill -i eth0 host 192.168.1.100  # 断开指定IP的所有连接

调整系统级连接参数

修改内核参数优化连接管理:

# 降低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

注意事项

  1. 操作风险:强制断开连接可能导致用户数据丢失,生产环境需谨慎。
  2. 性能影响:过度限制连接数可能误伤正常流量,建议监控后调整(工具:netstat, ss, nload)。
  3. 安全原则:优先通过防火墙或服务配置预防问题,而非事后处理。
  4. 备份配置:修改关键文件前备份(如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

赞 (0)
酷番叔酷番叔
上一篇 2025年6月23日 13:02
下一篇 2025年6月23日 13:33

相关推荐

  • Linux数据备份,你的安全防线够强吗?

    常用网络备份工具及操作步骤Rsync + SSH(增量备份首选)原理:仅同步变化的文件,节省带宽和时间,示例命令:rsync -avz -e "ssh -p 22" /本地目录/ 用户名@远程IP:/备份目录/-a:归档模式(保留权限、时间戳)-v:显示详细过程-z:压缩传输-e:指定SSH……

    2025年7月27日
    25700
  • Linux系统中如何彻底删除用户名及其对应的密码账户?

    在Linux系统中,删除用户名和密码是系统管理中的常见操作,但需谨慎处理,避免误删导致数据丢失或权限混乱,以下是详细的操作步骤和注意事项,涵盖用户删除、密码清理及相关配置处理,删除用户前的准备工作在执行删除操作前,需完成以下准备工作,确保系统安全和数据完整:确认用户身份:明确要删除的用户名,避免误操作重要账户……

    2025年9月13日
    29500
  • Linux中goto语句如何使用?

    在Linux环境下,goto语句是C/C++等编程语言提供的控制流语句,用于无条件跳转到代码中定义的标签处,它常用于简化错误处理或退出多层嵌套,但需谨慎使用以避免代码结构混乱。

    2025年7月16日
    28500
  • Linux服务器安装gcc编译器的完整详细步骤是怎样的?

    在Linux服务器环境中,GCC(GNU Compiler Collection)是应用最广泛的编译器套件,支持C、C++、Fortran、Objective-C等多种编程语言的编译,是软件开发、系统运维及服务器环境搭建的基础工具,本文将详细介绍在Linux服务器中安装GCC编译器的完整流程,涵盖不同发行版的安……

    2025年8月24日
    28100
  • Linux如何更改用户组?

    在Linux系统中,用户组是管理用户权限和资源访问的重要机制,通过将用户划分到不同的组,可以简化权限配置,无论是新用户加入、部门调整还是权限变更,都可能涉及用户组的修改,本文将详细介绍Linux系统中更改用户组的多种方法,包括修改用户主组、管理附加组、调整组属性等操作,帮助用户灵活掌握用户组管理技能,Linux……

    2025年9月24日
    24100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信