Выведем зону по умолчанию:
firewall-cmd --get-default-zone public
Кстати изменить ее можно например так:
firewall-cmd --set-default-zone=home
Так-же в файрволле есть понятие "зоны", выведем их список:
firewall-cmd --get-zones block dmz drop external home internal public trusted work
Выведем список активных зон:
firewall-cmd --get-active-zones public interfaces: enp0s3
Что означают зоны: block - входящие соединения отклоняются (reject) с ответом icmp-host-prohibited \ icmp6-adm-prohibited, разрешены соединения инициированные системой dmz - демилитаризованная зона, разрешены указанные входящие соединения drop - все входящие пакеты отклоняются (drop) без ответа, разрешены исходящие соединения external - зона внешнего интерфейса, разрешены указанные входящие соединения home - домашняя (доверенная) зона, разрешены указанные входящие соединения internal - зона внутреннего интерфейса, разрешены указанные входящие соединения public - по умолчанию, разрешаем указанные входящие соединения trusted - разрешено все work - зона рабочей сети, разрешены указанные входящие соединения
Из вывода мы видим, что интерфейс enp0s3 принадлежит зоне public
Добавить интейрфес в зону можно так:
firewall-cmd --get-zone-of-interface=enp0s3
Посмотрим файл сетевого интерфейса:
cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 | grep ZONE ZONE=public
Какие интерфейсы принадлежат зоне public:
firewall-cmd --zone=public --list-interfaces enp0s3
Что вообще разрешено:
firewall-cmd --permanent --list-all public target: default icmp-block-inversion: no interfaces: sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Заставим ssh работать по этому порту:
vi /etc/ssh/sshd_config Port 22 Port 2222
Рестартуем сервис:
systemctl restart sshd.service
Теперь нужно либо отключить selinux, т.к. он не даст работать ssh на нестандартном порту: Отключить SELINUX
vim /etc/sysconfig/selinux SELINUX=disabled
reboot
Либо решить задачу с помощью policycoreutils-python:
yum provides semanage
yum install policycoreutils-python
semanage port -a -t ssh_port_t -p tcp 2222
Проверяем, если есть подключение - уберем стандартный порт:
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --reload
Заметьте, permanent говорит о том, что правила сохранятся после перезагрузки
Перенаправление входящие подключений с 22 порта на удаленный хост без изменения порта назначения:
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=10.0.2.30
Перенаправление входящие подключений с 22 порта на удаленный хост с изменением порта назначения:
firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2222:toaddr=10.0.2.30
Добавить http сервис в зону public (временно и постоянно):
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --permanent --add-service=http
Вывести список временных и постоянных правил из зоны public:
firewall-cmd --zone=public --list-services
firewall-cmd --zone=public --permanent --list-services
Если не нашли нужного сервиса, делаем так:
Способ 1, открытие портов:
Открываем порт 1025 протокола tcp в зоне public (временно или перманентно):
firewall-cmd --zone=public --add-port=1025/tcp
firewall-cmd --zone=public --permanent --add-port=1025/tcp
И проверяем:
firewall-cmd --list-ports 1025/tcp
Способ 2, оперделение сервисов:
Скопируем например конфиг ssh
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/newssh.xml
vi /etc/firewalld/services/newssh.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>NEWSSH</short> <description>Secure Shell (SSH) is a protocol on non standard ports</description> <port protocol="tcp" port="2223"/> <port protocol="tcp" port="2224"/> </service>
Перечитаем правила:
firewall-cmd --reload
Сервис появился в списке:
firewall-cmd --get-services
... newssh ...
Создание зон
Создадим зону с названием newsshzone:
firewall-cmd --permanent --new-zone=newsshzone
Перечитаем конфиг, чтоб получить к ним доступ:
firewall-cmd --reload
Теперь можно работать с зоной (временно и перманентно):
firewall-cmd --zone=newsshzone --add-service=ssh
firewall-cmd --zone=newsshzone --permanent --add-service=ssh
И привязывать ее к интерфейсам:
firewall-cmd --zone=newsshzone --change-interface=enp0s3
Для постоянного связывания интерфейса с зоной прописываем его в конфиге:
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 ZONE=newsshzone