使用iptables防火墙规则时,为什么要在所有允许的端口上声明NEW状态?


23

我经常看到iptables配置为允许所有paket进行RELATED连接,而将特定服务端口配置为NEW连接。

说新的原因是什么?如果连接不是新的,我想这是相关的,因此特定的端口规则将不会执行。那么,为什么要用NEW明确定义服务端口,而不仅仅是协议和端口号?

Answers:


21

依次检查netfilter防火墙(iptables)中的规则,并在首次匹配的基础上确定数据包的命运(ACCEPT,DROP,REJECT等)。

通过将防火墙设置为全状态和第一个规则,通常-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT仅通过该单个规则后,即可接受到服务器的绝大多数合法流量。该流量不需要遍历任何其他规则。

取决于规则库的大小,这可能意味着防火墙性能会有很大不同。

防火墙现在需要验证的唯一流量是明确的新连接。

即将公用Web服务器的防火墙与从其工作站访问少数Web管理员的访问进行比较:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

大约99%的合法数据包将属于已建立的连接,仅达到第一个规则。在不符合该规则的数据包中,大多数应该是与您的网站的新连接,多端口模块可以在单个规则中授予对HTTP或HTTPS的访问权限。网站管理员使用ssh和sftp从多个具有固定地址的工作站登录,其他所有内容均被拒绝。

防火墙,其中规则由TCP端口按逻辑顺序排序:

-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 443 -j ACCEPT

在这里在授予访问权限之前,需要对照5条规则检查到HTTP Web服务器的每个数据包。随着服务器上运行更多服务,例如当您使用fail2ban或类似产品时,很容易变成50条规则或更多规则。


1
一个很好的答案(我给我+1!),除了您说“ 允许在第一个比赛基础上访问 ”。如果第一个匹配是DROP或REJECT,则不允许访问;如果是LOG,则您必须继续查找以后的比赛;如果涉及定制链,事情就会变得很巴洛克。我要说的是“ 小包的命运是根据先发制人确定的 ”。
MadHatter支持Monica 2014年

5
您能考虑一下related/established存在该行但后续规则未生效的情况NEW吗?
丹尼尔·威德里克

13

NEW 表示数据包已开始新的连接。

它是由所谓的内核模块处理ip_conntrack_*,使您的防火墙状态。状态防火墙可以监视流量。

如果仅指定协议和端口号,则防火墙不是有状态的,而是无状态的。意味着它只是限制或阻止数据包。这些类型的防火墙不知道数据流。

一个很好的例子是FTP:活动的FTP使用端口21作为控制通道,然后使用端口20作为数据通道。如果是状态防火墙,则无需显式打开端口20,因为它与端口21上先前建立的新连接有关。

这是iptables手册页的摘录:

NEW-表示数据包已开始新的连接,或与未在两个方向上都看到数据包的连接相关联。

已建立-表示封包与一个已在两个方向看到封包的连接相关联。

相关-表示该数据包正在启动新连接,但与现有连接相关联,例如FTP数据传输或ICMP错误。


1
什么机制会将端口20与端口21“关联”?可以将打开的IP连接传输到另一个端口吗?
dronus 2014年

nf_conntrack_ftp.ko
mateusza,2015年

7
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP

上述规则集将使数据包INVALID通过状态为TCP的TCP端口22ACCEPT

无效:如果先前的状态均未应用,则数据包的状态为INVALID。这可能是由于各种类型的隐身网络探针引起的,或者可能意味着您用完了CONNTRACK条目(您还应该在日志中看到该条目)。或者它可能完全是良性的。

/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


声明STATE NEW可确保不会错误地吸收INVALID数据包。

并阐明其含义:

  • :这是一个新的连接
  • 已建立:这是当前连接中涉及的数据包
  • 相关:这是一个新连接,但由现有连接确定
  • 无效:以上都不适用。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.