Centos ограничение доступа по ip

Обновлено: 02.07.2024

CentOS 8 поставляется с демоном межсетевого экрана с именем firewalld . Это законченное решение с интерфейсом D-Bus, которое позволяет динамически управлять брандмауэром системы.

В этом руководстве мы поговорим о том, как настроить брандмауэр в CentOS 8 и управлять им. Мы также объясним основные концепции FirewallD.

Подготовка

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

Основные концепции Firewalld

firewalld использует концепции зон и сервисов. В зависимости от зон и служб, которые вы настраиваете, вы можете контролировать, какой трафик разрешен или заблокирован в систему и из нее.

Firewalld можно настроить и управлять им с помощью утилиты командной строки firewall-cmd .

В CentOS 8 iptables заменен на nftables в качестве серверной части межсетевого экрана по умолчанию для демона firewalld.

Зоны Firewalld

Ниже приведены зоны, предоставляемые FirewallD, упорядоченные в соответствии с уровнем доверия зоны от ненадежных до доверенных:

Услуги межсетевого экрана

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

Среда выполнения Firewalld и постоянные настройки

Firewalld использует два отдельных набора конфигураций: время выполнения и постоянную конфигурацию.

По умолчанию при внесении изменений в конфигурацию Firewalld с помощью утилиты firewall-cmd изменения применяются к конфигурации среды выполнения. Чтобы сделать изменения постоянными, добавьте к --permanent параметр --permanent .

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

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

Измените постоянную конфигурацию и перезагрузите демон firewalld:

Включение FirewallD

В CentOS 8 firewalld установлен и включен по умолчанию. Если по какой-то причине он не установлен в вашей системе, вы можете установить и запустить демон, набрав:

Вы можете проверить статус службы межсетевого экрана с помощью:

Если брандмауэр включен, то команда должна печатать running . В противном случае вы увидите, что not running .

Зоны Firewalld

Если вы не изменили его, зона по умолчанию будет public , и все сетевые интерфейсы назначены этой зоне.

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

Чтобы получить список всех доступных зон, введите:

Чтобы увидеть активные зоны и назначенные им сетевые интерфейсы:

Выходные данные ниже показывают, что интерфейсы eth0 и eth1 назначены public зоне:

Вы можете распечатать настройки конфигурации зоны с помощью:

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

Команда выводит на печать огромный список с настройками всех доступных зон.

Изменение цели зоны

Цель определяет поведение зоны по умолчанию для входящего трафика, который не указан. Для него можно установить один из следующих вариантов: по default , ACCEPT , REJECT и DROP .

Чтобы установить цель зоны, укажите зону с параметром --zone и цель с параметром --set-target .

Например, чтобы изменить цель public зоны на DROP вы должны запустить:

Назначение интерфейса другой зоне

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

Чтобы назначить интерфейс другой зоне, укажите зону с параметром --zone и интерфейс с параметром --change-interface .

Например, следующая команда назначает интерфейс eth1 work зоне:

Проверьте изменения, набрав:

Изменение зоны по умолчанию

Чтобы изменить зону по умолчанию, используйте параметр --set-default-zone за которым следует имя зоны, которую вы хотите сделать по умолчанию.

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

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

Создание новых зон

Firewalld также позволяет создавать свои собственные зоны. Это удобно, когда вы хотите создать правила для каждого приложения.

В следующем примере мы создадим новую зону с именем memcached , откроем порт 11211 и разрешим доступ только с IP-адреса 192.168.100.30 :

Добавьте правила в зону:

Перезагрузите демон firewalld, чтобы изменения вступили в силу:

Услуги Firewalld

С помощью firewalld вы можете разрешить трафик для определенных портов и / или источников на основе предопределенных правил, называемых службами.

Чтобы получить список всех доступных по умолчанию услуг, введите:

Если вы --zone зону по умолчанию, вы можете не --zone параметр --zone .

Чтобы убедиться, что служба была успешно добавлена, используйте параметр --list-services :

Чтобы порт 80 --permanent открытым после перезагрузки, выполните ту же команду еще раз с параметром --permanent или выполните:

Используйте --list-services вместе с параметром --permanent чтобы проверить свои изменения:

Синтаксис удаления службы такой же, как и при ее добавлении. Просто используйте --remove-service вместо флага --add-service :

Создание новой службы FirewallD

Например, чтобы создать определение службы для Plex Media Server, вы можете использовать служебный файл SSH:

В следующем примере мы открываем порты 1900 UDP и 32400 TCP.

Сохраните файл и перезагрузите сервис FirewallD:

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

Открытие портов и исходных IP-адресов

Firewalld также позволяет быстро включить весь трафик с доверенного IP-адреса или на определенный порт без создания определения службы.

Открытие исходного IP

Чтобы разрешить весь входящий трафик с определенного IP-адреса (или диапазона), укажите зону с --zone параметра --zone и IP-адрес источника с помощью параметра --add-source .

Например, чтобы разрешить весь входящий трафик с 192.168.1.10 в public зоне, запустите:

Сделайте новое правило постоянным:

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

Синтаксис удаления исходного IP-адреса такой же, как и при его добавлении. Просто используйте --remove-source вместо --add-source :

Открытие исходного порта

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

Протокол может быть tcp , udp , sctp или dccp .

Чтобы порт --permanent открытым после перезагрузки, добавьте правило к постоянным настройкам, выполнив ту же команду с флагом --permanent или выполнив:

Синтаксис удаления порта такой же, как и при добавлении порта. Просто используйте --remove-port вместо --add-port .

Порты пересылки

Перенаправлять трафик с одного порта на другой по IP-адресу

В следующем примере мы перенаправляем трафик с порта 80 на порт 8080 на том же сервере:

В следующем примере мы перенаправляем трафик с порта 80 на порт 80 на сервере с IP 10.10.10.2 :

В следующем примере мы перенаправляем трафик с порта 80 на порт 8080 на сервере с IP 10.10.10.2 :

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

Выводы

Вы узнали, как настраивать и управлять службой firewalld в вашей системе CentOS 8.

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

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

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

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

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

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

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

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

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

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

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

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

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

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

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

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

iptables -A INPUT -i lo -j ACCEPT

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

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

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

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

iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

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

iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

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

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

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

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

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

iptables -A INPUT -p tcp -s IP_АДРЕС -m tcp --dport 22 -j ACCEPT

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

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Это позволит любым установленным исходящим соединениям получать ответы от 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, выполнить все необходимые действия по защите обычного почтового или веб-сервера. Тем не менее, можно сделать намного больше. В интернете можно найти огромное множество статей и руководств, помогающих установить более надежные настройки; данные же краткие инструкции обеспечат серверу базовый уровень безопасности.


Как заблокировать IP адрес с помощью iptables на Linux

Я установил и запустил CentOS на моем сервере , и я часто нахожу , что мой сервер подвергается нападению другими компьютерами. Грубая сила SSH атаки, сканирование портов , сканирование вирусов и так далее. В этой теме я расскажу и покажу вам на готовом примере, как можно блокировать IP -адрес на сервере Linux с помощью IPTables .

Во-первых, я буду считать что вы уже используете IPTables . Если вам нужна помощь в настройке, то прочитайте эту статью.

Как заблокировать IP -адрес ?

Пример. Я хочу заблокировать входящий запрос от некоторого IP, предположим 192.168.244.134 , то нужно войти как root и ввести следующую команду:

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

Иногда, стоит заблокировать IP следующим образом:

Как заблокировать подсеть ?

Используйте следующий синтаксис для блокирования 10.0.0.0 /8:

Как сохранить заблокированный IP -адрес ?

Чтобы сохранить заблокированный IP -адрес для Iptables в файл конфигурации , введите следующую команду:

