在 Linux 系统中,可以使用 firewalld
或者 iptables
来设置防火墙规则,以阻止特定 IP 地址连接到 MySQL 的默认端口 3306。下面是针对这两种工具的设置方法。
使用 firewalld 设置黑名单
firewalld
是一个动态管理防火墙的工具,它支持网络/防火墙区域(zones)的概念,可以为不同的连接和接口定义规则。
1. 安装并启动 firewalld
确保 firewalld
已安装并且正在运行:
sudo systemctl start firewalld
sudo systemctl enable firewalld
2. 添加拒绝规则
要拒绝来自某个特定 IP 地址(例如:192.168.1.100
)对 3306 端口的访问,你可以添加一条直接规则:
sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.1.100 -p tcp --dport 3306 -j REJECT
这里:
--direct
表示我们直接操作内核规则。--add-rule
后面跟着的是规则的具体参数。ipv4 filter INPUT
指定这是 IPv4 的输入链规则。0
是规则优先级,数字越小优先级越高。-s 192.168.1.100
是源地址。-p tcp --dport 3306
指定协议和目标端口号。-j REJECT
表示拒绝连接。
3. 使规则永久生效
为了让这条规则在系统重启后仍然有效,需要将其标记为永久:
sudo firewall-cmd --runtime-to-permanent
或者直接添加永久规则:
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -s 192.168.1.100 -p tcp --dport 3306 -j REJECT
sudo firewall-cmd --reload
使用 iptables 设置黑名单
如果你更倾向于使用 iptables
,可以通过以下命令来实现相同的效果:
1. 检查 iptables 状态
首先确认 iptables
是否已经启用:
sudo iptables -L -n
2. 添加拒绝规则
要拒绝来自 192.168.1.100
对 3306 端口的访问,可以添加如下规则:
sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 3306 -j REJECT
3. 保存规则
为了让这些规则在系统重启后仍然有效,你需要保存它们。根据你的发行版不同,保存方式可能有所差异:
对于基于 Red Hat 的系统(如 CentOS, RHEL):
sudo service iptables save
对于 Debian 和 Ubuntu 系统:
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
注意事项
- 测试:在应用新的防火墙规则之前,最好先在一个非生产环境中进行测试,确保规则按预期工作。
- 日志记录:考虑添加日志记录规则以便于故障排除。例如,在
REJECT
规则之前插入一条日志记录规则。 - 备份现有规则:在修改防火墙规则前,建议备份当前配置,以防出现问题时能够快速恢复。