![如果端口 80 是唯一未阻止的端口并且 apache 设置正确,iptables 是否足够安全?](https://linux22.com/image/510596/%E5%A6%82%E6%9E%9C%E7%AB%AF%E5%8F%A3%2080%20%E6%98%AF%E5%94%AF%E4%B8%80%E6%9C%AA%E9%98%BB%E6%AD%A2%E7%9A%84%E7%AB%AF%E5%8F%A3%E5%B9%B6%E4%B8%94%20apache%20%E8%AE%BE%E7%BD%AE%E6%AD%A3%E7%A1%AE%EF%BC%8Ciptables%20%E6%98%AF%E5%90%A6%E8%B6%B3%E5%A4%9F%E5%AE%89%E5%85%A8%EF%BC%9F.png)
我们正在使用 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 应用程序的侵害。