LINUX.ORG.RU

Ответ на: комментарий от ae1234

Тебе правда нужно забанить все адреса, у которых в четвёртом байте 128-255, не важно из какой сети? Обычно маски префиксные, и часто только такие и поддерживаются.

firkax ★★★★★
()
Ответ на: комментарий от firkax

то и надо - и работало годами так
само собой я вижу как идет трансляция

и проблема в том - что в deb10 это через iptables-nftp нормально проходило - и нормальное правило заносилось
ip saddr & 0.0.0.128 == 0.0.0.128 counter drop

а в deb11 пытаеться занести
ip saddr 0.0.0.128/0.0.0.128 counter drop
и обламывается

ae1234 ★★
() автор топика
Ответ на: комментарий от firkax
nft:96:50-58: Error: syntax error, unexpected string, expecting number
add rule ip filter USER0_0 ip saddr 0.0.0.128/0.0.0.128 counter drop
                                              ^^^^^^^^^


вот точнее описание ошибки - оно считает это строкой - а не числом

ae1234 ★★
() автор топика
Последнее исправление: ae1234 (всего исправлений: 1)
Ответ на: комментарий от firkax

ессно
проблема в том - что в прошлой версии он правильно транслировал правило
а в этой версии - неправильно

ae1234 ★★
() автор топика
Ответ на: комментарий от ae1234

Видимо в прошлой версии был баг.

anc ★★★★★
()
Ответ на: комментарий от vel

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

Rost ★★★★★
()
Ответ на: комментарий от anc

Если ты за 15 лет работы с сетями так и не узнал что бывает маска 0.0.0.128 то у меня для тебя плохие новости 😐

anonymous
()
Ответ на: комментарий от Rost

Я так понял, что nft это новый механизм в ядре на замену iptables с соответствующим функционалом в пользовательском пространстве, тогда bpf это многофункциональный сетевой комбайн на замену и nft и iptables? Так что ли? Просто интересно, если так, то не долго nft просуществовала, в ядро была добавлена всего-то в версию 3.13, судя по википедии

IvanR ★★★
()
Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от anc

Прямое. ТС работает с обратными масками, видимо достались в наследство. Обратные маски были возможны только благодаря устаревшему RFC 1519, чем пользовалось например CISCO и Linux (iptables). В nftables придерживаются современного RFC 4632 в котором есть только длина префикса. Соответственно ТС будет сосать писос и дальше - ему нужно откатываться назад или менять логику. Нахер вы всё это пишете про то что nftables ниготово (при всём моём уважении к vel) и про стильно, модно, молодёжно? А уж свои познания ты своим вопросом «Маска 0.0.0.128?» показал сразу.

anonymous
()
Ответ на: комментарий от anonymous

Обратные маски были возможны только благодаря устаревшему RFC 1519, чем пользовалось например ... Linux (iptables)

В каких версиях?

anc ★★★★★
()
Ответ на: комментарий от anonymous

не порите непонятно чего
это никакая не ОБРАТНАЯ маска
это просто маска
это не прямая ни обратная - это просто маска - там нули как в начале так и в конце - и вообще одна 1 во всех 32 битах

ae1234 ★★
() автор топика
Ответ на: комментарий от Bloody

проблема в том что транслятор - в новой версии почему то перестал правильно транслировать - ранее он именно так и транслировал

ae1234 ★★
() автор топика
Ответ на: комментарий от ae1234

это не прямая ни обратная - это просто маска - там нули как в начале так и в конце - и вообще одна 1 во всех 32 битах

И какой же у неё префикс? Ты бы сам сначала со своим наследством разобрался, прежде тут вопросы задавать.

anonymous
()
Ответ на: комментарий от anc

Так у ТСа спроси на каком ядре у него всё работало. RFC 1519 довольно старый, первая редакция в 1993 году вышла. По идее начиная с версий ядра 2.2-2.4 должно было работать уже.

anonymous
()
Ответ на: комментарий от anc

