Firewallobjekte rekursiv auflösen
08.01.2016 19:14:52
Stefan
ich hoffe ihr könnt mir bei folgendem Problem weiterhelfen.
Ich möchte die Objekte aus einem Firewallexport auflösen, d.h. Hostnamen sollen um IP-Adresse erweitert werden, Gruppennamen sollen um alle Mitglieder erweitert werden, Dienstnamen sollen um TCP/UDP und Port erweitert werden. Leider gibt es Gruppen in Gruppen, was das ganze kompliziert macht und genau an der Stelle scheitere ich gerade.
Ich habe eine Objektliste erstellt und in einem zweidimensionalem Array gespeichert. Die Objektliste sieht so aus:
Objektliste
Spalte1 Spalte2
gruppe1 gruppe2, gruppe3, gruppe4
gruppe2 gruppe3, gruppe4
gruppe3 host1, host2, host3
gruppe4 host4, host5, host6
service1 dhcp, ntp
host1 1.1.1.1
host2 2.2.2.2
host3 3.3.3.3
host4 4.4.4.4
host5 5.5.5.5
host6 6.6.6.6
dhcp udp 67, udp 68
ntp tcp 123
ldap tcp 389
Das Regelwerk sieht z.B. so aus, von den auftretenden Dubletten nicht verwirren lassen :-).
Nr. Quelle Ziel Dienst
1 gruppe1, gruppe2 gruppe3, gruppe4 service1, ldap
2 host1, host3 host2, host4 ntp, ldap
3 host1 gruppe4 ntp
Jetzt soll z.B. gruppe1 aufgelöst werden:
1) gruppe1 (gruppe2, gruppe3, gruppe4)
2) gruppe1 (gruppe2 (host1, host2, host3),
gruppe3 (host1, host2, host3),
gruppe4 (host4, host5, host6)),
gruppe3 (host1, host2, host3)
3) gruppe1 (gruppe2 (host1 1.1.1.1, host2 2.2.2.2, host3 3.3.3.3),
gruppe3 (host1 1.1.1.1, host2 2.2.2.2, host3 3.3.3.3),
gruppe4 (host4 4.4.4.4, host5 5.5.5.5, host6 6.6.6.6)),
gruppe3 (host1 1.1.1.1, host2 2.2.2.2, host3 3.3.3.3)
Da die Eingabelänge begrenzt ist, hier nur wie die erste Regel dann aufgelöst aussehen sollte:
Nr. | Quelle
1) | gruppe1 (
| gruppe2 (host1 1.1.1.1, host2 2.2.2.2, host3 3.3.3.3),
| gruppe3 (host1 1.1.1.1, host2 2.2.2.2, host3 3.3.3.3),
| gruppe4 (host4 4.4.4.4, host5 5.5.5.5, host6 6.6.6.6)),
| gruppe3 (host1 1.1.1.1, host2 2.2.2.2, host3 3.3.3.3)
Nr. | Ziel
1) | gruppe3 (host1 1.1.1.1, host2 2.2.2.2, host3 3.3.3.3),
| gruppe4 (host4 4.4.4.4, host5 5.5.5.5, host6 6.6.6.6)
Nr. | Dienste
1) | service1 (dhcp (udp 67, udp 68), ntp (tcp 123)),
| ldap(tcp 389)
Hoffe es ist klar geworden, was ich erreichen möchte.
Über Ideen und Tipps würde ich mich sehr freuen :-).
Mfg
Stefan