- Как заблокировать ip в iptables
- Как заблокировать ip с помощью iptables
- 1. Как заблокировать конкретный IP
- 2. Как заблокировать подсеть iptables?
- 3. Как заблокировать IP сетевом интерфейсе?
- 4. Как разблокировать IP адрес?
- Выводы
- 📑 Блокирование ip адреса при помощи iptables
- Как заблокировать IP адреса через ufw
- Блокировка определенных IP адресов через ufw
- Блокировка определенных IP и номера порта через ufw
- Закрытие определенных IP, номеров портов и протоколов через ufw
- Как удалить блокировку и разблокировать IP адресов
Как заблокировать ip в iptables
При работе в любой сети передачи данных, например, локальной вычислительной сети (ЛВС), сети Интернет, часто возникает необходимость ограничить доступ какого-то конкретного узла к другому узлу сети, или конкретного узла ко всем компьютерам, находящимся под вашим управлением. Каждый компьютер, использующий при обмене данными протокол IPv4 или IPv6, имеет уникальный, в определенных рамках, номер.
Этот номер называется IP адресом. Мы рассмотрим в нашей статье блокировку IP-адреса IPv4 для ограничения доступа узла с данным идентификатором к определенному компьютеру, на котором мы настраиваем правила брандмауэра Netfilter с помощью пакета iptables. В прошлых статьях мы изучили возможность просматривать настроенные правила, закрывать и открывать порты. Теперь займёмся блокированием нежелательных для нас участников сетевого обмена информацией.
Как заблокировать ip с помощью iptables
1. Как заблокировать конкретный IP
Для блокирования IP адреса используются действия DROP и REJECT. Рассмотрим общий синтаксис действия по блокированию.
sudo i ptables [ -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, позволит удаленному узлу понять, что пакет был отброшен из-за правил межсетевого экрана.
Также мы рассмотрели возможность блокирования пакетов на конкретном интерфейсе компьютера, что позволяет писать очень гибкие правила, имея в наличии несколько сетевых интерфейсов, подключенных к разным сегментам сети.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
📑 Блокирование ip адреса при помощи iptables
Достаточно часто при работе с VDS возникает необходимость заблокировать особо надоедливые IP адреса. Для портов HTTP можно конечно использовать плагины CMS, настройки .htacess или nginx.conf. Но есть еще порты SSH сервера, почтового сервера и т.п.
Лучше всего, с наименьшими затратами, блокировать ip адреса при помощи iptables (для ipv4). Iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) Netfilter для ядер Linux, начиная с версии 2.4.
Существенно облегчает жизнь использование fail2ban. Но иногда нужно просто забанить какой то ip-шник без всяких правил и ко всему серверу.
Самый простой и эффективный способ заблокировать ip:
sudo iptables -A INPUT -s XXX.XXX.XXX.XXX -j DROP
Этой командой добавляется правило блокирующее с ip адреса XXX.XXX.XXX.XXX все входящие запросы к серверу.
Вместо DROP можно поставить REJECT. Насчет целесообразности использования того или другого можно услышать диаметрально противоположные мнения.
DROP — просто закрывает соединение и не отправляет ничего в ответ. Соединение потом убивается по таймауту, время которого при желании можно сократить. В итоге при множестве запросов мы не посылаем ничего в ответ. Однако при сканировании закрытых портов, они будут помечаться как filtered, что говорит, что что-то всё-таки слушает порт.
REJECT — сбрасывает соединение и отправляет в ответ сообщение, указанное в опции —reject-with. По умолчанию отправляется host is unreachable. При множестве запросов — множество ответов, но при сканировании порты будут unreachable. Ресурсов сервера будет потребляться больше.
Посмотреть все правила можно командой:
sudo iptables -n -L -v --line-numbers
- -L : Показать список правил.
- -v : Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы ‘K’, ‘M’ or ‘G’.
- -n : Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).
- —line-numbers: Нумерация правил.
На экране получим нечто подобное:
Chain INPUT (policy ACCEPT 6796 packets, 3406K bytes) num pkts bytes target prot opt in out source destination 1 926 46804 DROP all -- * * XXX.XXX.XXX.XXX 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 6697 packets, 4944K bytes) num pkts bytes target prot opt in out source destination
Разблокировать строку можно по номеру правила:
или указав правило полностью:
sudo iptables -D INPUT -s XXX.XXX.XXX.XXX -j DROP
Настроенные блокировки ip будут действовать до следующей перезагрузки системы. Чтобы они восстанавливались при последующих загрузках системы, можно использовать разные методы.
Один из самых простых – установить пакет iptables-persistent, с помощью которого можно будет сохранять создаваемые правила в отдельные конфигурационные файлы, которые в свою очередь будут автоматически загружаться после перезагрузки системы.
sudo apt-get install iptables-persistent
Для сохранения правил нужно набрать:
sudo service iptables-persistent save
Как заблокировать IP адреса через ufw
В статье описано, как заблокировать конкретные IP адреса через ufw.
UFW (Uncomplicated Firewall) — стандартная утилита для конфигурирования межсетевого экрана iptables для ОС Ubuntu Linux. Она использует интерфейс командной строки, состоящий из небольшого числа простых команд. UFW — это удобный способ создания базового брандмауэра IPv4 или IPv6, чтобы защитить сервер.
Блокировка определенных IP адресов через ufw
sudo ufw deny from to any
Для блокировки или закрытия всех пакетов с 192.168.1.5, вводим:
sudo ufw deny from 192.168.1.5 to any
Показываем статус фаервола включая правила. Для проверки недавно добавленных правил, вводим:
Блокировка определенных IP и номера порта через ufw
ufw deny from to any port
Для блокировки или закрытия «спамерских» IP адресов 202.54.1.5 порта 80, вводим:
sudo ufw deny from 202.54.1.5 to any port 80
Заново проверяем посредством следующей команды:
Закрытие определенных IP, номеров портов и протоколов через ufw
sudo ufw deny protofrom to any port
Для примера блокировка вредоносных IP адресов 202.54.1.1 tcp порта 22, вводим:
$ sudo ufw deny proto tcp from 202.54.1.1 to any port 22 $ sudo ufw status numbered
Блокировка подсети через ufw. Синтаксис тот же:
$ sudo ufw deny proto tcp from sub/net to any port 22 $ sudo ufw deny proto tcp from 202.54.1.0/24 to any port 22
Как удалить блокировку и разблокировать IP адресов
$ sudo ufw status numbered $ sudo ufw delete NUM
Для удаления правила # 4, вводим:
deny from 202.54.1.5 to any port 80 Proceed with operation (y|n)? y Rule deleted
Подсказка: UFW, НЕ блокирующий IP-адрес
Чтобы избежать лишних проблем с ненужной блокировкой, необходимо изменить the/etc/ufw/before.rules файл и добавить раздел “Block an IP Address” после “# End required lines”.
$ sudo vi /etc/ufw/before.rules
Добавьте свое правило для блока от спама или хакеров:
Сохраните и закройте файл. И — перезагрузите брандмауэр: