Настройка firewalld CentOS 7 с примерами команд. Centos 7 открыть 80 порт


Настройка iptables в CentOS 7

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

Вступление

Iptables в настоящее время является стандартом де-факто в среде современных linux дистрибутивов. Я даже сходу не могу припомнить, что еще используют в качестве фаервола. Так что любому администратору линукс приходится сталкиваться в своей работе с настройкой этого межсетевого экрана.

К этому фаерволу существуют разные обвязки, которые используются для более «удобной» настройки. В ubuntu есть ufw, в centos — firewalld, с другими не знаком. Лично я не вижу никакого удобства в использовании этих инструментов. Я привык настраивать линуксовый фаервол по-старинке, как научился в самом начале работы. Мне кажется это наиболее простым и удобным способом, которым я с вами и поделюсь. Суть его сводится к тому, что создается скрипт с правилами фаервола. Этот скрипт можно легко редактировать под свои нужды и переносить с сервера на сервер.

Отключение firewalld

Вопрос отключения firewalld я уже касался в теме по настройке сервера. Первым делом отключим firewalld, который присутствует в centos 7 по-умолчанию сразу после установки:

# systemctl stop firewalld

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

# systemctl disable firewalld

После этого на сервере настройки сетевого экрана становятся полностью открытыми. Посмотреть правила iptables можно командой:

# iptables -L -v -n

Дальше пойдет информация исключительно по конфигурированию только iptables. Темы firewalld я больше касаться не буду.

Установка iptables

На самом деле фаервол у нас на сервере уже стоит и работает, просто нет никаких правил, все открыто. Установить нам нужно будет дополнительные утилиты управления, без которых конфигурировать iptables невозможно. Например, нельзя будет перезапустить фаервол:

# systemctl restart iptables.service Failed to issue method call: Unit iptables.service failed to load: No such file or directory.

Или добавить в автозапуск не получится:

# systemctl enable iptables.service Failed to issue method call: No such file or directory

Чтобы подобных ошибок не было, установим необходимый пакет с утилитами:

# yum -y install iptables-services

Теперь можно добавить iptables в автозагрузку и запустить:

# systemctl enable iptables.service # systemctl start iptables.service

Настройка фаервола

Для управления правилами фаервола я использую скрипт. Создадим его:

# mcedit /etc/iptables.sh

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

Мы рассмотрим ситуацию, когда сервер является шлюзом в интернет для локальной сети.

Первым делом зададим все переменные, которые будем использовать в скрипте. Это не обязательно делать, но рекомендуется, потому что удобно переносить настройки с сервера на сервер. Достаточно будет просто переназначить переменные.

Перед применением новых правил, очищаем все цепочки:

Блокируем весь трафик, который не соответствует ни одному из правил:

Разрешаем весь трафик локалхоста и локалки:

Разрешаем делать ping:

Если вам это не нужно, то не добавляйте разрешающие правила для icmp.

Открываем доступ в инет самому серверу:

Если вы хотите открыть все входящие соединения сервера, то добавляйте дальше правило:

Делать это не рекомендуется, привожу просто для примера, если у вас появится такая необходимость.

Дальше разрешим все установленные соединения и дочерние от них. Так как они уже установлены, значит прошли через цепочки правил, фильтровать их еще раз нет смысла:

Теперь добавим защиту от наиболее распространенных сетевых атак. Сначала отбросим все пакеты, которые не имеют никакого статуса:

Блокируем нулевые пакеты:

Закрываемся от syn-flood атак:

Следом за этими правилами рекомендуется поставить правила на запрет доступа с определенных IP, если у вас имеется такая необходимость. Например, вас задолбал адрес 84.122.21.197 брутом ssh. Блокируем его:

Если вы не ставите ограничений на доступ из локальной сети, то разрешаем всем выход в интернет:

Следом запрещаем доступ из инета в локальную сеть:

Чтобы наша локальная сеть пользовалась интернетом, включаем nat:

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

