Puncte:2

Blocați traficul către/de la gazdă de pe o parte a unui pod

drapel in

Dacă am două interfețe ethernet eth0 și eth1. Ele sunt conectate (br0). Gazda care rulează puntea poate comunica cu rețeaua folosind oricare dintre eth0 sau eth1, în funcție de care sunt conectate la rețea.

Acum la întrebarea:

Cum pot împiedica gazda să comunice cu rețeaua prin eth1?

Ce as vrea sa realizez:

eth0 <-> br0: Acceptat.
eth1 <-> br0: Respins.
eth0 <-> eth1: Acceptat.

Înainte de a spune că acest lucru nu este posibil și nu se potrivește cu modelul OSI, trebuie să verificați următoarele: br_netfilter (modul kernel), net.bridge.bridge-nf-call-iptables și firewalling transparent: https://www.debian.org/doc/manuals/securing-debian-manual/bridge-fw.en.html

Filtrez deja pachetele pe baza stratului 3 din bridge ( eth0 <-> eth1 ). Ceea ce rămâne de făcut este să împiedicați firewall-ul să comunice singur cu rețeaua din partea greșită a firewall-ului.

Soluția nftables descrisă într-unul dintre comentarii este grozavă și aceasta este calea de a merge mai târziu, dar chiar acum am nevoie de o remediere rapidă care funcționează până când am actualizat platforma și am convertit aplicația pentru a utiliza nftables.

Soluțiile acceptabile la această întrebare se bazează pe iptables (de preferință) sau ebtables (trebuie să-l investighez pe acesta, dar deocamdată este o modalitate mai rapidă decât nftables de a rezolva această problemă).

Tom Yan avatar
drapel in
Puteți utiliza iptables și nftables în același timp. Nu va fi o problemă atunci când utilizați doar o masă bridge cu aceasta din urmă. (Dar ar putea fi o problemă dacă, dintr-un motiv oarecare, trebuie să păstrați instrumentele de spațiu de utilizator nftables dezinstalate.)
mlom avatar
drapel in
@TomYam Sistemul de operare nu are în prezent suport pentru nftables (fără suport pentru kernel și fără instrumente pentru ritmul utilizatorului). Asta se va schimba, dar acum, pe termen scurt, aș prefera să nu actualizez/reconfigurez sistemul de operare. Este un sistem încorporat cu un sistem de operare minim.
Puncte:0
drapel cl
A.B

Firewall

Se pot folosi regulile firewall la nivel de pod Ethernet pentru a implementa restricțiile OP.

Un bridge Linux are un port special „self” cu numele bridge-ului. Puntea în ansamblu participă la redirecționarea cadrelor la L2 între porturi (interfețe setate ca punte-), dar autoportul puntea participă la rutarea pachetelor la L3 ca și alte interfețe. Comparați acest lucru cu un comutator gestionat simplu: are porturi, dar poate fi accesat și în scopuri de gestionare prin IP: astfel de pachete IP pot ajunge la el de la orice port (încă ca cadre Ethernet), dar sunt apoi trimise la comutator în sine, mai degrabă decât redirecționate către un alt port.

Pentru cadrul de firewall Netfilter folosit de nftables și ebtables, acest lucru se traduce prin faptul că traficul pod-port la pod-port văzut în cârlig înainte de filtru (filtru/lanț FORWARD pentru ebtables). Traficul de la portul propriu către un alt port este cârlig de ieșire a filtrului (filtru/lanțul de ieșire) și traficul de la un port la portul propriu al podului este cârlig de intrare a filtrului (filtru/lanț INPUT). Schema asta îl descrie în partea Link Layer (casete albastre în câmpul albastru inferior).

Deci aici traficul de blocat este între et1 și interfața proprie (adică blocarea procesării ulterioare către stiva de rutare) și invers.

Presupun că aici este un singur pod. Acum aceste instrumente au fost prezentate, ar trebui făcute mai multe investiții pentru a le folosi corect, mai ales în cazul mai multor poduri. Oricum, comenzile de mai jos vor funcționa întotdeauna corect et1 poate fi portul unui singur pod la un moment dat: aici br0.

Folosind ebtables:

