保护一个拥有MySQL数据库的简单Linux服务器?

一个初学者的问题,但我已经浏览了这个网站上的许多问题,并没有find一个简单,直接的答案:

我正在build立一个运行Ubuntu的Linux服务器来存储一个MySQL数据库。

尽可能的保证服务器的安全是非常重要的,据我所知,我的主要担忧应该是传入的DoS / DDoS攻击和未经授权的访问服务器本身。

数据库服务器只接收来自特定IP(101.432.XX.XX)的端口3000的input数据。我只希望该服务器能够接收来自此IP的传入请求,并防止服务器发出任何传出请求。

我想知道:

  1. 什么是防止我的数据库服务器发出传出的请求和接收来自101.432.XX.XX的传入请求的最佳方法? closures所有的端口 3000有助于实现这一目标?

  2. 是否有任何其他的Linux环境,可以提高安全性? 我已经采取了非常基本的步骤来保护我的phpmyadmin门户网站(链接到MySQL数据库),例如限制只能访问我的个人IP地址。

要访问数据库服务器,需要使用SSH密钥(本身受密码保护)。

Solutions Collecting From Web of "保护一个拥有MySQL数据库的简单Linux服务器?"

一位名人曾经说过:“ 安全是一个过程,而不是一个产品” 。

所以你有一个数据库服务器,应该只听一个其他服务器的数据库连接,你有一个其他服务器的特定IP。 有几个层次的限制可以用来完成这一点

1)防火墙

如果你的MySQL服务器有幸能够在防火墙之后,你应该能够在默认情况下阻止所有的连接,并且只允许某些端口上的某些连接。 我不知道你是如何设置你的数据库服务器,或者想要访问它的其他服务器是否在同一个局域网上,或者两台机器都只是虚拟机。 这一切都取决于你的服务器在哪里运行,以及你有什么样的防火墙(如果有的话)。

我经常在Amazon Web Services上设置服务器。 它们提供安全组,允许您在默认情况下阻止所有端口,然后允许使用CIDR表示法访问特定IP模块的 特定端口 。 即,您授予端口/ IP组合对的访问权限。 要让您的一台服务器通过,您可以允许在端口3000上访问IP地址101.432.xx.xx。

细节将根据您的架构和服务提供商而有所不同。

2)IPTables

Linux机器可以运行一个称为iptables的本地防火墙(即运行在每台服务器上的进程)。 这是一些强大的东西,很容易锁定自己。 这里有一个简短的帖子,但你必须小心。 使用IPtables很容易将自己锁定在服务器之外。请记住,您需要允许在端口22上访问所有服务器,以便您可以登录到它们。 如果你不能连接22端口,你将永远无法再次使用ssh登录。 在修改iptables之前,我总是试图拍摄一台机器的快照,以免永久锁定自己。

这里有一些有关iptables和MySQL的信息。

3)MySQL cnf文件

MySQL有一些配置选项,可以限制任何数据库连接到本地主机 – 也就是说,你可以防止任何远程机器连接。 我不知道如果任何这些选项可以通过IP地址限制远程机器,但值得一看。

4)通过GRANT等进行MySQL访问控制

MySQL允许您对谁可以访问系统中的内容进行非常细致的控制 。 理想情况下,您只能在需要知道的基础上授予信息或功能的访问权限。 在实践中,这可能是一个麻烦,但如果安全是你想要的,你会走得更远。

回答你的问题:

1)是的,你应该尝试限制访问你的数据库服务器的MySQL端口3000 – 还有端口22,这是你用来通过SSH连接的。

2)除了上面提到的,将PHPMyAdmin限制为只有你的IP地址听起来真的很聪明 – 但要确保你不会意外地锁定自己 。 我也强烈建议你禁用SSH连接的密码访问,强制使用密钥对。你可以在google上找到很多例子 。

什么是防止我的数据库服务器发出传出的请求和接收来自101.432.XX.XX的传入请求的最佳方法? 关闭所有的端口 3000有助于实现这一目标?

如果你没有访问单独的防火墙,我会使用IP表。 在这方面有很多管理人员可以为你服务。 所以是的。 请记住,如果您使用的是IPtables,请确保您有一种通过OOB访问服务器的方法(简称带外,这意味着访问它的方式是,如果您在IP表中犯了错误,仍然可以访问它通过控制台/远程手/ IPMI等)

接下来,创建用户时,您应该只允许该子网范围加上用户/通过身份验证。

是否有任何其他的Linux环境,可以提高安全性? 我已经采取了非常基本的步骤来保护我的phpmyadmin门户网站(链接到MySQL数据库),例如限制只能访问我的个人IP地址。

Ubuntu提供了一个名为AppArmor的东西 。 我会调查。 这可以有助于防止一些恶作剧。 另一个选择是SELinux。

此外,采取更多的步骤与phpmyadmin。 这是我们正在构建的安全工具链中最薄弱的一环。

要访问数据库服务器,需要使用SSH密钥(本身受密码保护)。

如果安全问题,我不会使用SSH密钥样式访问。 相反,我会使用MySQL本地支持SSL证书认证 。 这里现在用phpmyadmin配置它。