Открыть порт 80 centos 7: Как открыть 80 порт в Centos 7? — Хабр Q&A

Firewall на CentOS 7 настройка и использование

Большинство IT специалистов в той или иной степени сталкиваются с Firewall, будь то настройка домашнего роутера или тонкий тюнинг, например, VMWare EDGE NSX-V виртуальной инфраструктуры. Сегодня расскажу, как использовать Firewall на CentOS 7.

Содержание

Вводная часть про Firewall

Большинству, наверное, известно, что для передачи данных между узлами сети на сетевом и транспортном уровнях модели OSI, необходимы два элемента: IP адрес и порт. Например, узел под номером один отправляет пакет узлу под номером два на порт 22 и ждет ответ. Если ответ пришел, то считается, что порт открыт для подключений.

С одной стороны это удобно, но с другой позволяет просканировать узел и понять, какие порты открыты. Большинство сервисов имеют уже устоявшиеся порты. Например, 22 это ssh, 21 — ftp, 80 — http. Таким образом, после сканирования злоумышленник может понять какой сервис находится за тем или иным портом. Зная сервис, будет проще найти и применить эксплойт.

Для чего же нужен Firewall на CentOS, да и не только?

Самое главное правило файрвола: запрещено все, что не разрешено. Что это значит? Представим, что развернули сервер из шаблона с прямым выходом в интернет. Тот, кто готовил шаблон, посчитал, что сервер будет находиться в локальной сети и доступа извне к нему не будет, поэтому оставил ssh на 22 порту. В результате, без Firewall, ssh порт доступен из интернета и может быть скомпрометирован. Если же файрвол включен, 22 порт извне доступен не будет, пока не будет добавлено разрешающее правило. То есть, у администратора появляется еще одна точка где нужно подумать — а можно ли так сделать? В данном примере с ssh портом, если невозможно избежать открытия, необходимо перенести его на более высокий порт, например 29865. Это усложнит поиск и применение эксплойтов.

Опции и ключи

Перед добавлением правил, в которых вы не уверены, особенно если сервер доступен только по ssh, желательно себя обезопасить. Например, добавить скрипт в cron, который будет перезагружать Firewall. И соответственно, не применять ключ: —permanent. Тогда после перезагрузки firewalld, доступ к серверу восстановится.

--permanent правило будет сохранено после перезагрузки firewalld;
--zone=<имя зоны> указывает в какой зоне производятся изменения;
--add-port - ключ для добавления (открытия) порта;
--add-forward-port - проброс порта с одного узла на другой;
--list-all-zones - просмотр всех зон firewalld и включенных в них разрешений;
--reload - перечитать конфигурацию файрвола;
--direct --get-all-rules получение всех правил с прямыми опциями;
--direct используется перед всеми прямыми опциями.

https://fedoraproject.org/wiki/FirewallD/ru#.D0.9F.D1.80.D1.8F.D0.BC.D1.8B.D0.B5_.D0.BE.D0.BF.D1.86.D0.B8.D0.B8

Прямые опции предназначены, в основном, для возможности назначения пользовательских правил службам и приложениям. Правила не сохраняются и должны быть переопределены после перезагрузки или перезапуска. Аргументы сквозной опции такие же, как и соответствующие аргументы iptables, ip6tables, ebtables.

Практическое применение Firewall на CentOS 7

По умолчанию в CentOS 7 используется RHEL решение — firewalld. Установка, запуск, добавление в автозагрузку:

yum install firewalld
systemctl start firewalld
systemctl enable firewalld
Окружение
Пользовательское устройство: IP 192.168.100.21
Роутер: LAN - 192.168.100.1-192.168.100.200
Сервер №1: Роль: Шлюз
    Интерфейс: ens160 - 192.168.100.50 (Сеть с выходом в Inet)
    Интерфейс: ens192 - 192.168.211.1 (инфраструктурная сеть)
    Интерфейс: ens224 - 192.168.111.1 (проектная сеть)
Сервер №2: 192.168.211.3 (в инфраструктурной сети)
    Сервисы - Prometheus:9090; Telegraf:9126
