AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 131364
In Process
Ian Kern
Ian Kern
Asked: 2010-04-12 02:57:09 +0800 CST2010-04-12 02:57:09 +0800 CST 2010-04-12 02:57:09 +0800 CST

Apache:限制每个 IP 的请求数/流量?

  • 772

我只想允许一个 IP 每天使用最多 1GB 的流量,如果超过该限制,则来自该 IP 的所有请求都将被丢弃,直到第二天。但是,在一定数量的请求后断开连接的更简单的解决方案就足够了。

是否已经有某种模块可以做到这一点?或者也许我可以通过 iptables 之类的东西来实现这一点?

谢谢

apache-2.2 ip bandwidth requests
  • 4 4 个回答
  • 28403 Views

4 个回答

  • Voted
  1. Gustavo Feijo
    2011-11-26T08:20:14+08:002011-11-26T08:20:14+08:00

    这是我针对此类问题的 iptables 解决方案。根据需要调整--seconds --hitcount,还有 iptables 表。

    iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
    iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT
    

    解释:

    1. iptables检查源 IP 在 /proc/net/ipt_recent/ATACK 文件中是否在 600 秒间隔内列出 5 次或更多次,以及它是否是新请求。如果是,请拒绝;别的

    2. iptables检查请求是否发往 80 端口。如果是,将 IP 和时间戳打印到 /proc/net/ipt_recent/ATACK 并转发数据包。

    它可以很好地满足我的需求。

    • 6
  2. pehrs
    2010-04-12T04:31:42+08:002010-04-12T04:31:42+08:00

    如果您想要 Apache 2.0 的纯 Apache 解决方案 bw_mod 和 Apache 1.3 的 mod_bandwidth。他们可以限制服务器的带宽以限制带宽使用。

    还有 mod_limitipconn,它可以防止一个用户与您的服务器建立大量连接。mod_cband 是另一种选择,但我从未使用过它。

    如果您不想弄乱您的 Apache 安装,您可以在 Apache 前面放置一个 squid 代理。它还使您可以更好地控制节流。

    但是,在大多数情况下,当您想要限制每个 IP 的带宽时,问题是一些大型对象,并且您想要在用户提取过多数据并且您阻止他时给出合理的错误消息。在这种情况下,编写 PHP 脚本并将访问信息存储在数据库的临时表中可能会更容易。

    • 5
  3. Peter Bagnall
    2012-08-26T06:42:30+08:002012-08-26T06:42:30+08:00

    你看过像fail2ban这样的工具吗?如果对您来说可能有点笨拙,但它可以让您限制任何给定 IP 允许的请求数量。它通过查看日志来工作,并且您为每次允许的违规次数设置规则,因此对您而言,这可能是每天的请求。一旦他们过去了,它就可以做一些事情,比如使用 ipchains 阻止他们。

    我已经使用它非常成功地阻止了针对邮件服务器的 DDoS 攻击。但是,它会消耗大量的处理器功率。

    • 3
  4. prophet.six
    2011-06-04T05:51:23+08:002011-06-04T05:51:23+08:00

    尝试mod_dosevasive或mod_security

    mod_dosevasive可以配置为在指定的时间范围内对站点的指定数量或页面请求后禁止 IP。

    • 1

相关问题

  • 如何强制我的网址始终以 www 开头?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • 网速慢 - 我应该检查什么?

  • mod_rewrite 不转发 GET 参数

  • 我应该如何管理每用户带宽?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve