假設需要在CentOS 7上開放postgres,pcsd和corosync(這些是一個PostgreSQL HA集群的組成部分)的防火牆端口。下面是執行過程。
5432是postgrs的默認端口,容易被探測到,建議改成非默認端口。
機器上有兩個網絡設備,一個是內網的一個公網的,這兩個網絡設備默認都綁在public區域。
[root@node1 ~]# firewall-cmd --list-allpublic (default, active) interfaces: eno16777736 eno33554984 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: echo-reply rich rules:
現在我們要在內網網絡上開放PostgreSQL HA集群需要用的端口。 上面的eno33554984就是內部網絡,先將其移到internal區域
firewall-cmd --zone=internal --change-interface=eno33554984
再在相應的ifcfg文件中添加"ZONE=internal"使其永久生效。
echo "ZONE=internal" >> /etc/sysconfig/network-scripts/ifcfg-eno33554984
開啟PostgreSQL,pcsd和corosync的端口。
firewall-cmd --permanent --zone=internal --add-port=5432/tcpfirewall-cmd --permanent --zone=internal --add-port=2224/tcpfirewall-cmd --permanent --zone=internal --add-port=5405/udpfirewall-cmd --reload[root@node1 ~]# firewall-cmd --list-all --zone=internalinternal (active) interfaces: eno33554984 sources: services: dhcpv6-client ipp-client mdns samba-client ssh ports: 5432/tcp 2224/tcp 5405/udp masquerade: no forward-ports: icmp-blocks: rich rules:
需要在公網上開放postgres端口給特定的機器訪問(比如192.168.0.213,當然這個地址是假的),可以使用rich-rule。
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