Сервер №3: 192.168.111.5 (в проектной сети)
    Сервисы - Grafana:3000; Telegraf:9126
Задачи
  1. открыть порт для внешних подключений;
  2. разрешить хождение трафика между инфраструктурной сетью и проектной;
  3. разрешить инфраструктурной и проектной сетям выходить в интернет;
  4. проброс портов. При обращении на шлюз:
    • по порту 9090 должен открываться 192.168.211.3 по порту 9090, т.е. сервис prometheus;
    • через 3000 должен открываться 192.168.111.5 по порту 3000, т.е. сервис grafana;
    • с 9126 и 9127 должны открываться 192.168.211.3 и 192.168.111.5 соответственно по порту 9126, т.е. exporter telegraf.
Открыть порт для внешних подключений

Например, установили nginx, запустили, командой netstat видим, что 80 порт поднят и слушается nginx, но браузер подключиться не может. Для того, чтобы порт стал доступен извне, на Firewall необходимо открыть входящие подключения к нему:

firewall-cmd --permanent --zone=public --add-port=80/tcp
Разрешить хождение трафика между инфраструктурной сетью и проектной

Для того, чтобы разрешить хождение трафика между сетями, необходимо воспользоваться прямыми опциями. Проще говоря, воспользоваться возможностями iptables. В netfilter цепочке FORWARD разрешить (-j ACCEPT) прохождение пакета от одной сети в другую. Разрешающее правило с интерфейса ens192 на ens224 и обратно, выглядят так:

firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ens224 -o ens192 -j ACCEPT
firewall-cmd --reload
Разрешить инфраструктурной и проектной сетям выходить в интернет

Возможность выхода в интернет подсетям можно осуществить только через NAT, то есть для конечных узлов в интернете все запросы будут приходить от адреса шлюза (если шлюз не спрятан еще за один NAT). Вкратце, для цепочки POSTROUTING в таблице nat добавляется действие над пакетом MASQUERADE. Этот метод позволяет узлу, который не имеет общедоступного IP-адреса, обмениваться данными с другими узлами через посредника (шлюз), расположенного между ним и Интернетом. Хорошая статья про iptables: https://www.k-max.name/linux/netfilter-iptables-v-linux/.

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o ens160 -j MASQUERADE

Кроме включения маскарадинга, нужно добавить правило в таблицу filter (цепочка FORWARD), позволяющее хождение трафика с внешней сети во внутренние для пакетов, открывающих новый сеанс, который связан с уже открытым другим сеансом (RELATED), и пакетов, которые уже являются частью существующего сеанса (ESTABLISHED).

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens160 -o ens192 -m state --state RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens160 -o ens224 -m state --state RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --reload
по порту 9090 должен открываться 192.168.211.3 по порту 9090, т.е. сервис Prometheus
firewall-cmd --permanent --zone=public --add-port=9090/tcp
firewall-cmd --permanent --zone=public --add-forward-port=port=9090:proto=tcp:toport=9090:toaddr=192.168.211.3
firewall-cmd --reload
через 3000 должен открываться 192.168.111.5 по порту 3000, т.е. сервис Grafana
firewall-cmd --permanent --zone=public --add-port=3000/tcp
firewall-cmd --permanent --zone=public --add-forward-port=port=3000:proto=tcp:toport=3000:toaddr=192.168.111.5
firewall-cmd --reload
с 9126 и 9127 должны открываться 192.168.211.3 и 192.168.111.5 соответственно по порту 9126, т.е. Exporter telegraf
firewall-cmd --permanent --zone=public --add-port=9126/tcp
firewall-cmd --permanent --zone=public --add-port=9127/tcp
firewall-cmd --permanent --zone=public --add-forward-port=port=9126:proto=tcp:toport=9126:toaddr=192. 168.211.3
firewall-cmd --permanent --zone=public --add-forward-port=port=9127:proto=tcp:toport=9126:toaddr=192.168.111.5
firewall-cmd --reload
Заключение

