Что такое Firewalld?
Firewalld – это решение для управления брандмауэром для многих дистрибутивов Linux, включая Ubuntu, Debian, CentOS, RHEL и Fedora.
Он действует как интерфейс для системы фильтрации iptables, предоставляемой ядром Linux.
Он не зависит от протокола, что означает, что он поддерживает IPv4, IPv6, мосты Ethernet и наборы IP.
Основная концепция Firewalld
FirewallD использует зоны и службы вместо цепочек и правил iptables.
Зоны – это набор правил, которые определяют, какой трафик должен быть разрешен в зависимости от уровня доверия к сети, к которой подключены ваши компьютеры.
Сетевые интерфейсы назначают зону для определения поведения, которое должен разрешать брандмауэр.
Firewalld управляется с помощью инструмента командной строки firewall-cmd. Он предоставляет интерфейс для управления временем выполнения и постоянной настройкой.
Firewalld Зоны
В Firewalld есть 9 предопределенных зон в зависимости от уровня доверия в порядке возрастания.
Краткое объяснение каждой зоны показано ниже:
- Drop: эта зона имеет наименьший уровень доверия и используется для удаления всего входящего трафика без отправки подтверждения отправителю.
- Block: эта зона очень похожа на зону Drop, входящий трафик отклоняется, и отправитель получает сообщение.
- Public: разрешает трафик из определенных общедоступных сетей.
- External: эта зона используется, когда ваша система выступает в качестве шлюза или маршрутизатора.
- Internal: набор правил, которые применяются к компьютерам в вашей частной внутренней сети.
- DMZ: эта зона представляет собой изолированный доступ к компьютерам во внутренней сети, которые могут не иметь доступа к другим внутренним ресурсам.
- Work: эта зона используется для рабочих машин. Уровень доверия высокий.
- Home: большинство компьютеров в этой зоне доверяют друг другу. Уровень доверия выше work
- Trusted: эта зона имеет самый высокий уровень доверия. Все компьютеры в сети являются доверенными.
Шаг 1 – Установка Firewalld
По умолчанию Firewalld предустановлен в большинстве операционных систем.
Но некоторые из минимальных установок ОС не включают его, так что если он не установлен, вы можете установить его с помощью следующей команды:
sudo yum install firewalld # CentOS/RHEL 8/7/6 sudo dnf install firewalld # Fedora and CentOS/RHEL 8 sudo apt install firewalld # Ubuntu and Debian
После установки firewalld вам нужно будет запустить его!
sudo systemctl start firewalld sudo systemctl enable firewalld
Выполните следующую команду, чтобы проверить состояние firewalld
systemctl status firewalld [или] firewall-cmd --state
Шаг 2 – Работа с зонами и сервисами
По умолчанию public является зоной по умолчанию в firewalld, и все сетевые интерфейсы настроены с этой зоной.
Вы можете узнать зону по умолчанию с помощью следующей команды:
firewall-cmd --get-default-zone
вывод:
public
Затем выполните следующую команду, чтобы получить список активных зон:
firewall-cmd --get-active-zones
Вы должны получить следующий вывод:
public interfaces: eth0 eth1
Чтобы получить список всех доступных зон, выполните следующую команду:
firewall-cmd --get-zones
Вы должны получить следующий вывод:
block dmz drop external home internal public trusted work
firewall-cmd --list-all
Вы должны получить следующий вывод:
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
firewall-cmd --set-default-zone=work
Теперь вы можете проверить зону по умолчанию с помощью следующей команды:
firewall-cmd --get-default-zone
Вывод:
work
Вы можете получить список всех доступных служб в вашей системе с помощью следующей команды:
firewall-cmd --get-services
Вы должны получить следующий вывод:
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
Шаг 3 – Разрешаем и запрещаем слуюбы в Firewalld
Вы можете разрешить и запретить входящий трафик на основе предопределенных сервисов в firewalld.
Например, чтобы разрешить весь входящий трафик для службы http в public зоне, выполните следующую команду:
firewall-cmd --zone=public --add-service=http
Вывод:
success
firewall-cmd --zone=public --add-service=ftp
success
Приведенная выше команда добавит службы http и ftp временно, и правила не сохраняться при перезагрузке.
Вам нужно будет использовать параметр –permanent, чтобы сделать их постоянными, как показано ниже:
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=ftp
Затем выполните следующую команду для реализации изменений:
firewall-cmd --reload
Теперь вы можете получить список добавленных сервисов с помощью следующей команды:
firewall-cmd --permanent --zone=public --list-services
Вы должны увидеть следующий вывод:
cockpit dhcpv6-client ftp http ssh
Вы также можете проверить подробную информацию о зоне с помощью следующей команды:
firewall-cmd --info-zone public
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ftp http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Если вы хотите удалить / запретить вышеперечисленные сервисы из firewalld, используйте параметр –remove-service:
firewall-cmd --permanent --zone=public --remove-service=http firewall-cmd --permanent --zone=public --remove-service=ftp
firewall-cmd --reload
Шаг 4 – Разрешаем и запрещаем порты в Firewalld
Вы также можете разрешить и запретить входящий трафик на основе портов в firewalld.
Например, чтобы запретить весь входящий трафик через порты 8080 и 443, выполните следующую команду:
firewall-cmd --permanent --zone=public --add-port=443/tcp firewall-cmd --permanent --zone=public --add-port=8080/tcp
Затем выполните следующую команду, чтобы применить изменения:
firewall-cmd --reload
Затем проверьте добавленные порты с помощью следующей команды:
firewall-cmd --permanent --zone=public --list-ports
Вывод:
443/tcp 8080/tcp
Аналогичным образом удалите / запретите перечисленные выше порты из firewalld, используйте параметр -remove-port:
firewall-cmd --permanent --zone=public --remove-port=443/tcp firewall-cmd --permanent --zone=public --remove-port=8080/tcp
Затем выполните следующую команду, чтобы применить изменения:
firewall-cmd --reload
Шаг 5 – Переадресация портов ( проброс ) с помощью Firewalld
Переадресация портов – это процесс, который перенаправляет запрос от комбинации IP / порт и перенаправляет его на другой IP и / или порт.
Этот метод позволяет удаленным компьютерам подключаться к определенной службе в частной сети.
Перед настройкой переадресации портов необходимо активировать маскарад в нужной зоне. Вы можете активировать его с помощью опции –add-masquerade:
firewall-cmd --zone=public --add-masquerade
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
Если вы хотите перенаправить трафик с локального порта 80 на порт 8080 на удаленном сервере с IP-адресом 192.168.1.200, выполните следующую команду:
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200
Затем выполните следующую команду, чтобы применить изменения:
firewall-cmd --reload
Если вы хотите удалить вышеуказанные правила, замените –add на –remove, как показано ниже:
firewall-cmd --permanent --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200 firewall-cmd --permanent --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080
Заключение
В приведенном выше руководстве вы узнали основную концепцию Firewalld и ее реализацию в операционной системе Linux.
Я надеюсь, что теперь вы можете ограничить ненужный входящий трафик с помощью firewalld.