Как разблокировать IP- адрес?

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

Чтобы разблокировать 192.168.244.134 необходимо удалить номер строки 1, для этого введите:

11 thoughts on “ Как заблокировать IP адрес с помощью iptables на Linux ”

Разблокировать IP адрес, помогите как!

В чем собственно проблема, тогда смогу помочь?

Коллеги помогите советом, я не большой специалист в iptables поэтому нужна ваша помощь.
Ситуация следующая, есть софт работающий на CentOS 6.6 который периодически отправляет информацию на различные ip компании изготовителя. Адресов много и они периодически меняются, закрыть по ip не вариант. Нужно заткнуть этот фонтан. Но оставить возможность пользователям работать и удаленно подключаться.
Те надо прибить весь трафик с хоста, который инициирован самим хостом. Но разрешить исходящий трафик для пользователей, те типа reflexive acl если пользоваться терминами cisco.

Так закрой все соединения на входящий трафик, только разреши доступ с определенных IP (можно указать маску для IP-шников). И разреши все исходящие соединения. Так же, можно сделать подключения не по логину\паролю, а по ключу. Нужно больше информации о твоей задачи.

Но тоже проблема, на Mandriva стоит VBox, на Боксе поднят почтовый сервер на Win2008 сервер H-Mail ip 192.185.0.55

IP может меняться и по этому может не блокироваться, можно попробовать вот так сделать (для некоторой подсети):

date

13.12.2019

directory

CentOS, Linux

comments

Комментариев пока нет

В этой статье мы покажем, как управлять файерволом Linux с помощью классическгого iptables вместо firewalld в CentOS / RHEL 7 для фильтрации входящего и исходящего трафика. В этой статье рассмотрена настройка iptables на CentOS 7 для фильтрации входящего трафика, на примере развернутого с нуля облачного виртуального сервера myserver01, доступного из Интернета.

Отключение firewalld в CentOS 7

В CentOS 7 для управления файрволом по умолчанию используется системная служба firewalld. Она предоставляет свой интерфейс, но в итоге также работает через утилиту iptables. При этом управление файроволом должно осуществляться либо через firewalld, либо напрямую через iptables.

firewalld не замена, а обертка вокруг iptables, пользоваться из этого можно тем, что больше нравится, или больше подходит в конкретных условиях. iptables более универсален, это базовый инструмент, но он немного сложнее в освоении. firewalld предоставляет более простой интерфейс, но, например, в CentOS 6 воспользоваться им не получится, да и для других дистрибутивов необходимо наличие нужных установочных пакетов. К тому же, если вы используете приложения, которые производят свои настройки в файрволе, они должны быть совместимы с firewalld (пример таких приложений docker, fail2ban).

Проверим статус firewalld и отключим его.

systemctl status firewalld

systemctl status firewalld в centos 7

В выводе команды обведенная красным область со словом enabled, означает включенную автозагрузку, а область, обведенная желтым, со словом active, означает, что служба запущена.

Останавливаем службу и выключаем для нее автозагрузку:

systemctl stop firewalld
systemctl disable firewalld

Повторно проверяем статус:

firewalld отключить в centos

Теперь вывод команды показывает disabled для автозагруки (выключена), и inactive означает, что служба выключена.

Синтаксис и правила iptables в CentOS/Red Hat

Iptables – это утилита, с помощью которой настраиваются правила для файрвола в Linux.

Iptables группирует правила файрвола в таблицах, основные это:

  • Таблица filter – используется для фильтрации трафика, то есть разрешения и запрещения соединений
  • Таблица nat – используется для преобразования адресов (NAT)
  • Таблица mangle – прочие модификации заголовков ip пакетов.

Для начала проверим, что iptables установлен в системе(должен быть умолчанию):

rpm -q iptables - версия iptables в centos

Вывод команды показывает, что текущая установленная версия iptables – 1.4.21.

Работа с iptables в командной строке требует root привилегий, поэтому далее будем работать под пользователем root.

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

