Portál AbcLinuxu, 10. května 2025 13:35

Dotaz: Jak filtrovat eth. ramce při bridgování tak, že se testuje hodnota určitého bajtu?

3.7.2017 12:56 Carlossalinas
Jak filtrovat eth. ramce při bridgování tak, že se testuje hodnota určitého bajtu?
Přečteno: 387×
Odpovědět | Admin
Ahoj, potřebuji zprovoznit zahazování eth. rámců (na architektuře ARM), které prochází bridgem, když např. ve 30. bajtu obsahují hodnotu 123. Mám to zprovozněné na jádru 2.6.27 s ebtables a rozšířením "u32 match", ale nedaří se mi to zprovoznit na jádru 4.9.6, kde už ebtables nejsou.

Mám vytvořen bridge mezi VLANy na eth0 pomocí: #brctl addbr br0 #vconfig add eth0 1 && vconfig add eth0 2 #brctl addif br0 eth0.1 && brctl addif br0 eth0.2 ...atd

Co jsem vyčetl, mělo by to jít pomocí "Netfilter" a "u32 match support". V userspace jsem zkusil utilitu "nft" (nftables-0.6), kde jsem zprovoznil filtrování podle MAC adresy (saddr nebo daddr) a typu rámce, ale nic víc. Pravidlo je v řetězci navázaném na hook "forward", který je součástí tabulky typu "bridge". Jde to vůbec a poradíte někdo správnou syntaxi "nft" pro vytvoření takového pravidla(test 30. bajtu na hodnotu 123)?

Dále jsem zkusil iptables-1.6.0, kde je k dispozici utilita ebatbles-compat a lze zprovoznit zase jen filtr na MAC a typ rámce.... #ebtables-compat -A FORWARD -s 11:22:33:44:55:66 -j DROP Při pokusu použít modul "u32" (i s pomocí pomocí přepínače -m) utilita havaruje "Segmentation fault" - např.: #ebtables-compat -A FORWARD -i eth0 --u32 "30=123" -j DROP nebo #ebtables-compat -A FORWARD -i eth0 -m u32 --u32 "30=123" -j DROP Kde je chyba / jak zjistit, kde je chyba?

Pomocí PTXdist 2016.12.0 mám vytvořený systém s kernelem 4.9.6, kde je aktivováno vše co jde pod položkou "Network packet filtering framework (Netfilter)" buď jako * nebo M.

díky za pomoc Carlos

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.7.2017 13:24 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak filtrovat eth. ramce při bridgování tak, že se testuje hodnota určitého bajtu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
na jádru 4.9.6, kde už ebtables nejsou

Zdroj této informace?

3.7.2017 14:41 Carlossalinas
Rozbalit Rozbalit vše Re: Jak filtrovat eth. ramce při bridgování tak, že se testuje hodnota určitého bajtu?
Pravda, ebtables jsou stále součástí jádra (podle obr. na https://commons.wikimedia.org/wiki/File:Netfilter-components.svg z roku 2008).

Mám tomu rozumět, že "komponenta jádra" nf_tables umí to samé co "komponenty" arp-/eb-/ip-/ip6-tables, jen to dělá jinak/lépe? A všechny tyto komponenty jsou součástí toho, čemu se říká Netfilter?

Je tedy možné můj filtr nastavit pomocí "user-space" utility nft, která předpokládám "konfiguruje" nf_tables? Prosím o příklad.

A je zároveň možné použít starou-dobrou "user-space" utilitu ebtables pro "konfiguraci" "komponenty jádra" ebtables jako v jádře 2.6.27 ?

Na co si dát pozor při konfiguraci jádra? Nastavit v sekci Netfilter vše * nebo M asi není to pravé...

PS:mám trochu hokej v detailech architektury jádra a terminologii, proto ten polopatický popis
4.7.2017 07:58 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak filtrovat eth. ramce při bridgování tak, že se testuje hodnota určitého bajtu?

nftables je nová (no, relativně) implementace paketového filtru v linuxovém jádře, jejímž cílem je nahradit xtables. V současné době už nftables poskytuje většinu funkcionality xtables a navíc některé featury, které xtables nemají, ale IIRC ještě není pokryto 100 procent funkcionality xtables.

V současných jádrech můžete mít přeloženou podporu nftables i xtables a vybrat si, jestli budete používat nftables a konfigurovat pomocí nft nebo xtables a konfigurovat pomocí {ip,ip6,eb,arp}tables. Nezkoušel jsem, co se přesně stane, když zkusíte oboje současně, ale i kdyby to šlo, asi by to nebyl moc dobrý nápad.

Ve vašem případě by neměl být problém použít i na 4.9.6 to, co vám fungovalo na starém jádře. Máte-li chuť, můžete se zatím podívat na to, jak téhož dosáhnout pomocí nftables a nft.

4.7.2017 08:09 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak filtrovat eth. ramce při bridgování tak, že se testuje hodnota určitého bajtu?
Odpovědět | | Sbalit | Link | Blokovat | Admin

Ještě pro úplnost…

brctl addbr br0

ip link add br0 type bridge

vconfig add eth0 1

ip link add eth0.1 link eth0 type vlan id 1

vconfig add eth0 1

ip link add eth0.2 link eth0 type vlan id 2

brctl addif br0 eth0.1

ip link set eth0.1 master br0

brctl addif br0 eth0.2

ip link set eth0.2 master br0

Případně se podívejte na příkaz bridge a možnosti konfigurace přiřazení VLAN jednotlivým portům.

Řešení 1× (Carlossalinas (tazatel))
19.7.2017 14:46 Carlossalinas
Rozbalit Rozbalit vše Vyřešeno, match jsem pojmenoval 'eq'
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přílohy:
Přikládám patche pro ebtables a pro jádro, kdyby se to někomu hodilo...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.