只允许MySQL访问服务器的最佳做法?

这是用例:

我在一个盒子上build立了一个SaaS系统(开发环境)。 我把所有东西都移到了运行Ubuntu 10.10的云环境中。 一台服务器运行应用程序,另一台运行数据库。 基本思想是运行数据库的服务器只能由应用程序和pipe理员的机器来访问,他们都有正确的RSA密钥。

我的问题:

使用防火墙阻止除MySQL以外的所有端口的访问,或跳过防火墙/ iptables,并完全禁用所有其他服务/端口是更好的做法吗? 另外,我应该在非标准端口上运行MySQL吗? 这个数据库将持有相当敏感的信息,我想确保我正在尽一切可能来妥善保护它。

提前致谢。 我在这里读了一段时间,但这是我问的第一个问题。 我会尽力回答一些=)

理想情况下,为了获得最大的安全性,您需要多个层。

这包括诸如防火墙阻止对networking端口的所有访问(shorewall非常容易设置)以及使用tcpwrappers(hosts.allow / hosts.deny)来限制对各种守护进程的访问。

如果你的数据库服务器只接收来自给定服务器的连接(使用静态IP),那么这个IP也可以和你的标准防火墙configuration,tcwrapper和mysqlauthentication方法一起使用,以进一步限制访问进一步到只有一个服务器。

服务器之间的某种安全通道是理想的,否则将阻止对数据库服务器的所有访问。

除此之外,我认为使用防火墙过滤所有不需要的和不需要的东西是一个好主意,即使它看起来多余(例如,当前是否有监听端口X的守护进程)。 关于过滤所有内容(通过netfilter中的DROP)的一个“不错”的事情是它不能简单的进行简单的TCP端口扫描。

我也不认为更改数据库的默认端口是不好的主意,如果它必须打开互联网。 就此而言,永远不要有任何幻想,作为一个“安全措施”。

作为最佳做法,您应该禁用未使用的服务并防火墙。 当你这样做时,你正在深入应用防御原则。 您可以更改mysql的默认端口,因为这可能有助于减less日志中的噪音,但这不应该是您所做的唯一的事情。

如果您的数据库将包含敏感信息,那么您应该考虑对该数据使用encryption,尽pipe我对MySql不够熟悉,不知道它支持什么。

你还应该在security.se上查看“ MySql Server Hardening ”的问题 。

嘿,用/etc/hosts.allowed和/etc/hosts.deny来试试

将ALL:ALL全部添加到主机,但将您的IP和mysqld添加到hosts.allowed。 阅读更多关于:

http://linux.about.com/od/commands/l/blcmdl5_hostsal.htm

这是最简单的方法。

你的configuration将如下所示:

/etc/hosts.allow ALL:(Your-Connecting-IP)和/etc/hosts.deny ALL:ALL

添加本地主机允许可能是一个好主意寿。