Как заблокировать ip в iptables

При работе в любой сети передачи данных, например, локальной вычислительной сети (ЛВС), сети Интернет, часто возникает необходимость ограничить доступ какого-то конкретного узла к другому узлу сети, или конкретного узла ко всем компьютерам, находящимся под вашим управлением. Каждый компьютер, использующий при обмене данными протокол IPv4 или IPv6, имеет уникальный, в определенных рамках, номер.

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

Как заблокировать ip с помощью iptables

1. Как заблокировать конкретный IP

Для блокирования IP адреса используются действия DROP и REJECT. Рассмотрим общий синтаксис действия по блокированию.

sudo iptables [-t таблица] -A [цепочка] -s [IP адрес/маска] -d [IP адрес/маска] -j [действие]

Опции утилиты:

  •  -s [IP адрес/маска] -  IP адрес источника пакета, к которому мы хотим применить действие;
  • -d [IP адрес/маска] - IP адрес получателя пакета, к которому мы хотим применить действие.

Например, вот это правило чтобы запретить ip iptables блокирует все входящие на защищаемую машину пакеты от узла, с IP адресом 8.8.8.8. При этом следует заметить, что узел источник пакетов при использовании действия DROP не получит никакой ответной информации от защищаемого узла. Для него всё будет выглядеть так, как будто данный узел в данный момент отсутствует в сети.

sudo iptables -t filter -A INPUT -s 8.8.8.8/32 -j DROP

Есть второе действие для блокирования всех пакетов от конкретного узла или к конкретному узлу - это REJECT. Данное действие предусматривает при блокировании пакета отправку служебной информации источнику пакета о выполнении блокировки. То есть в данном случае узел отправитель будет уведомлен, что пакет был заблокирован Netfilter. В данном случае чтобы заблокировать ip iptables надо выполнить:

sudo iptables -t filter -A INPUT -s 8.8.8.8/32 -j REJECT

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

sudo iptables -t filter -A INPUT -s 8.8.4.4/32 -j REJECT

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

sudo iptables -t filter -A OUTPUT -d 8.8.8.8/32 -j REJECT

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

Блокирование конкретного адреса это частный случай блокирования подсети. Подсеть - это строго ограниченная часть всего пространства IP адресов, используемая для адресации определенного подмножества всех компьютеров глобальной сети. Подсеть задается маской. Маска может быть задана в виде четырех, разделенных точками, чисел или в виде одного числа. Например: 255.255.255.0 - это маска посети, и /24 - маска подсети. При чем это одинаковые маски, просто записанные в разной форме.

Не будем вдаваться в значение маски, это информация для отдельной статьи. Отметим только, что все множество адресов IPv4 разбито на сети, сети имеют классы, которые задают количество адресов в сетях, и их практическое назначение. А сети, в свою очередь разбиваются на подсети, для отдельных организаций и частных лиц. И сеть, и подсеть задаются с помощью маски сети. Теперь давайте рассмотрим как забанить диапазон ip адресов iptables.

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

sudo iptables -t filter -A INPUT -s 8.0.0.0/9 -j DROP

В данном случае мы заблокировали подсеть адресов диапазона 8.0.0.0 - 8.127.255.255. Другой вариант маски будет выглядеть так:

sudo iptables -t filter -A INPUT -s 8.0.0.0/255.128.0.0 -j DROP

Стоить заметить, что всё множество адресов IPv4 разбито на подмножества по отдельным регионам мира. Поэтому существует возможность блокировать доступ отдельных регионов мира с помощью блокирования IP сетей. Ведет выдачу IP сетей и протоколирование выданных блоков адресов организация IANA. По ссылке мы можем отследить выданные блоки и заблокировать нужные нам, как отдельные подсети. Например, это правило блокирует сеть, выданную европейскому региону:

sudo iptables -t filter -A INPUT -s 2.0.0.0/255.0.0.0 -j DROP

3. Как заблокировать IP сетевом интерфейсе?

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

sudo iptables [-t таблица] -A INPUT -i [имя интерфейса входа] -s [IP адрес/маска] -d [IP адрес/маска] -j [действие]

Для входящего сетевого интерфейса:

sudo iptables [-t таблица] -A OUTPUT -o [имя интерфейса выхода] -s [IP адрес/маска] -d [IP адрес/маска] -j [действие]

Для исходящего сетевого интерфейса. В частном случае входящий и исходящий интерфейс один и тот же.

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

sudo iptables -t filter -A INPUT -i enp0s3 -s 8.8.8.8/32 -j DROP

Чтобы заблокировать все пакеты, уходящие к машине с IP адресом 8.8.8.8, с нашего узла через интерфейс enp0s3 следует использовать правило:

sudo iptables -t filter -A OUTPUT -o enp0s3 -d 8.8.8.8/32 -j DROP

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

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

По умолчанию в межсетевом экране Netfilters используется действие ACCEPT для всех таблиц и цепочек. Поэтому, чтобы заблокировать IP адрес, необходимо добавить правило с действием DROP, что мы рассмотрели выше. Соответственно, чтобы разблокировать адрес, необходимо удалить уже установленное правило. Как удалить уже написанное правило мы рассмотрели в статье как удалить правило iptables.

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

sudo iptables -t [таблица] -P [цепочка] [действие]

Например, следующая команда установит правило по умолчанию для таблицы filter цепочки INPUT действие по умолчанию -отбрасывать пакеты:

sudo iptables -t filter -P INPUT DROP

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

sudo iptables -t filter -A INPUT -i enp0s3 -s 8.8.8.8/32 -j ACCEPT

Выводы

Итак, мы сегодня обсудили как заблокировать ip iptables или же целую подсеть адресов. Данная операция необходима, чтобы запретить доступ внешнего узла в сети к нашему компьютеру. Также у нас есть в арсенале два действия для таких правил - одно, DROP, заставит удаленную машину думать, что наш узел в данный момент вообще отсутствует в сети, а другое, REJECT, позволит удаленному узлу понять, что пакет был отброшен из-за правил межсетевого экрана.

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

2 комментария

  1. Аватар Виктор 20 января, 2020 Ответить
  2. Аватар Даниил 21 января, 2020 Ответить

Ответить

Сообщить об опечатке

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