以下是用例:
我有一个在单个机器上构建的 SaaS 系统(开发环境)。我已将所有内容移至运行 Ubuntu 10.10 的云环境。一台服务器运行应用程序,另一台服务器运行数据库。基本思想是,运行数据库的服务器只能由应用程序和管理员的计算机访问,他们都拥有正确的 RSA 密钥。
我的问题:
更好的做法是使用防火墙阻止对除 MySQL 之外的所有端口的访问,还是跳过防火墙/iptables 并完全禁用所有其他服务/端口?此外,我应该在非标准端口上运行 MySQL 吗?这个数据库将保存非常敏感的信息,我想确保尽一切可能妥善保护它。
提前致谢。 我在这里读了一段时间,但这是我问的第一个问题。我也会尝试回答一些问题 = )
答案1
理想情况下,为了获得最大程度的安全,您需要多层。
这包括使用防火墙阻止所有对网络端口的访问(shorewall 很容易设置),以及使用 tcpwrappers(hosts.allow / hosts.deny)限制对各种守护进程的访问。
如果您的数据库服务器仅接收来自给定服务器(具有静态 IP)的连接,那么该 IP 还可以与您的标准防火墙配置、tcwrapper 和 mysql 身份验证方法结合使用,以进一步限制仅限于该一台服务器的访问。
答案2
服务器之间的某种安全隧道是理想的,否则会阻止对数据库服务器的所有访问。
除此之外,我认为使用防火墙过滤所有不需要和不想要的东西是个好主意,即使这看起来是多余的(例如,当前是否有守护进程在监听端口 X)。过滤所有内容(通过 netfilter 中的 DROP)的一个“好处”是,它不会使简单的 TCP 端口扫描变得快速而简单。
如果数据库必须向互联网开放,我也不认为更改其默认端口是个坏主意。但千万不要对此抱有任何幻想,认为这只是一项“安全措施”。
答案3
作为最佳实践,您既应该禁用未使用的服务,又应该为您的机器设置防火墙。当您这样做时,您正在应用纵深防御原则。您可以更改 mysql 的默认端口,因为这可能有助于减少日志中的噪音,但这不应该是您唯一要做的事情。
如果您的数据库包含敏感信息,您应该考虑对该数据使用加密,尽管我对 MySql 不够熟悉,不知道它支持什么。
您还应该查看以下问题“MySql Server 强化“ 在安全网。
答案4
嘿,试试 /etc/hosts.allowed 和 /etc/hosts.deny
将 ALL: ALL 添加到 hosts denied 但将您的 IP 和 mysqld 添加到 hosts.allowed。阅读更多内容:
http://linux.about.com/od/commands/l/blcmdl5_hostsal.htm
这是最简单的方法。
你的配置将会像这样:
/etc/hosts.allow ALL:(您的连接 IP)和 /etc/hosts.deny ALL: ALL
将 localhost 添加到允许可能是个好主意。