Как я могу заблокировать UDP-соединения с конкретного IP-адреса, используя nftables?

Вопрос или проблема

Я экспериментирую с использованием nftables на Raspberry Pi и системе Debian 12.

Я могу блокировать TCP IP-адреса следующим образом:

ip saddr 192.168.1.98 counter packets 0 bytes 0 drop 

Вышеуказанное заблокирует все TCP-соединения, но не UDP-соединения.

Может кто-то объяснить, как заблокировать оба?

Вот мой текущий файл nttable.conf (простой)

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0;
        ip protocol icmp counter accept comment "принимать все типы ICMP - это пинг"
        ip saddr 192.168.1.98 counter packets 0 bytes 0 drop
        ip saddr 192.168.1.7 counter packets 0 bytes 0 drop 
        # принимать любой трафик локального хоста
        iif lo accept

        # принимать трафик, исходящий от нас
        ct state established,related accept

        # активируйте следующую строку, чтобы принимать общие локальные службы
        tcp dport { 22, 80, 443} ct state new accept
        udp dport {4711,25565,5353 ,59122 ,57324 ,631,19132 ,45091 } ct state new accept

        # Пакеты ICMPv6, которые не должны быть заблокированы, см. https://tools.ietf.org/html/rfc4890#section-4.4.1
        meta nfproto ipv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-reply, echo-request, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, 148, 149 } accept
        ip6 saddr fe80::/10 icmpv6 type { 130, 131, 132, 143, 151, 152, 153 } accept
        

        # считать и блокировать любой другой трафик
        counter drop
    }
    # из gentoo
    chain forward {
        type filter hook forward priority 0; policy drop;
        counter comment "считать заблокированные пакеты"
    }

    # Если вы не считаете пакеты, эту цепочку можно пропустить.
    chain output {
        type filter hook output priority 0; policy accept;
        counter comment "считать принятые пакеты"
    }
}

Вы можете использовать meta l4proto { tcp, udp } после имени интерфейса или в вашем случае, поля ip saddr ..., и перед counter или любой спецификацией порта.

Это укажет оба типа соединений TCP и UDP в одном правиле.

Ответ или решение

Чтобы заблокировать UDP-соединения с определённого IP-адреса с помощью nftables на Raspberry Pi и Debian 12, вам необходимо добавить соответствующую строку в ваш конфигурационный файл nftables.conf. Давайте детально рассмотрим, как это сделать.

Основы работы с nftables

nftables — это современный интерфейс для управления iptables, который упрощает администрирование правил фильтрации сетевого трафика. Главное преимущество использования nftables в том, что он позволяет задавать более гибкие и мощные правила.

Пример конфигурации

В вашем текущем файле конфигурации следует добавить правило для блокировки UDP-трафика от указанного IP-адреса. Вот как это можно сделать:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0;
        ip protocol icmp counter accept comment "принимать все типы ICMP - это пинг"
        ip saddr 192.168.1.98 meta l4proto udp counter packets 0 bytes 0 drop comment "блокировать UDP трафик с 192.168.1.98"
        ip saddr 192.168.1.98 counter packets 0 bytes 0 drop comment "блокировать TCP трафик с 192.168.1.98"
        ip saddr 192.168.1.7 counter packets 0 bytes 0 drop
        # принимать любой локальный трафик
        iif lo accept

        # принимать трафик, исходящий от нас
        ct state established,related accept

        # активировать следующую строку для принятия общих локальных сервисов
        tcp dport { 22, 80, 443 } ct state new accept
        udp dport { 4711, 25565, 5353, 59122, 57324, 631, 19132, 45091 } ct state new accept

        # ICMPv6 пакеты, которые не должны быть заблокированы
        meta nfproto ipv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-reply, echo-request, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, 148, 149 } accept
        ip6 saddr fe80::/10 icmpv6 type { 130, 131, 132, 143, 151, 152, 153 } accept

        # считать и блокировать любой другой трафик
        counter drop
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
        counter comment "считать заблокированные пакеты"
    }

    chain output {
        type filter hook output priority 0; policy accept;
        counter comment "считать принятые пакеты"
    }
}

Объяснение изменений

  1. Блокировка UDP: В строке ip saddr 192.168.1.98 meta l4proto udp counter packets 0 bytes 0 drop comment "блокировать UDP трафик с 192.168.1.98" добавляется фильтр для UDP-соединений от IP-адреса 192.168.1.98. Использование meta l4proto udp позволяет явно задать протокол, который вы хотите заблокировать.

  2. Блокировка TCP: Существующее правило ip saddr 192.168.1.98 counter packets 0 bytes 0 drop также остается для блокировки TCP-соединений с тем же адресом.

  3. Комментарии: Добавление комментариев в строчки позволяет лучше понимать, что делает каждое правило, облегчая будущую модификацию конфигурации.

Применение изменений

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

sudo nft -f /path/to/your/nftables.conf

Замена /path/to/your/nftables.conf на фактический путь к вашему файлу.

Заключение

Теперь вы успешно настроили nftables для блокировки как UDP, так и TCP трафика с указанных IP-адресов. Это решение улучшит безопасность вашего Raspberry Pi и системы Debian 12, управляя нежелательным сетевым трафиком с помощью гибкой и мощной системы фильтрации nftables.

Оцените материал
Добавить комментарий

Капча загружается...