Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


CentOS 7: настройка firewall-cmd


 

CentOS 7: настройка firewall-cmd


firewall-cmd - новый файрволл, пришедший на замену iptables
Его можно отключить и вернуть iptables, но вданной статье мы рассмотрим его настройку


Сам процесс замены на iptables:

systemctl disable firewalld && systemctl stop firewalld

yum install iptables-services

systemctl start iptables && systemctl start ip6tables

systemctl enable iptables && systemctl enable ip6tables

Cохранениt правил после перезагрузки:
/sbin/iptables-save > /etc/sysconfig/iptables
/sbin/ip6tables-save > /etc/sysconfig/ip6tables

Либо:
service iptables save


Теперь рассмотрим настройку firewall-cmd


Сам по себе firewall-cmd управляет наборами правил в "зонах"
В firewall-cmd правила могут быть постоянными (permanent) и до перезагрузки


Для начала посмотрим стату демона:
systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-01-24 04:22:44 EST; 2 weeks 4 days ago
     Docs: man:firewalld(1)
 Main PID: 683 (firewalld)
    Tasks: 2
   Memory: 908.0K
   CGroup: /system.slice/firewalld.service
           └─683 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid


Просто проверить статус можно так:
firewall-cmd --state
running


Добавление\удаление из автозагрузки:
systemctl disable firewalld
systemctl enable firewalld


Остановка\запуск сервиса:
systemctl stop firewalld
systemctl start firewalld


Выведем зону по умолчанию:
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:


Задача: убрать неиспользуемый сервис dhcpv6-client, добавить ssh на нестандартном порту:
firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
firewall-cmd --permanent --zone=public --add-port=2222/tcp

Заметьте, permanent говорит о том, что правила сохранятся после перезагрузки


Перечитаем правила (без потери текущих соединений):
firewall-cmd --reload


Перечитаем правила (с потерей текущих соединений):
firewall-cmd --complete-reload


Проверим открытость порта:
firewall-cmd --zone=public --list-ports


Заставим 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 говорит о том, что правила сохранятся после перезагрузки


Несколько примеров возможных правил


Добавить диапазон портов:
firewall-cmd --zone=public --add-port=1025-1125/udp


Маскарадинг (masquerade, nat):

Проверить статус (возможно указать другую зону):
firewall-cmd --zone=external --query-masquerade

Включить:
firewall-cmd --zone=external --add-masquerade


Перенаправление входящие подключений с 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


Вывести список сервисов так:
firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet \
  bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns \
  docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication \
  freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client \
  ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve \
  mdns mosh mountd ms-wbt mssql mysql nfs nfs3 nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole \
  pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius \
  rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync \
  squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm \
  vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server


Информацию о сервисах можно найти тут:
ls -l /usr/lib/firewalld/services/
-rw-r--r--. 1 root root 412 Apr 11  2018 amanda-client.xml
-rw-r--r--. 1 root root 447 Apr 11  2018 amanda-k5-client.xml
-rw-r--r--. 1 root root 320 Apr 11  2018 bacula-client.xml
-rw-r--r--. 1 root root 346 Apr 11  2018 bacula.xml
-rw-r--r--. 1 root root 275 Apr 11  2018 bitcoin-rpc.xml
-rw-r--r--. 1 root root 307 Apr 11  2018 bitcoin-testnet-rpc.xml
-rw-r--r--. 1 root root 281 Apr 11  2018 bitcoin-testnet.xml
-rw-r--r--. 1 root root 244 Apr 11  2018 bitcoin.xml
-rw-r--r--. 1 root root 294 Apr 11  2018 ceph-mon.xml
Вывод обрезан
...


Добавить 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 --permanent --get-zones
... 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


И перезагружаем сервисы:
sudo systemctl restart network
sudo systemctl restart firewalld


Проверяем:
firewall-cmd --get-active-zones
newsshzone
interfaces: enp0s3


firewall-cmd --zone=newsshzone --list-services
ssh


Назначить зону по умолчанию:
firewall-cmd --set-default-zone=newsshzone

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект