Проброс портов с помощью firewalld в CentOS 7


Firewalld - утилита для конфигурации сетевого firewall`а в Linux, в
 бэкенде использует знакомый большинству iptables, а но более новых системах nftables. 
Использует концепт зон для управления входящим трафиком сети, сетевой интерфейс или диапазон входящих адресов (source address) назначается зоне для её активации в фильтрации сетевого трафика, так же поддерживает работу с ipset. 

Посмотрим работает ли firewalld:

# systemctl is-active firewalld

active

Выведем список всех зон:

# firewall-cmd --get-zones

block dmz drop external home internal public trusted work

Так же посмотрим активные зоны:
# firewall-cmd --get-active-zones

public
  interfaces: eth0

Проверим, какая зона установлена по умолчанию:

# firewall-cmd --get-default-zone

public

Так как по умолчанию установлена зона public, то при добавлении настроек через утилиту firewall-cmd без явного указания этой зоны (--zone=public)все настройки будут производиться в ней.
public

Firewalld проброс порта:

# firewall-cmd --permanent --add-port=8080/tcp

# firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080

# firewall-cmd --reload

# firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 8080/tcp
  protocols: 
  masquerade: no
  forward-ports: port=80:proto=tcp:toport=8080:toaddr=
  source-ports: 
  icmp-blocks: 
  rich rules: 




NAT firewalld: 


# firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=172.31.94.52

# firewall-cmd --reload

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: port=8080:proto=tcp:toport=80:toaddr=172.31.94.52
  source-ports: 
  icmp-blocks: 
  rich rules: 

# firewall-cmd --add-masquerade

Так же в Firewalld есть возможность создавать direct rules, которые используют название таблиц и цепочек iptables:

В том случае, если firewalld на более новых версиях системы, например 8 и выше, использует в бэкенде nftables, тогда передача правил при помощи direct rules (--direct) не доступна

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -m tcp --dport=22 -j ACCEPT 

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --sport=22 -j ACCEPT 

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 9 -j DROP 


# firewall-cmd --reload 

# firewall-cmd --direct --get-all-rules 

ipv4 filter OUTPUT 0 -p tcp -m tcp --dport=22 -j ACCEPT 
ipv4 filter OUTPUT 1 -p tcp -m tcp --sport=22 -j ACCEPT 
ipv4 filter OUTPUT 9 -j DROP 

Важно так же проверить другие зоны и их правила, так как напомню, при назначении сетевого интерфейса или источника диапазона адресов какой-то зоне она начинает быть активна и учавствует в фильтрации сетевого трафика или что-то разрешает согласно настроеных правил:

# firewall-cmd --list-all-zones

block
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

dmz
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

drop
  target: DROP
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

external
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

home
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client mdns samba-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

internal
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client mdns samba-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: port=8080:proto=tcp:toport=80:toaddr=172.31.94.52
  source-ports: 
  icmp-blocks: 
  rich rules: 

trusted
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

work
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 



https://access.redhat.com/solutions/1121463        

Комментарии