首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制与iptables的TCP连接的持续时间?

问限制与iptables的TCP连接的持续时间?
EN

Unix & Linux用户
提问于 2022-01-10 20:58:30
回答 1查看 2.9K关注 0票数 5

是否可以限制与iptables连接的最大持续时间?

使用iptables,我可以使用-m connlimit限制每个IP地址的并发TCP连接数,也可以通过使用-m hashlimit来限制每个时间间隔的每个IP地址的新连接数。我目前正在使用这些规则来达到预期的效果:

代码语言:javascript
复制
iptables -A INPUT -m tcp -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j DROP
iptables -A INPUT -m tcp -p tcp --dport 80 -m state --state NEW -m hashlimit --hashlimit-above 15/min --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name rtlimit -j DROP

但是,是否有办法确保“已建立的”TCP连接在最多n秒后关闭,以防止“长期存在”连接?(不论是否仍在“活动”)

我看到人们建议:

代码语言:javascript
复制
iptables -A INPUT -p tcp --dport 80 -m state --state RELATED,ESTABLISHED -m limit --limit 1/minute -j DROP

然而,我不认为这真的是我想要的。据我所知,上述规则将丢弃属于“已建立”连接的所有数据包,并以“比每分钟一个数据包更快”的速度进入。在经过1分钟之后,它不会关闭连接,或者说是吗?

是否有任何方法可以实际使用iptables来完成这一任务?

EN

回答 1

Unix & Linux用户

发布于 2022-01-17 22:00:19

更新:我的回答有两个问题。1)我没有回答问题中“不管是否仍在活动”的部分;2)问题是在连接的端点(S)关闭套接字,而不是从iptables (netfilter)的跟踪中删除连接。结束更新。

我在这里看到两种选择:

选项1-全局

通过修改适当的全局netfilter变量来限制已建立的连接的空闲超时值。

使用以下方法验证当前默认值:

代码语言:javascript
复制
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

使用以下方法修改默认值(例如,600秒):

代码语言:javascript
复制
echo 600 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established

选项2-粒状

通过设置超时策略并使用iptables命令.

限制已建立连接的空闲超时值。

使用以下方法设置超时策略:

代码语言:javascript
复制
nfct add timeout nam1 inet tcp established 600

将该策略应用于iptables规则:

代码语言:javascript
复制
iptables -I PREROUTING -t raw -p tcp -j CT --timeout nam1
iptables -I OUTPUT -t raw -p tcp -j CT --timeout nam1

您可能需要安装在debian / ubuntu上的nfct工具,它来自同名的包(nfct)。

附加信息

man iptables-extensions显示了一些关于CT目标的信息。

man nfct展示了一个与您所要求的信息非常接近的示例。(使用长度超过4个字符的超时值策略可能会出现问题。)

连接跟踪工具可以用于跟踪连接的不同事件(例如conntrack -E -p tcp)中发生的事情。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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