Настройка 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 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 -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: |
|
|
|
|
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 --permanentCentOS (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