首先,请记住,我不是系统管理员;我只是有一个困扰我多年的一般性问题。
我经常听说防火墙封锁某些端口可以“提高安全性”。但与此同时,有些端口通常保持开放(例如端口 80)。
我把这种情况比作一座有很多门的堡垒,但你锁上了一些门以防入侵者。这很好,但如果你仍然留下一些门开着,那有什么好处呢?如果入侵者是某种致命病毒,那么留下一扇门和留下 1000 扇门有什么区别呢?
我似乎对网络如何受到攻击和/或保护存在一些根本性的误解。
答案1
我经常听说防火墙封锁某些端口可以“提高安全性”。但与此同时,有些端口通常保持开放(例如端口 80)。
在防火墙上,您几乎总是默认阻止除发往特定服务的流量之外的所有传入流量。
如果您对安全性没有很强的要求,您只需允许任何端口上的传出流量。
如果您需要更安全一些,您可以阻止流向经常被滥用的端口的传出流量。例如,您可以阻止传出的 SMTP(邮件服务器除外),以防止您的内部系统成为垃圾邮件的来源。
随着你变得更加偏执,你将不允许任何直接出站访问,并且你将强制所有流量通过应用程序级防火墙,这些防火墙能够比你使用基本数据包过滤器更深入地挖掘有效负载。对于 HTTP 流量,你将使用 Squid 之类的 HTTP 代理。对于 DNS,你可以运行本地 DNS 缓存服务器,而不是允许直接访问外部 DNS 服务器。这样的例子不胜枚举。几乎每个常见的服务器都有某种应用程序级代理。这意味着无论某些客户端选择在端口 80 上使用什么协议,你都不需要打开“端口 80”。相反,你允许来自客户端的 HTTP/HTTPS 流量连接到端口 80/443,并禁止其他一切。
另外,要明白你的网络必须实现其目的。这总是意味着在极端偏执的安全性和让事情真正为用户服务之间会有某种妥协。
答案2
在防火墙中,通常只允许打开需要的端口。
例如,因为您想要提供网页服务,所以将端口 80 保持打开状态,或者将端口 22 保持打开状态以提供 ssh 连接服务。
此端口必须保持打开,否则您无法提供此服务。
另一方面,所有未使用的端口都应该关闭。这样攻击者就没有机会利用这个端口入侵你的系统。
如果您让这些端口保持打开状态,而忘记停止属于该端口的服务(或恶意程序打开此端口),则存在攻击媒介。如果防火墙关闭了该端口,则即使有程序正在侦听该端口也无济于事,因为防火墙会在流量到达服务之前将其阻止。
例如,如果您的服务器运行 telnet 服务,并且端口 23 已关闭,那么没有人可以访问它并通过 telnet 服务攻击您的服务器。如果您让端口保持打开状态,那么任何人都可以访问 trelnet 服务并尝试入侵您的系统。
因此,您只需打开满足特定需求所需的端口,而所有其他端口均关闭,不会造成任何损害。