И в конце записываем правила, чтобы они применились после перезагрузки:

Мы составили простейший конфиг, который блокирует все входящие соединения, кроме ssh и разрешает доступ из локальной сети в интернет. Попутно защитились от некоторых сетевых атак.

Сохраняем скрипт, делаем исполняемым и запускаем:

# chmod 0740 /etc/iptables.sh # /etc/iptables.sh

Выполним просмотр правил и проверим, все ли правила на месте:

# iptables -L -v -n

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

Открытие портов

Теперь немного расширим нашу конфигурацию и откроем в iptables порты для некоторых сервисов. Допустим, у нас работает веб-сервер и необходимо открыть к нему доступ из интернета. Добавляем правила для веб-трафика:

Было добавлено разрешение на входящие соединения по 80-му и 443-му портам, которые использует web сервер в своей работе.

Если у вас установлен почтовый сервер, то нужно разрешить на него входящие соединения по всем используемым портам:

Для корректной работы DNS сервера, нужно открыть UDP порт 53

И так далее. По аналогии можете открыть доступ для всех необходимых сервисов.

Проброс (forward) порта

Рассмотрим ситуацию, когда необходимо выполнить проброс портов с внешнего интерфейса на какой-то компьютер в локальной сети. Допустим, вам необходимо получить rdp доступ к компьютеру 10.1.3.50 из интернета. Делаем проброс TCP порта 3389:

Если вы не хотите светить снаружи известным портом, то можно сделать перенаправление с нестандартного порта на порт rdp конечного компьютера:

Если вы пробрасываете порт снаружи внутрь локальной сети, то обязательно закомментируйте правило, которое блокирует доступ из внешней сети во внутреннюю. В моем примере это правило: $IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT

Либо перед этим правилом создайте разрешающее правило для доступа снаружи к внутреннему сервису, например вот так:

$IPT -A FORWARD -i $WAN -d 10.1.3.50 -p tcp -m tcp --dport 3389 -j ACCEPT

Включение логов

Во время настройки полезно включить логи, чтобы мониторить заблокированные пакеты и выяснять, почему отсутствует доступ к необходимым сервисам, которые мы вроде бы уже открыли. Я отправляю все заблокированные пакеты в отдельные цепочки (block_in, block_out, block_fw), соответствующие направлению трафика и маркирую в логах каждое направление. Так удобнее делать разбор полетов. Добавляем следующие правила в самый конец скрипта, перед сохранением настроек:

Все заблокированные пакеты вы сможете отследить в файле /var/log/messages.

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

Как отключить iptables

Если вы вдруг решите, что firewall вам больше не нужен, то отключить его можно следующим образом:

# systemctl stop iptables.service

Эта команда останавливает фаервол. А следующая удаляет из автозагрузки:

# systemctl disable iptables.service

Отключив сетевой экран, мы разрешили все соединения.

Заключение

Как и обещал, выкладываю готовый скрипт с основным набором правил, которые мы рассмотрели iptables.sh

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

А представляете, если это был бы удаленный сервер? Ко мне так обратился один знакомый, который попросил настроить firewall на веб-сервере. Предыдущий админ заставил его 2 раза приезжать к размещению машины и сбрасывать настройки неправильно сконфигурированного экрана, что в конечном счете и привело к прекращению сотрудничества. Это было давно, но случай мне запомнился. Сейчас практически все хостинги предлагают платно или бесплатно удаленный KVM доступ. Лучше озаботиться об этом заранее.

Видео

Помогла статья? Есть возможность отблагодарить автора

Дополнительные материалы по CentOS

Настройки системы
Настройка программных комплексов Настройка отдельных программ Разное
Рекомендую полезные материалы по CentOS:
  • Установка
  • Базовая настройка
  • Настройка времени
  • Настройка сети
  • Настройка репозиториев
  • Настройка iptables
