Как включить icmp centos

Обновлено: 07.07.2024

Данное руководство демонстрирует создание простого фаервола на сервере Centos, а также рассказывает, как открыть нужные порты и закрыть остальные сервисы, отразить атаки и вернуться на VPS в случае случайной блокировки.

Руководство не является исчерпывающим, оно только показывает, как открыть некоторые порты (Apache, SSH и email) и закрыть все остальные, а также создать некоторые общие правила, блокирующие скрипты и ботов, которые ищут уязвимые VPS. Вопрос блокировки исходящего трафика не охвачен.

IPTables — простой фаервол, установленный на большинстве дистрибутивов Linux. Руководство Linux говорит, что IPTables — это инструмент управления пакетными фильтрами IPv4 и NAT, то есть, это инструмент фильтрации и блокировки интернет-трафика. IPTables включен в CentOS по умолчанию.

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

Какие порты и сервисы открыть?

Для начала нужно решить, какие сервисы должны быть открыты. На обычном сервере это, как правило, веб-сервер, почтовый сервер и SSH.

Во-первых, нужно оставить открытым порт SSH, чтобы иметь возможность подключаться к серверу удаленно; это порт 22. Для веб-трафика нужны порты 80 и 443 (порт SSL). Чтобы пользоваться электронной почтой, нужно открыть порт 25 (обычный SMTP) и 465 (защищенный SMTP). Чтобы пользователи могли получать электронную почту, откройте порт 110 (POP3) и 995 (защищенный POP3). Кроме того, нужно открыть порты IMAP (если установлен): 143 для IMAP, а также 993 для IMAP по SSL.

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

Блокировка наиболее распространенных атак

Обычно хостинг-провайдеры предоставляют ненастроенные серверы — весь трафик разрешен. Но на всякий случай можно сбросить все правила фаервола:

Затем можно добавить несколько простых правил, которые отражают наиболее распространенные атаки и защищают сервер от скрипт-кидди. Конечно, IPTables вряд ли сможет защитить сервер от серьезной DDOS или подобных атак; но, по крайней мере, этот фаервол устранит сканирующих сеть ботов, которые рано или поздно начнут искать бреши в системе безопасности данного сервера. Для начала нужно заблокировать нулевые пакеты:

Теперь фаервол не будет принимать входящих пакетов с tcp-флагами. Нулевые пакеты, по сути, разведывательные. они используются, чтобы выяснить настройки сервера и определить его слабые места. Следующее правило отражает атаки syn-flood:

Во время атаки syn-flood злоумышленник создает новое соединение, но не устанавливает никаких флагов (SYN, ACK и т.д.). Все, что ему нужно — отнять ресурсы сервера. Такие пакеты принимать не стоит. Далее нужно защитить сервер от разведывательных пакетов XMAS:

Теперь сервер защищен от некоторых общих атак, которые ищут его уязвимости.

Открытие портов выбранных сервисов

Теперь можно внести выбранные сервисы в фильтр фаервола. Чтобы внести локальный интерфейс:

iptables -A INPUT -i lo -j ACCEPT

Данная команда говорит добавить (-А) правило в фильтр входящих соединений (INPUT), разрешающее (-j ACCEPT) любой трафик, поступающий на локальный интерфейс (-i lo). Локальный хост часто используется для размещения базы данных, к которой подключаются веб-сайт и почтовый сервер. Таким образом, VPS имеет доступ к базе данных, но взломать ее через интернет нельзя.

Теперь нужно разрешить трафик веб-сервера:

Как уже было сказано, имея возможность влиять на пользователей, лучше использовать безопасные версии протоколов; к сожалению, это не всегда возможно, и клиенты будут использовать порт 25, который достаточно просто взломать. Теперь нужно разрешить пользователям читать электронную почту:

Эти два правила разрешают трафик POP3. Опять же, усилить защиту почтового сервера можно при помощи безопасной версии сервиса. Также нужно включить доступ по протоколу IMAP:

Разрешить или запретить ICMP Ping запросы.

Ограничение доступа SSH

Также нужно разрешить трафик SSH, чтобы иметь возможность подключаться к VPS удаленно. Это очень просто сделать при помощи команды:

Это действие покажет текущего пользователя (если он единственный вошедший в систему пользователь) и IP-адрес. Результат выглядит примерно так:

Теперь можно создать правило фаервола, разрешающее на порт SSH только исходящий от указанного IP-адреса трафик:

Замените фразу «IP_АДРЕС» настоящим адресом.

При необходимости можно открыть больше портов сервера, но для этого нужно сменить их номера. Тогда фаервол будет разрешать доступ только нужным сервисам. Сейчас нужно добавить еще одно правило, которое позволит устанавливать исходящие соединения (т.е. использовать ping или запускать обновления программного обеспечения):

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

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Теперь правила фаервола настроены должным образом.