Да, про адресацию сетей получилась тема). Iptables это всё таки пакетный фильтр, роутингом и адресацией другие системы ядра занимаются.

anonymous
()
Ответ на: комментарий от ae1234

Хм. Вы в курсе зачем нужна маска сети и что она из себя представляет? Вот этой записью 0.0.0.128/0.0.0.128 вы чего достигнуть хотели?

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 2)
Ответ на: комментарий от anc

достигнуть того - что и достигнуто и работало годами - отфильтровать все что выше 128 из любой /24 сети

ae1234 ★★
() автор топика

более того - в deb10 iptables v1.8.2 (nf_tables)
iptables-nft -A FORWARD -s 0.0.0.128/0.0.0.128 -j DROP

все нормально

а в - deb11 iptables v1.8.7 (nf_tables)
iptables-nft -A FORWARD -s 0.0.0.128/0.0.0.128 -j DROP
iptables v1.8.7 (nf_tables): RULE_APPEND failed (Invalid argument): rule in chain FORWARD


и чот пока не удается достучаться до iptables-писателей

ae1234 ★★
() автор топика
Последнее исправление: ae1234 (всего исправлений: 2)
Ответ на: комментарий от ae1234

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

Bloody ★★
()
Ответ на: комментарий от anc
iptables-nft  -A FORWARD -s 0.0.0.128/0.0.0.128 -j DROP
iptables v1.8.7 (nf_tables):  RULE_APPEND failed (Invalid argument): rule in chain FORWARD


нето скопировал в прошлом сообщении

ae1234 ★★
() автор топика
Ответ на: комментарий от ae1234

Пролистал (не совсем внимательно) изменения с v1.8.3 до v1.8.7, единственное что напоминает:
Phil Sutter (21):
nft: Optimize class-based IP prefix matches

anc ★★★★★
()
Ответ на: комментарий от ae1234

Прям опередили, хотел посоветовать попробовать 1.8.6. То что написал выше это как раз к 1.8.7
UPD
Improved performance when matching on IP/MAC address prefixes if the prefix is byte-aligned. In ideal cases, this doubles packet processing performance.
*NOTE*: Older iptables versions will not recognize the mask and thus omit them when listing the ruleset.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

iptables-1.8.7/iptables/nft-shared.c

void add_addr(struct nftnl_rule *r, enum nft_payload_bases base, int offset,
              void *data, void *mask, size_t len, uint32_t op)
{
        const unsigned char *m = mask;
        bool bitwise = false;
        int i;

        for (i = 0; i < len; i++) {
                if (m[i] != 0xff) {
                        bitwise = m[i] != 0;
                        break;
                }
        }
        
        if (!bitwise)
                len = i;
        
        add_payload(r, offset, len, base);
        
        if (bitwise)
                add_bitwise(r, mask, len);
        
        add_cmp_ptr(r, op, data, len);
}



bitwise = m != 0; вот тут ошибка
она сканирует маску пока не встретиться не FF - но во флаг записывает true только если НЕ 0 - а у меня как раз 0

замена этого на
bitwise = true;
нормализует работу

ae1234 ★★
() автор топика
Последнее исправление: ae1234 (всего исправлений: 2)
Ответ на: комментарий от anc

оно находит первый не FF
и проверяет его на 0 - если оно равно 0 то маска может быть простой типа /24 /16
а если не 0 - то нужно применять ip & mask логику

так что нет - это именно ошибка - по правильному оно должно было проверить на 0 все оставшиеся байты в маске - и только и далее байты равны 0 - то можно юзать /24 /16

так что да - bug 100% - недопроверка параметра

ae1234 ★★
() автор топика
Ответ на: комментарий от ae1234

так что да - bug 100% - недопроверка параметра

Но это не означает, что это не «недоделанная фича» :)

anc ★★★★★
()
Ответ на: комментарий от gremlin_the_red

да - исправили еще год назад
но в 1.8.7 исправление не попало - он был раньше

ae1234 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.