В статье постарался рассмотреть типовые задачи, для решения которых потребуется Firewall на CentOS 7. К сожалению, это лишь малая часть от того, какими возможностями обладает этот инструмент.

Управление портами в Linux (Ubuntu/Debian/CentOS)

Как много времени проходит с момента заказа сервера на хостинге до первого подключения к готовому серверу? Несколько минут. На сколько полученный сервер готов к тому, чтобы использовать его на полную? На 100%. Ну или почти на 100. Точнее, совсем не на 100. Новый сервер подобен новорождённому ребёнку. У него одежды, нет приобретённого иммунитета и нет почти никаких навыков. Он уязвим для любого внешнего воздействия. И защиту от окружающих угроз мы должны ему дать. Наш новый сервер на начальном этапе не готов противостоять всему, что приходит к нему извне. А значит, его необходимо оснастить защитой. Такая защита для сервера – брандмауэр, или файрвол (firewall), или межсетевой экран.

Обмен информацией между узлами сети происходит посредством портов открытых для использования на узлах. Для того, чтобы иметь гарантии прохождения исключительно легитимного трафика, следует уметь управлять портами нашего сервера при помощи брандмауэра.

Управление портами в Ubuntu и Debian

В операционных системах Ubuntu и Debian для управления брандмауэром довольно часто применяется утилита iptables. Её упрощённым интерфейсом является UFW (Uncomplicated Firewall). Открытие доступа к серверу для какого-либо приложения происходит путём регистрации этого приложения в UFW.

В Ubuntu интерфейс UFW как правило присутствует по умолчанию, в Debian же необходимо будет сначала его проинсталлировать. Перед установкой брандмауэра рекомендуется обновить репозитории:

$ sudo apt update
$ sudo apt install ufw

Список приложений, зарегистрированных в брандмауэре, доступен по следующей команде:

$ sudo ufw app list

Если вы производите первоначальную настройку межсетевого экрана используя подключение к серверу по ssh, логично было бы сразу же прописать в UFW соответствующее этому протоколу правило:

$ sudo ufw allow SSH

Эту команду также можно применить используя соответствующий номер порта вместо имени протокола. Для ssh это, как правило, порт 22:

$ sudo ufw allow 22 

В Ubuntu команда для разрешения подключения по ssh выглядит как:

$ sudo ufw allow OpenSSH

Для того, чтобы межсетевой экран начал работать, его необходимо запустить:

$ sudo ufw enable

Теперь, можно добавить в UFW правило, которое позволит разрешить передачу данных, например, по порту 80, или другими словами, при помощи протокола http. Это можно прописать командой:

$ sudo ufw allow 80

либо:

$ sudo ufw allow http

По аналогии можно также разрешить трафик с использованием порта 443, то есть по протоколу https:

$ sudo ufw allow 443

или:

$ sudo ufw allow https

Подобными инструкциями можно давать разрешения для подключений, использующих несколько портов. Например, так выглядит команда на открытие целого диапазона портов (32810-32814):

$ sudo ufw allow 32810:32814/udp

Также, помимо номеров портов и названий протоколов, в разрешительных правилах есть возможность использовать IP-адреса. Вот как выглядит команда, разрешающая подключение только с IP-адреса 10.10.10.233:

$ sudo ufw allow from 10.10.10.233

Или из одной определённой подсети:

$ sudo ufw allow from 10.10.10.0/24

Или с одного определённого IP-адреса и только по одному определённому порту:

$ sudo ufw allow from 10.10.10.233 to any port 22

Естественно существует возможность и закрыть доступ для уже открытого подключения через определённый порт. Для этого используется команда deny. Следующей командой можно запретить подключения по протоколу http:

$ sudo ufw deny http

Инструкция для закрытия всех подключений с определённого IP-адреса выглядит следующим образом:

$ sudo ufw deny from 10.10.10.233

где 10.10.10.233 – IP-адрес, для которого будут закрыты все соединения на наш сервер.

Уже созданные правила можно также удалить. Сделать это можно по номеру правила. Чтобы узнать номера правил, используйте следующую команду:

$ sudo ufw status numbered

Вывод данной команды выглядит следующим образом:

Номера правил указаны в скобках в начале строки. Например, правило для подключения по 443-му порту имеет номер 3. Исходя из этого, команда для удаления этого правила будет выглядеть как:

$ sudo ufw delete 3

То же самое можно сделать командой:

$ sudo ufw delete allow 443/tcp

Посмотреть текущее состояние межсетевого экрана позволяет команда:

$ sudo ufw status

Для отключения брандмауэра служит следующая инструкция:

$ sudo ufw disable

Управление портами в Centos

Клиентским интерфейсом для работы с межсетевым экраном в Centos является программа firewalld. Как правило, firewalld уже по умолчанию входит в состав служб Centos. Но если вдруг это не так, для его установки используйте следующие команды:

$ sudo dnf update -y
$ sudo dnf install firewalld -y

Если окажется, что firewalld уже был установлен в системе, команда вернёт следующее сообщение:

Текущее состояние службы можно увидеть набрав команду:

$ systemctl status firewalld

Если служба работает штатно, то вывод команды будет выглядеть так:

Список приложений, которым доступ в firewalld уже предоставлен, можно увидеть с помощью команды:

$ sudo firewall-cmd --permanent --list-all

Такие приложения перечислены в строке services:

Чтобы предоставить приложению или протоколу, например, http, возможность производить подключения к нашему серверу, необходимо использовать команду следующего вида:

$ sudo firewall-cmd --permanent --add-service=http

Этот протокол должен добавиться в строку services:

Аналогичным образом можно открыть доступ для подключений к серверу по протоколу https:

$ sudo firewall-cmd --permanent --add-service=https

В firewalld также есть возможность предоставить доступ для подключений по определённому порту. Так, например, будет выглядеть команда для открытия доступа по udp-порту 32810:

$ sudo firewall-cmd --zone=public --add-port=32810/udp

А так пишется команда для открытия доступа по пулу портов, например, для udp-портов с 32811 по 32814:

$ sudo firewall-cmd --zone=public --add-port=32811-32814/udp

И чтобы убедиться, что данные порты добавлены в список открытых, необходимо использовать следующую инструкцию:

$ sudo firewall-cmd --zone=public --list-ports

Доступ для подключений по определённому порту можно также и заблокировать. Например, закрытие доступа по udp-порту 32814 осуществляется командой:

$ sudo firewall-cmd --zone=public --remove-port=32814/udp

И наконец, для применения всех внесённых изменений, брандмауэр необходимо перезапустить:

$ sudo firewall-cmd --reload

Заключение

Итак, мы рассмотрели установку и запуск межсетевых экранов в операционных системах Linux, таких как Ubuntu, Debian и Centos. А также, мы научились открывать доступ для подключений к нашему серверу через определённые порты и протоколы.

linux — порт 80 закрыт в Centos 7 с сервисом firewalld

Задавать вопрос

спросил

Изменено
2 года, 2 месяца назад

Просмотрено
8к раз

Я использую Centos 7 и пытаюсь открыть порты 80 и 443.

Следуя инструкциям от
Centos 7 — открыть порт брандмауэра
, RHEL7: как начать работу с Firewalld, как открыть http-порт 80 в Redhat 7 Linux с помощью firewall-cmd и некоторых других, у меня есть следующее:

 [ricardo@m42srv02 ~]$ firewall-cmd --list -все
  публичный (по умолчанию, активный)
  интерфейсы: enp0s3
  источники: 0.0.0.0/0
  сервисы: dhcpv6-клиент http https ssh
  порты:
  маскарад: нет
  форвард-порты:
  icmp-блоки:
  богатые правила:
[рикардо@m42srv02 ~]$
 

Даже если я добавлю порты 80/tcp и 443/tcp вместо добавления службы, результат тот же, с другой машины:

 [root@m42srv01 ~]# nmap -T4 -sV -p 1-444 192. 168.1.12
Начиная с Nmap 5.51 ( http://nmap.org ) 04.06.2015 04:33 CEST
Отчет сканирования Nmap для 192.168.1.12
Хост работает (задержка 0,017 с).
Не показано: 441 отфильтрованный порт
ПОРТОВАЯ СЛУЖБА ВЕРСИЯ
22/tcp open ssh OpenSSH 6.6.1 (протокол 2.0)
80/tcp закрытый http
443/tcp закрыт https
MAC-адрес: 08:00:27:C1:8D:25 (Cadmus Computer Systems)
Обнаружение службы выполнено. Пожалуйста, сообщайте обо всех неверных результатах на http://nmap.org/submit/.
Nmap выполнен: 1 IP-адрес (1 хост включен) просканирован за 4,28 секунды.
[root@m42srv01 ~]#
 

Я пробовал добавлять службы и порты с параметром —permanent, с источниками и без них, всегда перезагружая брандмауэр после каждого изменения и даже иногда перезапуская службу firewalld, но эти порты всегда закрыты.

Iptables отключен.

  • linux
  • брандмауэр
  • centos7

Попробуйте: firewall-cmd --zone=public --add-port=80/tcp --permanent

Работает для меня на CentOS Linux выпуск 7. 1.1503 ( ядро)

2

Сначала установите и запустите службу firewalld

 sudo yum install -y firewalld
sudo systemctl запустить firewalld
 

Затем откройте порты 80 и 443 (и ssh 22 для удаленной оболочки, если необходимо)

Используйте флаг [—permanent], чтобы сохранить изменения после перезагрузки системы

 sudo firewall-cmd --zone=public --permanent --add -порт=80/TCP
sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
sudo firewall-cmd --zone=public --permanent --add-port=22/tcp
 

Затем перезагрузите службу firewalld, чтобы активировать новую конфигурацию

 sudo systemctl reload firewalld
 

0

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Проблема с открытым портом

в CentOS

спросил

Изменено
5 лет, 6 месяцев назад

Просмотрено
4к раз

Я работаю на машине с CentOS 6. Я пытался следовать следующим руководствам:

  • Как открыть порт в CentOS
  • http://ask.xmodulo.com/open-port-firewall-centos-rhel.html

Если я запускаю nmap ipofmachine на целевой машине, я получаю странный результат.

 Хост работает (задержка 0,0079 с).
Не показано: 996 отфильтрованных портов
ГОСУДАРСТВЕННАЯ СЛУЖБА ПОРТА
22/tcp открыть ssh
80/tcp закрытый http
443/tcp закрыт https
8080/tcp закрытый http-прокси
 

Тем не менее, когда я запускаю sudo iptables -L , я получаю следующий вывод:

 Chain INPUT (политика ACCEPT)
целевая защита выбор источника назначения
ПРИНЯТЬ tcp -- в любом месте tcp dpt:webcache
ПРИНЯТЬ tcp -- в любом месте tcp dpt:webcache
ПРИНЯТЬ tcp -- в любом месте tcp dpt:http
ПРИНИМАТЬ все -- в любом месте в любом месте СВЯЗАННО, УСТАНОВЛЕНО
ПРИНЯТЬ icmp -- везде где угодно
ПРИНИМАТЬ все -- в любом месте в любом месте
ПРИНЯТЬ tcp -- в любом месте в любом месте NEW tcp dpt:ssh
ПРИНЯТЬ tcp -- в любом месте в любом месте NEW tcp dpt:http
ПРИНЯТЬ tcp -- в любом месте в любом месте NEW tcp dpt:https
ПРИНЯТЬ tcp -- в любом месте в любом месте NEW tcp dpt:webcache
REJECT all -- везде, где угодно
Сеть FORWARD (политика ACCEPT)
целевая защита выбор источника назначения
REJECT all -- везде, где угодно
Цепочка OUTPUT (политика ACCEPT)
целевая защита выбор источника назначения
 

Я что-то упустил? Дайте мне знать, если вам нужна дополнительная информация (я пытаюсь открыть порт 8080).