Check aggregate rules during secondary optimization
hknutzen opened this issue · 3 comments
Topologie:
src--R1--any--R2--dst
mit R1 ist "managed=secondary"
Regeln:
- permit any -> dst, telnet
- permit src -> dst, http
Generierte ACLs:
- auf R1:
- von 2.: permit net(src) net(dst) ip
- auf R2:
- von 1.: permit any dst telnet
- von 2.: permit src dst http
Problem:
src soll nur mittels http auf dst zugreifen können, kann jedoch auch mittels telnet zugreifen.
Diskussion:
Bei der Generierung von Any-Regeln vertrauen wir darauf, dass Router
hinter dem any-Bereich (im Beispiel R1) die Zugriffe genügend
einschränken, so dass die Verwendung von any keine Lücke öffnet.
Bei der Code-Generierung für seconday Router vertrauen wir darauf, dass
ein normaler Router (im Beispiel R2) die detaillierte Filterung übernimmt.
Beides Zusammen kann jedoch zu einer Fehleinschätzung führen,
denn R1 verlässt sich auf R2 und umgekehrt.
Wie findet man diesen Fall?
Nicht so einfach.
Ansatz:
Für jede Regel any -> dst1, prt1
finde Regeln src -> dst2, prt2
- mit dst2 <= dst1 (oder so ähnlich)
- mit prt2 != prt1 und !(prt2 > prt1)
- und any liegt auf dem Pfad zwischen src und dst2
- und zwischen src und any liegen nur ein oder mehrere secondary Router
Das ist aufwändig, da Pfade bestimmt werden müssen.
Effizienter:
Alle Zonen sind bereits markiert mit {secondary_mark}.
Zwei Zonen haben die gleiche Markierung, wenn sie durch ein oder mehrere secondary Router verbunden sind.
Jedes Any liegt in genau einer Zone.
Das Problem tritt auch auf der anderen Seite auf.
Topologie:
src--R1--any--R2--dst
mit R2 ist "managed=secondary"
Regeln:
- permit src -> any, telnet
- permit src -> dst, http
Generierte ACLs:
- auf R1:
- von 1.: permit src any telnet
- von 2.: permit src dst http
- auf R2:
- von 2.: permit net(src) net(dst) ip
Problem:
src soll nur mittels http auf dst zugreifen können, kann jedoch auch mittels telnet zugreifen.
Das Problem tritt auch bei einzelnen Hosts auf.
Topologie:
host:h1--R1--any--R2--dst
mit R1 "managed=secondary"
Regeln:
- permit any -> dst http
- permit h1 -> dst http
Generierte ACLs:
- auf R1:
- von 2.: permit net(src) dst ip
- auf R2:
- von 1.: permit any dst http
- von 2.: permit h1 dst http
Problem:
Nur h1 soll auf dst zugrefen, aber das ganze Netz von h1 wird freigeschaltet.