orm@doc-tcpip.org

Erstellt: Mai 2003 - Letzte Modifikation: Juni 2004

[ Main | Local ]


Was bedeuten viele Regeln?

Was macht das Regelwerk schlanker?

Allgemein

Bei allen Problemen auf dem Netzwerk ist meist die Firewall zuerst in Verdacht. Daher schien es wünschenswert, die Angaben in der Firewall-Dokumentation mit ein paar gezielten Messungen besser zu verstehen.

Mit Hilfe des trace-Kommandos kann man die Zeit messen, die der Kernel (also die CPU) mit dem Abarbeiten einer bestimmten Routine (wenn Trace-Hooks entsprechend gesetzt sind) braucht. Diese Werte wurden für eine Test-Verbindung bei ansteigender Zahl an Regeln ermittelt und dann untersucht.

Im Trace findet man zwei Arten von Zeitstempeln: Einmal wird die seit Start des Traces verfloßene Zeit protokolliert, sowie die zwischen den Hooks aufgelaufene Zeit als Delta in milli-Sekunden angegeben. Man muß also nur (!) die Routine finden, die das Regelwerk durchsucht, und kann dann die verbrauchte Zeit gegen die Anzahl der Regeln auftragen.

Versuchsaufbau

Durchgeführt wurden die Tests auf einer der ältesten IBM PowerPC Maschinen - einer 6015 (PReP Architektur) mit 48 MB Hauptspeicher. Dieser Typ wurde später in 7020 (40P) umbenannt. Für derartige Tests ist diese Maschine nicht schlecht geeignet, da bei sowenig CPU-Power leicht große Effekte erzielt werden können.

Daher sind die Ergebnisse quantitativ in keinem Fall auf aktuelle Maschinen zu übertragen. Die Trends und die qualitative Aussage ist jedoch voll zutreffend - wobei bei Maschinen mit mehr CPUs die Steigung der Geraden neu ermittelt werden müßte.

Bei der IBM-Secureway Firewall gibt es im Normalfall zwei Routinen, die das Regelwerk prüfen (wahrscheinlich steckt dahinter eine Subroutine, das ist aber ohne Kenntnis des Source-Codes nur eine Annahme) und zwar je nach Richtung des Pakets (inbound oder outbound). Der Suchlauf im Regelwerk startet nach der Prüfung auf NAT bzw. des Filters für ausgehende Pakete.

Also müßte das zeitliche Delta zwischen Ende der Routine fwnati_after bzw. fltro4 bis zur Meldung Matched filter rule ... die Zeit des Durchlaufs sein. Als Beispiel je ein Paket inbound sowie ein Paket outbound. Die gemessenen Routinen sind fltri4 und fltrio4 (9.540864 msec bzw. 1.678464 msec).

 
Paket inbound, Routine fltri4.
2DF    3.195408000     621.320832                   IPSEC_FILTER_INFO fwnati_before: src=AC100121.42962 dst=AC101602.23 len=44 sum=15142
2DF    3.195569536       0.161536                   IPSEC_FILTER_INFO fwnati_after:  src=AC100121.42962 dst=AC101602.23 len=44 sum=15142 PERMIT
2DF    3.205110400       9.540864                   IPSEC_FILTER_INFO fltri4: Matched filter rule 1: Action is PERMIT
Delta in msec:           ^^^^^^^^^
                 
Paket outbound, Routine ftrio4.
2DF    3.205608192       0.497792                   IPSEC_FILTER_INFO fltro4: (en0) sad=AC100121 dad=AC101602 pr=6
2DF    3.205662976       0.054784                   IPSEC_FILTER_INFO fltro4: ak/rs=0 sprt=42962 dprt=23 loc=0 frg=0 frghdr=0 len=44
2DF    3.207341440       1.678464                   IPSEC_FILTER_INFO fltro4: Matched rule 2, action is PERMIT
Delta in msec:           ^^^^^^^^

Betrachtet wird ein TCP Handshake (also 6 Pakete) zwischen einem sicheren und einem unsicheren Host. Die Regeln sind spezifisch für die Verbindung angelegt.

 
# fwfilter cmd=list
501|2|permit|172.16.1.3|255.255.255.255|172.16.22.2|255.255.255.255|tcp|gt|1023|
eq|23|secure|route|inbound|0|y|y|
501|3|permit|172.16.1.3|255.255.255.255|172.16.22.2|255.255.255.255|tcp|gt|1023|
eq|23|non-secure|route|outbound|0|y|y|
501|4|permit|172.16.22.2|255.255.255.255|172.16.1.3|255.255.255.255|tcp|eq|23|gt
|1023|non-secure|route|inbound|0|y|y|
501|5|permit|172.16.22.2|255.255.255.255|172.16.1.3|255.255.255.255|tcp|eq|23|gt
|1023|secure|route|outbound|0|y|y|
Zusätzlich wird der sichere IP-Host noch auf der Firewall per NAT auf eine externe Adresse gemapped.

Vor diese Regeln wurden dann 2000 sinnlose Regeln gesetzt. Dazu wurde eine Regel benutzt, die den Zugriff auf Ports größer 10000 des sicheren Hosts vom Port 23 des unsicheren Host verbietet. Eine solche Regel kann dann über die Range der freien Ports beliebig erweitert werden. Der benutzte Befehl fwfrule cmd=add name=L1 desc=Orm type=deny protocol=tcp srcopcode=gt srcport=1023 destopcode=eq destport=10000 interface=secure routing=route log=no direction=inbound
wurde per Skript über die 2000 Ports gezogen.

 
505|deny|L1|Orm|tcp|gt|1023|eq|10000|secure||route|inbound|no||
505|deny|L2|Orm|tcp|gt|1023|eq|10001|secure||route|inbound|no||
505|deny|L3|Orm|tcp|gt|1023|eq|10002|secure||route|inbound|no||
505|deny|L4|Orm|tcp|gt|1023|eq|10003|secure||route|inbound|no||
......
Diese Regel wurde in Paketen zu je 200 Stück in einen Service gesteckt, und pro Service eine Connection definiert.
 
Erstellen von Services mit je 200 Regeln:
502   SL0                        Orm                                           
507   SL1000                     Orm                                           
508   SL1200                     Orm                                           
509   SL1400                     Orm                                           
510   SL1600                     Orm                                           
511   SL1800                     Orm                                           
503   SL200                      Orm                                           
504   SL400                      Orm                                           
505   SL600                      Orm                                           
506   SL800                      Orm                                           
Erstellen einer Connection pro Service:
 
# fwnwobj cmd=list 
502   Interface    NonSecureInt-172.16.22.1 (Created by setup wizard)           
508   Host         Secure Host 1    Host drinnen                               
509   Host         Secure Host 2 (NAT) NAT Host selbes Netz                     
501   Interface    SecureInt-172.16.1.1 (Created by setup wizard)               
503   Network      SecureNet-172.16.1.0 (Created by setup wizard)               
1     Network      The World                                                   
507   Host         Unsecure host 1  Host Draussen                              
Connection von Secure2 nach World:
fwconns cmd=create dynamic=before name=Last600 desc="3 Stufe last" source=509 destination=1 servicelist=505

Die so entstandenen Verbindungen werden nun vor die Telnet-Regeln gestellt und dann stufenweise aktiviert. Für jede Stufe wird ein Trace gestartet, das Telnet-Kommando abgesetzt und nach Erscheinen des Login-Promptes wird der Trace gestoppt.

Der Paket-Fluß ist also:

Da jetzt die eingeführten, unsinnigen Regeln das sichere Interface inbound betreffen, erwartet man hier auch den Leistungsabfall.

Das Trace File wird per Skript formatiert und die ersten 6 Matched rule .. Zeitstempel werden in eine Datei geschrieben und per gnuplot als Grafik ausgegeben.

