首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPTables限制高“每秒呼叫”,并重定向到另一个程序(同一台机器)。

IPTables限制高“每秒呼叫”,并重定向到另一个程序(同一台机器)。
EN

Unix & Linux用户
提问于 2021-05-03 20:02:52
回答 1查看 386关注 0票数 1

我正在寻找一种方法来“控制”每秒VoIP邀请(UDP)的高容量(每秒调用)在我的VoIP服务器到端口5060的iptables级别。

我需要做的是将每秒邀请的数量限制在一定的速率(例如20 cps),如果我收到大量CPS到服务器,我需要将它们重定向到另一台机器上的另一个端口(例如UDP/5090),在同一台机器上,另一个程序正在运行,用SIP消息"603谢绝“来回答它们。这个是可能的吗?

到目前为止,我对类似的问题有很多答案,我有点迷茫.我需要使用--限制?,连接限制?,hitcount??

与此同时,是否可以通过源ip地址来完成此操作?

概念上我在想这样的事情..。如有可能:

代码语言:javascript
复制
INPUT
iptables --append INPUT --match conntrack --ctstate NEW --jump RATE-LIMIT

RATE-LIMIT
iptables --append RATE-LIMIT --match limit --limit 20/sec --limit-burst 20 --jump ACCEPT
iptables --append RATE-LIMIT --jump DECLINE-INVITE

DECLINE-INVITE
iptables --append DECLINE-INVITE [how to redirect to port udp 5090]

谢谢!里卡多

EN

回答 1

Unix & Linux用户

发布于 2021-05-03 22:26:12

首先,让我们看一下Netfilter和通用网络中的分组流原理图:

在OP试图操作的步骤: filter/INPUT (过滤器/输入)已经太晚了,无法完成预定的操作,在路由决定之前,必须在nat/PREROUTING中完成执行DNAT的任务。

因此,这必须是更早的,对于其他一些情况,可能需要使用两个不同的表: mangle/PREROUTING用于某些特殊测试,nat/PREROUTING用于端口重定向,数据包上有标记,以将从mangle表传递到nat表的意图传递给nat表。实际上,这样的情况非常复杂,可能涉及原始表中的连接区,并且从不使用简单的设置(下面是一个例子:IPTables重定向所有UDP数据包,包括已建立的)

在这里,nat/PREROUTING就足够了。这是因为只有启动新流的数据包(state )才会检查OP的情况,而这正是nat表中已经发生的情况:只有状态新的数据包被看到(如示意图中所提醒的那样),其他每个数据包都将遵循所做的NAT决定。因此,这个块:--match conntrack --ctstate NEW在任何nat表规则中都是多余的:它总是正确的。限制匹配没有限制,可以在任何表/链中使用。

最后:

  • 为UDP端口5060添加一个筛选器,以不影响任何其他内容
  • 这里不需要连接轨道匹配
  • 提醒您,nat表中的-j ACCEPT只是意思是“在这种情况下不要做任何NAT”
  • 谢绝-INVITE并不是真正需要的,但我将保留OP使用的方式。
  • 由于与端口一起使用的DNAT目标需要一个协议,因此必须再次添加-p udp,即使只有5060个/UDP数据包符合此规则。
  • 您不能轻易地测试本地系统的结果:本地系统使用路径输出-> .回环. ->预输出->输入。在PREROUTING阶段,第一个传入数据包匹配在返回之前刚在输出中创建的流,因此它将不再以新状态出现,也不会看到nat/PREROUTING链,也不会在那里执行DNAT操作。通过在nat/OUTPUT中复制(并适当调整)这些规则,仍然可以在输出中立即完成DNAT。不管怎么说,我相信对当地的案子还有额外的警告。而是从远程(或连接的容器或网络命名空间)进行测试。
代码语言:javascript
复制
iptables -t nat -N RATE-LIMIT
iptables -t nat -N DECLINE-INVITE

iptables -t nat -A PREROUTING -p udp --dport 5060 -j RATE-LIMIT
iptables -t nat -A RATE-LIMIT -m limit --limit 20/sec --limit-burst 20 -j ACCEPT
iptables -t nat -A RATE-LIMIT -j DECLINE-INVITE
iptables -t nat -A DECLINE-INVITE -p udp -j DNAT --to-destination :5090
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/647913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档