Вопрос или проблема
Я экспериментирую с использованием 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 "считать принятые пакеты"
}
}
Объяснение изменений
-
Блокировка 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
позволяет явно задать протокол, который вы хотите заблокировать. -
Блокировка TCP: Существующее правило
ip saddr 192.168.1.98 counter packets 0 bytes 0 drop
также остается для блокировки TCP-соединений с тем же адресом. -
Комментарии: Добавление комментариев в строчки позволяет лучше понимать, что делает каждое правило, облегчая будущую модификацию конфигурации.
Применение изменений
После внесения изменений сохраните файл конфигурации и выполните следующую команду для применения новых правил:
sudo nft -f /path/to/your/nftables.conf
Замена /path/to/your/nftables.conf
на фактический путь к вашему файлу.
Заключение
Теперь вы успешно настроили nftables
для блокировки как UDP, так и TCP трафика с указанных IP-адресов. Это решение улучшит безопасность вашего Raspberry Pi и системы Debian 12, управляя нежелательным сетевым трафиком с помощью гибкой и мощной системы фильтрации nftables
.