Als zweiter Test wurde der Einfluß einer großen NAT-Tabelle auf die Rechenzeit geprüft. Dazu wird analog zum ersten Fall eine lange NAT-Tabelle erzeugt (200 Einträge) und in Stufen von 50 Einträgen gesteigert.

Ergebnisse

Die Ergebnisse sind in den folgenden Abbildungen dargestellt und in der Tabelle wiedergegeben. Einer der Traces ist unter Tracing (Network Address Translation im Trace) in voller Länge und kommentiert zu sehen.

Zeit pro Softwareroutine vs. Anzahl der Regeln

Die Testfälle im NAT Test sind:

Verschiedene Testfälle vs. Anzahl der NAT Einträge

Auswertung

Wie erwartet steigt die Zeit linear mit der Zahl der Regeln. Die Firewall muß einfach mehr Regeln durchgehen. Allerdings unterscheidet die Firewall nach Interface und Richtung des Verkehrs. In unserem Fall ist die Richtung inbound über das secIF mit sehr vielen Regeln befrachtet - die anderen Richtungen bzw. Interfaces erleben einen Anstieg, der der Last der Maschine entspricht.

Baut man ein Firewall Regelwerk auf, so sollte man versuchen, die Zahl der Regeln gering zu halten. Regeln, die Zusammenfassend wirken, sind zu bevorzugen (jeden Port einzeln zu sperren, wie hier im Test gemacht, ist ein schwerer Fehler).

NAT: Kein Einfluß erkennbar.

Ausblick

Folgende Tests wären noch von Interesse:

Anhang

Zur Vollständigkeit die ersten 6 Pakete, also das TCP-Handshake, für 1200 Regeln vor der eigentlichen Telnet-Regel sowie die Ergebnisse der Messungen.

2DF    3.195408000     621.320832                   IPSEC_FILTER_INFO fwnati_before: src=AC100121.42962 dst=AC101602.23 len=44 sum=15142
2DF    3.195569536       0.161536                   IPSEC_FILTER_INFO fwnati_after:  src=AC100121.42962 dst=AC101602.23 len=44 sum=15142 PERMIT
2DF    3.205110400       9.540864                   IPSEC_FILTER_INFO fltri4: Matched filter rule 1: Action is PERMIT

2DF    3.205608192       0.497792                   IPSEC_FILTER_INFO fltro4: (en0) sad=AC100121 dad=AC101602 pr=6
2DF    3.205662976       0.054784                   IPSEC_FILTER_INFO fltro4: ak/rs=0 sprt=42962 dprt=23 loc=0 frg=0 frghdr=0 len=44
2DF    3.207341440       1.678464                   IPSEC_FILTER_INFO fltro4: Matched rule 2, action is PERMIT
2DF    3.207546368       0.204928                   IPSEC_FILTER_INFO fwnato_before: src=AC100121.42962 dst=AC101602.23 len=44 sum=15142
2DF    3.207813632       0.267264                   IPSEC_FILTER_INFO fwnato_after:  src=AC101603.42962 dst=AC101602.23 len=44 sum=9796 PERMIT

2DF    3.209888512       2.074880                   IPSEC_FILTER_INFO fwnati_before: src=AC101602.23 dst=AC101603.42962 len=44 sum=42776
2DF    3.210174720       0.286208                   IPSEC_FILTER_INFO fwnati_after:  src=AC101602.23 dst=AC100121.42962 len=44 sum=48122 PERMIT
2DF    3.213192832       3.018112                   IPSEC_FILTER_INFO fltri4: Matched filter rule 3: Action is PERMIT

