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.