如果端口 80 是唯一未阻止的端口并且 apache 设置正确,iptables 是否足够安全?

如果端口 80 是唯一未阻止的端口并且 apache 设置正确,iptables 是否足够安全?

我们正在使用 PHP、MySQL、SVN 和 Apache。我想知道我是否假设本地子网是可信的,并使用 iptables 允许子网上的所有端口,然后只允许端口 80 对“任何人”开放。如果“安全性好”,则以子网是可信的为前提。这也假设 PHP 代码等良好,并且 Apache 配置正确。

这是使用 CentOS 5。

答案1

绝对不是。事实上,端口 80 可能是现代系统上可以打开的最危险的端口。此外,没有 https:// (tcp 443) 意味着您的所有会话 ID 都将被泄露。不使用 https 明显违反了 2010 年 OWASP 十大问题中的 A3:“身份验证和会话管理中断”。

保护自己的一个好办法是运行 Web 应用程序防火墙 (WAF),例如Mod_Securty。WAF 与 iptables 等“数据包过滤防火墙”有很大不同。

我还建议对你的系统运行漏洞扫描,例如安库奈特或 wapiti。确保您的系统定期更新:yum upgrade。运行PhpSecInfo并配置您的 php.ini,使 RED 不出现。PHP 的默认配置非常不安全,虽然已经有所改善(默认禁用远程文件包含和 register_globals),但仍然很糟糕。

答案2

我实际上要说的是问题在于:

“假设 PHP 代码良好。”

您不能想当然地认为这一点。理想情况下,该服务器将进入 DMZ,LAN 可以访问它,但 DMZ 无法访问 LAN。这个想法是,您假设面向公众的服务器将受到损害,然后您想限制损害。通过在 LAN 和 DMZ 之间设置单独的防火墙,您可能会限制损害。因此,使用 DMZ 设置,颠覆可能不会出现在面向公众的服务器上。如果您负担不起这台额外的服务器,那么创建虚拟机并将面向公众的服务器放在其中可能是一种穷人的 DMZ。

我还会采取额外措施,只向本地子网开放所需的端口(您可能需要更加信任您的 LAN,但如果可以,仍会限制它)。如果您使用状态模块(redhat/centos 默认设置),端口数量可能不会那么多。

另外,不要忘记操作系统和应用程序的安全更新。

答案3

如果一切都是安全的,那么您就有足够的安全性。不幸的是,这句话的前半部分很少是正确的。只打开所需的端口,即使是对受信任的网络也是如此。

答案4

我同意 @The Rook 的观点 - 真正的危险在于隐藏在 80 背后的所有庞大功能。如果您正在编写 Web 应用程序代码,无论使用哪种语言,我都会建议您快速学习如何编写安全代码和创建安全设计。无论多少防火墙防御都无法保护您免受糟糕的 Web 应用程序的侵害。

相关内容