Here's what I did. I'm just using port 111/tcp as a test, since this is a brand new host and 111 and 22 are the only listening ports.
I would think that the uwo zone should still apply, since I'm still connecting from a host defined in the source of that zone. But as soon as I create this second zone and give it a (narrower) source that also matches the IP that I'm connecting from, it seems to use only that zone, ignoring the first zone with the broader source.
I've tried to search for a solution to this, but without any error messages or having any keywords to search on, it's hard to even find others who have run into this problem. A coworker of mine has also run into this same problem, so I can't be the first.
Here's the resulting config (the rich rules are from our default build scripts. We'd like to replace them with zones if we can solve this current problem):
[root@jiradev aculver]# firewall-cmd --zone=uwo --list-all
uwo (active)
target: default
icmp-block-inversion: no
interfaces:
services:
ports: 111/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@jiradev aculver]# firewall-cmd --zone=net6 --list-all
net6 (active)
target: default
icmp-block-inversion: no
interfaces:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@jiradev aculver]# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N FORWARD_IN_ZONES
-N FORWARD_IN_ZONES_SOURCE
-N FORWARD_OUT_ZONES
-N FORWARD_OUT_ZONES_SOURCE
-N FORWARD_direct
-N FWDI_net6
-N FWDI_net6_allow
-N FWDI_net6_deny
-N FWDI_net6_log
-N FWDI_public
-N FWDI_public_allow
-N FWDI_public_deny
-N FWDI_public_log
-N FWDI_uwo
-N FWDI_uwo_allow
-N FWDI_uwo_deny
-N FWDI_uwo_log
-N FWDO_net6
-N FWDO_net6_allow
-N FWDO_net6_deny
-N FWDO_net6_log
-N FWDO_public
-N FWDO_public_allow
-N FWDO_public_deny
-N FWDO_public_log
-N FWDO_uwo
-N FWDO_uwo_allow
-N FWDO_uwo_deny
-N FWDO_uwo_log
-N INPUT_ZONES
-N INPUT_ZONES_SOURCE
-N INPUT_direct
-N IN_net6
-N IN_net6_allow
-N IN_net6_deny
-N IN_net6_log
-N IN_public
-N IN_public_allow
-N IN_public_deny
-N IN_public_log
-N IN_uwo
-N IN_uwo_allow
-N IN_uwo_deny
-N IN_uwo_log
-N OUTPUT_direct
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES_SOURCE
-A INPUT -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -j FORWARD_direct
-A FORWARD -j FORWARD_IN_ZONES_SOURCE
-A FORWARD -j FORWARD_IN_ZONES
-A FORWARD -j FORWARD_OUT_ZONES_SOURCE
-A FORWARD -j FORWARD_OUT_ZONES
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -j OUTPUT_direct
-A FORWARD_IN_ZONES -i ens160 -g FWDI_public
-A FORWARD_IN_ZONES -g FWDI_public
-A FORWARD_OUT_ZONES -o ens160 -g FWDO_public
-A FORWARD_OUT_ZONES -g FWDO_public
-A FWDI_net6 -j FWDI_net6_log
-A FWDI_net6 -j FWDI_net6_deny
-A FWDI_net6 -j FWDI_net6_allow
-A FWDI_net6 -p icmp -j ACCEPT
-A FWDI_public -j FWDI_public_log
-A FWDI_public -j FWDI_public_deny
-A FWDI_public -j FWDI_public_allow
-A FWDI_public -p icmp -j ACCEPT
-A FWDI_uwo -j FWDI_uwo_log
-A FWDI_uwo -j FWDI_uwo_deny
-A FWDI_uwo -j FWDI_uwo_allow
-A FWDI_uwo -p icmp -j ACCEPT
-A FWDO_net6 -j FWDO_net6_log
-A FWDO_net6 -j FWDO_net6_deny
-A FWDO_net6 -j FWDO_net6_allow
-A FWDO_public -j FWDO_public_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_public -j FWDO_public_allow
-A FWDO_uwo -j FWDO_uwo_log
-A FWDO_uwo -j FWDO_uwo_deny
-A FWDO_uwo -j FWDO_uwo_allow
-A INPUT_ZONES -i ens160 -g IN_public
-A INPUT_ZONES -g IN_public
-A IN_net6 -j IN_net6_log
-A IN_net6 -j IN_net6_deny
-A IN_net6 -j IN_net6_allow
-A IN_net6 -p icmp -j ACCEPT
-A IN_public -j IN_public_log
-A IN_public -j IN_public_deny
-A IN_public -j IN_public_allow
-A IN_public -p icmp -j ACCEPT
-A IN_public_allow -s
172.20.0.0/22 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
172.29.17.38/32 -p udp -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
129.100.3.110/32 -p udp -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
172.29.17.38/32 -p icmp -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
129.100.3.116/32 -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
129.100.6.0/26 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
129.100.254.233/32 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
129.100.6.192/27 -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
172.29.17.37/32 -p icmp -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
129.100.3.116/32 -p udp -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
129.100.3.110/32 -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
172.29.17.37/32 -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
172.29.17.37/32 -p udp -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -s
172.29.17.38/32 -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A IN_uwo -j IN_uwo_log
-A IN_uwo -j IN_uwo_deny
-A IN_uwo -j IN_uwo_allow
-A IN_uwo -p icmp -j ACCEPT
-A IN_uwo_allow -p tcp -m tcp --dport 111 -m conntrack --ctstate NEW -j ACCEPT