O Centos 7 está usando firewalld
por padrão. Atualmente, é uma interface de nível superior para o firewall fornecido pelo kernel iptables
. Embora nenhum conhecimento real de iptables
seja solicitado a usar firewalld
, uma boa compreensão disso pode certamente ajudar. A interface principal para controlar firewalld
é o comando firewall-cmd
. Quando este comando é usado com --permanent
, ele afetará apenas a configuração e não terá efeito visível (até que um recarregamento, um serviço seja reiniciado ou uma reinicialização). Quando esta opção não está presente, ela só terá efeitos imediatamente visíveis, sem alterar a configuração salva. Outras interfaces existem, por exemplo, uma GUI firewall-config
.
firewalld
tem muitos conceitos abstratos, como zonas . Por padrão, a zona pública está em uso, mas muitos são predefinidos (confiável, trabalho, dmz ...), cada um tendo uma função de uso e incluindo algumas configurações predefinidas (por exemplo: ssh é permitido por padrão na zona pública). Para um acesso de serviço restrito apenas a fontes específicas, é preferível usar uma zona alternativa (que pública). Talvez uma zona predefinida deva ser eleita, mas enfim, vamos criar uma nova, amarrá-la com uma fonte (IP de MachineB) e permitir a porta TCP 5044. Digamos que o IP de MachineB seja 10.0.3.66
(uma outra fonte válida seria exemplo, toda a LAN como fonte, para este exemplo, que seria 10.0.3.0/24
):
# firewall-cmd --permanent --new-zone peervm
# firewall-cmd --permanent --zone peervm --add-source 10.0.3.66
# firewall-cmd --permanent --zone peervm --add-port 5044/tcp
Os efeitos na configuração são visíveis, por exemplo:
# egrep -r '10.0.3.66|5044' /etc/firewalld
/etc/firewalld/zones/peervm.xml.old: <source address="10.0.3.66"/>
/etc/firewalld/zones/peervm.xml: <source address="10.0.3.66"/>
/etc/firewalld/zones/peervm.xml: <port protocol="tcp" port="5044"/>
A alteração é ativada com este comando:
# firewall-cmd --reload
success
Isso reconstruirá as regras de iptables
subjacentes, com os efeitos visíveis, por exemplo, com:
# iptables-save |egrep '10.0.3.66|5044'
-A POSTROUTING_ZONES_SOURCE -d 10.0.3.66/32 -g POST_peervm
-A PREROUTING_ZONES_SOURCE -s 10.0.3.66/32 -g PRE_peervm
-A PREROUTING_ZONES_SOURCE -s 10.0.3.66/32 -g PRE_peervm
-A PREROUTING_ZONES_SOURCE -s 10.0.3.66/32 -g PRE_peervm
-A FORWARD_IN_ZONES_SOURCE -s 10.0.3.66/32 -g FWDI_peervm
-A FORWARD_OUT_ZONES_SOURCE -d 10.0.3.66/32 -g FWDO_peervm
-A INPUT_ZONES_SOURCE -s 10.0.3.66/32 -g IN_peervm
-A IN_peervm_allow -p tcp -m tcp --dport 5044 -m conntrack --ctstate NEW -j ACCEPT
O uso de uma camada de abstração pode gerar muitas regras padronizadas, como acima, para o que poderia ser basicamente feito com apenas uma regra iptables
(colocar entre algumas regras padrão não mostradas aqui):
# iptables -I INPUT -s 10.0.3.66/32 -p tcp --dport 5044 -j ACCEPT
Assim, quando proficiente com iptables
, nos casos mais simples, ou no outro extremo do espectro, para casos muito complexos não facilmente cobertos com firewalld
, deve-se considerar o uso de regras iptables
diretas com outro conjunto de ferramentas de configuração salvas, por exemplo, no CentOS usando iptables-services
em vez de firewalld
.