The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск пакетного фильтра nftables 1.1.0

17.07.2024 12:26

Опубликован выпуск пакетного фильтра nftables 1.1.0, унифицирующего интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов (нацелен на замену iptables, ip6table, arptables и ebtables). Значительное изменение номера версии не связано с какими-то кардинальными изменениями, а лишь является следствием последовательного продолжения нумерации в десятичном исчислении (прошлый выпуск был 1.0.9). Одновременно опубликован выпуск сопутствующей библиотеки libnftnl 1.2.7, предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables.

В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком.

Непосредственно правила фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в ядре в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters). Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя.

Основные изменения:

  • В map-выражениях добавлена поддержка переменных:
    
       define dst_map = { ::1234 : 5678 }
    
       table ip6 nat {
          map dst_map {
             typeof ip6 daddr : tcp dport;
             elements = $dst_map
          }
          chain prerouting {
             ip6 nexthdr tcp redirect to ip6 daddr map @dst_map
          }
       }
    
  • Добавлена поддержка VLAN:
    
       ip saddr 10.1.1.1 icmp type echo-request vlan id set 321
       # payload
       ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
    
  • Для выражений "log" задействован новый строковый препроцессор с поддержкой переменных:
    
       define message="test"
       log prefix "my $message"
    
  • При вычислении значения выражения "meta hour" реализована обработка отрицательного смещения в часовом поясе, заданном через переменную окружения TZ:
    
       TZ=UTC-4 nft add rule x y meta hour "22:00"
    
  • Обеспечено преобразование порядка следования байтов при использовании выражений ct и meta, а также при использовании операций слияния и указания диапазонов в set-наборах.
    
       map mapv6 {
          typeof ip6 dscp : meta mark;
       }
       meta mark set ip6 dscp map @map1
    
       будет получен байткод:
       [ payload load 2b @ network header + 0 => reg 1 ]
       [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ]
       [ byteorder reg 1 = ntoh(reg 1, 2, 2) ]
       [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ]
       [ lookup reg 1 set mapv6 dreg 1 ]
       [ meta set mark with reg 1 ]
    
  • Возобновлена поддержка команды "replace rule".
    
       replace rule ip t1 c1 handle 3 'jhash ip protocol . ip saddr mod 170 vmap { 
    0-94 : goto wan1, 95-169 : goto wan2, 170-269 }"
    
  • Возобновлена возможность добавления сетевых устройств в существующие flowtable:
    
       create flowtable inet filter f1 { hook ingress priority 0; counter }
       add flowtable inet filter f1 { devices = { dummy1 } ; }
    
  • Решены проблемы при использовании команды "create set":
    
       define ip-block-4 = { 1.1.1.1 }
       create set netdev filter ip-block-4-test {
          type ipv4_addr
          flags interval
          auto-merge
          elements = $ip-block-4
       }
    
  • Решены проблемы при использовании цифрового представления опций tcp:
    
        tcp option 254
    
  • Решены проблемы при использовании выражений meta и ct с map-наборами:
    
        meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
    
  • В выражениях payload и concat запрещено указание данных размером больше 512 байтов.
  • При выполнении команды "nft describe" реализован учёт значений из файлов group, rt_mark и rt_realms, размещённых в каталогах /etc/iproute2/ и /use/share/iproute2/.
    
        # nft describe meta rtclassid
        meta expression, datatype realm (routing realm) (basetype integer), 32 bits
    
        pre-defined symbolic constants from /etc/iproute2/rt_realms (in decimal):
            cosmos                                             0
        Reject statement with range
            meta mark set 0-100
    
  • Ускорена операция вывода списка таблиц. Реализована поддержка опции -t/--terse для ускорения команд "list table" и "list set".
  • Обеспечено преобразование выражений meter в динамические set-наборы:
    
       add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 
    10/second }
    
    будет преобразован в 
    
       set m {
          type ipv4_addr
          size 128
          flags dynamic,timeout
       }
       tcp dport 80 update @m { ip saddr timeout 2s limit rate 10/second burst 5 
    packets }
    
  • В представлении в формате JSON добавлена поддержка объектов synproxy и map-наборов с объединёнными данными.
  • В set-наборах, заданных в формате JSON, реализована поддержка флага auto-merge.
  • При использовании представления в формате JSON разрешено указание нескольких устройств в блоке "chain".
  • При использовании опций -f/--filename обеспечена обработка путей, относительно каталога текущего файла.
  • При использовании опций -I/--include перебор путей по умолчанию теперь осуществляется с конца списка.
  • Налажена работа опций -o/--optimize с выражениями, содержащими счётчики значений:
    
       # nft -c -o -f ruleset.nft
       Merging:
       ruleset.nft:5:17-45:                 ct state invalid counter drop
       ruleset.nft :6:17-59:                 ct state established,related counter 
    accept
       into:
            ct state vmap { invalid counter : drop, established counter : accept, 
    related counter : accept }
    
       Merging:
       ruleset.nft:7:17-43:                 tcp dport 80 counter accept
       ruleset.nft:8:17-44:                 tcp dport 123 counter accept
       into:
            tcp dport { 80, 123 } counter accept
    
       Merging:
       ruleset.nft:9:17-64:                 ip saddr 1.1.1.1 ip daddr 2.2.2.2 
    counter accept
       ruleset.nft:10:17-62:                 ip saddr 1.1.1.2 ip daddr 3.3.3.3 
    counter drop
       into:
              ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter : accept, 
    1.1.1.2 . 3.3.3.3 counter : drop }
    
  • Восстановлена совместимость с дампами элемента set, созданными в nftables до версии 0.9.8.


  1. Главная ссылка к новости (https://www.mail-archive.com/n...)
  2. OpenNews: Локальная уязвимость в ядре Linux, эксплуатируемая через nftables
  3. OpenNews: Уязвимости в ядре Linux, позволяющие поднять свои привилегии через nf_tables и ksmbd
  4. OpenNews: Выпуск пакетного фильтра iptables 1.8.10
  5. OpenNews: Выпуск пакетного фильтра nftables 1.0.8
  6. OpenNews: Уязвимость в nftables, позволяющая повысить свои привилегии
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/61564-nftables
Ключевые слова: nftables, firewall
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (47) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, аНОНИМ (?), 12:34, 17/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Чем nf_tables лучше netfilter? Тем, что дырок больше, это да. А ещё?
     
     
  • 2.2, нах. (?), 12:47, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    тем что ipchains после тебя поправить мог почти любой васян (хотя квалификация этих васянов упала до такого плинтуса что теперь и это для них проблема, но для того и работают) а в качественной nft-вермишели разобраться не сможет никто. Да и вряд ли кто захочет.

    вжёпп секьюрити или как там енто называется.

    Ну и у разработчиков тоже не лаптем щи хлебают - вон сколько в новости "возобновлено сломанное неделю назад" и "добавлено то что и так было но не работало"

    А Russel давно уже небось пиццей торгует, потому что даже если бы собрался доделать разом все то что пообещал в 2000м году - ну на месяц пиццы пожрать бы ему зарплаты хватило, а дальше как жыть?

     
     
  • 3.4, Аноним (4), 13:04, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Фига вспомнил. Да, ipchains был прост для понимания, но stateless, что несколько ограничивает применимость. Хотя для огромного числа юзкейсов было более чем достаточно.

    А вот iptables вообще нифига не проще. Васяны всегда гуглили и копипастили, не особо понимая смысл, со stackoverflow (сейчас в этой роли все чаще chatgpt, что ещё веселее). Nftables, как по мне, легче понимать. Настолько же легче, насколько структурированный код понятнее дедовского кода на Фортране-77 в виде портянки с goto.

     
     
  • 4.5, нах. (?), 13:22, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    я называю так современный вариант (потому что речь по прежнему о chains а не о чем-то еще, нет никаких там "таблиц")

    нет,те, оригинальные, ipchains умели в state, правда не очень красиво.

    > А вот iptables вообще нифига не проще.

    проще. Их самое грандиозное усовершенствование - которое ентер-прайсы сумели скопировать, между нами, на пятнадцать лет позже и то криво - полностью раздельные in/out/forward и еще более отдельные nat и raw.

    Представь что тебе для каждого пакета надо отдельно разрешать его прием на интерфейсе вообще, отдельно форвард, отдельно описывать правила для nat, и отдельно out - не забыв что оно после nat имеет другие адреса. А теперь еще раз то же самое в обратную сторону и смотри опять адреса не перепутай.

    Так себе было, прямо скажем, потом такое обслуживать. Все были в общем рады когда появился новый вариант.

    А вот закорючки и скобочки nft вместо чейнов - абсолютно невменозны. Поскольку теперь это по сути корявый ассемблер для bpf машины - пусть его firewalld читает и генерит.

    Его изобретатели именно так и делают, они сами никогда и не собирались вручную писать эти закорючки.

     
     
  • 5.9, Аноним (9), 13:52, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Уважаемый Нах, когда я изучу nft до такой (или примерно такой) же степени как iptables, то смогу соглвсится с Вами в большей чем сейчас степени. Хотя я уже начинаю подозревать, что Вы абсолютно правы (может и не во всем, но во многом).
     
     
  • 6.17, Аноним (17), 15:13, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Глупость он говорит.

    1. nft не делит ipv4/ipv6. Одна блокировка порта = одно правило. Также в едином синтаксисе там голые ethernet пакеты, что гораздо удобнее и безопаснее.
    2. Именованные правила.
    3. Chains там ровно те же самые, только пишутся с маленькой буквы. Что и позволяет реализовать заглушку iptables-nft.

    Количество метаданных, доступных правилам, гораздо больше из коробки, без васянских модулей, как у iptables. Но писать васянские модули тоже никто не запрещает.

    Скобки гораздо лучше структурируются, чем from/to.

    Синтаксис и правда чуть менее читабелен, чем iptables, но это важно только "васяну порт для торрентов открыть", а тот, кто пишет сложные правила, всё равно будет по уши в доках. А для васянов есть firewalld.

     
     
  • 7.19, нах. (?), 15:18, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Глупость он говорит.
    > 1. nft не делит ipv4/ipv6. Одна блокировка порта = одно правило. Также

    и что в этом - хорошего?

    > в едином синтаксисе там голые ethernet пакеты, что гораздо удобнее и
    > безопаснее.

    но доказательство оставим читателю (главное верить)

    > 2. Именованные правила.

    ну... э.. ок. Правда обычно достаточно именованных чейнов.

    > Количество метаданных, доступных правилам, гораздо больше из коробки, без васянских модулей,

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

    > как у iptables. Но писать васянские модули тоже никто не запрещает.

    но написан ровно ноль (в отличие от iptables для которых модуль мог написать любой васян и у этого есть пруфы)

    > Синтаксис и правда чуть менее читабелен, чем iptables, но это важно только
    > "васяну порт для торрентов открыть", а тот, кто пишет сложные правила,

    синтаксис читать придется не тому кто пишет, а тому кто после него попытается разобраться, что ж он тут такое написал.

    И будет он по уши в навозе.

    P.S. это ж опять продавец умных ворот? Которого никогда не возьмут туда где на самом деле придется разбираться в сложном фильтре написанном не тобой.

     
     
  • 8.50, Аноним (-), 00:05, 18/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В два раза меньше правил чтобы заблочить порт Ну да, чего в этом хорошего К... большой текст свёрнут, показать
     
  • 8.54, крокодил мимо.. (-), 12:43, 18/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    eBPF, где буква e неиллюзорно намекает выполнение пакета, кстати, с учёто... текст свёрнут, показать
     
  • 7.56, _oleg_ (ok), 13:51, 18/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Количество метаданных, доступных правилам, гораздо больше из коробки, без васянских модулей, как у iptables. Но писать васянские модули тоже никто не запрещает.

    Да-да. Что уже ipt_netflow есть для nft?

     
  • 7.57, _oleg_ (ok), 13:52, 18/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    There is no way to make netflow target as a separate installable module for nft. nftables source code patching is needed. But they will (probably) not integrate it into nftables because it is not in the kernel upstream. So, nftables is less flexible in the sense of extensibility than iptables.

    https://github.com/aabc/ipt-netflow/issues/45

     
  • 5.13, Аноним (-), 14:31, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > проще. Их самое грандиозное усовершенствование - которое ентер-прайсы
    > сумели скопировать, между нами, на пятнадцать лет позже и то криво - полностью
    > раздельные in/out/forward и еще более отдельные nat и raw.

    Проблема в том что простота иногда - хуже воровства. Особенно если хочется файрволить ломовой поток, да еще с 100500 айпишников в фильтре - вон та сладкая парочка почему-то сливалась с треском.

     
     
  • 6.29, Аноним (29), 18:44, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > простота иногда - хуже воровства

    Вот тут как раз и предлагают "более простое решение", на деле являющееся "пустым мудрствованием".

     
  • 5.22, Аноним (22), 15:33, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    С дуру можно и хрен сломать.
    Не твоё - не лезь, выбирай себе другой инструмент. А вот навязывать убогий firewalld всем - не стоит. Тем более, что в официальной документации к firewalld разрабы указали - нафиг он сдался, не более.
     
  • 5.25, User (??), 16:25, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    "Но в главном-то они правы!"(Ц)
    В смысле для простых кейсов вида "закрыть все - открыть SSH и 80/443 вот оттудой" что iptables, что nftables - дофига избыточны\переусложнены, там какой ipfw или вот ufw надь, даже firewalld уже эребор.
    А сколько-нибудь сложные действительно автогенеряться с какого уеб-интерфейса\фиреволлды а то и вовсе вот докером\кубиковой CNI и руками туда без большой-большой-пребольшой нужды никто и не полезет, а на страдания этих понужденцев да в общем-то пофиг.

    А чтоб осмысленно руками и головой написанный сложный рулсет для generic linux - я уже лет 10 встречал разве что в виде "чужое legacy".
     
     
  • 6.27, нах. (?), 17:38, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > В смысле для простых кейсов вида "закрыть все - открыть SSH и 80/443 вот оттудой" что iptables,
    > что nftables - дофига избыточны\переусложнены

    давай предположим что кейс простой, но для него нет никакой ложечки (тебе, допустим, нужен не ssh а... чего у нас там нету... пять сек, я не мальчик с феноменальной памятью... а, во - pptp внезапно нету, видимо немодно-немолодежно. вайргада тоже нету но это скучно - один udp порт. Пока давай не заморачиваться зачем он нам, а просто его приземлим, для начала)

    iptables: -I INPUT -p gre -j ACCEPT -i ens\* / -I INPUT -p tcp --dport pptp -j ACCEPT (в редхате не прокатит но ладно уж) и предположим что  OUTPUT у нас с ALLOW по умолчанию  - мы вероятно сделали все крайне неэффективно (тот ACCEPT как минимум должен быть до а не после conntrack) но оно вот почти работает, в две строчки.

    firewalld:
    --new-service ...
    --add-service ...
    --add-port
    --add-protocol
    --reload... ой чорт мы там permanent забыли, начинай сначала.

    Ты еще не затрахался? А ведь я тут скромно обошел вниманием conntrack. Его по каким-то мистическим причинам нельзя засунуть в сервис, он есть только в policy. Т.е. тебе светит разбираться с тем как полиси связаны с зонами и какие зоны тут вообще есть.

    Для ufw уж сам придумай, но вряд ли это будет легко.

    А для простого кейса с готовым сервисом который до тебя кто-то написал и который принимает единственный well known tcp порт - ну я не вижу особо разницы между одной строчкой c -I, и одной строчкой add-service во втором случае.

    Только второе будет работать везде где есть firewalld, а вот с первым можно обломаться, сломав какие-то проверки, сделаные кем-то до тебя.

     
     
  • 7.31, User (??), 19:03, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, если тебе не жить не быть зачем-то нужно полунеподдерживаемое легаси 2014 или когда он там помер, года что-то вроде:
    firewall-cmd --permanent --add-port=1723/tcp
    firewall-cmd --permanent --add-rich-rule rule protocol value="gre" accept
    Ну или через --direct можно на втыкать - не сильно сложнее для "плохого" кейса, да?
     
     
  • 8.37, нах. (?), 20:02, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    о, рука мастера , эксперта известногосайта Навтыкать своими корявками прямо в... текст свёрнут, показать
     
     
  • 9.41, User (??), 20:13, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну, какая постановка , такое и решение , да Ты хоть бы уточнил, что интерфейс... текст свёрнут, показать
     
     
  • 10.44, нах. (?), 20:35, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    я ведь привел тебе пример правильного но недописанного , предложив подумать - т... текст свёрнут, показать
     
     
  • 11.46, User (??), 20:54, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Пардону прошу, но но если мы про подумать - то при практически любой постановк... текст свёрнут, показать
     
  • 11.55, scriptkiddis (?), 13:42, 18/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Чет запутался Так ты за или против firewalld ... текст свёрнут, показать
     
     
  • 12.58, нах. (?), 22:27, 18/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    на фоне крючочков и кружочков nft - я целиком и полностью за firewalld - потому ... текст свёрнут, показать
     
  • 5.32, crypt (ok), 19:09, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А вот закорючки и скобочки nft вместо чейнов - абсолютно невменозны. Поскольку теперь это по сути корявый ассемблер для bpf машины

    да х*вно эти скобочки, я уже это вижу:((( действительно теперь у нас еще один новый язык программирования, чтобы что-то отконфигурять. ну приплыли.

    еще и дыры в bpf постоянные(

     
  • 5.53, крокодил мимо.. (-), 12:36, 18/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Поскольку теперь это по сути корявый ассемблер для bpf машины - пусть

    у "оригинального" bpf есть pf, а не вот это всё :)

     
  • 3.6, Аноним (6), 13:23, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    С этими канпуктерами вечно так — приходится думать, напрягаться. И тут уже не важно, ipchains это или nftables, сишка или java, один фиг без мозга с этим работать тяжело.
     
  • 3.7, Аноним (9), 13:43, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Как жить, как жить...
    Так же твердо веря в счастливое будущее человечества, как тверда Ваша буква ы в слове жить! ;)
     
  • 2.3, XtkjRfk (?), 12:59, 17/07/2024 Скрыто ботом-модератором     [к модератору]
  • +6 +/
     
  • 2.24, myster (ok), 16:03, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Чем nf_tables лучше netfilter?

    А как он может быть лучше, если nftables использует netflter и разработчики у них одни?

     
     
  • 3.35, аНОНИМ (?), 19:43, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну я хз кто чего там использует. Вон выше пишуть что якобы nf_tables лучше отражает потоки *овна мультигигабитного, врут получается?
     
     
  • 4.40, нах. (?), 20:11, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну я хз кто чего там использует. Вон выше пишуть что якобы
    > nf_tables лучше отражает потоки *овна мультигигабитного, врут получается?

    да это тот эксперт из шкафа под лестницей пишет, не парься. Откуда у шибкоумных ворот на 3g модемке какие-то "потоки"?

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

    Иначе бы не было этим ребяткам так мучительно больно писать конвертер правил - за десять лет ведь  не дописали до полностью работающего. Да и тот в одну сторону. Хотя казалось бы "один норот....простите, экран", что могло бы помешать одновременно пользоваться двумя интерфейсами? Ан, нихрена. Общего у них только интерфейс непосредственно к перехвату пакетов. Что логично, сетевой стек один.

     
  • 2.62, Аноним (62), 16:26, 22/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Nf_tables - это часть модуля netfilter. Ваш вопрос сродни тому, чем плавник лучше рыбы?
     

  • 1.10, Аноним (10), 13:59, 17/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  define dst_map = { ::1234 : 5678 }

    Не могли, что ли, сделать не через задницу, например, так

    >  define dst_map = { ::1234 -> 5678 }

     
     
  • 2.11, Аноним (11), 14:15, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В мапах и схожих структурах ключ от значения обычно отделяется двоеточием. JavaScript, JSON, Python, Rust, и так далее. Добро пожаловать в айти. Это тебе не похапе с его array("foo" => "bar").
     
     
  • 3.12, noc101 (ok), 14:20, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем РНР то обвинять в чемто?
     
     
  • 4.14, Аноним (11), 14:32, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    да не, никто никого не обвиняет. Похапе это довольно-таки смешной шаблонизатор, читаю их доки как сайт с приколами.
     
     
  • 5.36, Аноним (36), 19:52, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Кажется, у вас проблемы с чувством юмора, вызванные чтением документации по PHP
     
     
  • 6.63, Аноним (62), 16:28, 22/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Нормальный он, человек, с прекрасным чувством юмора. Проблема в Вас.
     
  • 3.15, Аноним (10), 14:45, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В большинстве из этих ЯП/Форматов используется строгий синтаксис и строковые ключи со значениями идут как строки, т.е. было бы как

    >  define dst_map = { '::1234' : 5678 }

    И с таким представлением всё ок. Хотя в питоне есть ещё вариант с '='. А когда нет строгого универсального формата и вместо него контекстный DSL, то нужно выбирать разметку наименее пересекающуются служебными символами/кейвордами с inline данными.

     
     
  • 4.16, Аноним (11), 14:51, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    нет, надо выбирать наиболее привычные символы. За исключением похапе, "->" и "=>" обычно обозначают инлайновую функцию. nftables -- для людей технических, обычно имеющих опыт в программировании. Незачем их вводить в заблуждение.
     
     
  • 5.51, Аноним (51), 11:29, 18/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    В Ruby тоже =>, например. Впрочем, там есть и :, но это для ключей-символов.
     
  • 5.60, 1 (??), 10:11, 19/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Предлагаю выбрать синтаксис паскаля с begin end и :=
     
  • 4.26, Аноним (26), 16:37, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > строковые ключи со значениями идут как строки

    а там не строковое, там 'ip6 daddr' и парсер знает, что парсить

     
  • 2.21, нах. (?), 15:21, 17/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >>  define dst_map = { ::1234 : 5678 }
    > Не могли, что ли, сделать не через задницу, например, так
    >>  define dst_map = { ::1234 -> 5678 }

    так ты сразу поймешь что написано - без уважения. Неет, давай-ка потрахайся, поищи в доке что эти двоеточия значат и почему их тут столько

     

  • 1.52, Анониссимус (?), 12:20, 18/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Значительное изменение номера версии не связано с какими-то кардинальными изменениями, а лишь является следствием последовательного продолжения нумерации в десятичном исчислении

    Раздражает этот маразм. В этом случае нумеровать надо было так: 1.8 -> 1.9 -> 1.10 -> 1.11 и т. д.

     
     
  • 2.59, нах. (?), 22:32, 18/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да чо уж там - 110, 111 и т д. Инвесторы любят большие числа! Зачем эти точки. Хвостом их нажимать неудобно.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру