1. 首页 > 技术教程 > 正文

Firewalld 教程:IDC 常用端口放行与拦截策略

Firewalld 教程:IDC 常用端口放行与拦截策略

搞 IDC 运维的,最烦的就是防火墙规则配错导致服务挂了,或者被恶意 IP 扫端口后直接打穿。别慌,这篇 Firewalld 教程直接上实战命令,从 SSH、HTTP、MySQL 端口放行,到封禁恶意 IP、排查 SELinux 冲突,一步到位。不管你是刚入行的 Linux 新手,还是被客户扯皮的运维老哥,照着操作就行。

Firewalld 教程:IDC 常用端口放行与拦截策略的图片

一、Firewalld 基础操作:先别急着改规则

很多人在主机选看 Linux 教程时,上来就 `firewall-cmd –add-port`,结果重启后规则丢了。Firewalld 默认分 runtime(临时)和 permanent(永久)两种模式,不改 permanent 等于白干。

1. 查看当前默认区域和已放行端口

firewall-cmd –get-default-zone # 默认一般是 public
firewall-cmd –list-all # 列出当前区域所有规则

2. 永久放行一个端口(以 SSH 22 端口为例)

firewall-cmd –zone=public –add-port=22/tcp –permanent
firewall-cmd –reload # 重载配置,使永久规则生效

老鸟叮嘱:千万别在远程 SSH 窗口里直接 `–add-port=22/tcp` 而不加 `–permanent`,万一你切了 zone 或重启 firewalld,SSH 端口会被立刻关闭,你就只能去机房或 IPMI 救机器了。

二、IDC 常用端口放行实战

IDC 服务器最常见的端口就是 HTTP(80)、HTTPS(443)、MySQL(3306),以及一些自定义服务。下面直接给命令,别问为什么,照着敲。

1. 放行 HTTP 和 HTTPS

firewall-cmd –zone=public –add-service=http –permanent
firewall-cmd –zone=public –add-service=https –permanent
firewall-cmd –reload

2. 放行 MySQL 端口(仅限特定来源 IP)

生产环境绝对不能把 MySQL 3306 端口对全网开放,否则就是找打。

firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.100″ port protocol=”tcp” port=”3306″ accept’ –permanent
firewall-cmd –reload

3. 放行自定义端口(例如 8080)

firewall-cmd –zone=public –add-port=8080/tcp –permanent
firewall-cmd –reload

排障区:放行端口后服务仍然连不上?先检查 SELinux,再检查云服务商的安全组。很多 VPS 厂商的防火墙是独立于系统 Firewalld 的,两头都得放行。

三、恶意 IP 拦截策略:别等被打穿了再后悔

IDC 运维中,经常有 IP 疯狂扫端口或暴力破解 SSH。Firewalld 的 rich-rule 可以直接封禁,比 iptables 省事。

1. 封禁单个恶意 IP

firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”10.0.0.5″ drop’ –permanent
firewall-cmd –reload

2. 封禁整个 C 段(/24)

firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.0/24″ drop’ –permanent
firewall-cmd –reload

3. 查看被封禁的 IP 列表

firewall-cmd –zone=public –list-rich-rules

老鸟叮嘱:封禁前一定要确认这个 IP 不是你自己的跳板机或 CDN 节点,否则封完自己进不去,只能叫机房重启。

四、SELinux 与 Firewalld 的冲突排障

很多 Linux 小白遇到端口放行后服务还是连不上,第一反应是 Firewalld 没配好,其实八成是 SELinux 在搞鬼。

1. 临时关闭 SELinux(排障用,别长期关)

setenforce 0

2. 永久关闭 SELinux(不推荐但可以应急)

sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config

重启生效

3. 正确做法:放行 SELinux 对端口的上下文

semanage port -a -t http_port_t -p tcp 8080 # 放行 8080 端口给 httpd 用

排障区:如果 `semanage` 命令找不到,先装 `policycoreutils-python-utils` 包。

五、FAQ:Firewalld 实战常见问题

Q1: Firewalld 放行端口后,外部还是访问不了怎么办?

A: 先确认 Firewalld 是否在运行(`systemctl status firewalld`),再检查 SELinux 状态(`getenforce`),最后看云服务商的安全组或网络 ACL 有没有放开。

Q2: 怎么临时放行一个端口,不写入永久规则?

A: 去掉 `–permanent` 参数即可,例如 `firewall-cmd –add-port=8080/tcp`。服务器重启或 `firewall-cmd –reload` 后规则会丢失。

Q3: Firewalld 和 iptables 哪个更好用?

A: 新版 CentOS/RHEL 默认用 Firewalld,配置更直观。但如果你习惯 iptables 语法,可以 `systemctl mask firewalld` 后换回 iptables。

Q4: 封禁 IP 后,怎么解除?

A: 用 `firewall-cmd –permanent –remove-rich-rule` 删除对应规则,然后重载。

Q5: Firewalld 规则太多会不会影响性能?

A: 规则数量在几百条以内基本无感。如果上万条,建议用 nftables 代替。

Q6: 为什么我放行了 MySQL 3306 端口,远程还是连不上?

A: 确认 MySQL 配置文件 `/etc/my.cnf` 中 `bind-address` 是否设置为 `0.0.0.0`,默认只监听 127.0.0.1。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9493.html 商家投稿邮箱:zhujixuanblog@qq.com