2DF    3.213661440       0.468608                   IPSEC_FILTER_INFO fltro4: (en1) sad=AC101602 dad=AC100121 pr=6
2DF    3.213715200       0.053760                   IPSEC_FILTER_INFO fltro4: ak/rs=1 sprt=23 dprt=42962 loc=0 frg=0 frghdr=0 len=44
2DF    3.215397120       1.681920                   IPSEC_FILTER_INFO fltro4: Matched rule 4, action is PERMIT
2DF    3.215593088       0.195968                   IPSEC_FILTER_INFO fwnato_before: src=AC101602.23 dst=AC100121.42962 len=44 sum=48122
2DF    3.215751296       0.158208                   IPSEC_FILTER_INFO fwnato_after:  src=AC101602.23 dst=AC100121.42962 len=44 sum=48122 PERMIT

2DF    3.217117184       1.365888                   IPSEC_FILTER_INFO fwnati_before: src=AC100121.42962 dst=AC101602.23 len=40 sum=15145
2DF    3.217276416       0.159232                   IPSEC_FILTER_INFO fwnati_after:  src=AC100121.42962 dst=AC101602.23 len=40 sum=15145 PERMIT
2DF    3.226781056       9.504640                   IPSEC_FILTER_INFO fltri4: Matched filter rule 1: Action is PERMIT

2DF    3.227250304       0.469248                   IPSEC_FILTER_INFO fltro4: (en0) sad=AC100121 dad=AC101602 pr=6
2DF    3.227303808       0.053504                   IPSEC_FILTER_INFO fltro4: ak/rs=1 sprt=42962 dprt=23 loc=0 frg=0 frghdr=0 len=40
2DF    3.228983296       1.679488                   IPSEC_FILTER_INFO fltro4: Matched rule 2, action is PERMIT
2DF    3.229189120       0.205824                   IPSEC_FILTER_INFO fwnato_before: src=AC100121.42962 dst=AC101602.23 len=40 sum=15145
2DF    3.229459072       0.269952                   IPSEC_FILTER_INFO fwnato_after:  src=AC101603.42962 dst=AC101602.23 len=40 sum=9799 PERMIT
 
# Werte aus Firewall Lasttest. 
#Regeln Regel 1        2          3            4          1           2
12      0.093056   0.084480    0.096768    0.093440    0.089088    0.088192
415     3.258240   0.679552    1.090688    0.683776    3.251072    0.685952
817     6.438272   1.190528    2.032256    1.255296    6.351872    1.192192 
1219    9.540864   1.678464    3.018112    1.681920    9.504640    1.679488  
1621   12.636160   2.168320    3.880832    2.172800   12.594688    2.169728  
1822   14.193920   2.416512    4.338304    2.486016   14.144000    2.418560
 
# 1 Werte aus Firewall Lasttest. MEssung aus Trace, immer in der Differenz NACH der fwnat* Funktion
#   In msec auf einer alten Mühle. Mit 1822 Regeln
# 2 Jetzt mit derselben Anzahl an Regeln, aber einen anderen IP im selben
#   Netz.
# 3 Jetzt mit derselben Anzahl an Regeln, aber einen IP aus einem anderen Netz
# 4 Jetzt mit derselben Anzahl an Regeln, aber einer ganz anderen IP
# 5 Jetzt die Telnet-NAT Rule nach ganz oben, ansonsten alles wie vor
# 6 Jetzt inbound/outbound getauscht, NW getauscht
#Regel 1  #Regel 2 #Regel 3  #Regel 4 #Regel 1  #Regel 2
#0 0 0 0 0 0 0 
1 14.185344 2.413056 4.318464  2.475136 14.131712  2.411136
2 6.493312  2.413568 4.313472  2.412800  6.379904  2.481280
3 6.497152  2.411904 4.337536  2.407680  6.373248  2.400960
4 6.426624  2.406016 4.333696  2.472960  6.453760  2.408576
5 0.095232  0.093824 0.097408  0.090240  0.093056  0.087680
6 2.537984  5.214336 2.435328 10.548864  2.406912  5.214336
#7 0 0 0 0 0 0 

[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | SMTP | Tracing | GPS ]

Copyright 2001-2014 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )