我正在尝试使用 logstash 设置电子邮件警报。现在,每次将模式“错误”解析到我的日志文件时,它都会给我发电子邮件,这可能会导致很多不必要的电子邮件。我想创建一个条件规则,以便让我们说“X 日志文件的模式为 1 分钟内出现错误 3 次,请给我发电子邮件”。这样我就不会被电子邮件淹没。
这是我当前的配置:
input {
file {
# sincedb_path => /path/to/whatever/
path => "/opt/test.log"
type => "test_log"
}
}
filter {
dns {
add_field => [ "IPs", "Logs, from %{host}" ]
type => [ "MESSAGES" ]
resolve => [ "host" ]
action => [ "append" ]
}
}
filter {
if [message] == "Error" or [message] == "error" {
throttle {
before_count => 1
after_count => 3
period => 10
key => "%{message}"
add_tag …Run Code Online (Sandbox Code Playgroud) 在限制来自IP的请求数量时,我使用
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
Run Code Online (Sandbox Code Playgroud)
我可以以r/m(每分钟请求数)或r/s(每秒请求数)为单位指定速率。有没有办法指定请求/小时的速率?
例如,我希望速率为 75 个请求/小时。所以它将是 1.25r/m,但 r/m 必须是整数。所以,即使这样也行不通。
请帮帮我。
这个问题涉及到另外一个问题有很大的答案,脚本从@Oliver。
目标:我想修改/扩展此答案中提供的脚本 以满足我的要求,如下所示:
我有大量客户(最多 1000 个)。应根据其 CN(通用名称)为每个客户端分配一个订阅类别和相应的最大数据速率。这些速率限制应在客户端连接时应用,并在断开连接时移除:
bronze: 1 兆位silver: 10 兆比特gold: 100 兆比特我想在客户端连接到 OpenVPN 服务器时动态调整每个客户端的订阅类和相应的活动数据速率限制。客户端不必重新连接到 OpenVPN 服务器。这是可能的,还是我们必须断开每个客户端并将其重新连接到 OpenVPN 以导致再次调用脚本来更改tc配置?
不是tc使用 shell 手动修改配置,我们如何从另一台计算机或应用程序(即通过 PHP)动态更新客户端订阅类和相应的活动数据速率限制?
非常感谢
如果我需要使用秘密标头绕过速率限制,我该如何实现?
参考:
http {
geo $whitelist {
default 0;
# CIDR in the list below are not limited
1.2.3.0/24 1;
9.10.11.12/32 1;
127.0.0.1/32 1;
}
map $whitelist $limit {
0 $binary_remote_addr;
1 "";
}
limit_conn_zone $limit zone=connlimit:10m;
limit_conn connlimit 5;
limit_conn_log_level warn; # logging level when threshold exceeded
limit_conn_status 503; # the error code to return
Run Code Online (Sandbox Code Playgroud) 我对保护 Web 应用程序免受机器人攻击的背景感兴趣,但我认为它适用于机器人可以通过 IPv6 进行的所有类型的攻击。
在 Web 应用程序中,您希望保护一些页面免受机器人攻击。
它可能是一个登录页面:您希望避免数百万个尝试用户名/密码组合的请求。
它可能是一个注册页面。您不希望在您的网站上创建数千个机器人帐户。
或者您可能不希望立即下载数据库的全部内容。您认为匿名用户每天向您的数据库发出 100 或 200 个请求来获取一些信息是可以接受的,但您不能接受机器人每分钟执行 1000 个请求来下载您提供的所有内容。
或者只是为了统计目的。您正在记录网站上的访问者活动,并且您不希望机器人完全影响您的数据,例如,人为地点击链接数千次,以便其链接到的文章成为您的新闻网站上“最受欢迎的文章” 。
我经常使用基于 IP 地址的节流/速率限制以及 Nginx 速率限制功能来处理此问题:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/m;
server {
location /sensitiveUrl {
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
Run Code Online (Sandbox Code Playgroud)
但对于 IPv6,我不确定这有多有效。我的意思是,使用 IPv4 相对有效,因为攻击者创建和使用数千个 IP 地址的成本很高,但使用 IPv6 似乎任何人都可以创建数百万个 IP。这要怎么处理呢?我应该对 IPv6 网络而不是地址应用限制吗?如果我这样做的话,实际效果如何?
我们的服务器被 HEAD 请求淹没。
这导致 TCP 连接数激增,导致服务器无法连接到其 mysql 数据库。
我们广泛使用 nginx 速率限制,它与fail2ban 完美结合,适用于任何 GET 和 POST 请求。然而,HEAD 请求似乎没有被接受。
我们使用的fail2ban filter.d 操作似乎nginx-limit-req是一个库存配置,用于检测何时达到nginx 区域限制。
由于我们的 Web 应用程序不需要 HEAD 请求,因此我们有两个选择(除了手动禁止单个 IP 地址之外)
nginx.conf:
http {
...
limit_req_zone "$http_x_forwarded_for" zone=web_zone:50m rate=2r/s;
...
}
server {
...
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
location / {
limit_req zone=web_zone burst=25;
try_files $uri $uri/ @pretty-urls;
}
...
}
Run Code Online (Sandbox Code Playgroud)
监狱.conf:
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
action = custom-iptables-proxy …Run Code Online (Sandbox Code Playgroud) 情况: 我目前看到大量传入 DNS 请求从一个 IP 每 2-3 秒突发约 85 个查询。然后另一个IP发送新的浪潮,依此类推(目前我的DNS服务已关闭,因此它不会参与看起来像是另一次放大攻击的行为)。
问: 有没有办法设置每个IP的查询限制?
同一个客户端不太可能需要在一秒钟内解析 2 个或 3 个以上的域,因此这听起来是一个合理的步骤。
我正在尝试实现这种情况:
仅在特定路径上,我在前端收到稳定的 9 个请求/秒。一切都很好,使用常规后端。我现在收到 11 req/s,我想拒绝任何超过 10 的请求。但仍然想继续回复最大 10 req/sec。
我发现并尝试实现的所有内容(如下所示:https : //blog.codecentric.de/en/2014/12/haproxy-http-header-rate-limiting/)都是黑色或白色的解决方案,一旦率达到。所以它是一种防止 DDOS、滥用者的保护,但不是真正的速率限制解决方案。
有什么方法可以实现吗?
PS:使用 HAproxy 1.5.8
我正在尝试设置 Nginx limit_req 模块来限制任何 IP 对同一 URL 的请求速率。
我想定义一个limit_req_zone由客户端 IP 和请求 URI 组合而成的密钥。也就是说,代替这个:
limit_req_zone $binary_remote_addr zone=req_dev:10m rate=2r/s;
像这样的东西:
set $ip_url "$binary_remote_addr$request_uri"
limit_req_zone $ip_url zone=req_dev:10m rate=2r/s;
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为set无法在上下文中调用http:
nginx: [emerg] "set" directive is not allowed here in /etc/nginx/nginx.conf:47
Run Code Online (Sandbox Code Playgroud)
有什么办法可以实现这一点吗?
需要明确的是:我不想限制特定 URL 的速率。我想避免一个 IP 每秒访问同一 URL 两次以上。
我正在将我们的 Web 应用程序的部署从 Azure 应用程序服务更改为应用程序网关后面的 VM,因为应用程序服务无法处理我们几天前的峰值负载。
我现在想要做的是保护应用程序免受可能的非常短的高峰使用的影响是实现速率限制(例如,每个客户端/IP 每分钟最多 60 个请求)。
预计该应用程序的使用高峰期非常短(售票应用程序并开始销售非常受欢迎的活动)。
上次出现峰值并且服务器变慢时,人们开始尽可能快地点击“刷新”并完全关闭整个系统而没有机会恢复(每秒有数千个请求,我们的系统无法启动再次,因为它并不是真正为如此高的负载而设计的,因为在 99.9% 的时间里,我们每秒有 <100 个请求) - 所以我们希望有可能避免此类用户对系统进行“DDoS”攻击”意外或因为害怕没有拿到他们的票”...
这可以使用应用程序网关吗?
任何其他想法如何实现这种(按需)速率限制?
我发现如下:https://docs.microsoft.com/en-us/azure/api-management/api-management-sample-flexible-throttling 但这似乎不适用于应用程序网关,或者至少我做到了不知道怎么...
web-applications load-balancing azure rate-limiting azure-networking
rate-limiting ×10
nginx ×4
alerts ×1
azure ×1
bandwidth ×1
email ×1
fail2ban ×1
haproxy ×1
http ×1
ip-address ×1
ipv6 ×1
kibana ×1
logstash ×1
openvpn ×1
tc ×1
throttling ×1
web-server ×1