保护一个拥有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密钥(本身受密码保护)。

要限制连接到你的IP地址101.432.xx,你需要从iptables开始。 端口3306(默认的mysql端口)的基本防火墙设置可能如下所示:

 # allow any localhost interface traffic iptables -A INPUT -i lo -j ACCEPT # allow any related traffic to existing connections iptables -A INPUT -m state --state related,established -j ACCEPT # only allow certain host to mysql iptables -A INPUT -p tcp --dport 3306 -s 101.232.155.155 -j ACCEPT # drop all traffic by default iptables -P INPUT DROP # oh, add your ssh source address to allow remote connections iptables -I INPUT 3 -p tcp --dport 22 -s 203.203.203.203 -j ACCEPT 

如果您担心限制出站(出站)stream量,那么您将使用OUTPUT链上的规则; 它变得棘手,但是。 出口过滤涉及您的服务器需要用于与外部世界进行通信的每项服务的规则。 DNSNTPHTTP/HTTPS (用于更新),用于pipe理电子邮件的SMTP ,系统日志通信等等。 出口过滤的美妙之处在于,一旦build立了“正常的”出口stream量,对exception情况的警报就变成了一个简单的胜利。 一个简单的例子开始:

 iptables -P OUTPUT ACCEPT iptables -F OUTPUT iptables -A OUTPUT -o lo -j ACCEPT iptables -A OUTPUT -m state --state related,established -j ACCEPT iptables -A OUTPUT -p icmp -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -p udp --dport 123 -j ACCEPT iptables -A OUTPUT -p tcp -d 111.222.33.44 --dport 25 -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT iptables -P OUTPUT DROP 

您可能需要禁用80,443直到您实际上在服务器上执行更新。 否则,恶意软件只能从其中一个端口出去,而你不知道。 使用“允许的”目标IP地址作为出口真的是最好的方法(如上面的--dport 25行)。

一般来说,服务器硬化是一个更为复杂的过程。 你现在正想着如何将连接限制到只有需要的地步。

也考虑以下内容:

  • 删除服务器操作不需要的所有额外软件
  • 限制运行服务( netstat -topnavelu来调查)
  • 保持最新的所有补丁
  • 监视exception( iptables -A INPUT -j LOG ,fail2ban等)
  • 如果不需要,则删除ipv6ipv6.disable=1在内核引导arg中)
  • 在sshd_config中使用PubKeyAuthentication yesPasswordAuthentication no
  • /etc/security/access.conf通过pam限制login
  • 以一种或另一种方式encryption所有净stream量**
  • 在远程系统日志服务器上存储系统日志
  • 定期扫描系统中的恶意软件/坏权限/ SUID文件等(如/ var / www中)

那里有很多好的指南,但是对于一些新手来说,这可能是压倒性的。 这两个似乎很好地覆盖了基地:

https://www.digitalocean.com/community/tutorials/an-introduction-to-securing-your-linux-vps

https://www.rootusers.com/23-hardening-tips-to-secure-your-linux-server/

**注意:考虑在Stunnel上运行你的mysqlstream量。

假设你在NAT后面,在你的Mysqlconfiguration中,你可以改变你的绑定地址。

 #Replace X's with actual IP address bind-address=<internal-ip> port=3000 

这将绑定MySql只侦听单个地址和端口

然后,我会添加一个目标NAT规则来在101.432.XX.XX:3000之间转换为内部IP。

最后在你的防火墙中添加一个源策略来丢弃所有来自internal-ip的数据包。 我有一个类似的设置与我看过的服务器。

这里有几个链接到其他资源用于强化Ubuntu服务器

http://bodhizazen.net/Tutorials/SSH_security – Hardening SSH https://www.digitalocean.com/community/tutorials/how-to-secure-mysql-and-mariadb-databases-in-a-linux-vps – MySQL强化希望这些帮助