只丢弃SYN数据包会提高还是降低防火墙的性能?

我正在设置ipfw,并向我build议如下:如果我制定的规则只是为TCP丢弃SYN数据包,则无法build立连接,防火墙甚至不必查看其他数据包。

这对我来说似乎是非常直观的。 我认为如果我阻塞了指定端口上的所有通信(涉及到较less的数据包检查),那么防火墙性能会更好,并且由于不能以任何方式build立连接,所以传入数据包的数目将相同。

真的有区别吗?

编辑:具体的问题,阻止来自某些主机的SSH:

ipfw add deny tcp from somehost to any port 22 via em0 tcpflags syn 

 ipfw add deny tcp from somehost to any port 22 via em0 

有一个目的只能丢弃syn数据包,但它不(主要)性能; 创build适用于传入连接的默认拒绝规则是一种简单的方法,但不会为传出连接返回数据包。 像这样的规则:

 deny tcp from any to any in setup 

(注意“setup”是“tcpflags syn,!ack”的缩写)将阻塞所有进入的TCP连接(这是高优先级规则所不允许的)。

实际上可能有一个性能参数,因为替代方法 – 使用保持状态规则来允许在传出连接上返回数据包 – 涉及dynamic规则(以及创build,pipe理和检查所有对它们的数据包),这大概有一些对绩效的影响。

请注意,这与规则阻塞特定低编号端口(例如,在您的示例中为22)的规则无关,因为您可以确定没有1024以下的端口将被分配用于传出连接。

全局阻止到指定端口的所有stream量似乎比阻止某些types的stream量更有效,正如您所说的那样减less了数据包检查。 这真的取决于你的意图。 如果您希望服务是开放且可用的,但不希望有人对此端口进行SYN扫描,还有其他方法可以检测这种活动。 如果您不希望服务一起使用,请closures端口。

我认为它的有趣之处在于:“如果我制定的规则只是为TCP丢弃SYN数据包,则不能build立连接,防火墙甚至不必查看其他数据包。

那么……如果你不想让防火墙查看任何数据包,否认所有! 如果你想有SYN数据包到指定端口的日志(比如某种原因),你可以做到这一点,但是我真的确实看到了好处。

谁build议阻止SYN数据包,并提高性能需要研究他的networking+

这是我未经validation的理论,将所有数据包丢弃到一个端口比只丢掉syn数据包要快。 原因如下:

  • 意外的数据包通常可能会生成TCP重置或ICMP端口不可达消息。 只有写入SYN数据包的规则才会导致其他数据包进入操作系统。
  • 规则仍然必须与之相匹配。 两条规则都检查端口22,但是在第二条规则中必须检查是否存在SYN。

为了有效,防火墙必须无论如何都要查看每个数据包。 作为一个有状态的防火墙,它可能会额外耗费一些时间,试图将非SYN数据包与来自其他规则集的现有允许stream匹配。

如果要删除TCP连接到端口,请将所有TCP包丢弃到端口。