iptables [-t таблица] -L [цепочка] [параметры]

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

Например, результат команды iptables -L, когда в таблицах еще не создано правил:

iptables -L - таблицы правил файервола в centos redhat

Рассмотрим вывод команды подробнее.

Таблица filter содержит три типа правил, так называемые chain(цепочки):

  • INPUT – в этой цепочке обрабатываются входящие ip пакеты, предназначенные для самого хоста;
  • OUTPUT – в этой цепочке обрабатываются исходящие ip пакеты от самого хоста;
  • FORWARD – эта цепочка нужна для перенаправления ip пакетов. Используется, если вы хотите использовать сервер, как маршрутизатор.

Напротив каждой цепочки указана политика по умолчанию (policy), которая определяет, что нужно делать, в случае, если соединение не попало ни в одно из правил. Политика по умолчанию может принимать два значения и определяет сам подход к организации файрвола:

  • ACCEPT – по умолчанию все соединения разрешены, правилами блокируются нежелательные соединения;
  • DROP – по умолчанию все соединения запрещены, правилами разрешаются нужные соединения.

Создание правил фильтрации трафика в iptables

Фильтр iptables по интерфейсу

Начнем создавать правила. Синтаксис команды для добавления нового правила в конец указанной цепочки выглядит так:

iptables [-t таблица] -A <цепочка> <критерии> -j <действие>

Для начала, разрешим трафик через локальный loopback интерфейс(127.0.0.1), что необходимо для работы некоторых приложений:

iptables -A INPUT -i lo -j ACCEPT

Разберем по порядку:

Фильтр iptables по порту, протоколу или IP адресу

Теперь добавим разрешающее правило для подключения к нашему Linux серверу по SSH на порт 22.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Допустимо указывать диапазон портов через двоеточие, например

iptables -A INPUT -p tcp -s 94.41.174.122 --dport 22 -j ACCEPT

доступ на 22 порт будет разрешен только с ip адреса 94.41.174.122.

Частично разрешим icmp запросы, 3-х типов:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

Эти правила разрешают работу утилит ping, traceroute и позволяют работать механизму для определения MTU между двумя хостами.

Фильтр iptables по состоянию соединения

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

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Здесь в критерии используется ключ -m, для загрузки модуля state, который дает возможность определить текущее состояние ip пакета из возможных:

Задание политики iptables по умолчанию

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

iptables -P INPUT DROP

Внимание: прежде чем использовать эту команду, необходимо убедиться, что ваши текущие правила разрешают вам подключиться к серверу, иначе вы просто заблокируете себе доступ!
Посмотрим на результатурующую таблицу правил iptables, добавим ключ -v, чтобы показать более подробный вывод:
iptables -L -v

iptables -L -v

Включить логи iptables

Iptables позволяет записывать информацию о проходящих ip пакетах в системный журнал. Реализуется это с помощью специфичного действия LOG над соединением, после которого, ip пакет продолжает движение по цепочке нетронутым. Для примера, создадим правило, которое будет записывать в системный журнал все события соединений на порт 445 (tcp):

iptables -A INPUT -p tcp --dport 445 -j LOG --log-prefix "IN SMB DROP: "

логи iptables

Разберем вывод:

Сохранение и восстановление правил фильтрации iptables

В заключении, настроим автозагрузку правил, после перезагрузки сервера. Для этого должен быть установлен пакет iptables-services и активирован сервис. Установим пакет через yum:

yum install iptables-services
systemctl enable iptables

Проверим статус службы iptables:

systemctl status iptables

systemctl enable iptables

Параметр автозагрузки установлен в enabled (включена), параметр active указывает, что служба запущена.

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

Можно восстановить правила из файла командой:

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

В следующей статье мы покажем, как использовать iptables для создания NAT правил перенаправления трафика для шлюза-доступа на базе CentOS из / во внутренюю сеть организации.

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