Сохранение настроек

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

iptables-save | sudo tee /etc/sysconfig/iptables

Конфигурационный файл IPTables на CentOS хранится в /etc/sysconfig/iptables. Вышеприведенная команда сохранила созданные правила в данный файл. Чтобы убедиться, что все работает должным образом, перезапустите фаервол:

service iptables restart

Сохраненные правила останутся действительными даже после перезагрузки фаервола.

Как разблокировать себя на сервере?

Если случайно в конфигурациях была допущена ошибка, это может заблокировать доступ пользователя к собственному VPS. Возможно, был введен неправильный IP-адрес, и теперь фаервол не разрешает доступ с неизвестного ему адреса. Теперь к правилам нет доступа, и даже перезагрузка сервера не поможет. К счастью, существуют веб-интерфейсы, позволяющие подключиться к серверу через консоль.

Подключившись, нужно войти как root и выполнить команду:

Это сбросит все правила, и можно будет снова войти на сервер.

Итоги

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


Блокировка PING на сервер является полезным, если сервер постоянно сталкивается с какой-то DoS атакой с помощью функции PING. При использовании IPTables мы можем просто остановить запретить прохождение ICMP пакетов (собственно, запретить PING) на сервер. Перед началом этого необходимо иметь представление о том, что такое Iptables в Linux. Iptables это система межсетевого экрана с набором правил, которые контролирует входящие и исходящие пакеты. По-умолчанию в Iptables работает без каких-либо правил, вы можете создавать, добавлять, редактировать правила.

Отключения Ping используя iptables

Обьяснение некоторых параметров в iptables, которые необходимы для создания правил управления ICMP пакетами:

Ниже, я приведу наглядные примеры.

Заблокирует все входящие и исходящие ICMP пакеты на сервере.

Разрешить Ping используя iptables

Если заблокировали ping на сервере и не знаете как вернуть назад. То я сейчас расскажу как это сделать. А делается это, добавлением следующего правила в IPtables:

Данные правила разрешат прохождения ICMP пакетов с сервера и на него.

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

Временная блокировка Ping
Вы можете заблокировать временно ответы на пинг используя следующую команду

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

Запретить Ping вообще
Вы можете заблокировать пинг ответы добавляя следующий параметр в конфигурационный файл:

-w флаг используется, если вы хотите изменить некоторые настройки.

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

Вот мой полный конфиг:

и потом можно выполнить:

Но так же, можно его просто прочитать тут:
sysctl.conf

Заметка, в основном, для себя, чтобы не ошибиться и ничего не забыть. Всего, естественно, не охватить сразу, так что со временем буду добавлять записи. Подробного описания ключей и опции тут не будет, только конкретные примеры iptables.

Для работы с файлом конфигурации поставим текстовый редактор:

Итак, в стандартной установке этой программы в CentOS 7 файл правил iptables выглядит следующим образом.


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

Просмотр текущего состояния iptables:


Тут у нас 3 цепочки правил:

  • INPUT — для входящих пакетов, здесь и будут отображаться записываемые правила.
  • FORWARD — для входящих пакетов, перенаправленных на выход, в данном случае все запрещено, так как компьютер не является роутером.
  • OUTPUT — для исходящих пакетов, тут всё разрешено.

Можно посмотреть каждую цепочку отдельно, например:


2. Добавление и удаление правил iptables.

В терминале CentOS 7 последовательно выполните следующие команды:


Перезагружаем iptables:

Как уже говорилось выше, управлять правилами можно, редактируя конфигурационный файл /etc/sysconfig/iptables или используя команды. Следующая команда разрешает входящие соединения с локальной сети, записывая правило 5-ой строкой в цепочку INPUT.


Нижеприведенная команда запретит нам посещать сайт известной компании.

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

Отличия параметра I от параметра A заключается в том, что I позволяет вставлять правило в определенное место по номеру, без номера помещает правило на 1-ое место. A вставляет правило в конце цепочки. Если Вы поместите правило с помощью параметра A ниже 6-ой строки в листинге выше, то оно не сработает, так как 6-ая строка запрещает все, что не было разрешено раньше. Правила выполняются строго по очереди.

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

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

Если вы редактировали конфигурационный файл, iptables нужно перезапустить:

или, если используется systemd:

3. Примеры записи параметров в файл конфигурации.

Не забывайте про параметр A и последнюю строку в цепочках.

Разрешить входящие соединения удаленного рабочего стола xrdp:

в конфигурации iptables это выглядит так:

Разрешить или запретить ICMP Ping запросы.

Разрешить с определенной сети:

Разрешить сервер SSH на 22 порту.

Разрешить с определенной сети:

Если ставите другой порт для SSH и SELinux не отключен, то необходимы дополнительные действия, описанные в этом блоке статьи, ниже по тексту.

Разрешить сервер ProFTPd:

