Предыстория: Необходимо было сделать на Hyper-V сервер с CentOs и на ней развернуть web. Сами с Линуксом на ВЫ.
Все прошло удачно, был взять последний CentOs 7.6.1810, развернута минимальная конфигурация, проброшен SSH и отдан программистам.
Они установили Nginx и ожидают публикации 80 порта.
Мы проверяем 80 порт, он недоступен, вспоминаем, что установили минимальную конфигурация. Значит кроме SSH ничего не открыто.
Проверяем:
iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT
Все работает, предположение верное, осталось добавить в iptables.
Идем в /etc/sysconfig/ и … нет файла iptables.
service iptables stop
и получаем
Failed to stop iptables.service: Unit iptables.service not loaded.
Значит iptables не установлен, но что отвечает на добавление правила?
Как нам подсказал гугл, в 7 версии CentOs вместо iptables используется FirewallD.
Iptables и FirewallD используют одинаковый инструментарий iptables, поэтому, как я понял, и применилось правило.
Для открытия 80 и 443 портов необходимо выполнить следующую команду.
firewall-cmd --permanent --zone=external --add-port=80/tcp --add-port=443/tcp
Можно сделать тоже самое с помощью другой команды используя сервисы
firewall-cmd --permanent --add-service=http --add-service=https
И не забыть перечитать правила.
firewall-cmd --reload
Ниже приведен список некоторых команд
Общие команды для управления firewalld
firewall-cmd --state
Мягко перечитать правила (применить настройки):
firewall-cmd --reload
Перечитать правила и сбросить текущие подключения:
firewall-cmd --complete-reload
* в официальной документации сказано, что данную команду стоит применять только в случаях проблем с firewalld.
Посмотреть созданные правила:
firewall-cmd --list-all
Остановить службу:
systemctl stop firewalld
Запустить сервис:
systemctl start firewalld
Запретить автозапуск:
systemctl disable firewalld
Разрешить автозапуск:
systemctl enable firewalld
Сохранить текущие правила, сделав их постоянными (permanent):
firewall-cmd --runtime-to-permanent
Управление правилами
Синтаксис
Общий синтаксис для работы с правилами:
firewall-cmd [опции] [зона] <правило>
* порядок следования параметров не важен.
где:
[опции] — дополнительные параметры для создаваемого правила, например –permanent — постоянное правило, то есть будет действовать после перезагрузки. Не обязательный.
[зона] — по умолчанию, правила создаются для зоны public. Для работы с конкретной зоной ее необходимо указать, например, –zone=dmz. Не обязательный.
<правило> — само правило. Обязательный.
Чтобы правила применялись, не забываем их перечитывать:
firewall-cmd --reload
Добавление портов
Открыть порт 80:
firewall-cmd --permanent --add-port=80/tcp
* где ключ –permanent — добавить постоянное правило (будет действовать после перезагрузки).
Добавить правило для определенной зоны:
firewall-cmd --permanent --zone=external --add-port=80/tcp
Добавить диапазон портов:
firewall-cmd --permanent --add-port=6500-6700/udp
Добавить несколько правил одной командой:
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp
Добавление сервиса
Использование служб, вместо портов, может повысить удобство управления правилами за счет объединения нескольких портов в одну службу.
Посмотреть список доступных служб:
firewall-cmd --get-services
Разрешить порт, например, для сервиса ntp:
firewall-cmd --permanent --add-service=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"
Теперь созданную службу можно использовать для создания правил, например:
firewall-cmd --permanent --add-service=name-service
В решении помогли следующие источники “Настройка firewalld в CentOS” и “Настраиваем службу FirewallD“