CentOS 7 引入 firewalld 動態管理防火牆,支持區域、服務、端口、富規則等多維度配置,且修改即時生效無需重啟服務。本文以「PostgreSQL HA 集群」為場景,演示內網/公網分區開放端口、限定來源 IP 訪問的完整操作流程。
| 服務 | 端口/協議 | 備註 |
|---|---|---|
| PostgreSQL | 5432/tcp | 建議修改非默認端口 |
| pcsd | 2224/tcp | 集群管理 |
| corosync | 5405/udp | 集群通訊 |
服務器雙網卡:eno16777736 (公網)、eno33554984 (內網),初始均綁定 public 區域。
firewall-cmd --list-all
# 即時生效
firewall-cmd --zone=internal --change-interface=eno33554984
# 永久生效(寫入網卡配置文件)
echo "ZONE=internal" >> /etc/sysconfig/network-scripts/ifcfg-eno33554984
firewall-cmd --permanent --zone=internal --add-port=5432/tcp
firewall-cmd --permanent --zone=internal --add-port=2224/tcp
firewall-cmd --permanent --zone=internal --add-port=5405/udp
firewall-cmd --reload
# 驗證
firewall-cmd --list-all --zone=internal
# 僅允許 192.168.0.213 訪問公網 5432 端口
firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family=ipv4 source address=192.168.0.213/32 port protocol=tcp port=5432 accept'
firewall-cmd --reload
| 操作 | 命令 |
|---|---|
| 查看所有區域 | firewall-cmd --get-zones |
| 查看活躍區域 | firewall-cmd --get-active-zones |
| 查看指定區域詳情 | firewall-cmd --list-all --zone=internal |
| 添加服務(如 http) | firewall-cmd --permanent --zone=public --add-service=http |
| 移除端口 | firewall-cmd --permanent --zone=public --remove-port=8080/tcp |
| 緊急封鎖 IP | firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=1.2.3.4 reject' |
| 查看富規則 | firewall-cmd --list-all --zone=public | grep rich |
--permanent 並 --reload,防重啟失效。熟練掌握 firewalld,讓服務器安全防線既嚴密又靈活。