Синхронизация времени NTPd:

Разрешить почтовый сервер SMTP, POP3, IMAP:

Разрешить DNS сервер:

Разрешить Samba сервер для локальной сети:

Разрешить CUPS сервер печати:

Разрешить Proxy сервер для локальной сети:

Разрешить MYSQL сервер для локальной сети:

Разрешить Transmission торрент-сервер:

Разрешить Minidlna медиа-сервер для локальной сети:

4. Если ставите другой порт для SSH и SELinux не отключен.

Обычно при настройке SSH сервера советуют менять стандартный 22 порт на любой другой. Однако, если у Вас не отключен SELinux, то могут возникнуть проблемы.

На самом деле ничего сложного нет, ведь даже комментарий в конфигурационном файле /etc/ssh/sshd_config , там где мы меняем порт, говорит нам английским языком:


Но вот запустив команду,


И вот тут у новичков могут возникнуть трудности. Ошибка происходит из-за того, что в стандартной установке пакет с утилитой semanage не установлен. И пакет этот называется не так же как утилита.

Firewalld — утилита для управления встроенным в ядро Linux брандмауэром Netfilter. Несмотря на собственный синтаксис, имеет такой же принцип работы, как Iptables. Дополнительно про управление Netfilter при помощи последнего.

Установка и запуск

В некоторых системах CentOS может не оказаться firewalld. Для его установки вводим:

yum install firewalld

Для автоматического зауска вводим:

systemctl enable firewalld

И для запуска службы:

systemctl start firewalld

Общие команды для управления firewalld

Мягко перечитать правила (применить настройки):

Перечитать правила и сбросить текущие подключения:

* в официальной документации сказано, что данную команду стоит применять только в случаях проблем с firewalld.

Посмотреть созданные правила:

systemctl stop firewalld

systemctl start firewalld

systemctl disable firewalld

systemctl enable firewalld

Сохранить текущие правила, сделав их постоянными (permanent):

Управление правилами

Синтаксис

Общий синтаксис для работы с правилами:

firewall-cmd [опции] [зона] <правило>

* порядок следования параметров не важен.

  • [опции] — дополнительные параметры для создаваемого правила, например --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=6500-6700/udp

Добавить несколько правил одной командой:

firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp

Добавление сервиса

Использование служб, вместо портов, может повысить удобство управления правилами за счет объединения нескольких портов в одну службу.

Посмотреть список доступных служб:

Разрешить порт, например, для сервиса 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

Rich-Rule

rich-rule позволяет создавать правила с условиями. Рассмотрим несколько примеров:

2. Или для конкретного порта:

3. Чтобы заблокировать подсеть можно воспользоваться командой:

Список правил с условиями можно отобразить командой:

Удаление правил

Аналогично созданию, но вместо add вводим remove, например --remove-port (удалит порт) или --remove-service (службу).

Удалим правило для открытия 80-о порта:

firewall-cmd --permanent --remove-port=80/tcp

Управление зонами

Все правила в firewalld могут быть разбиты по зонам. Для каждой свой набор правил и свои сетевые интерфейсы. Это нужно использовать, если мы захотим для разных сетевых адаптеров сделать разные по строгости правила.

Посмотреть список всех имеющихся зон:

Посмотреть список используемых зон:

Информация о конкретной зоне:

firewall-cmd --list-all --zone=public

Создать правило для зоны 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

* правило включает маскарадинг на внешнем интерфейсе ens33. Где опция --direct требуется перед всеми пользовательскими правилами (--passthrough, --add-chain, --remove-chain, --query-chain, --get-chains, --add-rule, --remove-rule, --query-rule, --get-rules); nat — таблица, в которую стоит добавить правило; POSTROUTING 0 — цепочка в таблице nat; опция MASQUERADE указывает сетевому экрану менять внутренний IP-адрес на внешний.

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

Проброс портов

Проброс настраивается со следующим синтаксисом:

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.

Запретить или разрешить трафик между интерфейсами

Предположим, у нас есть два внутренних сетевых интерфейса 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

Возможные проблемы при работе с firewalld

1. Ошибка command not found (команда не найдена).

Возможные причины: не установлен пакет или не запущена служба.

Выполняем установку пакета firewalld:

yum install firewalld firewall-config

systemctl start firewalld

2. Не применяются правила.

Причина: не введена команда перезапуска правил.

Если это не помогло, делаем перезапуск со сбросом подключений:

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

systemctl restart network

В исключительных случаях, перезагружаем компьютер:

3. The interface is under control of NetworkManager and already bound to the default zone.

Ошибка появляется при попытке удалить интерфейс из зоны, настройками которого управляет NetworkManager.

Для решения открываем конфигурационный файл для настройки сетевого интерфейса, например:

И дописываем следующее:

* в данном примере сетевой интерфейс ens34 будет добавлен в зону external.

Читайте также: