iptables:“-p udp –state ESTABLISHED”

让我们看看这两个常用于允许传出DNS的iptables规则:

iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p udp --sport 53 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT 

我的问题是:我应该如何理解UDP中的ESTABLISHED状态? UDP是无状态的。

这是我的直觉 – 我想知道,如果或在哪里这是不正确的:

手册页告诉我:

这个模块,当与连接跟踪相结合,允许访问
这个数据包的连接跟踪状态。

   - 状态...

因此,iptables基本上记住了用于外发数据包的端口号(还有什么可以记住的是UDP数据包?) ,然后允许在短时间内发回的第一个传入数据包? 攻击者将不得不猜测端口号(这真的太难了吗?)

关于避免冲突:

内核会跟踪哪些端口被阻塞(通过其他服务或先前传出的UDP数据包),以便这些端口不会在时间范围内用于新的传出DNS数据包? (如果我在一定的时间内意外尝试在该端口上启动服务,会发生什么情况 – 这种尝试会被拒绝/阻止吗?)

请在上面的文本中find所有错误:-)谢谢,

克里斯

因此,iptables基本上记住了用于外出数据包的端口号(还有什么可以记住的UDP数据包?),

我很确定UDP的源和目标端口和地址是存储的。

如果你想检查状态表安装conntrack和/或netstat-nat。

(如果我在一定的时间内意外尝试在该端口上启动服务,会发生什么情况 – 这种尝试会被拒绝/阻止吗?)

由于您正在使用OUTPUT和INPUT,所以您正在讨论本地服务。 该端口已被使用我不相信你的系统将允许你启动另一个服务,因为有东西已经在该端口上监听。 我想如果你真的想要的话,你可以停止第一个服务,然后开始另一个服务,在这种情况下,响应可能会得到你的服务。 该服务对数据包的处理取决于数据包的内容,以及它是什么服务。

注意:这个答案已被编辑。

尽pipe手册页说了什么, ESTABLISHED似乎意味着“有状态的”。 对于UDP来说,只是意味着(如你所build议的)记住每个出站UDP数据包(“src ip,src port dst ip,dst port”元组),并识别它的响应。

FWIW,我对DNSstream量的正常规则是这样的:

 # permit any outbound DNS request (NB: TCP required too) iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 -j ACCEPT iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 53 -j ACCEPT # accept any packet that's a response to anything we sent iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

即控制OUTPUT链上的stream量,然后让iptables状态模块处理INPUT链上的所有其他事情。

另请参阅这个相关的问题 。

iptables开发者已经考虑到“ESTABLISHED”状态是在两个客户端之间的任何协议的两个方向上看到分组的情况。

状态扩展是conntrack的一部分。 内核从表格中了解状态

 /proc/net/nf_conntrack 

从发送者的angular度来看表nf_conntrack中的UDP的iptable状态的示例。 假设你在UDP上发送一个DNS查询

 udp 17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \ [UNREPLIED] src=192.168.1.10 dst=192.168.1.2 sport=53 \ dport=35237 use=1 

数据包已发送。 它没有回答,哦,表中有数据的预期作为回报(DNS答案的数据包)。

 udp 17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \ src=192.168.1.10 dst=192.168.1.2 sport=53 \ dport=35237 use=1 

回复到达,未回收的标志消失,这意味着这个UDP连接在系统中定义的less量时间处于ESTABLISHED状态。