Установка CentOS 7 в конфигурации minimal или netinstall с загрузочной флешки или по сети на диск или raid раздел. Базовая настройка CentOS 7 для работы с любым функционалом. Приведены практические советы по улучшению безопасности и удобства администрирования. Как установить точное время на сервере CentOS, настроить часовой пояс, синхронизировать время с помощью ntpdate и ntpd и другое. Подробное описание настройки сети в CentOS 7 - задать ip адрес, dhcp, отключить ipv6, dns, hostname, статические маршруты и др. Рассмотрены основные моменты настройки iptables в Centos 7 - установка, добавление правил, проброс портов, nat, логирование и д.р.
 
  • Прокси сервер
  • Шлюз
  • Asterisk
  • Asterisk+Freepbx
  • Сервер VPN
  • Web сервер Apache
  • Web сервер Nginx
  • Почтовый сервер
Подробное описание настройки прокси сервера на базе CentOS 7 со связкой squid+AD+sams2, реализован запрет доступа по url и группам пользователей. Описание установки и настройки asterisk - популярной современной sip атс. Описан расширенный функционал, покрывающий большинство потребностей стандартного офиса в современной телефонии. Установка и настройка высокопроизводительного web сервера на базе nginx и php fpm. В качестве кэша используется APC.
 
  • Zabbix
  • Phpmyadmin
  • Webmin
  • Ruby
  • Обновление php
  • Vsftpd
  • Bind
  • Unison
  • Observium
  • Syslog-NG
Подробное описание установки или обновления php 7 на CentOS 7. Рассмотрен вариант отката обновления и возврата на php 5.6 или 5.4. Настройка DNS сервера BIND (Named) в CentOS 7. Рассмотрены наиболее популярные конфигурации, в том числе подробное логирование. Настройка сервера для централизованного сбора логов с удаленных устройств и серверов с помощью программы syslog-ng.
  • Настройка ssl в Apache
  • Бэкап с помощью rsync

serveradmin.ru

Как запустить Tomcat 8.5 на порт 80/удалить 8080. 8.5.16 кот, CentOS 7minimal установить, хостинг 24

Этот вопрос является уникальным для Tomcat 8.5 другие ответы на 7 и не работают, как описано

Во-первых, я мы изучали документы tomcat и онлайн-вопросы в течение 20 часов. Я построил свой сервер с нуля примерно десять раз, чтобы изучить процесс и попытаться получить четкое руководство, написанное, чтобы получить сервер и запустить для запуска нескольких загрузочных веб-приложений весной.

Я не могу на данный момент получить tomcat для запуска на порту 80, поэтому нет «8080» в конце имени домена. Он работает на порту 8080 отлично.

"NetStat -lnp Grep 80" показывает мне это:

enterProto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 449/mysqld tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/init tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 143/sshd tcp6 0 0 :::8001 :::* LISTEN 139/httpd tcp6 0 0 127.0.0.1:8005 :::* LISTEN 281/java tcp6 0 0 :::8009 :::* LISTEN 281/java tcp6 0 0 :::21 :::* LISTEN 147/vsftpd tcp6 0 0 :::22 :::* LISTEN

Так что ничего использует порт 80. systemctl статус tomcat.service = работает

брандмауэр-CMD --list-все общественности (активная) цели: по умолчанию не ICMP-блок-инверсии: нет интерфейсов: venet0 источников: услуг: DHCPv6-клиент SSH портов: 8001/TCP 80/TCP 20/TCP протоколов: маскарада: нет вперед-портов: sourceports: -блоки ICMP: богатых правил:

порта открыто по зоне.

Метод, который я пытаюсь на данный момент, чтобы изменить порт в TOMCAT/CONF/server.xml

здесь, где я изменил его:

{<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> }

Nmap и онлайн инструменты говорят, что порт закрыт, но я верю, потому что ничего не используется в этом порту. То, что я прочитал, так точно не знаю.

Также нет правил в iptables, поэтому никаких других блоков портов на месте нет.

На веб-странице отображается шоу «Этот сайт не может быть достигнуто»

Любая помощь будет высоко ценится как я потратить 20 твердых часов изучения сервера настройки и все еще озадачен о том, как на самом деле проверить, почему это не работает, но почему он работает на порту 8080.

Я пытаюсь запустить несколько webapps через tomcat. Я планирую добавить данные узла в конец файла server.xml, который я успешно выполнил на порту 8080, но не на порте 80, как и выше.

Это аналогичный вопрос предыдущим, но ответы не работают. Я пробовал их все.

stackoverrun.com

Настройка firewalld CentOS 7 с примерами команд

главная - Статьи - Linux, FreeBSD

Теги: firewalld SSH Linux

Centos 7, в отличие от CentOS 6, в базе идет с новым брандмауэром - firewalld. Его можно отключить и заменить на старый добрый iptables, но если к этому нет прямых предпосылок, то лучше привыкать к чему-то новому, а не упираться в старое. Это не значит, что Windows 10 лучше Windows 7, а Windows XP лучше Windows 7 ;) Хороший пример на эту тему - selinux. Если вначале почти все (и я тоже) его отключали и даже немного ругали, то теперь почти никто это не советует, только если есть уверенность, что так надо. Напротив, многие уже привыкли (или привыкают) пользоваться semanage. Не будем и мы сразу отключать firewalld, а попробуем, как он на вкус.

Firewalld - это не принципиально иной брандмауэр. Это другая надстройка над netfilter, поэтому если вы обладаете опытом работы с iptables, то помучившись немного вы спокойно начнете пользоваться новым инструментом.

Запуск и остановка firewalld

Проверим, запущен ли firewalld:

# systemctl status firewalld

Тут будет расширенная информация. Чтобы коротко, да (работает) или нет можно так:

# firewall-cmd --staterunning

Ок, работает.

Остановка firewalld:

# systemctl stop firewalld

Запрет автостарта:

# systemctl disable firewalld

Запуск firewalld:

# systemctl start firewalld

Включение автостарта:

# systemctl enable firewalld

Зоны firewalld

В firewalld широко используется понятие зоны. Список всех допустимых зон по-умолчанию:

# firewall-cmd --get-zonesblock dmz drop external home internal public trusted work

Назначение зон (условно, конечно):

  • drop - все входящие пакеты отбрасываются (drop) без ответа. Разрешены только исходящие соединения.
  • block - входящие соединения отклоняются (rejected) с ответом icmp-host-prohibited (или icmp6-adm-prohibited). Разрешены только инициированные системой соединения.
  • public - зона по-умолчанию. Из названия ясно, что эта зона нацелена на работу в общественных сетях. Мы не доверяем этой сети и разрешаем только определенные входящие соединения.
  • external - зона для внешнего интерфейса роутера (т.н. маскарадинг). Разрешены только определенные нами входящие соединения.
  • dmz - зона DMZ, разрешены только определенные входящие соединения.
  • work - зона рабочей сети. Мы все еще не доверяем никому, но уже не так сильно, как раньше :) Разрешены только определенные входящие соединения.
  • home - домашняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
  • internal - внутренняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
  • trusted - разрешено все.

Список всех активных зон:

# firewall-cmd --get-active-zonespublic  interfaces: enp1s0

Ага, зона public, к которой присоединен сетевой интерфейс enp1so. Дальше в зону public добавим новый порт, на котором будет висеть sshd.

Зная имя сетевого интерфейса (например, enp1s0), можно узнать, к какой зоне он принадлежит:

# firewall-cmd --get-zone-of-interface=enp1s0public

А можно узнать, какие интерфейсы принадлежат конкретной зоне:

# firewall-cmd --zone=public --list-interfacesenp1s0

Пример: разрешаем ssh на нестандартном порте

Давайте разрешим доступ к серверу по ssh на порте 2234/tcp, а не на 22/tcp, как по-умолчанию. Попутно чуть-чуть коснемся selinux.

Сначала посмотрим, что вообще разрешено постоянно на нашем сервере:

# firewall-cmd --permanent --list-allpublic (default)  interfaces:  sources:  services: ssh dhcpv6-client  masquerade: no  forward-ports:  icmp-blocks:  rich rules:

Я не использую пока ipv6, поэтому сразу уберу соотв. правило из firewalld:

# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client

Разрешим на постоянной основе (чтобы после перезагрузки не потерлось) соединение на порт 2234/tcp (на него повесим sshd):

# firewall-cmd --permanent --zone=public --add-port=2234/tcp

Перезагрузим правила:

# firewall-cmd --reload

Проверим:

# firewall-cmd --zone=public --list-ports2234/tcp

Ок, порт открыт. Редактируем конфиг sshd:

# nano /etc/ssh/sshd_config...port 2234...

# systemctl restart sshd.service

Но SELinux, которую вы, надеюсь, не отключали, не даст подключиться к ssh на нестандартном порте (порт 2234/tcp для sshd - нестандартный). Вы можете этот шаг пропустить и проверить, как сработатет защита SELinux, а можете сразу все настроить:

# yum provides semanage# yum install policycoreutils-python# semanage port -a -t ssh_port_t -p tcp 2234

Вот теперь все ок. Проверяем подключение по ssh на новом порте. Если все ок, закрываем доступ к порту 22:

# firewall-cmd --permanent --zone=public --remove-service=ssh# firewall-cmd --reload

Смотрим, что получилось:

# firewall-cmd --list-allpublic (default, active)  interfaces:  sources:  services:  ports: 2234/tcp  masquerade: no  forward-ports:  icmp-blocks:  rich rules:

Вот и все.

Разные полезные команды:

Включить режим блокировки всех исходящих и входящих пакетов:

# firewall-cmd --panic-on

Выключить режим блокировки всех исходящих и входящих пакетов:

# firewall-cmd --panic-off

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

# firewall-cmd --query-panic

Перезагрузить правила firewalld без потери текущих соединений:

# firewall-cmd --reload

Перезагрузить правила firewalld и сбросить текущие соединения (рекомендуется только в случае проблем):

# firewall-cmd --complete-reload

Добавить к зоне сетевой интерфейс:

# firewall-cmd --zone=public --add-interface=em1

Добавить к зоне сетевой интерфейс (сохранится после перезагрузки firewall):

# firewall-cmd --zone=public --permanent --add-interface=em1

