- Как заблокировать ip в iptables
- Как заблокировать ip с помощью iptables
- 1. Как заблокировать конкретный IP
- 2. Как заблокировать подсеть iptables?
- 3. Как заблокировать IP сетевом интерфейсе?
- 4. Как разблокировать IP адрес?
- Выводы
- Как разрешить или заблокировать порт и IP-адрес с помощью Firewalld, iptables и UFW в Linux
- Firewalld
- Iptables
- UFW — Uncomplicated Firewall
Как заблокировать 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-адрес с помощью Firewalld, iptables и UFW в Linux
В Linux брандмауэр необходим для контроля входящего и исходящего сетевого трафика. Разрешить или заблокировать IP-адреса и порты с помощью брандмауэра очень просто. Ниже приведены команды для разрешения или блокирования IP-адресов и портов с помощью различных брандмауэров.
Firewalld
Firewalld — это инструмент управления брандмауэром в ОС Linux. Он конфигурируется с помощью XML-файлов. Мы можем использовать интерфейс командной строки firewall-cmd для настройки и управления правилами брандмауэра.
Разрешить входящий трафик порта 80. Приведенная ниже команда разрешит трафик для порта 80, до перезапуска.
sudo firewall-cmd --zone=public --add-port=80/tcp
Разрешите входящий порт 80 в брандмауэре, постянно.
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
Запретите исходящий порт номер 25. Следующая команда заблокирует все исходящие соединения с порта 25.
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -m tcp -d 127.0.0.1 --dport=25 -j ACCEPT firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport=25 -j REJECT firewall-cmd --reload
Запретите входящий порт номер 80. Следующая команда запретит весь трафик для порта 80.
sudo firewall-cmd --remove-port=80/tcp --permanent
Выполните приведенную ниже команду для блокирования IP-адреса в Firewalld. Замените 173.248.192.12 на ваш IP-адрес.
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='173.248.192.12' reject".
Откройте порт для определенного IP-адреса в Firewalld. Добавьте IP-адрес источника и порт (3306), который вы хотите открыть на локальном сервере Linux. После этого перезагрузите настройки firewalld, чтобы применить изменения.
firewall-cmd --zone=mariadb-access --add-source=173.248.192.12 --permanent firewall-cmd --zone=mariadb-access --add-port=3306/tcp --permanent firewall-cmd --reload
Iptables
Iptables использует набор таблиц, в которых есть цепочки, содержащие набор встроенных или определенных пользователем правил. Используя эти правила, мы можем фильтровать сетевой трафик на машинах Linux.
Выполните следующую команду, чтобы разрешить все входящие соединения HTTP (порт 80).
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Вторая команда разрешает исходящий трафик установленных HTTP-соединений, что необходимо, если политика исходящих соединений не установлена на ACCEPT.
Выполните приведенную ниже команду, чтобы разрешить несколько входящих портов. Команда ниже будет принимать трафик с портов 22, 53 и 80.
/sbin/iptables -A INPUT -p tcp --match multiport --dports 22,53,80 -j ACCEPT
Запретите входящий порт 80 с помощью IPtables. Следующая команда запретит все входящие соединения для порта 80.
/sbin/iptables -A INPUT -p tcp --dport 80 -j DROP /sbin/service iptables save
Заблокируйте IP-адрес в IPtables. Замените 173.248.192.11 на ваш IP-адрес.
sudo iptables -A INPUT -s 173.248.192.11 -j DROP
Открытие порта для определенного IP-адреса в IPtables. Разрешить входящий SSH с определенного IP-адреса или подсети.
sudo iptables -A INPUT -p tcp -s 173.248.192.11 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
UFW — Uncomplicated Firewall
UFW также известен как Uncomplicated Firewall. Он подходит для брандмауэров на основе хостов. Он поддерживает IPv4 и IPv6.
Разрешить входящий порт 80. Следующая команда разрешит весь трафик с порта 80.
Разрешить несколько входящих портов. Команда ниже разрешит входящий трафик с портов 53, 80 и 443.
Запретить входящий трафик с порта 80. Приведенная ниже команда запретит весь входящий трафик для порта 80.
Запретить исходящий порт 25. Следующая команда запретит весь исходящий трафик с порта 25.
Заблокировать IP-адрес в UFW. Вы можете заблокировать любой IP-адрес для входящего трафика на вашем компьютере.
sudo ufw deny from 173.248.192.11
Открыть порт для определенного IP-адреса в UFW. Следующая команда откроет порт 80 для указанного IP-адреса. Вы можете заменить его на свой IP-адрес.
sudo ufw allow from 173.248.192.11 to any port 80