Как сопоставить UDP и TCP для заданных портов в одной строке с помощью nftables

Да, всегда есть trickle. Установите его, затем попробуйте что-нибудь вроде trickle -sd 50 git clone.

-s - для автономного режима, -d - для ограничения загрузки, в КБ/с

2
06.06.2018, 16:49
2 ответа

Достаточно недавний nftables, вы можете просто написать:

meta l4proto {tcp, udp} th dport 53 counter accept comment "accept DNS"

На самом деле можно и лучше:

set okports {
  type inet_proto. inet_service
  counter
  elements = {
    tcp. 22,  # SSH
    tcp. 53,  # DNS (TCP)
    udp. 53   # DNS (UDP)
}

А затем:

meta l4proto. th dport @okports accept

Вы также можете написать domainвместо 53, если предпочитаете использовать имена портов/служб (из/etc/services).

2
03.10.2021, 13:07

Ради того, чтобы сказать, что это возможно (, но, вероятно, не очень полезно ), да, это возможно, используя достаточно свежие таблицы nftable и необработанное выражение полезной нагрузки.

Таким образом, дляinet(двойной таблицы ip/ip6)вы должны сначала отфильтровать нужный протокол уровня 4 (здесь TCP=6 и UDP=17 ), используя набор, а затем отфильтровать порт 53. Это удобно, TCP и UDP имеют одинаковое расположение порта назначения в соответствующем формате. dportвыражается как смещение порта назначения в части TCP/UDP пакета :16 бит с размером 16 бит, как показано в предыдущих ссылках. Хотя tcpи udpмогут использоваться по их символическому имени, кажется, что dnsдолжно быть указано как 53, а не dns, я могу только предположить, что это потому, что dns/tcpиdns/udp(или domainсм. далее )находятся в двух разных «пространствах имен протоколов».

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

# nft 'add rule inet filter input meta l4proto {tcp, udp} @th,16,16 53 counter accept comment "accept DNS"'

Если вы хотите только для IPv4, инициализируйте соответствующую таблицу ipи цепочки и замените inetна ip.

Также обратите внимание, что почти то же самое приведено в качестве примера в примечаниях к выпуску 0.8.3 и теперь включено в справочную страницуnft, увы, этот пример не работа:dnsи httpдолжны быть заменены на 53и 80(, и в любом случае некоторые дистрибутивы/версии могут потребовать domainвместоdns).

3
27.01.2020, 22:09

Теги

Похожие вопросы