如何保护包含 MySQL 数据库的简单 Linux 服务器?

如何保护包含 MySQL 数据库的简单 Linux 服务器?

这是一个初学者的问题,但我已经浏览过本网站上的许多问题,并没有找到一个简单、直接的答案:

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

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

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

我想知道:

  1. 防止我的数据库服务器仅从 101.432.XX.XX 发出传出请求和接收传入请求的最佳方法是什么?关闭所有端口(例如 3000)是否有助于实现此目的?

  2. Linux 环境中还有其他可以增强安全性的附加功能吗?

我已经采取了一些非常基本的步骤来保护我的 phpmyadmin 门户(链接到 MySQL 数据库),例如限制仅我的个人 IP 地址的访问。

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

答案1

要限制连接到您的 101.432.xx IP,您需要从 开始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

如果您担心限制出站(出口)流量,那么您将在 OUTPUT 链上使用规则;然而,这很棘手。出口过滤涉及您的服务器需要用来与外界通信的每项服务的规则。DNSNTPHTTP/HTTPS(用于更新),SMTP用于管理员电子邮件、系统日志流量等。出口过滤的优点在于,一旦您建立了“正常”的出口流量,对异常发出警报就变得轻而易举。一个简单的入门示例:

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调查)
  • 及时了解所有当前补丁
  • 监控异常(iptables -A INPUT -j LOG,fail2ban 等)
  • ipv6如果不需要则删除(ipv6.disable=1在内核启动参数中)
  • PubKeyAuthentication yesPasswordAuthentication nosshd_config 中使用
  • 限制通过pamin登录/etc/security/access.conf
  • 以某种方式加密所有网络流量**
  • 将系统日志存储在远程系统日志服务器上**
  • 定期扫描系统中是否存在恶意软件/不良权限/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/

** 注意:考虑运行你的mysql流量隧道

答案2

假设您位于 NAT 后面,您可以在 Mysql 配置中更改绑定地址。

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

这将绑定 MySql 以仅监听该单个地址和端口

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

最后在防火墙中添加源策略以丢弃来自内部 IP 的所有数据包。我有一个类似的设置,用于监控服务器。

以下是一些用于强化 Ubuntu 服务器的其他资源链接

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

相关内容