Firewalld — инструмент управления фаерволом, предустановленный в большинстве RHEL-based дистрибутивов. В этой статье мы рассмотрим настройку брандмауэра с помощью firewalld на сервере под управлением CentOS, используя утилиту firewall-cmd.
Добрый день уважаемые читатели и гости блога, продолжаем изучать безопасность в операционных системах Microsoft, в прошлый раз мы решили проблему с долгим поиском обновлений Windows 7, установили их и теперь система более защищена от внешнего мира, в сегодняшней же стать я затрону такую тему, как что такое порты и как открыть порт 443 в windows, за минуту. Данный материал будет полезным для системных администраторов, так и для разработчиков.
Firewalld — утилита для управления встроенным в ядро Linux брандмауэром Netfilter. Несмотря на собственный синтаксис, имеет такой же принцип работы, как Iptables. Дополнительно про управление Netfilter при помощи последнего.
Установка и запуск
Общие команды
Управление правилами
Синтаксис
Добавление портов
Добавление сервиса командой
Добавление сервиса из xml-файла
Rich-rule
Удаление правил
Работа с зонами
Настройка NAT
Проброс портов
Трафик между интерфейсами
Возможные проблемы
- Общие команды для управления firewalld
- Что такое порт 443?
- Почему порт может не работать?
- Что такое порты в Windows
- Table of Contents
- Настройка Firewall
- Установка Nginx
- Установка MariaDB
- Установка PHP 7.3
- Настройка PHP
- Настройка Nginx
- Возможные проблемы при работе с firewalld
- Ubuntu и CentOS
- В CentOS
- В Ubuntu
- Сохранение правил (permanent)
- Способ 1. iptables-save (универсальный)
- Способ 2. iptables-persistent (Debian/Ubuntu)
- Способ 3. service iptables (CentOS)
- Запретить или разрешить трафик между интерфейсами
- Запретить
- Разрешить
- Разрешить трафик в одном направлении
- Проброс портов
- Firewalld open port
- Управление правилами
- Синтаксис
- Добавление портов
- Добавление сервиса командой
- Добавление сервиса из xml-файла
- Rich-Rule
- Удаление правил
- Use nc or ncat to open a port in Linux
- Назначение брандмауэра
- Установка и запуск
- Брандмауэр в Linux
- Как открыть порт 443 на windows 7, 8. 1 и 10
- Check list of listening ports
- Check port status
- Use nc or ncat to open a port and transfer files
- Настройка netfilter с помощью iptables
- Как открыть порт 443 на windows 7 через командную строку
- Как быть если порт закрыт?
- Принцип настройки
- Для работы с таблицами (iptables -t)
- Команды
- Условия
- Действия
- Примеры часто используемых команд iptables
- Общие команды
- Разрешить все
- Работа с правилами
- Проброс портов (port forwarding)
- Один порт (одинаковые порты)
- Один порт (разные порты)
- Диапазон портов
- Стартовая настройка
- Настройка по умолчанию
- Управление зонами
- Пример настройки NAT (шлюза)
- Open a port for some service
- Заключение
Общие команды для управления firewalld
Мягко перечитать правила (применить настройки):
Перечитать правила и сбросить текущие подключения:
* в официальной документации сказано, что данную команду стоит применять только в случаях проблем с firewalld.
Посмотреть созданные правила:
systemctl disable firewalld
Сохранить текущие правила, сделав их постоянными (permanent):
Before we jump into the examples to open a port in Linux, we must understand the requirement clearly. The very basic question which comes to my mind
- Do you need to open a port for a service? Such as a custom port 5555 for apache service?
- Do you mean the port is already listening but blocked by firewall so you want to open a port in firewall?
- Open a port for custom temporary task such as transfer and receive files using this port and then close the port.
We will cover all these scenarios in this article
Что такое порт 443?
Как я и писал выше, чаще всего он используется в двух вещах, первая это конечно подавляющее количество сайтов, работающих по https протоколу на 443 порты, и второй момент это в шифрованных каналах передачи данных. Лет 5 назад, его использовали в основном интернет банки и интернет магазины, где расплачивались электронными картами, сейчас же поисковые системы, стараются и подталкивают, всех вебмастеров, перевести свои ресурсы именно на 443 соединение.
Почему порт может не работать?
Давайте рассмотрим вопрос. по каким причинам может быть закрытым порт 443.
- По умолчанию, когда вы только установили Windows, в ней по умолчанию все порты на ружу закрыты из политики безопасности и это правильно. Их блокирует встроенная программа брандмауэр Windows или по простому файрвол.
- Администратор сети у вас мог заблокировать нужный порт, так как у него есть такие механизмы как групповая политика или доступ к прокси серверу.
- 443 сокет заблокирован на маршрутизаторе
Если 443 порт закрыт, то это означает, что:
- Если на вашем компьютере есть программа или утилита подключающаяся к 443 порту, не сможет этого сделать
- Компьютер из вне не сможет получить доступ к сервису, расположенному вас, например, веб сайту.
Что такое порты в Windows
Давайте я попробую по простому объяснить, что такое порт. Представим себе большой микрорайон с большим количеством многоэтажных домов, в каждом из них есть квартиры с жильцами, общим количеством 65 536, каждая квартира имеет свой уникальный, порядковый номер. Теперь представим, что вам необходимо попасть к другу Васе, который живет в 1443 квартире, вы что делаете идете в нужный дом с таким номером квартиры, далее вам нужно заскочить к Марине, которая живет в 80 квартире, а теперь представьте, что вместо вас это ваш компьютер и вместо ваших друзей, это порты. Каждый такой порт уникален и отвечает за ответ пользователю по определенной службе, например,
- 80 — это http служба, которая отвечает вам при запрашивании страниц сайта
- 1433 — это порт службы SQL
- 443 — https зашифрованный вариант http, с использованием SSL сертификатов.
Из выше описанного, порты бывают двух типов:
- Жестко забронированные под определенные службы. Это порты которые используются исключительно определенными программами. Диапазон таких портов от 0-1024, но есть и выше, тот же 1433 у SQL или 55777 Vipnet.
- Динамические, используемые для повседневных вещей пользователя. Это диапазон после 1024, и используют их, например, в таком контексте: скачиваете файл, ваш компьютер использует один порт, смотрите online фильм, ваш компьютер использует второй порт и так далее. Как только передача данных заканчивается, порт освобождается.
Порты еще очень часто ассоциируют с сокетами, о которых я уже рассказывал, советую посмотреть.
Table of Contents
SSH — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений.
Проверяем, что разрешено на сервере в фаерволле:
[root@localhost]# firewall-cmd --permanent --list-all
public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
Открываем порт, на который мы хотим повесить OpenSSH
[root@localhost]# firewall-cmd --permanent --zone=public --add-port=6622/tcp
[root@localhost]# firewall-cmd --reload
[root@localhost]# firewall-cmd --zone=public --list-ports
6622/tcp
Редактируем конфигурационный файл sshd_config
[root@localhost]# nano /etc/ssh/sshd_config
...
Port 6622
...
Тем самым мы поменяли стандартный порт 22 на 6622.
На данном этапе НЕ СЛЕДУЕТ перезапускать службу SSH
Если вы не отключали SELinux, надо внести некоторые изменения
[root@localhost]# yum install policycoreutils-python
[root@localhost]# semanage port -a -t ssh_port_t -p tcp 6622
Вот теперь можно перезагружать службу sshd
[root@localhost]# systemctl restart sshd
Проверяем подключение по ssh на новом порту 6622.
Если все ок, закрываем доступ к стандартному порту
[root@localhost]# firewall-cmd --permanent --zone=public --remove-service=ssh
[root@localhost]# firewall-cmd --reload
У блога появился хостинг, его любезно предоставила компания Облакотека. Облакотека — облачные сервисы для создания и управления виртуальной ИТ-инфраструктурой.
Если вам понравился мой блог и вы хотели бы видеть на нем еще больше полезных статей, большая просьба поддержать этот ресурс.
Если вы размещаете материалы этого сайта в своем блоге, соц. сетях, и т.д., убедительная просьба публиковать обратную ссылку на оригинал
В Serverspace вы можете создать сервер с уже установленным приложением LEMP.
LEMP — это акроним, обозначающий набор программного обеспечения, широко используемого на веб-серверах. Рассмотрим его установку на CentOS 7, однако перед этим произведем обновление системы и выполним перезагрузку:
sudo yum update -y
reboot
Настройка Firewall
Так как по умолчанию порты 80 и 443 закрыты настройками файрвола, следует выполнить несколько команд для получения доступа к веб-серверу из интернета.
Открываем порт 80:
sudo firewall-cmd --permanent --zone=public --add-service=http
Открываем порт 443:
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo systemctl restart firewalld
Проверяем внесенные изменения:
sudo firewall-cmd --zone=public --list-services
В итоге должно отобразиться следующее:
dhcpv6-client http https ssh
Установка Nginx
Включаем репозиторий EPEL, если это не было сделано ранее. EPEL содержит некоторые пакеты, которые не вошли в стандартный набор RHEL (CentOS), в том числе Nginx. Вводим следующую команду для подключения репозитория:
sudo yum install epel-release -y
Установим непосредственно сам Nginx:
sudo yum install nginx -y
Запускаем сервис и добавляем его в автозапуск:
sudo systemctl start nginx
sudo systemctl enable nginx
Установка MariaDB
Теперь перейдем к установке и первоначальной настройке СУБД:
sudo yum install mariadb-server mariadb -y
Запускаем службу аналогично Nginx:
sudo systemctl start mariadb
sudo systemctl enable mariadb
Следующей командой запустим базовую настройку безопасности:
Процесс заключается в установке пароля root-доступа к базам, отключении анонимного и удаленного доступа и удалении тестовых баз. Если не требуется иное, читаем запрос и соглашаемся нажатием клавиши “Y”.
Установка PHP 7.3
Поддерживаемые версии PHP можно посмотреть на официальном сайте. В нашем случае устанавливаем PHP версии 7.3 и подключаем репозиторий Remi следующей командой:
sudo rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Далее устанавливаем пакет yum-utils для работы с репозиторием Remi:
sudo yum install yum-utils
Теперь нужно активировать репозиторий и запустить установку пакетов PHP 7.3:
sudo yum-config-manager --enable remi-php73
sudo yum install php73 -y
Завершим процесс установки подключением часто используемых модулей и запуском php-fpm:
sudo yum install php-fpm php-mysql php-cli php-mbstring php-opcache php-curl php-gd -y
systemctl start php-fpm
systemctl enable php-fpm
Настройка PHP
Открываем файл настроек php.ini:
Меняем значение cgi.fix_pathinfo. Данное изменение внесет запрет на исполнение произвольного кода на сервере с правами PHP-процесса при загрузке файла:
Далее меняем группу и пользователя с Apache на Nginx в конфигурационном файле php-fpm:
sudo nano /etc/php-fpm.d/www.conf
sudo systemctl restart php-fpm
Настройка Nginx
Откроем файл конфигураций Nginx:
sudo nano /etc/nginx/nginx.conf
Вносим следующие изменения в файл:
Настало время проверить наш веб-сервер. Создадим страницу по следующему пути:
Вставим следующую строку и сохраним файл:
Перезапустим Nginx командой:
sudo systemctl restart nginx
Теперь, если вы зайдете через браузер на ваш веб-сервер по адресу http://server_name/info.php (http://xxx.xxx.xxx.xxx/info.php, где xxx.xxx.xxx.xxx — адрес), то увидите информационную страницу:
Аverage rating :
Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99
ООО «ИТГЛОБАЛКОМ ЛАБС»
Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99
ООО «ИТГЛОБАЛКОМ ЛАБС»
I am using CentOS 7 and I have to ensure that ports 2888 and 3888 are open.
I read this article but this did not work because on CentOS 7 OS there is no iptables save
command.
I also found
firewall-cmd --zone=public --add-port=2888/tcp
but this does not survive reboots.
So how can I open the ports and make it survive reboots?
15 gold badges122 silver badges176 bronze badges
asked Jul 14, 2014 at 3:07
Knows Not MuchKnows Not Much
59 gold badges192 silver badges366 bronze badges
Use this command to find your active zone(s):
firewall-cmd --get-active-zones
It will say either public, dmz, or something else. You should only apply to the zones required.
In the case of public try:
firewall-cmd --zone=public --add-port=2888/tcp --permanent
Then remember to reload the firewall for changes to take effect.
firewall-cmd --reload
Otherwise, substitute public for your zone, for example, if your zone is dmz:
firewall-cmd --zone=dmz --add-port=2888/tcp --permanent
11 gold badges70 silver badges100 bronze badges
answered Jul 14, 2014 at 5:13
The answer by ganeshragav is correct, but
it is also useful to know that you can use:
firewall-cmd --permanent --zone=public --add-port=2888/tcp
but if is a known service, you can use:
firewall-cmd --permanent --zone=public --add-service=http
and then reload the firewall
firewall-cmd --reload
answered Sep 11, 2014 at 19:27
1 gold badge7 silver badges5 bronze badges
CentOS (RHEL) 7, has changed the firewall to use firewall-cmd
which has a notion of zones which is like a Windows version of Public, Home, and Private networks. You should look here to figure out which one you think you should use. EL7 uses public
by default so that is what my examples below use.
You can check which zone you are using with firewall-cmd --list-all
and change it with firewall-cmd --set-default-zone=<zone>
.
You will then know what zone to allow a service (or port) on:
firewall-cmd --permanent --zone=<zone> --add-service=http
firewall-cmd --permanent --zone=<zone> --add-port=80/tcp
You can check if the port has actually be opened by running:
firewall-cmd --zone=<zone> --query-port=80/tcp
firewall-cmd --zone=<zone> --query-service=http
According to the documentation,
When making changes to the firewall settings in Permanent mode, your
selection will only take effect when you reload the firewall or the
system restarts.
You can reload the firewall settings with: firewall-cmd --reload
.
answered Oct 31, 2014 at 18:29
Rick Smith
15 gold badges83 silver badges85 bronze badges
Fedora, did it via iptables
sudo iptables -I INPUT -p tcp --dport 3030 -j ACCEPT
sudo service iptables save
Seems to work
answered Jul 8, 2015 at 11:23
firewall-cmd --list-ports
firewall-cmd --list-services
firewall-cmd --list-all
firewall-cmd --add-services=ntp
firewall-cmd —add-service=ntp --permanent
firewall-cmd --add-port=132/tcp --permanent
firewall-cmd --reload
answered Oct 25, 2017 at 16:33
While ganeshragav and Sotsir provide correct and directly applicable approaches, it is useful to note that you can add your own services to /etc/firewalld/services
. For inspiration, look at /usr/lib/firewalld/services/
, where firewalld’s predefined services are located.
The advantage of this approach is that later you will know why these ports are open, as you’ve described it in the service file. Also, you can now apply it to any zone without the risk of typos. Furthermore, changes to the service will not need to be applied to all zones separately, but just to the service file.
For example, you can create /etc/firewalld/services/foobar.xml
:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>FooBar</short>
<description>
This option allows you to create FooBar connections between
your computer and mobile device. You need to have FooBar
installed on both sides for this option to be useful.
</description>
<port protocol="tcp" port="2888"/>
<port protocol="tcp" port="3888"/>
</service>
(For information about the syntax, do man firewalld.service
.)
Once this file is created, you can firewall-cmd --reload
to have it become available and then permanently add it to some zone with
firewall-cmd --permanent --zone=<zone> --add-service=foobar
answered May 25, 2016 at 10:57
18 silver badges37 bronze badges
firewall-cmd --list-ports
firewall-cmd --list-services
firewall-cmd --list-all
firewall-cmd --add-services=ntp
firewall-cmd -add-service=ntp --permanent
firewall-cmd --add-port=132/tcp --permanent
2 gold badges16 silver badges29 bronze badges
answered Apr 8, 2018 at 20:37
The top answers here work, but I found something more elegant in Michael Hampton’s answer to a related question. The «new» (firewalld-0.3.9-11+) --runtime-to-permanent
option to firewall-cmd
lets you create runtime rules and test them out before making them permanent:
$ firewall-cmd --zone=<zone> --add-port=2888/tcp
<Test it out>
$ firewall-cmd --runtime-to-permanent
Or to revert the runtime-only changes:
$ firewall-cmd --reload
Also see Antony Nguyen’s comment. Apparently firewall-cmd —reload may not work properly in some cases where rules have been removed. In that case, he suggests restarting the firewalld service:
$ systemctl restart firewalld
answered Aug 1, 2017 at 0:53
Neal Gokli
7 silver badges18 bronze badges
#firewall-cmd --add-port={port number/tcp,port number/tcp} --permanent
#firewall-cmd --reload
And check the Port opened or not after reloading the firewall.
#firewall-cmd --list-port
For other configuration [Linuxwindo.com][1]
answered Nov 21, 2018 at 6:18
Hello in Centos 7 firewall-cmd.
Yes correct if you use
firewall-cmd —zone=public —add-port=2888/tcp
but if you reload firewal
firewall-cmd —reload
your config not will be save
you need to add key
firewall-cmd —permanent —zone=public —add-port=2888/tcp
answered Feb 18, 2020 at 5:57
1 silver badge6 bronze badges
If you are familiar with iptables service like in centos 6 or earlier, you can still use iptables service by manual installation:
step 1 => install epel repo
yum install epel-release
step 2 => install iptables service
yum install iptables-services
step 3 => stop firewalld service
systemctl stop firewalld
step 4 => disable firewalld service on startup
systemctl disable firewalld
step 5 => start iptables service
systemctl start iptables
step 6 => enable iptables on startup
systemctl enable iptables
finally you’re now can editing your iptables config at /etc/sysconfig/iptables.
So -> edit rule -> reload/restart.
do like older centos with same function like firewalld.
answered Mar 16, 2016 at 10:19
echo '-p tcp --dport 80 -m conntrack --cstate NEW -j ACCEPT' > /etc/fwtree.d/filter/INPUT/80-allow.rule
systemctl reload fwtree
answered Dec 22, 2017 at 20:07
Возможные проблемы при работе с firewalld
1. Ошибка command not found (команда не найдена).
Возможные причины: не установлен пакет или не запущена служба.
Выполняем установку пакета firewalld:
yum install firewalld firewall-config
systemctl start firewalld
2. Не применяются правила.
Причина: не введена команда перезапуска правил.
Если это не помогло, делаем перезапуск со сбросом подключений:
В некоторых случаях, необходимо перезапустить сетевые службы:
systemctl restart network
В исключительных случаях, перезагружаем компьютер:
shutdown -r now
3. The interface is under control of NetworkManager and already bound to the default zone.
Ошибка появляется при попытке удалить интерфейс из зоны, настройками которого управляет NetworkManager.
Для решения открываем конфигурационный файл для настройки сетевого интерфейса, например:
И дописываем следующее:
* в данном примере сетевой интерфейс ens34 будет добавлен в зону external.
Перезагружаем сетевую службу:
systemctl restart network
Ubuntu и CentOS
В современных операционных системах Ubuntu и CentOS по умолчанию нет iptables. Необходимо его установить или пользоваться более новыми утилитами.
В CentOS
В качестве штатной программы управления брандмауэром используется firewall-cmd. Подробнее читайте инструкцию Как настроить firewalld в CentOS.
Если необходимо пользоваться iptables, устанавливаем пакет с утилитой:
systemctl disable firewalld
Разрешаем и запускаем iptables:
systemctl enable iptables
systemctl start iptables
В Ubuntu
Для управления брандмауэром теперь используется ufw.
Для работы с iptables, устанавливаем следующий пакет:
Сохранение правил (permanent)
По умолчанию, все правила перестают работать после перезапуска сети или компьютера. Для сохранения правил после перезагрузки есть несколько способов настройки.
Способ 1. iptables-save (универсальный)
Сохраняем правила в файл:
Чтобы восстановить правила, достаточно ввести команду:
iptables-restore < /etc/iptables.rules
А для автоматического восстановления правил при загрузке сервера или перезагрузки сети, создадим файл:
iptables-restore < /etc/iptables.rules
exit 0
И делаем его исполняемым:
chmod +x /etc/network/if-pre-up.d/iptables
В версиях постарше открываем настройки сети:
и добавляем строку:
pre-up iptables-restore < /etc/iptables.rules
Способ 2. iptables-persistent (Debian/Ubuntu)
Для сохранения правил вводим команду:
Способ 3. service iptables (CentOS)
Работает в старых версиях Linux и CentOS. Необходима установка пакета:
yum install iptables-services
* первая команда для CentOS, вторая — для Ubuntu.
Сохраняем правила командой:
service iptables save
* правила будут сохранены в файл /etc/sysconfig/iptables.
Чтобы правила восстанавливались автоматически при старте компьютера, разрешаем автозапуск сервиса.
а) в более новых версиях Linux:
systemctl enable iptables
б) в версиях постарше:
chkconfig iptables on
update-rc.d iptables defaults
* первая команда для CentOS, вторая для Ubuntu.
Запретить или разрешить трафик между интерфейсами
Предположим, у нас есть два внутренних сетевых интерфейса ens35 и ens36. Мы хотим контролировать трафик между ними.
Запретить
Применяется в случаях, когда на сервере включен FORWARD, но необходимо блокировать трафик между определенными сегменами сети.
Вводим следующие команды:
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j DROP
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j DROP
Разрешить
Применяется в случаях, когда интерфейсы находятся в зонах, где по умолчанию, трафик блокируется.
Для разрешения команды, практически, аналогичные:
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j ACCEPT
Разрешить трафик в одном направлении
В предыдущих примерах мы разрешали трафик в обоих направлениях. Если необходимо сделать так, чтобы только сеть ens35 видела сеть ens36, вводим одну команду:
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT
Проброс портов
Проброс настраивается со следующим синтаксисом:
firewall-cmd —zone=external —permanent —add-forward-port=port=25:proto=tcp:toport=8025:toaddr=192.168.0.15
* в данном примере мы будем слушать запросы на порту 25 и передодить их на узел 192.168.0.15 и порт 8025.
Firewalld open port
[root@centos-8 ~]#
libvirt
interfaces: virbr0
interfaces: eth0 eth1
To permanently firewalld open port in a zone use the --add-port
option. The example below permanently opens TCP port 1234 in the ‘public‘ zone. Note that permanent changes do not take effect until the firewalld service is reloaded.
[root@centos-8 ~]# firewall-cmd --zone=public --add-port=1234/tcp --permanent success [root@centos-8 ~]# firewall-cmd --reload success
To make a non-persistent change, issue the same command without the --permanent
option set. Any non-permanent change will instantly take effect and will persist until the firewall is reloaded.
Once firewalld open port, next use netstat to check port status:
[root@centos-8 ~]# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1627/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 28188/sshd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp6 0 0 :::22 :::* LISTEN 28188/sshd tcp6 0 0 :::111 :::* LISTEN 1/systemd
We still don’t see port 1234 here. This is because currently port 1234 is not bind to any service. So our port is OPEN but NOT LISTENING. As soon as a request or service tries to use port 1234, we will get this in LISTEN state.
Управление правилами
Рассмотрим разные варианты управления фаервольными правивами c помощью firewalld.
Синтаксис
Общий синтаксис для работы с правилами:
* порядок следования параметров не важен.
- [опции] — дополнительные параметры для создаваемого правила, например —permanent — постоянное правило, то есть будет действовать после перезагрузки. Не обязательный.
- [зона] — по умолчанию, правила создаются для зоны public. Для работы с конкретной зоной ее необходимо указать, например, —zone=dmz. Не обязательный.
- <правило> — само правило. Обязательный.
Чтобы правила применялись, не забываем их перечитывать:
Добавление портов
Открыть порт 80:
firewall-cmd —permanent —add-port=80/tcp
* где ключ —permanent — добавить постоянное правило (будет действовать после перезагрузки).
Добавить правило для определенной зоны:
firewall-cmd —permanent —zone=external —add-port=80/tcp
Добавить диапазон портов:
Добавить несколько правил одной командой:
firewall-cmd —permanent —add-port=80/tcp —add-port=443/tcp
Добавление сервиса командой
Использование служб, вместо портов, может повысить удобство управления правилами за счет объединения нескольких портов в одну службу.
Посмотреть список доступных служб:
Разрешить порт, например, для сервиса ntp:
Создать собственную службу:
firewall-cmd —permanent —new-service=name-service
* где name-service — произвольное имя создаваемой службы.
Добавить порт, например TCP 2200 к службе:
firewall-cmd —permanent —service=name-service —add-port=2200/tcp
Задать описание для удобства:
firewall-cmd —permanent —service=name-service —set-short=»Service With This Name»
firewall-cmd —permanent —service=name-service —set-description=»Long Description For Service With This Name»
Информацию о созданном сервисе можно получить командой:
Созданную службу можно использовать для создания правил командой:
Добавление сервиса из xml-файла
Данный способ добавления сервиса будет удобен для создания готовых шаблонов с правивами. Их можно использовать при поставке конфигурации или программного обеспечения.
<?xml version=»1.0″ encoding=»utf-8″?>
<service>
<short>my-app</short>
<description>Provides HTTP Access to my-app application</description>
<port protocol=»tcp» port=»8080″/>
</service>
* в моем примере будет создан шаблон для сервиса с именем my-app, который откроет порт 8080/tcp.
Теперь можно добавить сам сервис. Для этого есть два способа.
а) Использовать опцию —new-service-from-file:
firewall-cmd —permanent —new-service-from-file=my-app.xml
б) Перенести его в каталог /usr/lib/firewalld/services:
Теперь, чтобы с ним можно было работать, перезапустим firewalld:
Информацию о созданном сервисе можно получить командой:
Теперь созданную службу можно использовать для создания правил, например:
Rich-Rule
rich-rule позволяет создавать правила с условиями. Рассмотрим несколько примеров:
firewall-cmd —permanent —add-rich-rule ‘rule family=»ipv4″ source address=»192.168.0.0/24″ service name=»http» accept’
2. Или для конкретного порта:
firewall-cmd —permanent —add-rich-rule ‘rule family=»ipv4″ source address=»192.168.0.0/24″ port port=»5038″ protocol=»tcp» accept’
3. Чтобы заблокировать подсеть можно воспользоваться командой:
firewall-cmd —permanent —add-rich-rule=»rule family=’ipv4′ source address=’192.168.1.0/24′ reject»
Список правил с условиями можно отобразить командой:
Удаление правил
Аналогично созданию, но вместо add вводим remove, например —remove-port (удалит порт) или —remove-service (службу).
Удалим правило для открытия 80-о порта:
firewall-cmd —permanent —remove-port=80/tcp
Use nc or ncat to open a port in Linux
Let us verify this theory Use nc
or ncat
to open a port in Linux nc
or ncat
is delivered as part of nmap-ncat
rpm in RHEL/CentOS which you can install using yum or dnf. Use --listen
with --port
to open a port using nc
command. In the below example we open port 1234
[root@centos-8 ~]# nc --listen --source-port 1234
Open another terminal of this server and check port status
[root@centos-8 ~]# netstat -ntlp | grep 1234 0 0 0.0.0.0: 0.0.0.0:* LISTEN 28983/nc 0 0 ::: :::* LISTEN 28983/nc
As you see port 1234 is listening for both IPv4 and IPv6. To only use IPv4 use -4 with the above command
[root@centos-8 ~]# nc --listen --source-port 1234 -4
Next on another terminal you can check port status for port 1234
[root@centos-8 ~]# netstat -ntlp | grep 1234 tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 29329/nc
Назначение брандмауэра
Межсетевой экран (брандмауэр/фаервол) — это программа для обеспечения контроля доступа на сетевом уровне. Основываясь на прописанных правилах, брандмауэр определяет, какие устройства имеют доступ к участкам сети. Иными словами, какой-то трафик разрешить, остальное заблокировать. В Linux эти функции выполняет программа netfilter
, встроенная в ядро.
Установка и запуск
В некоторых системах CentOS может не оказаться firewalld. Для его установки вводим:
yum install firewalld
Для автоматического зауска вводим:
systemctl enable firewalld
И для запуска службы:
systemctl start firewalld
Брандмауэр в Linux
Как мы уже поняли, netfilter работает на уровне ядра. Для настройки фаервола нужны инструменты в пользовательском пространстве. В качестве фреймворков для управления netfilter используются ip_tables/nf_tables, реализованные в виде модулей ядра. А поверх них на уровне пользователя работают соответственно или iptables (одноименная утилита командной строки), или nft.
Опытные администраторы знают, что вручную прописывать правила для iptables или nft не так просто. Особенно, когда нужно настроить крупную сеть или перенести правила на другую систему. Поэтому были придуманы более дружелюбные и многофункциональные надстройки. Например, в Ubuntu такой надстройкой является инструмент с говорящим названием ufw (Uncomplicated Firewall). А в семействе RedHat дистрибутивов (CentOS, Alma, Fedora, RHEL, OpenSUSE, SUSE Linux Enterprise) — firewalld.
Как открыть порт 443 на windows 7, 8. 1 и 10
Я расскажу как открыть порт 443 на windows 7, но все описанное ниже, будет актуально и делаться один в один и на современных операционных системах Windows 10 и серверных редакциях. Порядок действий:
- Выбираем в правом верхнем углу, классический вид с крупными значками и щелкаем по значку брандмауэра.
- Если вам нужно быстро протестировать 443 соединение, то я вам советую полностью отключить брандмауэр, особенно если подпирает время, для этого открываем соответствующий пункт.
Для отключения, выберите соответствующие пункты, по сути теперь будут открыты все порты Windows 7. После тестирования не забываем все включить.
А теперь правильный вариант, перейдите в дополнительные параметры фаэрвола. Вы попадете в повышенный режим безопасности, именно тут можно открыть порт 443 windows.
- Переходим в «Правила для входящих подключений», если нужно чтобы к вам подключались по 443 соединению, если нужно, чтобы вы могли подключаться, при условии, что он закрыт, то выберите «Правила исходящих подключений». Щелкаем правым кликом и выбираем «Создать правило»
- Тут нам интересны два пункта, первый это «Для программы», удобен тем, что вы разрешаете конкретной программе все подключения через фаэрвол, из недостатков, то что если у нее есть зависимые программы, то работать может не полностью или вообще не будет, второй вариант для порта, удобен тем, что единожды открыв нужный порт, вам не нужно думать какая для какой программы вам его разрешать. Простой пример вы используете 80 сокет, сначал он работал на Apache, потом вы его заменили на IIS, в брандмауэре ничего не пришлось менять.
- Если выбрали первый пункт с программой, то вам необходимо указать до нее путь, до файла exe.
- Указываем действие, в данном случае «разрешить», так как на нужно открытие порта 443.
- Все задаем имя для создаваемого правила и нажимаем готово.
Если вы допустили ошибку или, что-то поменялось, то вы всегда можете изменить настройки через свойства.
Check list of listening ports
We will use netstat to list the TCP ports which are in listening state. The total number of ports are higher compared to the nmap output.
[root@centos-8 ~]# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1627/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 26893/sshd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp6 0 0 :::22 :::* LISTEN 26893/sshd tcp6 0 0 :::111 :::* LISTEN 1/systemd
Check port status
To check the list of existing ports which are open we will use nmap
to check port status:
[root@centos-8 ~]#
Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-22 12:08 IST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000024s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
Nmap done: 1 IP address (1 host up) scanned in 1.71 seconds
Currently we see only two ports are open on my CentOS 8 node.
PSSH — 10 practical examples to use parallel SSH in Linux
Use nc or ncat to open a port and transfer files
We can also use nc
to transfer file from one host to another host. Here I will transfer my «inputfile
» from centos-8
to rhel-8
On the client we will open a random port, here we will use 9899. I have enabled verbose so you can see more details on the screen
[root@rhel-8 ~]# ncat --verbose --listen 9899 > outputfile
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Listening on :::9899
Ncat: Listening on 0.0.0.0:9899
Ncat: Connection from 192.168.43.250.
Ncat: Connection from 192.168.43.250:40242.
Next to start the transfer, use the below command
[root@centos-8 ~]# ncat --verbose 192.168.43.157 9899 < inputfile
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.43.157:9899.
Ncat: 19 bytes sent, 0 bytes received in 0.01 seconds.
Step-by-Step Tutorial: Configure Master Slave DNS Server (RHEL/CentOS 7)
Lastly I hope the steps from the article to open a port and check port status on Linux was helpful. So, let me know your suggestions and feedback using the comment section.
Didn’t find what you were looking for? Perform a quick search across GoLinuxCloud
Настройка netfilter с помощью iptables
Утилита командной строки iptables используется для настройки брандмауэра netfilter, встроенного в систему на базе ядра Linux.
Данная инструкция подходит как для чайников, которые хотят разбираться в аспектах защиты сети, так и опытных специалистов в качестве шпаргалки.
Общий синтаксис
Ключи
Примеры
Общие команды
Разрешить все
Работа с простыми правилами
Проброс портов
Стартовая настройка
Сброс на стандартные настройки
Сохранение правил
Использование в Ubuntu и CentOS
Как открыть порт 443 на windows 7 через командную строку
Когда вы набьете руку и вам надоест щелкать однотипные окна в брандмауэре Windows или вы захотите, все автоматизировать, то вам в этом поможет, командная строка запущенная с правами администратора. Вам необходимо выполнить такую команду:
netsh advfirewall firewall add rule name=»Открыть 443 порт-2″ protocol=TCP localport=443 action=allow dir=IN
- netsh advfirewall firewall add rule — добавление правила
- name — имя
- protocol — тип протокола
- localport — открываемый порт
- action — действие
- dir — тип соединения (входящий или исходящий)
Проверяем добавление нашего правила.
Как быть если порт закрыт?
Сейчас мы говорим. про ситуации когда 443 соединение блокируется системным администратором или интернет провайдером. В обоих случаях необходимо связываться с вышестоящими инстанциями и рассказывать, что вам необходимо открыть открыть порт 443 windows, своими силами вы уже не обойдетесь. Еще очень частым вопросом, бывает, как проделать все те же действия на сетевых устройствах, однозначного ответа нет, так как у всех это делается по разному, изучайте документацию. По своей практике могу точно сказать, что провайдеры любят лочить 25 SMTP подключения, чтобы спам не рассылали. Уверен, что вы теперь знаете, как все открывать и сможете это использовать на практике.
Принцип настройки
Общий синтаксис использования iptables:
Правила netfilter распределены по 4-м таблицам, каждая из которых имеет свое назначение (подробнее ниже). Она указывается ключом -t, но если данный параметр не указан, действие будет выполняться для таблицы по умолчанию — filter.
Команды указывают, какое именно действие мы совершаем над netfilter, например, создаем или удаляем правило.
В каждой таблице есть цепочки, для каждой из которых создаются сами правила. Например, для вышеупомянутой таблицы filter есть три предопределенные цепочки — INPUT (входящие пакеты), OUTPUT (исходящие) и FORWARD (транзитные).
Некоторые команды требуют указания номера правила, например, на удаление или редактирование.
Условие описывает критерии отработки того или иного правила.
Ну и, собственно, что делаем с пакетом, если он подходит под критерии условия.
* справедливости ради, стоит отметить, что ключ с действием не обязан идти в конце. Просто данный формат чаще всего встречается в инструкциях и упрощает чтение правил.
Для работы с таблицами (iptables -t)
Напоминаю, все правила в netfilter распределены по таблицам. Чтобы работать с конкретной таблицей, необходимо использовать ключ -t.
Команды
Нижеперечисленные ключи определяют действия, которые выполняет утилита iptables.
Условия
Данные ключи определяют условия правила.
Перечисленные ключи также поддерживают конструкцию с использованием знака !. Он инвертирует условие, например,
iptables -A INPUT -s ! 192.168.0.50 -j DROP
запретит соединение всем хостам, кроме 192.168.0.50.
Действия
Действия, которые будут выполняться над пакетом, подходящим под критерии условия. Для каждой таблицы есть свой набор допустимых действий. Указываются с использованием ключа -j.
Примеры часто используемых команд iptables
Общие команды
Просмотр правил с их номерами:
iptables -L —line-numbers
Для каждой таблицы смотреть правила нужно отдельно:
iptables -t nat -L —line-numbers
Удалить все правила:
Установить правила по умолчанию:
iptables -P OUTPUT DROP
* в данных примерах по умолчанию для всех входящих (INPUT) и исходящих (OUTPUT) пакетов будет работать запрещающее правило (DROP).
Разрешить все
Способ 1. С помощью добавления правила:
iptables -I INPUT 1 -j ACCEPT
iptables -I OUTPUT 1 -j ACCEPT
iptables -I FORWARD 1 -j ACCEPT
* данные три команды создадут правила, которые разрешают все входящие, исходящие и транзитные пакеты.
Способ 2. Чисткой правил:
* здесь мы сначала удаляем все правила (-F), затем устанавливаем политику по умолчанию — разрешать входящие, исходящие и транзитные (-S).
Способ 3. Отключение сервиса (удобно для диагностики проблем на время отключить firewall):
service iptables stop
Работа с правилами
1. Добавить правило в конец списка:
iptables -A INPUT -p tcp —dport 25 -j ACCEPT
iptables -A INPUT -p tcp -s ! 192.168.0.25 —dport 993 -i eth0 -j ACCEPT
2. Добавить диапазон портов:
iptables -A INPUT -p tcp —dport 3000:4000 -j ACCEPT
* в данном случае, от 3000 до 4000.
3. Вставить правило:
iptables -I FORWARD 15 -p udp -d 8.8.8.8 —dport 53 -i eth1 -j ACCEPT
iptables -I INPUT 1 -s 1.1.1.1 -p tcp —dport 25 -j DROP
5. Разрешить несколько портов:
iptables -A INPUT -p tcp —match multiport —dports 20,21,25,80,8080,3000:4000 -j ACCEPT
Проброс портов (port forwarding)
Рассмотрим пример проброса одного порта и диапазона портов.
Один порт (одинаковые порты)
Существует два способа настройки.
1. Правила PREROUTING + POSTROUTING:
iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 —dport 22 -j DNAT —to-destination 192.168.1.15:22
iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 —sport 22 -j SNAT —to-source 19.8.232.80:22
2. Правила PREROUTING + FORWARD:
iptables -t nat -A PREROUTING -p tcp -i eth1 —dport 22 -j DNAT —to-destination 192.168.1.15:22
iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
Один порт (разные порты)
Рассмотрим ситуацию, когда мы слушаем один порт, а пробрасываем на другой.
iptables -t nat -A PREROUTING -p tcp -i eth1 —dport 8022 -j DNAT —to-destination 192.168.1.15:22
iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
Диапазон портов
При необходимости пробросить диапазон портов, используем команды:
iptables -t nat -I PREROUTING -p tcp -m tcp —dport 1000:5000 -j DNAT —to-destination 192.168.1.15:1000-5000
iptables -A FORWARD -d 192.168.1.15 -i eth1 -p tcp -m tcp —dport 1000:5000 -j ACCEPT
Стартовая настройка
Мы можем начать настройку брандмауэра на сервере с этих команд.
iptables -A INPUT -p tcp —dport 22 -j ACCEPT
Создаем правила для нормальной работы apt или yum:
iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
Разрешаем ICMP (для выполнения команды ping):
iptables -A INPUT -p icmp -j ACCEPT
Разрешаем все входящие на адрес локальной петли:
iptables -A INPUT -i lo -j ACCEPT
Ставим политику запрета на входящие и разрешаем все исходящие:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
Настройка по умолчанию
Если мы хотим вернуть настройки в первоночальное значение (разрешено все, правил нет), выполняем команды ниже.
Сначала ставим разрешающую политику для основных цепочек:
Ставим политику разрешения на входящие и исходящие:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
Удаляем все правила во всех таблицах:
iptables -t nat -F
iptables -t mangle -F
Удаляем все цепочки, которые не используются:
Управление зонами
Все правила в firewalld могут быть разбиты по зонам. Для каждой свой набор правил и свои сетевые интерфейсы. Это нужно использовать, если мы захотим для разных сетевых адаптеров сделать разные по строгости правила.
Посмотреть список всех имеющихся зон:
Посмотреть список используемых зон:
Информация о конкретной зоне:
Создать правило для зоны public:
firewall-cmd —permanent —zone=public —add-port=80/tcp
Добавить сетевой интерфейс в зону:
firewall-cmd —permanent —zone=public —remove-interface=ens34
firewall-cmd —permanent —zone=internal —add-interface=ens34
* сначала нужно удалить адаптер из текущей зоны.
Задать действие по умолчанию для зоны:
firewall-cmd —permanent —zone=public —set-target=DROP
Создать новую зону:
firewall-cmd —permanent —new-zone=custom_zone
* чтобы система увидела новую зону custom_zone, команда reload обязательная.
Пример настройки NAT (шлюза)
firewall-cmd —permanent —zone=dmz —add-masquerade
* без указания зон, будет включен для public и external.
Для примера берем два ethernet интерфейса — ens32 (внутренний) и ens33 (внешний). Для настройки nat последовательно вводим следующие 4 команды:
firewall-cmd —permanent —direct —add-rule ipv4 nat POSTROUTING 0 -o ens33 -j MASQUERADE
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens32 -o ens33 -j ACCEPT
* добавляет в таблицу filter (цепочку FORWARD) правило, позволяющее хождение трафика с ens32 на ens33.
firewall-cmd —direct —permanent —add-rule ipv4 filter FORWARD 0 -i ens33 -o ens32 -m state —state RELATED,ESTABLISHED -j ACCEPT
* добавляет правило в таблицу filter (цепочку FORWARD), позволяющее хождение трафика с ens33 на ens32 для пакетов, открывающих новый сеанс, который связан с уже открытым другим сеансом (RELATED) и пакетов, которые уже являются частью существующего сеанса (ESTABLISHED).
systemctl restart firewalld
* для того, чтобы сервер CentOS заработал в качестве шлюза, также необходимо настроить ядро. Подробнее в статье Настройка Интернет шлюза на CentOS 7.
Для просмотра созданных данным способом правил используем команду:
firewall-cmd —direct —get-all-rules
Open a port for some service
If this is your requirement then you are looking for the wrong question. Basically it is other way round i.e. a service will open a port. For example when you start SSHD service, by default it will start port 22 and not the other way round i.e. if you open port 22, it will not automatically start SSHD service.
Let us observe this in example, we know that port 22 is open on my CentOS 8 node. If I stop the sshd service
[root@centos-8 ~]# systemctl stop sshd
You can see that port 22 is not open anymore.
[root@centos-8 ~]# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1627/dnsmasq tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp6 0 0 :::111 :::* LISTEN 1/systemd
You must use respective service’s configuration file to change the default port. Once done you can restart the service and that should automatically open the respective port on your Linux node.
If you plan to use some custom port for a service then you should also add it in /etc/services
This covers the first scenario.
Заключение
работающий брандмауэр значительно повышает безопасность сети. В этой статье мы разобрали основы работы в firewalld, необходимые для грамотной настройки. Firewalld позволяет легко разделить сеть на участки и для каждого участка задать собственные политики безопасности, в зависимости от уровня доверия. Такая гибкость облегчает настройку фаервола и экономит время сисадмина, позволяя ему сфокусироваться на других задачах.