这是一个初学者的问题,但我已经浏览过本网站上的许多问题,并没有找到一个简单、直接的答案:
我正在设置一个运行 Ubuntu 的 Linux 服务器来存储 MySQL 数据库。
该服务器的安全性尽可能重要,据我所知,我主要担心的是传入的 DoS/DDoS 攻击和对服务器本身的未经授权的访问。
数据库服务器仅在端口 3000 上接收来自一个特定 IP(101.432.XX.XX)的传入数据。我只希望该服务器能够接收来自该 IP 的传入请求,并阻止服务器发出任何传出请求。
我想知道:
防止我的数据库服务器仅从 101.432.XX.XX 发出传出请求和接收传入请求的最佳方法是什么?关闭所有端口(例如 3000)是否有助于实现此目的?
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 链上使用规则;然而,这很棘手。出口过滤涉及您的服务器需要用来与外界通信的每项服务的规则。DNS
,NTP
,HTTP/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 yes
在PasswordAuthentication no
sshd_config 中使用- 限制通过
pam
in登录/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 强化 希望这些能有所帮助