Editar o arquivo /etc/firewalld/zones/public.xml (ou o arquivo correspondente a zona que esteja ativa na placa de rede.)
Dentro de “zone” configure uma “rule family” para liberar um serviço ou porta para apenas um IP ou faixa. Exemplo com nome do serviço:
<rule family="ipv4"> <source address="172.16.0.0/30"/> <service name="snmp"/> <accept/> </rule>
Exemplo com a porta:
<rule family="ipv4"> <source address="172.16.0.0/30"/> <port port="3832" protocol="tcp"/> <accept/> </rule>
Outra forma de fazer a liberação acima é usando rich rule, para aplicar os mesmos filtros basta usar os comandos abaixo:
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.0.0/30 service name=snmp accept' --permanent firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.0.0/30 port port=3832 protocol=tcp accept' --permanent firewall-cmd --add-rich-rule='rule family=ipv6 source address="2001:2987:8::/64" service name=mysql accept' --permanent
Após executar qualquer um dos passos acima é necessário reiniciar o firewalld.
firewall-cmd --reload