有人能解释一下什么是有状态防火墙以及它是如何工作的吗?另外,如果您能将它与无状态防火墙进行比较,那将很有帮助。
答案1
有状态意味着它会跟踪连接,查看三次握手、SYN、ACK 等。它知道数据包是否要出去建立新连接。它知道数据包是否是现有连接的一部分。
无状态意味着它不会。它只查看 IP、端口,以及数据包是进还是出(数据包的方向)。有状态可以做到这一点,甚至更多
如果它是无状态的,则意味着您无法指定允许建立的连接,或者允许进入/退出新连接。您可以指定例如允许来自这个/这些 IP 的所有数据包进入这个端口。
如果您运行服务器并希望防火墙允许数据包通过该服务器,那么允许数据包进入服务器是可以的。您允许所有数据包进入,并允许所有数据包出去,并且您可能会限制某些 IP。因此,无论是有状态还是无状态,都没有区别。
但是,如果您想浏览网页,那么如果它是有状态防火墙,您可以说允许端口 80 上的所有数据包,并允许已建立的数据包进出。(这在 iptables 中很常见)因此,唯一进入的数据包是已建立连接的数据包。出去的数据包是为了建立新连接或作为现有连接的一部分,或者更确切地说,所有数据包都可以出去,而不是拒绝规则。这是一种常见的配置。iptables 中的一条规则允许来自已建立连接的数据包进入,-A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
来自 iptables 文章“迈向完美的规则集” http://inai.de/documents/Perfect_Ruleset.pdf
或者,使用 ipfw 可以实现这一点,允许在端口 80 上进行传出连接,并且与该连接相关的任何数据包都可以进出。这是有状态的。 allow tcp from any to any 80 out setup keep-state
无状态防火墙不跟踪连接。我没有用过,所以虽然我知道它的局限性,但我不知道用它来配置网页浏览的最佳方法,但我想你必须允许从端口 80 到任何>1023 的端口的数据包。并允许所有到端口 80 的数据包出去。如果你在高端口上运行服务器(有些服务器出于安全考虑这样做),那么它会非常不安全,因为任何人都可以连接到它,因为浏览网页的规则很宽松,所以我想你会把任何服务器放在低端口上。话虽如此,我没有使用无状态规则来允许网页浏览。我不确定最安全的方法是什么。不过我认为没有人会使用无状态防火墙,尤其是为了这个。