我正在设置 ipfw,并向我提出了以下建议:如果我制定规则仅丢弃 TCP 的 SYN 数据包,则无法建立连接,防火墙甚至不必查看其他数据包。
这对我来说似乎违反直觉。我认为如果我阻止指定端口上的所有通信(涉及较少的数据包检查),防火墙会表现得更好,并且由于任何一种方式都无法建立连接,因此传入数据包的数量将相同。
真的有区别吗?
编辑:具体问题,从某个主机阻止 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 扫描该端口,还有其他检测此类活动的方法。如果您不希望该服务一起可用,请关闭该端口。
不过我认为这很有趣,“如果我制定规则只丢弃 TCP 的 SYN 数据包,则无法建立连接,防火墙甚至不必查看其他数据包。”
好吧...如果您根本不想让防火墙查看任何数据包,请全部拒绝!如果你想(出于某种原因)将 SYN 数据包记录到指定端口,你可以这样做,但老实说,我确实看到了任何好处。
谁建议阻止 SYN 数据包并提高性能需要研究他的 Net+
这是我未经检验的理论,将所有数据包丢弃到端口比仅丢弃
syn
数据包更快。原因如下:为了有效,防火墙必须查看每个数据包。作为一个有状态的防火墙,它可能还会耗费一些时间来尝试将非 SYN 数据包与来自其他规则集的现有允许流相匹配。
如果您要丢弃到某个端口的 TCP 连接,请丢弃所有到该端口的 TCP 数据包。
仅丢弃 syn 数据包是有目的的,但这不是(主要)性能;这是一种创建默认拒绝规则的简单方法,该规则将应用于传入连接,但不会为传出连接返回数据包。像这样的规则:
(请注意,“setup”是“tcpflags syn,!ack”的简写)将阻止所有传入的 TCP 连接(更高优先级规则不允许的连接)。
这实际上可能有一个性能参数,因为替代方案——使用保持状态规则允许在传出连接上返回数据包——涉及动态规则(并根据它们创建、管理和检查所有数据包),这可能有一些对性能的影响。
请注意,这与阻止特定低编号端口(例如您的示例中的 22)的规则无关,因为您可以非常确定不会为传出连接分配 1024 以下的端口。