SCROLL
Среднее время на прочтение: 1 мин.

Блокирование IP-адреса при помощи iptables и nftables в Linux

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

В Linux обычно всегда установлена по умолчанию одна из этих утилит — iptables1 или nftables2. Обе утилиты позволяют фильтровать трафик и контролировать доступ, но они имеют различия в функционале и синтаксисе. Рассмотрим как заблокировать IP-адрес с помощью iptables и nftables.

Вариант с iptables

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

iptables -A INPUT -s XXX.XXX.XXX.XXX -j DROP

Пояснения:

  • -A INPUT : добавляет правило в цепочку INPUT (входящий трафик),
  • -s XXX.XXX.XXX.XXX : указывает IP-адрес, который нужно заблокировать,
  • -j DROP : означает, что пакеты с этого IP-адреса будут просто отброшены, без ответа.

Можно использовать REJECT вместо DROP:

  • DROP — просто закрывает соединение и не отправляет ничего в ответ. Не дает информации о том, что порт заблокирован (порты показываются как «filtered»).
  • REJECT — сбрасывает соединение и отправляет в ответ сообщение, указанное в опции --reject-with. По умолчанию отправляется host is unreachable. Требует дополнительных ресурсов на отправку ответов.
iptables -A INPUT -s XXX.XXX.XXX.XXX -j REJECT
По умолчанию все изменения, внесенные в iptables, исчезают после перезагрузки сервера. Чтобы сохранить настройки на постоянной основе, можно установить пакет iptables-persistent, который автоматически сохраняет правила и восстанавливает их после перезагрузки.

Для удаления правила по номеру или полному описанию, например, чтобы удалить заблокированный IP-адрес, используйте:

iptables -D INPUT -s XXX.XXX.XXX.XXX -j DROP

Вариант с nftables

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

nft add rule inet filter input ip saddr XXX.XXX.XXX.XXX drop

Пояснения:

  • inet : это семейство протоколов, которое включает как IPv4, так и IPv6,
  • filter : это таблица фильтрации,
  • input : цепочка входящего трафика,
  • ip saddr XXX.XXX.XXX.XXX : указывает на фильтрацию пакетов с определённого исходного IP-адреса,
  • drop : действие, которое будет выполнено с пакетами (в данном случае, пакеты будут отброшены).

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

nft add rule inet filter input ip saddr XXX.XXX.XXX.XXX reject with icmp host-unreachable

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

nft list ruleset > /etc/nftables.conf

Чтобы удалить правило, добавленное для блокировки IP-адреса с помощью nftables, можно использовать команду для удаления правила из таблицы.

nft delete rule inet filter input ip saddr XXX.XXX.XXX.XXX drop
  1. Iptables — это утилита для фильтрации и управления сетевым трафиком в операционных системах на базе Linux. Она работает через интерфейс Netfilter, который встроен в ядро Linux, и позволяет администраторам настраивать брандмауэр (межсетевой экран), блокируя или разрешая определенные виды трафика. ↩︎
  2. Nftables — это более новый инструмент для фильтрации сетевого трафика, который объединяет функциональность нескольких утилит, таких как iptables, ip6tables, arptables и ebtables, в одну систему. Основным преимуществом nftables является более простой синтаксис и улучшенная производительность. ↩︎
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.