Можно в конфиге ifcfg-enp1s0 указать, какой зоне принадлежит этот интерфейс. Для этого добавим ZONE=work в файл /etc/sysconfig/network-scripts/ifcfg-enp1s0. Если параметр ZONE не указан, будет назначена зона по-умолчанию (параметр DefaultZone в файле /etc/firewalld/firewalld.conf.

Разрешить диапазон портов:

# firewall-cmd --zone=public --add-port=5059-5061/udp

Маскарад (masquerade, он же nat, он же...):

Проверить статус:

# firewall-cmd --zone=external --query-masquerade

Включить:

# firewall-cmd --zone=external --add-masquerade

Здесь надо отметить, что вы можете включить masquerade и для зоны public, например.

Перенаправить входящие на 22 порт на другой хост:

# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.23

Перенаправить входящие на 22 порт на другой хост с изменением порта назначения (с 22 на 192.168.1.23:2055):

# firewall-cmd --zone=external /--add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.23

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

Не хочу firewalld! Верните мне старый iptables!

Если все же вы хотите вернуть прошлое и заменить firewalld на iptables, то сделать это совсем не трудно:

Новичкам тут не место:

# systemctl disable firewalld# systemctl stop firewalld

Ставим старый добрый iptables:

# yum install iptables-services

Запускаем брандмауэр:

# systemctl start iptables# systemctl start ip6tables

Автозапуск при включении:

# systemctl enable iptables# systemctl enable ip6tables

Для сохранения правил iptables после перезагрузки:

# /sbin/iptables-save > /etc/sysconfig/iptables# /sbin/ip6tables-save > /etc/sysconfig/ip6tables

Или по-старинке:

# service iptables save

Текущие правила находятся в файлах:/etc/sysconfig/iptables/etc/sysconfig/ip6tables

Перезапуск iptables (например, после совершения каких-либо изменений):

# systemctl restart iptables.service

Удачи!

Авторизуйтесь для добавления комментариев!

bozza.ru

[firewall] Открыть порт брандмауэра на CentOS 7 [port]

Используйте эту команду, чтобы найти свою активную зону (зоны):

firewall-cmd --get-active-zones

Он скажет либо общественность, либо dmz, либо что-то еще. Вы должны обращаться только к требуемым зонам.

В случае публичной попытки:

firewall-cmd --zone=public --add-port=2888/tcp --permanent

Затем не забудьте перезагрузить брандмауэр, чтобы изменения вступили в силу.

firewall-cmd --reload

В противном случае замените публикацию для своей зоны, например, если ваша зона - dmz:

firewall-cmd --zone=dmz --add-port=2888/tcp --permanent

CentOS (RHEL) 7, изменил брандмауэр, чтобы использовать firewall-cmd который имеет понятие зон, которое похоже на версию общедоступных, домашних и частных сетей Windows. Вы должны посмотреть here чтобы выяснить, какой из них вы должны использовать. EL7 использует public значения по умолчанию, поэтому это мои примеры ниже.

Вы можете проверить, какую зону вы используете, используя firewall-cmd --list-all и изменить ее с помощью firewall-cmd --set-default-zone=<zone> .

Затем вы узнаете, в какой зоне разрешен сервис (или порт):

firewall-cmd --permanent --zone=<zone> --add-service=http

firewall-cmd --permanent --zone=<zone> --add-port=80/tcp

Вы можете проверить, действительно ли порт открыт:

firewall-cmd --zone=<zone> --query-port=80/tcp

firewall-cmd --zone=<zone> --query-service=http

Согласно documentation ,

При внесении изменений в настройки брандмауэра в постоянном режиме ваш выбор будет действовать только при перезагрузке брандмауэра или перезагрузки системы.

Вы можете перезагрузить настройки брандмауэра с помощью: firewall-cmd --reload .

Хотя ganeshragav и Sotsir предоставляют правильные и непосредственно применимые подходы, полезно отметить, что вы можете добавить свои собственные услуги в /etc/firewalld/services . Для вдохновения посмотрите /usr/lib/firewalld/services/ , где расположены предопределенные службы firewalld.

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

Например, вы можете создать /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>

(Для получения информации о синтаксисе сделайте man firewalld.service .)

Как только этот файл будет создан, вы можете настроить firewall-cmd --reload чтобы он стал доступен, а затем постоянно добавлять его в какую-либо зону с помощью

firewall-cmd --permanent --zone=<zone> --add-service=foobar

а затем firewall-cmd --reload чтобы сразу firewall-cmd --reload его.

Лучшие ответы здесь работают, но я нашел что-то более элегантное в ответе Майкла Хэмптона на соответствующий вопрос. Опция «новый» (firewalld-0.3.9-11 +) --runtime-to-permanent для firewall-cmd позволяет создавать правила времени выполнения и тестировать их, прежде чем сделать их перманентными:

$ firewall-cmd --zone=<zone> --add-port=2888/tcp <Test it out> $ firewall-cmd --runtime-to-permanent

Или чтобы вернуть изменения только во время выполнения:

$ firewall-cmd --reload

Также см . Комментарий Антони Нгуена . Очевид

code-examples.net

Открытый порт 80 в CentOS 6.5 Flip Linux

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

Чтобы открыть порт 80, я делаю следующее:

$ sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT $ sudo /etc/init.d/iptables save

Последняя команда сохранит добавленные правила. Это правило, которое я бы использовал, чтобы открыть порт для веб-трафика.

Почему ваше правило вызывает проблемы

Если вы заметили правило, которое вы пытаетесь использовать:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Имеет цепь под названием «RH-Firewall-1-INPUT». Если у вас нет этой цепочки или ссылки из цепочки INPUT в эту цепочку, это правило никогда не будет доступно. Это правило может быть таким:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Или ваша цепочка INPUT должна ссылаться на эту цепочку RH-Firewall-1-INPUT с таким правилом:

$ sudo iptables --list Chain INPUT (policy ACCEPT) num target prot opt source destination 1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0 ....

ПРИМЕЧАНИЕ. Вы можете видеть, какие цепочки у вас есть с этой командой:

$ sudo iptables -L| grep Chain Chain INPUT (policy ACCEPT) Chain FORWARD (policy ACCEPT) Chain OUTPUT (policy ACCEPT) ...

Также могут потребоваться изменения состояния, чтобы разрешить существующие соединения.

-A INPUT -m state --state NEW,ESTABLISHED -m tcp -p tcp --dport 80 -j ACCEPT

Также, когда вы используете ключ -A вы добавляете правило для цепи INPUT . Если перед ним существуют другие правила, которые блокируют и / или мешают достижению этого правила, он никогда не будет выполнен. Таким образом, вы можете перенести его вверх, вставив вместо добавления, например:

-I INPUT -m state --state NEW,ESTABLISHED -m tcp -p tcp --dport 80 -j ACCEPT

Использование графического интерфейса

Брандмауэрами могут быть сложные животные. Таким образом, вы можете попробовать TUI вместо этого (TUI – это графический интерфейс для терминала).

$ sudo system-config-firewall-tui

Затем вы можете просматривать различные экраны, настраивая правила iptables .

Рекомендации

  • Руководство по брандмауэру Linux: таблицы, цепочки, правила для IPTables

fliplinux.com

Iptables в CentOS 7 (Linux). Что это. Настройка

#!/bin/bash

#

# Объявление переменных

export IPT="iptables"

 

# Интерфейс который смотрит в интернет

export WAN=eth0

export WAN_IP=149.154.71.205

 

# Очистка всех цепочек iptables

$IPT -F

$IPT -F -t nat

$IPT -F -t mangle

$IPT -X

$IPT -t nat -X

$IPT -t mangle -X

 

# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил

$IPT -P INPUT DROP

$IPT -P OUTPUT DROP

$IPT -P FORWARD DROP

 

# разрешаем локальный траффик для loopback

$IPT -A INPUT -i lo -j ACCEPT

$IPT -A OUTPUT -o lo -j ACCEPT

 

# Разрешаем исходящие соединения самого сервера

$IPT -A OUTPUT -o $WAN -j ACCEPT

 

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.

# Пропускать все уже инициированные соединения, а также дочерние от них

$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Пропускать новые, а так же уже инициированные и их дочерние соединения

$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешить форвардинг для уже инициированных и их дочерних соединений

$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

 

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU

$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

 

# Отбрасывать все пакеты, которые не могут быть идентифицированы

# и поэтому не могут иметь определенного статуса.

$IPT -A INPUT -m state --state INVALID -j DROP

$IPT -A FORWARD -m state --state INVALID -j DROP

 

# Приводит к связыванию системных ресурсов, так что реальный

# обмен данными становится не возможным, обрубаем

$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

 

# Рзрешаем пинги

$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT

$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

 

# Открываем порт для ssh

$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT

# Открываем порт для DNS

#$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT

# Открываем порт для NTP

#$IPT -A INPUT -i $WAN -p udp --dport 123 -j ACCEPT

#Открываем порт для NGINX

$IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT

#Открываем порт для Apache(httpd)

$IPT -A INPUT -i $WAN -p tcp --dport 8080 -j ACCEPT

 

# Логирование

# Все что не разрешено, но ломится отправим в цепочку undef

 

$IPT -N undef_in

$IPT -N undef_out

$IPT -N undef_fw

$IPT -A INPUT -j undef_in

$IPT -A OUTPUT -j undef_out

$IPT -A FORWARD -j undef_fw

 

# Логируем все из undef

 

$IPT -A undef_in -j LOG --log-level info --log-prefix "-- IN -- DROP "

$IPT -A undef_in -j DROP

$IPT -A undef_out -j LOG --log-level info --log-prefix "-- OUT -- DROP "

$IPT -A undef_out -j DROP

$IPT -A undef_fw -j LOG --log-level info --log-prefix "-- FW -- DROP "

$IPT -A undef_fw -j DROP

 

# Записываем правила

/sbin/iptables-save  > /etc/sysconfig/iptables

kilobax.ru

Troubleshooting сервер Apache в CentOS 7 не слушает соединение на 80 порту TCP IPv4

Столкнулся недавно с последствием плохо задокументированных изменений в настройках веб сервера Apache. Проявление проблемы: netstat -tlActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         Statetcp        0      0 localhost:domain        0.0.0.0:*               LISTENtcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTENtcp        0      0 localhost:smtp          0.0.0.0:*               LISTENtcp6       0      0 [::]:http               [::]:*                  LISTENtcp6       0      0 [::]:ssh                [::]:*                  LISTENtcp6       0      0 localhost:smtp          [::]:*                  LISTENtcp6       0      0 [::]:mysql              [::]:*                  LISTEN

на стеке IPv6 порт 80 слушается, но на IPv4 нет. По некоторым не убедительным объяснениям на форумах, говорилось, что теперь, якобы стеки объединили и прочий подобный бред. Проверить можно сразу же:curl http://web_server_ipcurl: (7) Failed connect to web_server_ip:80; Connection refused

в соединении отказано, на файрволле разрешения есть:firewall-cmd --list-allpublic (active)   services: dhcpv6-client ssh  ports: 3306/tcp 80/tcp

Сам сервис фактически запущен и работает:sudo systemctl status httpd● httpd.service - The Apache HTTP Server   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)   Active: active (running) since Fri 2017-03-31 10:14:44 MSK; 4min 16s ago     Docs: man:httpd(8)           man:apachectl(8) Main PID: 1181 (httpd)   Status: "Total requests: 1; Current requests/sec: 0; Current traffic:   0 B/sec"   CGroup: /system.slice/httpd.service           ├─1181 /usr/sbin/httpd -DFOREGROUND           ├─2300 /usr/sbin/httpd -DFOREGROUND           ├─2301 /usr/sbin/httpd -DFOREGROUND           ├─2302 /usr/sbin/httpd -DFOREGROUND           ├─2303 /usr/sbin/httpd -DFOREGROUND           └─2304 /usr/sbin/httpd -DFOREGROUND

Mar 31 10:14:43 HST systemd[1]: Starting The Apache HTTP Server...Mar 31 10:14:44 HST httpd[1181]: systemd[1]: Started The Apache HTTP Server.

Причина:

если раньше в конфигурационном файле Apache достаточно было указатьListen 80чтобы сервер слушал порт TCP 80 на всех интерфейсах и стеках протоколов, то теперь для IPv4 необходимо явно указать:sudo vi /etc/httpd/conf/httpd.conf Listen 0.0.0.0:80sudo service httpd restart

в результате имеем работоспособный сервис:netstat -tlActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         Statetcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTENtcp        0      0 localhost:domain        0.0.0.0:*               LISTENtcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTENtcp        0      0 localhost:smtp          0.0.0.0:*               LISTENtcp6       0      0 [::]:ssh                [::]:*                  LISTENtcp6       0      0 localhost:smtp          [::]:*                  LISTENtcp6       0      0 [::]:mysql              [::]:*                  LISTEN

mik17-hintstips.blogspot.com