项目场景:
有些小伙伴在不想升级mysql的情况下
可以使用 firewalld 增强防火墙策略的方式进行修复
问题描述
解决方案:
可以使用 firewalld 或 iptables 限制ip以及端口访问,以下用 firewalld 举例
1.要查看 firewalld 的状态,可以使用以下命令:
sudo firewall-cmd --state
这将显示防火墙的当前状态。如果防火墙正在运行,输出将是:
running
如果防火墙没有运行,则会显示:
not running
此外,你还可以使用以下命令来查看防火墙的详细信息,包括当前使用的区域和规则:
sudo firewall-cmd --list-all
这个命令会显示当前默认区域的所有配置项,包括已允许的服务、开放的端口和其他规则。
2.启动防火墙
sudo systemctl start firewalld
如果需要重新启用防火墙在系统启动时自动启动:
sudo systemctl enable firewalld
3.限制端口访问的基本操作(我这边使用的是方法4)
方法 1:关闭特定端口
如果想要关闭某个特定端口,可以使用 --remove-port 选项。例如,如果要关闭端口 8080:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
这将移除 TCP 协议下的 8080 端口,并使修改永久生效(即重启防火墙后仍然有效)。
要应用更改,需要重新加载 firewalld:
sudo firewall-cmd --reload
方法 2:打开特定端口
如果想要打开特定端口,可以使用 --add-port 选项。例如,要打开 8080 端口:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
同样,这会使该端口在指定区域内永久打开。记得执行 reload 来应用更改。
sudo firewall-cmd --reload
方法 3:拒绝访问特定端口
如果你希望完全拒绝某个端口的访问,可以使用 rich rules(复杂规则)来配置。例如,拒绝 8080 端口的访问:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" port protocol="tcp" port="8080" reject' --permanent
方法 4:允许特定IP访问某端口
如果想让某些 IP 地址能够访问某个端口,而其他所有人都不能访问,可以使用 rich rules 来限制。例如,只允许 192.168.1.100 访问端口 8080:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="8080" accept' --permanent
这样只有 192.168.1.100 可以访问 8080 端口,其他所有地址的访问都会被拒绝。
总结
通过 firewalld,你可以非常灵活地管理端口访问权限。常用的操作包括:
- 使用 --add-port 和 --remove-port 来打开或关闭端口。 使用 rich rules
- 来实现更加精细的端口访问控制,如按 IP 地址、协议或端口拒绝或接受流量。
不要忘记在更改配置后使用 --reload 命令使配置生效。