ebtables -A INPUT -i eth1 -j DROP
ebtables -A OUTPUT -o eth1 -j DROP

Nu se menționează br0: este reprezentat de INTRARE și IEȘIRE.

Deoarece diferitele valori implicite încă trebuie să accepte trafic, eth0 nu va fi blocat cu br0, nici traficul între eth0 și et1.

Folosind (suficient de recent pentru a evita erorile de sintaxă) nftables: este același lucru cu boilerplate inițial pentru a adăuga:

nft adăugați table bridge mytable

nft add chain bridge mytable myinput '{ tip filter hook input filtru prioritar; acceptarea politicii; }'
nft add chain bridge mytable myoutput '{ tip filter hook input filtru prioritar; acceptarea politicii; }'

nft add rule bridge mytable myinput iif eth1 drop
nft add rule bridge mytable myoutput oif eth1 drop

Notă

iptables nu este utilizat la nivelul Ethernet (L2), ci la nivelul IP (L3), deci nu este instrumentul adecvat pentru aceasta. Probabil că există și o caracteristică specială numită bridge netfilter care va converti cadrele Ethernet de tip IPv4 pentru a împinge pachete IP artificiale iptables (încă în calea podului), astfel încât acestea să poată fi procesate și apoi vor converti înapoi acele pachete în cadre Ethernet pentru procesare ulterioară de către ebtables. Ar permite utilizarea iptables a face o astfel de filtrare dacă se urmărește și se înțelege corect gestionarea casetelor verzi (nivel de rețea: pachete) în câmpul albastru inferior (Link Layer: Ethernet) în schema anterioară , dar cel mai probabil ar avea ca rezultat efecte suplimentare nedorite. Nu utilizați această funcție (și nici nu experimentați nimic pe un sistem care rulează deja Docker) înainte de a înțelege ce se poate rupe.

Puncte:0
drapel it

Îmi pare rău, dar întrebarea are nevoie de mai multe explicații, deoarece nu are sens în acest moment.

Prin alăturarea eth0 și eth1 la br0 ați creat un comutator Ethernet cu 2 porturi.

Ce ai vrea sa realizezi:

eth0 <-> br0: Acceptat.
eth1 <-> br0: Respins.
eth0 <-> eth1: Acceptat.

ar fi posibil dacă ștergeți eth1 din br0 și permiteți redirecționarea pachetelor în nucleu pentru eth0 și eth1.

iptables se ocupă de adrese IP - adică stratul 3 (rețea) în modelul OSI - prin urmare nu sunt utilizabile în acest scenariu.

Vorbiți despre schimbarea cadrelor, deci stratul 2 (link) în modelul OSI - de aceea trebuie să consultați ebtables pentru a face orice filtrare avansată.

Link-uri pentru referință:

https://linux.die.net/man/8/ebtables

Este posibil să folosiți ebtables pentru a filtra traficul după adrese MAC pe o interfață ethernet simplă, fără ponturi?

Tom Yan avatar
drapel in
Nu, OP-ul este perfect valabil și se poate face cu nftables (bridge table) sau ebtables. Ceea ce OP nu dorește este „intrarea” L2 de la eth1, dar permite „redirecționarea” L2. `permiteți redirecționarea pachetelor în nucleu pentru eth0 și eth1` și nu cereți cuiva să meargă doar la L3.
mlom avatar
drapel in
Poate doriți să citiți despre opțiunea de kernel: net.bridge.bridge-nf-call-iptables înainte de a răspunde la aceasta.
Roman Spiak avatar
drapel it
@Tom Yan - vă rog să știți că răspunsul meu nu cere nimănui să meargă pentru L3. În plus, dacă cineva creează o punte Linux - ar trebui să se aștepte ca acesta să acționeze ca un comutator adecvat. Aceasta înseamnă că, în configurația implicită, toate interfețele transportă cadre și domenii de coliziune mico-segmentând. Dacă doriți să împiedicați gazdele conectate prin ETH1 să comunice cu restul podului - doar nu îl adăugați la punte...
Tom Yan avatar
drapel in
`restul podului` se pare că nici măcar nu vezi ce vrea să obțină OP: `br0` nu se referă la asta

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.