Firewall Rocky
Введение
firewalld - это инструмент управления брандмауэром для операционных систем Linux.
Он предоставляет функции брандмауэра, выступая в качестве интерфейса для платформы netfilter ядра Linux с помощью утилиты nftables
userspace (до версии v0.6.0
iptables backend),
выступая в качестве альтернативы программе командной строки nft.
То есть в CentOS 7 firewalld это интерфейс для iptables (legacy)
В Rocky Linux
или CentOS 8 это интерфейс для iptables (nf_tables), подробнее про iptables
- здесь
Имя firewalld соответствует соглашению Unix об именовании системных демонов, добавляя букву "d".
firewalld написан на
Python
.
Предполагалось, что он будет перенесен на
C++
, но проект переноса был заброшен в январе 2015 года.
Проверить текущий статус
Чтобы проверить статус firewalld выполните
sudo firewall-cmd --state
Возможные варианты:
running
not running
Проверить статус с помощью systemctl:
sudo systemctl status -l firewalld
● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2024-10-07 00:00:01 EEST; 2h 55min ago 1728320002 Docs: man:firewalld(1) Main PID: 783 (firewalld) Tasks: 2 CGroup: /system.slice/firewalld.service └─783 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid Oct 07 19:55:22 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon... Oct 07 19:55:22 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon. Oct 07 19:55:22 localhost.localdomain firewalld[783]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
Перезагрузка
Чтобы перезагружить настройки firewalld выполните
firewall-cmd --reload
success
Перезапустить сервис через systemctl
systemctl restart firewalld
Выключить firewall
Чтобы остановить firewalld выполните
systemctl stop firewalld
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги
Зоны
Зона по умолчанию
firewall-cmd --get-default-zone
public
Список активных зон
firewall-cmd --get-active-zones
public interfaces: enp0s3 enp0s8
Все доступные зоны
firewall-cmd --get-zones
block dmz drop external home internal public trusted work
Полный список
sudo firewall-cmd --list-all
public (active) target: default icmp-block-inversion: no interfaces: enp0s3 enp0s8 sources: services: dhcpv6-client http https ssh ports: 8443/tcp 3389/tcp 2222/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Переназначить интерфейс в другую зону
Выберите интерфейс и выполните
firewall-cmd --permanent --zone=public --remove-interface=enp0s10
The interface is under control of NetworkManager and already bound to the default zone The interface is under control of NetworkManager, setting zone to default. success
Интерфейс enp0s8 будет добавлен в зону internal, enp0s10 в external
firewall-cmd --permanent --zone=internal --add-interface=enp0s8
The interface is under control of NetworkManager, setting zone to 'internal'. success
firewall-cmd --permanent --zone=external --add-interface=enp0s10
The interface is under control of NetworkManager, setting zone to 'external'. success
Осталось перезагрузить firewalld и проверить результат
systemctl restart firewalld
firewall-cmd --get-active-zones
internal interfaces: enp0s8 external interfaces: enp0s10 public interfaces: enp0s9
Можно задать зону по умолчанию. В данном примере дефолтной зоной назначена external
firewall-cmd --set-default-zone=external
success
firewall-cmd --get-default-zone
external
Каждую зону можно изучить отдельно
firewall-cmd --list-all --zone=external
external (active) target: default icmp-block-inversion: no interfaces: enp0s10 sources: services: ssh ports: protocols: masquerade: yes forward-ports: source-ports: icmp-blocks: rich rules:
Удалить сервис
Чтобы удалить доступ, например, по ssh выполните
firewall-cmd --permanent --zone=external --remove-service=ssh
success
firewall-cmd --reload
firewall-cmd --list-all --zone=external
external (active) target: default icmp-block-inversion: no interfaces: enp0s10 sources: services: ports: protocols: masquerade: yes forward-ports: source-ports: icmp-blocks: rich rules:
Удалить несколько сервисов одновременно
Список сервисов в зоне можно изучить выполнив
firewall-cmd --list-services --zone=internal
dhcpv6-client mdns nfs samba-client ssh
Чтобы удалить сразу несколько сервисов перечислите из через запятую внутри фигурных скобок
firewall-cmd --remove-service={dhcpv6-client,mdns,samba-client} --zone=internal --permanent
success
firewall-cmd --list-services --zone=internal
nfs ssh
Добавить сервис
Чтобы добавить сервис, например, nfs выполните
firewall-cmd --permanent --add-service=nfs --zone=internal
success
firewall-cmd --reload
firewall-cmd --list-all --zone=internal
internal (active) target: default icmp-block-inversion: no interfaces: enp0s8 enp0s9 sources: services: dhcpv6-client mdns nfs samba-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Добавить несколько сервисов одновременно
Список сервисов в зоне можно изучить выполнив
firewall-cmd --list-services --zone=internal
nfs ssh
Чтобы добавить сразу несколько сервисов перечислите из через запятую внутри фигурных скобок
firewall-cmd --add-service={high-availability,http} --zone=internal --permanent
success
firewall-cmd --reload
firewall-cmd --list-services --zone=internal
high-availability http nfs ssh
Конфигурационные файлы для сервисов
Файлы для сервисов, созданных системой, находятся в
/usr/lib/firewalld/services/
ls /usr/lib/firewalld/services/
amanda-client.xml high-availability.xml nfs3.xml slp.xml amanda-k5-client.xml https.xml nfs.xml smtp-submission.xml amqps.xml http.xml nmea-0183.xml smtps.xml amqp.xml imaps.xml nrpe.xml smtp.xml apcupsd.xml imap.xml ntp.xml snmptrap.xml audit.xml ipp-client.xml nut.xml snmp.xml bacula-client.xml ipp.xml openvpn.xml spideroak-lansync.xml bacula.xml ipsec.xml ovirt-imageio.xml squid.xml bgp.xml ircs.xml ovirt-storageconsole.xml ssh.xml bitcoin-rpc.xml irc.xml ovirt-vmconsole.xml steam-streaming.xml bitcoin-testnet-rpc.xml iscsi-target.xml plex.xml svdrp.xml bitcoin-testnet.xml isns.xml pmcd.xml svn.xml bitcoin.xml jenkins.xml pmproxy.xml syncthing-gui.xml ceph-mon.xml kadmin.xml pmwebapis.xml syncthing.xml ceph.xml kerberos.xml pmwebapi.xml synergy.xml cfengine.xml kibana.xml pop3s.xml syslog-tls.xml condor-collector.xml klogin.xml pop3.xml syslog.xml ctdb.xml kpasswd.xml postgresql.xml telnet.xml dhcpv6-client.xml kprop.xml privoxy.xml tftp-client.xml dhcpv6.xml kshell.xml proxy-dhcp.xml tftp.xml dhcp.xml ldaps.xml ptp.xml tinc.xml distcc.xml ldap.xml pulseaudio.xml tor-socks.xml dns.xml libvirt-tls.xml puppetmaster.xml transmission-client.xml docker-registry.xml libvirt.xml quassel.xml upnp-client.xml docker-swarm.xml lightning-network.xml radius.xml vdsm.xml dropbox-lansync.xml llmnr.xml redis.xml vnc-server.xml elasticsearch.xml managesieve.xml RH-Satellite-6-capsule.xml wbem-https.xml etcd-client.xml matrix.xml RH-Satellite-6.xml wbem-http.xml etcd-server.xml mdns.xml rpc-bind.xml wsmans.xml finger.xml minidlna.xml rsh.xml wsman.xml freeipa-ldaps.xml mongodb.xml rsyncd.xml xdmcp.xml freeipa-ldap.xml mosh.xml rtsp.xml xmpp-bosh.xml freeipa-replication.xml mountd.xml salt-master.xml xmpp-client.xml freeipa-trust.xml mqtt-tls.xml samba-client.xml xmpp-local.xml ftp.xml mqtt.xml samba-dc.xml xmpp-server.xml ganglia-client.xml mssql.xml samba.xml zabbix-agent.xml ganglia-master.xml ms-wbt.xml sane.xml zabbix-server.xml git.xml murmur.xml sips.xml gre.xml mysql.xml sip.xml
Файлы для сервисов, которые создал сам пользователь можно увидеть выполнив
ls /etc/firewalld/services/
По умолчанию там пусто. О том как создавать свои сервисы читайте ниже.
Создать новый сервис
firewall-cmd --permanent --new-service="puppet"
success
ls /etc/firewalld/services/
puppet.xml
restorecon /etc/firewalld/services/puppet.xml
ls -la /etc/firewalld/services/ | grep puppet
-rw-r--r--. 1 root root 60 Jan 11 19:00 puppet.xml
chmod 640 /etc/firewalld/services/puppet.xml
ls -la /etc/firewalld/services/ | grep puppet
-rw-r-----. 1 root root 60 Jan 11 19:00 puppet.xml
Сконфигурировать сервис
vi /etc/firewalld/services/puppet.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Puppet</short>
<port protocol="tcp" port="443"/>
<port protocol="tcp" port="8140"/>
</service>
masquerade
Допустим хост выходит во внешнюю сеть через enp0s9 итерфейс роутера.
Чтобы запросы проходили адекватно нужно этот интерфейс перенести в зону со включённым masquarade
или включить его в текущей зоне
firewall-cmd --add-masquerade --zone=public --permanent
firewall-cmd --reload
Выключить masquerade
firewall-cmd --remove-masquerade --zone=public --permanent
firewall-cmd --reload
Список открытых портов
Список открытых портов
firewall-cmd --list-ports
8443/tcp 3389/tcp 2222/tcp
Открыть порт
sudo firewall-cmd --zone=public --add-port=19999/tcp --permanent
sucess
Затем нужно перезапустить firewall
sudo firewall-cmd --reload
sucess
Проверка
sudo firewall-cmd --list-ports
8443/tcp 3389/tcp 2222/tcp 19999/tcp
Если вам вдруг стало интересно - что за порт 19999 - его использует Locust
Заблокировать порт
sudo firewall-cmd --remove-port=22/tcp --permanent
sudo firewall-cmd --remove-port=53/udp --permanent
sudo firewall-cmd --reload
Добавить IP в "белый" список
Чтобы добавить один IP адрес
sudo firewall-cmd --permanent --add-source=192.168.56.101
Чтобы добавить всю подсеть 255.255.255.0 выполнить
sudo firewall-cmd --permanent --add-source=192.168.2.0/24
sudo firewall-cmd --reload
Удалить IP из "белого" списка
Чтобы удалить один IP адрес
sudo firewall-cmd --permanent --remove-source=192.168.2.50
sudo firewall-cmd --reload
Чтобы удалить всю подсеть 255.255.255.0 выполнить
sudo firewall-cmd --permanent --remove-source=192.168.2.50/24
sudo firewall-cmd --reload
Заблокировать IP
Чтобы заблокировать входящие соединения с определённого IP адреса воспользуйтесь rich-rule
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.2.50' reject"
sudo firewall-cmd --reload
Посмотреть все rich-rules
Чтобы посмотреть все существующие rich-rules выполните
sudo firewall-cmd --list-rich-rules
rule family="ipv4" source address="192.168.56.109" reject
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги
Удалить правило
Чтобы удалить существующий rich-rule выполните
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.56.109" reject'
sudo firewall-cmd --reload
sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept'