Quantcast
Channel: FRITZ!Box – Weberblog.net
Viewing all 26 articles
Browse latest View live

IPsec Site-to-Site VPN Juniper ScreenOS AVM FRITZ!Box

$
0
0

Hier kommen die Einstellungen die nötig sind, um ein Site-to-Site VPN zwischen einer AVM FRITZ!Box und einer Juniper ScreenOS Firewall herzustellen. Neben einigen Anleitungen im Netz habe ich selber ein paar Einstellungen getestet, um eine möglichst detaillierte *.cfg Datei zu haben. Außerdem ist erfreulicherweise anzumerken, dass die Juniper auch ein statisches VPN zu einer dynamischen Adresse erlaubt und somit sogar beide Seite einen Verbindungsaufbau initiieren können. Mit dem VPN Monitor von Juniper wird der Tunnel konstant “up” gehalten.

Aufbau und Infos

So sieht mein Aufbau aus. Anzumerken ist, dass ich meine öffentliche IP nicht direkt an der Juniper anliegen habe, sondern sie per statischem NAT auf die untrust aber private IP-Adresse der Juniper weiterleite.

S2s VPN Juniper SSG - FritzBox Laboratory

Des Weiteren habe ich noch folgende Anmerkungen zur FRITZ!Box Konfiguration:

  • mode = phase1_mode_idp: Ja, das ist der Main Mode. Und das funktioniert trotzdem, weil die Juniper ein “statisches” VPN zu einer FQDN Adresse erlaubt. Sprich: Obwohl die FRITZ!Box definitiv hinter einer dynamischen IP Adresse hängt (was eigentlich den Aggressive Mode erfordern würde), funktioniert hier der Main Mode, da die Juniper den FQDN einfach auflöst. Das hat folgenden großen Vorteil: VPN Verbindungen können von beiden Seiten initiiert werden, also auch von der Juniper aus. Das ist für mich sehr praktisch, da ich hinter der Juniper ein Monitoring-Server habe, der Geräte hinter der Fritz!Box abfragt. Könnte die Juniper nicht den Tunnel von sich aus aufbauen, würde es nur über Umwege funktionieren. Im Log der Juniper taucht dabei übrigens folgende Zeile auf:
    IKE gateway fdorf.webernetz.net has been enabled. The peer address fdorf.webernetz.net has been resolved to 95.116.50.62.
  • phases1ss: Viele andere Anleitungen haben hier schlichtweg “all/all/all” stehen. Ich wollte es aber etwas fester zurren, so dass ich es auf “alt/aes/sha” angepasst habe. Sprich: Diffie-Hellman group 2, AES-256 und SHA-1. Ich habe leider keine Einstellung gefunden, die DH group 5 erlaubt hätte. Gruppe 2 macht bei AES-256 ja eigentlich wenig Sinn, da das Security-Niveau von group 2 einfach zu niedrig ist um ein AES-256 zu rechtfertigen. Aber okay, es ist ja kein Hochsicherheitstrakt hinter meiner FRITZ!Box. ;)
  • ike_forward_rules: Obwohl es in meinem Szenario nicht nötig ist, habe ich das udp:4500 drin gelassen. Es wäre nötig für NAT-Traversal, bei welchem die ESP Pakete in UDP-4500 gepackt werden. Ich habe es drin gelassen, damit man diese *.cfg Datei auch für andere Szenarien später mal verwenden kann.

Zur Juniper ist noch folgendes zu sagen:

  • Gateway Local ID: Diese ID muss ich hier spezifizieren, da sonst der Aufbau von der Juniper zur FRITZ!Box nicht geklappt hat. Das liegt allerdings an meinem spezifischen Aufbau, da nicht die Juniper selbst die öffentliche IP-Adresse hat, sondern sie noch mal geNATet ist.

Auf der SSG lief Version “6.3.0r15a.0″. Bei der FRITZ!Box habe ich es auf vier verschiedenen Hardwares getestet: 7240, 7270, 7312, 7390. Die Versionen waren alle aus dem 5.5x Tree, bis auf die 7390, die bereits FRITZ!OS 6 drauf hatte.

Juniper ScreenOS (SSG 5)

Als erstes wird ein neues Tunnel-Interface angelegt und in eine (vorher angelegte) Security Zone gesteckt. In meinem Fall heißt sie “vpn-s2s”. Es muss ein unnumbered Tunnel-Interface sein. Als “Interface” Angabe habe ich das untrust Interface gewählt:

S2S-FB-ScreenOS_Juniper-01_Tunnel-Interface

Dann wird das Gateway angelegt:

S2S-FB-ScreenOS_Juniper-02_Gateway

Im Advanced Bereich muss man den PSK, die Local ID sowie das Custom P1 Proposal von “pre-g2-aes256-sha” auswählen. Da dieses standardmäßig nicht auf der Juniper installiert ist, muss man es vorher noch angelegen.

S2S-FB-ScreenOS_Juniper-03_GatewayAdvanced

Nun folgt das AutoKey IKE Profil und die Advanced Einstellungen. Es wird das P2 Proposal “g2-esp-3des-sha” ausgewählt und weiter unten auf das eben erstellte Tunnel-Interface verwiesen. Wichtig ist außerdem der Proxy-ID Check. Den VPN Monitor aktiviert man, wählt als Source Interface jenes aus, das dem getunnelten IP-Bereich entspricht und wählt als Destination IP die der remote FRITZ!Box aus. Das Rekey Häkchen kann man anhaken. Es bewirkt, dass der VPN Tunnel automatisch aufgebaut wird, was bei der 24-Stunden Zwangstrennung von DSL-Anschlüssen in Deutschland durchaus praktisch ist.

S2S-FB-ScreenOS_Juniper-04_AutoKeyIKES2S-FB-ScreenOS_Juniper-05_AutoKeyIKEAdvanced

Nun muss man noch die Proxy ID konfigurieren. In meinem Beispiel hier ein etwas größerer IP-Bereich als normal, da ich hinter der Juniper noch einige Netze route. Sehr oft dürfte hier ein “/24″ Bereich zur Verwendung kommen. Als Service wird ANY ausgewählt:

S2S-FB-ScreenOS_Juniper-06_ProxyID

Zum Schluss wird noch das remote Netz in den Tunnel geroutet (ohne Gateway IP-Adresse):

S2S-FB-ScreenOS_Juniper-07_Route

(Natürlich muss noch eine Policy von “trust” nach “vpn-s2s”, oder wie auch immer sie heißt, eingerichtet werden, die den gewünschten Traffic erlaubt.)

FRITZ!Box

Für die FRITZ!Box ist folgende *.cfg Datei nötig, welche man über die GUI importieren kann. Kommentare sind entsprechend vermerkt. Überall wo ANPASSEN steht, muss man selber noch Hand anlegen:

vpncfg {
        connections {
                enabled = yes;
                conn_type = conntype_lan;
                name = "fd-wv-fw01";					//ANPASSEN Angezeigter Name in der FRITZ!Box
                always_renew = yes;
                reject_not_encrypted = no;
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = 80.154.108.227;				//ANPASSEN Externe IP-Adresse der Juniper
                remote_virtualip = 0.0.0.0;
                localid {
                        fqdn = "darm.webernetz.net";	//ANPASSEN Dyn-DNS Eintrag der FRITZ!Box
                }
                remoteid {
                        ipaddr = "80.154.108.227";		//ANPASSEN Externe IP-Adresse der Juniper
                }
                mode = phase1_mode_idp;
                phase1ss = "alt/aes/sha";				//Entspricht DH Gruppe 2, AES-256, SHA-1
                keytype = connkeytype_pre_shared;
                key = "1iOOncL1T2TxJKqr7PBbDi6sr2lVKX";	//ANPASSEN Pre-Shared Key
                cert_do_server_auth = no;
                use_nat_t = no;							//Da die Juniper über eine statische IP verfügt, ist kein NAT-T notwendig
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.9.0;	//ANPASSEN IP-Netz hinter der FRITZ!Box
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 192.168.96.0;	//ANPASSEN IP-Netz hinter der Juniper
                                mask = 255.255.224.0;
                        }
                }
                phase2ss = "esp-3des-sha/ah-no/comp-no/pfs";
                accesslist = "permit ip any 192.168.96.0 255.255.224.0";	//ANPASSEN IP-Netz hinter der Juniper
        }  ike_forward_rules =	"udp 0.0.0.0:500 0.0.0.0:500", 
								"udp 0.0.0.0:4500 0.0.0.0:4500";
	}

 

Wenn es funktioniert

Dann sieht man im Monitor Status der Juniper in etwa so etwas:

S2S-FB-ScreenOS_Juniper-08_MonitorStatus

Auf der FRITZ!Box sieht man im Bereich Freigaben -> VPN einen grünen Status-Bubble. ;)

S2S-FB-ScreenOS_FritzBox_Status

Links

Neben dem Testen von diversen Einstellungen hatte ich natürlich auch Google bemüht. Zum Beispiel gibt es hier eine Erklärung von den FRITZ!Box Attributen und hier eine längere Diskussion über die Einstellungen von einem VPN zwischen ScreenOS und der FB. Eine Auflistungen der IKE Fehlermeldungen der FRITZ!Box findet man hier.

AVM hat ebenfalls ein VPN Service-Portal, bei dem allerdings (noch) keine Rede von der Juniper Firewall ist.


IPsec Site-to-Site VPN Palo Alto AVM FRITZ!Box

$
0
0

Wer im Büro auf eine Palo Alto Networks Firewall setzt und von zu Hause hinter seiner FRITZ!Box per VPN im Büro arbeiten möchte, der muss die richtigen Einstellungen auf beiden Geräten finden. Genau das habe ich getan und stelle hier die entsprechenden Details online. Viel Spaß dabei. ;)

Während ich in meinem letzten Blogpost das VPN von der FRITZ!Box zur Juniper ScreenOS beschrieben habe und dabei auf viele Infos im www zurückgreifen konnte, habe ich über das VPN zur Palo Alto noch nichts gefunden. Also war etwas testen angesagt. Fairerweise muss man aber sagen, dass sich die Einstellungen auf der Palo Alto kaum zu denen der Juniper unterschieden haben, so dass ich die Einstellungen ziemlich schnell raus hatte.

(Randnotiz: Ich zweifel ja noch etwas an dem Use Case dieser Verbindung. Wer im Büro eine Firewall des Kalibers Palo Alto einsetzt dürfte seinen Usern zu Hause kaum die FRITZ!Box durchgehen lassen. Falls also jemand diese Einstellungen verwendet: Ich freue mich über einen Kommentar am Ende dieses Beitrags. ;))

Aufbau und Infos

Im Vergleich zur Juniper muss man (leider) sagen, dass die Palo Alto es nicht erlaubt, ein statisches VPN zu einem dynamischen Namen (FQDN) aufzubauen. So muss man a) für den Tunnel den Aggressive Mode nehmen und leider b) auf einen Tunnel-Aufbau seitens der Palo Alto verzichten. Sprich: Der VPN Tunnel kommt nur zustande, wenn er von der FRITZ!Box her initiiert wurde.

Mein Laboraufbau sieht wie folgt aus: Die Palo Alto verfügt über eine statische (obgleich geNATete) IPv4-Adresse, während die FRITZ!Box ganz klassisch an einem DSL-Anschluss mit wechselnder IP-Adresse hängt. Über einen entsprechenden DynDNS-Account liegt immerhin ein statischer FQDN vor.

S2S VPN Palo Alto - FritzBox Laboratory

Palo Alto

Seitens Palo Alto wird ein Route-Based VPN umgesetzt. Als erstes wird ein Tunnel-Interface angelegt. Es muss einem Virtual Router und einer entsprechenden Site-to-Site VPN Security Zone zugewiesen werden:

S2S-FB-PaloAlto_Palo-01_TunnelInterface

Danach folgt das IKE Gateway vom Typ Dynamic. Wichtig ist dabei unter anderem das richtige IKE Crypto Profile, welches genau so angelegt werden muss:

S2S-FB-PaloAlto_Palo-02_IKEGateway

Dann fehlt nur noch der IPsec Tunnel. Hier wird das Tunnel-Interface, das IKE Gateway und das richtige IPsec Crypto Profile (entsprechend anlegen) ausgewählt. Die “Enable Replay Protection” kann deaktiviert werden:

S2S-FB-PaloAlto_Palo-03_IPsecTunnel

Bei den Proxy IDs muss analog zur FRITZ!Box Konfigurationsdatei das eigene und das entfernte Netzwerk spezifiziert werden. Als Protocol sollte “any” angegeben werden:

S2S-FB-PaloAlto_Palo-04_IPsecTunnel_ProxyIDs

Zum Schluss ist noch die Route über das Tunnel-Interface anzulegen. Da der Tunnel an sich ja keine IP-Adresse hat, wird der Next Hop mit “None” ausgewählt:

S2S-FB-PaloAlto_Palo-05_Route

(Noch mal der Hinweis: Die Palo Alto braucht zusätzlich eine Policy von untrust nach untrust die die Applications “ike” und “ipsec-esp” erlaubt, damit der Verbindungsversuch der FRITZ!Box nicht im Default-Deny endet):

S2S-FB-PaloAlto_Palo-07_PolicyUntrust

Auch ist es natürlich notwendig, entsprechende Policies von den trust Netzwerken zu den Site-to-Site VPN Zonen und umgekehrt einzurichten.

FRITZ!Box

Hier die verwendete *.cfg Datei zum Importieren in der FRITZ!Box. (Nein, das ist nicht der von mir verwendete PSK, sondern nur ein Beispiel.) Wer ein paar weitere Kommentare zu den einzelnen Einstellungen haben möchte, kann sich hier meinen Artikel für das VPN zur Juniper anschauen, bei dem ich etwas mehr dazu geschrieben habe. Größte Änderung bezüglich der Palo Alto ist lediglich der

mode = phase1_mode_aggressive;
.
vpncfg {
        connections {
                enabled = yes;
                conn_type = conntype_lan;
                name = "fd-wv-fw02";
                always_renew = yes;
                reject_not_encrypted = no;
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = 80.154.108.228;
                remote_virtualip = 0.0.0.0;
                localid {
                        fqdn = "fdorf.webernetz.net";
                }
                remoteid {
                        ipaddr = "80.154.108.228";
                }
                mode = phase1_mode_aggressive;
                phase1ss = "alt/aes/sha";
                keytype = connkeytype_pre_shared;
                key = "3NsAWYh0rkum3ViAkpf4tbzi36MU6x";
                cert_do_server_auth = no;
                use_nat_t = no;
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.86.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 192.168.120.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2ss = "esp-3des-sha/ah-no/comp-no/pfs";
                accesslist = "permit ip any 192.168.120.0 255.255.255.0";
        }  ike_forward_rules =	"udp 0.0.0.0:500 0.0.0.0:500", 
								"udp 0.0.0.0:4500 0.0.0.0:4500";
	}

 

Überall Grüne Bubbles

Ist alles richtig eingerichtet und das VPN seitens der FRITZ!Box aufgebaut, sieht man in beiden Devices grüne Status Bubbles, über die man sich freuen kann. ;)

S2S-FB-PaloAlto_Palo-06_GrueneBubbles

S2S-FB-PaloAlto_Fritz_GrueneBubbles

Wer ein paar weitere Infos haben möchte kann in der Palo Alto wie gewohnt im Session Browser für aktuell bestehende Sessions, bzw. im Traffic Log für bereits beendete Sessions nach den Protokollen ike bzw. ipsec-esp suchen:

S2S-FB-PaloAlto_Palo-08_SessionBrowser

S2S-FB-PaloAlto_Palo-09_TrafficLog

Viel Erfolg!

IPsec Site-to-Site VPN Cisco ASA AVM FRITZ!Box

$
0
0

Mit diesem Beitrag möchte ich zeigen, wie man ein Site-to-Site VPN von der FRITZ!Box zu einer Cisco ASA Firewall aufbaut. Mein Laboraufbau entspricht dabei dem typischen Fall, bei dem die FRITZ!Box hinter einer dynamischen IP hängt (klassisch: DSL-Anschluss), während die ASA eine statische IP geNATet bekommt.

Beide Geräte habe ein policy-based VPN implementiert, so dass das hier endlich mal ein Fall ist, wo man nicht durch den Mix einer route-based VPN-Firewall und einer policy-based VPN-Firewall durcheinander kommt. Man muss bei beiden Geräten einfach das eigene sowie das remote Netzwerk eintragen, ohne weitere Routen zu ändern.

Hinweis: Eine etwas detaillierte Beschreibung bezüglich der VPN-Einstellungen der FRITZ!Box habe ich hier bei meinem Blogbeitrag beim VPN zur Juniper Firewall beschrieben. Für weitere Informationen also bitte diesen Link verwenden.

Aufbau und Infos

So sieht mein Aufbau konkret aus:

S2S VPN Cisco ASA - FritzBox Laboratory

Auf der Cisco ASA 5505 lief Version 9.1(4), während auf meiner FRITZ!Box 7270 das FRITZ!OS 05.53 installiert war.

Leider habe ich es nicht geschafft auf der FRITZ!Box auch für die Phase 2 (IPsec) die Verschlüsselung mit AES-256 und DH-5 zu verwenden. Auch die Phase 1 (IKE) verwendet lediglich DH-2. Das ist insofern suboptimal, da bei DH-5 ein deutlich besserer Session-Key verwendet werden würde (höhere Sicherheitsstufe). Naja, immerhin kann man Perfect Forward Secrecy (PFS) mit DH-2 nutzen. Trotzdem: Falls jemand andere Einstellungen auf der FRITZ!Box hinbekommen hat: Bitte melden!

Cisco ASA

Der VPN-Tunnel bei der ASA wird mit einer Group Policy und einem Connection Profile realisiert. Siehe dazu die folgenden Screenshots inkl. der zusätzlichen Kommentare.

Als IKE Policy muss AES-256, DH-2, SHA-1, pre-share und eine Lifetime von 86400 Sekunden ausgewählt werden. Das IPsec Proposal braucht den Tunnel Mode mit 3DES und SHA-1. In der Crypto Map wird dann noch PFS mit DH-2 ausgewählt. Die Bennenung der Group Policy und des Connection Profiles spielt keine Rolle. Ich habe der Einfachheit halber den FQDN meiner FRITZ!Box gewählt. Das ist für die VPN Einstellungen an sich aber irrelevant.

Eine neue Group Policy mit IPsec IKEv1. Bei dem Connection Profile muss das Häkchen bei "Static" rausgenommen werden. Dadurch ist nur der Connection Name ausfüllbar. Darunter wird das eigene Netzwerk und das entfernte Netz der FRITZ!Box eingetragen. Dann noch die Group Policy auswählen, PSK eingeben und die unten gezeigten Krypto Profile auswählen. Unter Advanced muss man dann noch die Perfect Forward Secrecy mit DH-2 auswählen. Der Vollständigkeit halber hier noch die Crypto Map. Der Vollständigkeit halber hier noch die Crypto Map. Der Vollständigkeit halber hier noch die Crypto Map.

FRITZ!Box

Folgend ist die Konfigurationsdatei welche ich für das VPN zur Cisco ASA gebaut habe. (Und wie bereits oben geschrieben: Ein paar mehr Details zur Konfigurationsdatei habe ich hier bei einem meiner anderen VPN Beiträge zur FRITZ!Box aufgelistet.)

vpncfg {
        connections {
                enabled = yes;
                conn_type = conntype_lan;
                name = "fd-wv-fw03";
                always_renew = yes;
                reject_not_encrypted = no;
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = 80.154.108.229;
                remote_virtualip = 0.0.0.0;
                localid {
                        fqdn = "fdorf.webernetz.net";
                }
                remoteid {
                        ipaddr = "80.154.108.229";
                }
                mode = phase1_mode_aggressive;
                phase1ss = "alt/aes/sha";
                keytype = connkeytype_pre_shared;
                key = "ExdHIoxzmsBbkbW5vnkUVAlCNcNf2n";
                cert_do_server_auth = no;
                use_nat_t = no;
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.86.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 192.168.130.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2ss = "esp-3des-sha/ah-no/comp-no/pfs";
                accesslist = "permit ip any 192.168.130.0 255.255.255.0";
        }  ike_forward_rules =	"udp 0.0.0.0:500 0.0.0.0:500", 
								"udp 0.0.0.0:4500 0.0.0.0:4500";
	}

 

Status der VPN Session

Der Tunnel wird nur dann aufgebaut, wenn initialer Traffic von dem Netz hinter der FRITZ!Box in Richtung Cisco ASA läuft. Ist dann der VPN-Tunnel aufgebaut, sehen die Session Details auf der ASA in etwa so aus:

S2S ASA-FB - ASA 07 VPN Session Details

Bei der FRITZ!Box sieht man in dem VPN Bereich dann folgenden grünen Bubble:

S2S ASA-FB - FB 01 VPN-Verbindungen

Mission completed! ;)

MRTG/Routers2: Statistiken für AVM’s FRITZ!Box

$
0
0

Natürlich wollte ich auch Statistiken von der FRITZ!Box in meiner MRTG/Routers2-basierten Monitoring Umgebung haben. Glücklicherweise habe ich ein Tool namens upnp2mrtg gefunden, welches exakt das macht, nämlich die Interface-Statistik des WAN Ports der FRITZ!Box über UPnP abzufragen und für MRTG aufzubereiten. Sehr einfach zu benutzen. Hier also eine Anleitung mit einigen zusätzlichen Hinweisen.

UPnP auf der FRITZ!Box zulassen

Der erste Schritt ist die Kontrolle, ob Universal Plug and Play (UPnP) auf der FRITZ!Box erlaubt ist. Man findet die Einstellung unter Heimnetz -> Netzwerk -> Programme. Das Häkchen bei “Statusinformationen über UPnP übertragen (empfohlen)” muss drin sein, während das Häkchen bei “Änderungen der Sicherheitseinstellungen über UPnP gestatten” draußen bleiben sollte:

UPnP an FRITZ!Box erlauben

Eine potentielle Frage kann ich noch mit “ja” beantworten: Die Abfrage über UPnP funktioniert auch aus anderen IP-Bereichen und über einen aufgebauten VPN-Tunnel hinweg. Beides war für mich wichtig, da ich mehrere FRITZ!Boxen von meinem zentralen Monitoring Server aus überwache und somit alle Boxen über die VPN-Tunnel abfrage.

upnp2mrtg

Zunächst muss man sich das Tool hier herunterladen. Auf meinem Ubuntu Server hat es sofort ohne Probleme funktioniert. (Natürlich darf man nicht vergessen, es ausführbar zu machen:

chmod u+x upnp2mrtg
 ). Wichtig ist dann nur der
-a <IP-Adresse>
 Switch, der die Ziel IP-Adresse der FRITZ!Box bestimmt. Ein kurzer Test sah so aus:
weberjoh@jw-vm01:~$ upnp2mrtg -a 192.168.86.1
692423171
524025935
0 days 18:08:30 h (online)
Fritz!Box

Wie gewohnt habe ich das Tool nach “/usr/local/bin/” verschoben. (Infos zur Verzeichnisstruktur hier.)

Schieße dich selber ab …

… bevor du alles blockierst. Nach ein paar Wochen im Test mit MRTG (Konfig kommt weiter unten) musste ich feststellen, dass das Tool immer wieder den kompletten MRTG Prozess blockiert hat, sobald eine einzelne FRITZ!Box nicht auf die Anfragen geantwortet hat. Sprich: Bei allen Graphen von MRTG waren diese grauen Balken zu sehen. Hier ein Screenshot davon und die Ausgabe von htop auf dem Monitoring-Server welches zeigt, dass cron alle 5 Minuten MRTG neu startet, aber die alten Prozesse noch gar nicht fertig sind:

upnp2mrtg hat sich aufgehängt - graue Balken Der MRTG Prozess wird automatisch alle 5 Minuten gestartet. Bleibt er hängen, taucht er mehrmals in der Prozesstabelle auf. Außerdem werden nicht alle Devices abgefragt, da er ja hängen blieb.

Deswegen habe ich ein kleines Skript geschrieben, welches das eigentliche upnp2mrtg Skript aufruft und aber nach 3 Sekunden schaut, ob es noch am Laufen ist. Wenn ja, dann wird das upnp2mrtg Skript abgeschossen, damit MRTG alle anderen Geräte zeitnah abfragen und sich dann beenden kann.

Mein “upnp2mrtgwithkill” Skript sieht folgendermaßen aus:

#!/bin/bash

/usr/local/bin/upnp2mrtg -a $1 &
PID=$!
#echo "PID: "$PID

sleep 3

if ps -p $PID > /dev/null
then
#  echo $PID" is still running --> kill"
  kill $PID
fi

Ich habe es auch wieder nach “/usr/local/bin” verschoben und ausführbar gemacht. Als einzigen Parameter braucht es die IP Adresse der abzufragenden FRITZ!Box:

weberjoh@jw-vm01:/usr/local/bin$ upnp2mrtgwithkill 192.168.86.1
4229780344
2069694830
0 days 06:07:05 h (online)
Fritz!Box

Wieder in htop sieht man schön, wie sich die Prozesse gegenseitig aufrufen. Bei einem kill von upnp2mrtg ist außerdem anzumerken, dass ein paar Zombies weiterhin existieren. Diese verschwinden aber auf meinem Ubuntu immer nach ein paar Augenblicken (macht Ubuntu das?). Hier zwei htop Screenshots davon:

Hierarchischer Aufruf. Zombies.

MRTG/Routers2 Konfiguration

Jetzt also endlich zur MRTG/Routers2 Konfiguration. Diese sieht relativ einfach aus und erinnert stark an die eines normalen Interfaces welches per SNMP abgefragt wird. Hier wird stattdessen halt mein Skript verwendet:

Target[fdorf_wan]: `/usr/local/bin/upnp2mrtgwithkill 192.168.86.1`
Title[fdorf_wan]: Traffic Analysis for WAN -- fdorf
#Downstream 16 MBit = 2000000
MaxBytes1[fdorf_wan]: 2000000
#Upstream 1 MBit = 125000
MaxBytes2[fdorf_wan]: 125000
#AbsMax set to 100 MBit
AbsMax[fdorf_wan]: 12500000
routers.cgi*Mode[fdorf_wan]: interface
routers.cgi*GraphStyle[fdorf_wan]: mirror
routers.cgi*ShortDesc[fdorf_wan]: WAN

 

Hier ein Beispiel für einen solchen Graphen. Ab 22:15 Uhr wurde ein Live-Stream übers Internet geschaut – zunächst in normaler Qualitätsstufe. Gegen 23:15 Uhr wurde dann auf HQ umgeschaltet, was die Downloadrate direkt verdoppelt hat:

Stream in SD und HD

Cool ist natürlich auch, dass Routers2 nicht nur die durchschnittlichen Down-/Uploadwerte, sondern auch die absoluten Werte für den Traffic anzeigt. Das sieht bei mir beispielsweise so aus (im letzten Monat 29,6 GB Download und 4,21 GB Upload):

Total over last 7 days:                  In:  4.95 Gbytes            Out:  608.94 Mbytes	
95th Percentile for last 7 days:         In:  188.53 kbps (1.18 %)   Out:  38.40 kbps (0.24 %)
Total over rolling last month:           In:  29.63 Gbytes           Out:  4.21 Gbytes	
95th Percentile for rolling last month:  In:  255.73 kbps (1.60 %)   Out:  34.37 kbps (0.21 %)

 

Meine komplette FRITZ!Box Konfig

Als Template biete ich hier noch meine komplette FRITZ!Box Konfiguration für MRTG/Routers2 an. Sie beinhält neben dem hier erwähnten Skript noch drei weitere Graphen, nämlich den Traceroute Hop Count (siehe hier) sowie die Ping Zeiten (siehe hier) vom externen und dem internen Interface. Dieses Template macht natürlich nur da Sinn, wo auch über einen VPN-Tunnel die FRITZ!Box abgefragt wird. Hat man den Monitoring-Server im eigenen Netz direkt hinter der FRITZ!Box kann man sich das Traceroute Hop Count und die Pings sparen. Summa summarum ist überdies interessant, dass bei keinem der vier Graphen SNMP zum Einsatz kommt, sondern nur externe Skripte. :)

Man muss lediglich drei Variablen per Suchen-und-Ersetzen anpassen, damit die Konfig fertig ist. Beschrieben ist es am Anfang der Datei.

 

Hier noch eine Slideshow von den vier Graphen in meinem Montoring-System. Man sieht zum Beispiel, dass der Ping zum outside Interface im Vergleich zum inside Interface stets etwas kürzer ist, da er nicht durch den VPN-Tunnel muss. Interessant sind auch die unterschiedlichen Hop-Counts, die sich immer nach der DSL-Zwangstrennung in der Nacht ergeben:

fdorf.cfg-fdorf_traceroute-w-l2 fdorf.cfg-fdorf_wan-w-l2 fdorf.cfg-fdorf_ping2-w-l2 fdorf.cfg-fdorf_ping-w-l2

Das war’s. ;) Viel Spaß damit.

Schnellere DSL Synchronisierung mit neuerer FRITZ!Box

$
0
0

Vor einiger Zeit habe ich bei einem Bekannten eine AVM FRITZ!Box ausgetauscht: Die etwas betagte 7050 musste einer 7170 weichen. Wie immer wurde per Screenshots alles dokumentiert. Erfreulicherweise war die DSL Synchronisierung am exakt gleichen Anschluss danach um einiges höher. Anstatt 7 MBit/s im Download bekam man jetzt 11 MBit/s!

Hier die nackten Zahlen:

  • FRITZ!Box 7050: 7,1/1,0 MBit/s
  • FRITZ!Box 7170: 11,5/1,1 MBit/s

Und noch in Form von Screenshots: ;)

DSL-Sync Fritzbox 7050 DSL-Sync Fritzbox 7170

Ich habe mich nicht näher damit beschäftigt. Aber es wird wohl irgendetwas mit der Hardware des Modems und/oder der Software Version zu tun haben. Das war mir an der Stelle aber auch egal. Hauptsache es war schneller. :)

Ping-Zeiten der FRITZ!Box unter (Netzwerk-) Last

$
0
0

Hier kommen zwei interessante Graphen von der AVM FRITZ!Box, welche mit einem gängigen DSL-Anschluss im Internet hängt:

  1. Traffic in Richtung Internet mit einem Peak beim Upload
  2. Ping-Antwortzeiten des internen Interfaces mit einem noch viel höherem Peak während des Uploads
Upload in Richtung Internet Extrem hohe Ping-Antwortzeiten währenddessen

Es handelt sich hierbei um eine FRITZ!Box vom Typ 7240, also jetzt nicht gerade die kleinste unter den Boxen. Das inside Interface wurde durch einen Site-to-Site VPN Tunnel gepingt. Der Ping ging also auch durch das Internet und deutet daher eher auf die Latenz der Internet-Verbindung denn auf die Auslastung der FRITZ!Box hin.

Trotzdem finde ich es interessant zu sehen, dass die Ping-Antwortzeiten so viel höher während des Uploads ins Internet waren. Ich frage mich, ob das rein an der Auslastung des DSL-Anschlusses hängt, oder ob die CPU der FRITZ!Box zusätzlich überlastet ist? Vielleicht weiß das jemand? Es gibt ja leider keine direkte (GUI-) Anzeige bezüglich der Auslastung der CPU in der FRITZ!Box. Und von anderen Traceroute-Mitschnitten weiß ich, dass manche (schnellen) Router nur sehr langsam auf Pings antworten, was in einem solchen Fall sehr wohl auf die CPU des jeweiligen Routers hindeutet.

P.S.: Die Statistiken wurden mit MRTG/Routers2 erzeugt (Link). Der Netzwerkverkehr von der FRITZ!Box wird über upnp abgefragt (hier), und für die Ping-Zeiten läuft das mrtg-ping-probe Skript (klick).

IPsec Site-to-Site VPN Cisco Router AVM FRITZ!Box

$
0
0

Der Titel sagt eigentlich schon alles: Es geht um das Herstellen eines S2S-Tunnels zwischen einem Cisco Router (statische IPv4) und einer FRITZ!Box (dynamische IP). Ich liste nachfolgend alle Befehle für den IOS Router sowie die Konfigurationsdatei für die FRITZ!Box auf. Für eine etwas detaillierte Beschreibung des VPNs für die FRITZ!Box verweise ich auf diesen Artikel von mir, bei dem ich zwar ein VPN zu einem anderen Produkt hergestellt habe, aber etwas mehr auf die Schritte der Konfiguration eingegangen bin.

Labor

Getestet habe ich die Schose mit einer FRITZ!Box 7270 (FRITZ!OS 05.54) und einem Cisco Router 2621 (12.3(26)). Der Laboraufbau sah dabei folgendermaßen aus:

S2S VPN Cisco Router - FritzBox Laboratory

Cisco Router

Der Cisco Router wird mit nachfolgenden Befehlen konfiguriert. Man achte auf die “crypto dynamic-map dynmap01 …” auf welche in der “crypto map map01 …” referenziert wird. Dem outside Interface wird letztendlich die “crypto map map01″ zugewiesen.

Außerdem scheint es mehrere funktionierende Lösungen für dieses VPN zur FRITZ!Box zu geben. Im Internet findet man Konfigurationen, die zum Beispiel beim “crypto isakmp key …” mit “address 0.0.0.0 0.0.0.0″ anstatt des von mir vorgeschlagenen “hostname xyz” arbeiten. Auch verwende ich kein “isakmp profile”. Sprich: Meine Methode hier funktioniert, aber es gibt auch andere. ;)

!
crypto isakmp policy 20
 encr aes 256
 authentication pre-share
 group 2
 lifetime 28800
!
crypto isakmp key Pz5rvYqyU9IzleJSAqnwTTV4yHV95b hostname fdorf.webernetz.net
!
crypto ipsec transform-set 3des-sha esp-3des esp-sha-hmac
!
crypto dynamic-map dynmap01 1
 set transform-set 3des-sha
 set pfs group2
 match address acl-vpn-fdorf
!
crypto map map01 3 ipsec-isakmp dynamic dynmap01
!
interface FastEthernet0/0
 crypto map map01
!
ip access-list extended acl-vpn-fdorf
 permit ip 192.168.141.0 0.0.0.255 192.168.86.0 0.0.0.255
!

 

FRITZ!Box

Die anzupassenden FRITZ!Box VPN-Einstellungen sehen so aus:

vpncfg {
        connections {
                enabled = yes;
                conn_type = conntype_lan;
                name = "fd-wv-ro02";
                always_renew = yes;
                reject_not_encrypted = no;
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = 80.154.108.235;
                remote_virtualip = 0.0.0.0;
                localid {
                        fqdn = "fdorf.webernetz.net";
                }
                remoteid {
                        ipaddr = "80.154.108.235";
                }
                mode = phase1_mode_aggressive;
                phase1ss = "alt/aes/sha";
                keytype = connkeytype_pre_shared;
                key = "Pz5rvYqyU9IzleJSAqnwTTV4yHV95b";
                cert_do_server_auth = no;
                use_nat_t = no;
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.86.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 192.168.141.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2ss = "esp-3des-sha/ah-no/comp-no/pfs";
                accesslist = "permit ip any 192.168.141.0 255.255.255.0";
        }  ike_forward_rules =	"udp 0.0.0.0:500 0.0.0.0:500", 
								"udp 0.0.0.0:4500 0.0.0.0:4500";
	}

 

Läuft

Wie man in der FRITZ!Box schön am grünen Bubble erkennen kann:

FB VPN-Verbindungen

Beim Cisco Router gibt es die folgenden Befehle, um die Status der einzelnen Security Associations herauszufinden:

fd-wv-ro02#show crypto isakmp sa detail
Codes: C - IKE configuration mode, D - Dead Peer Detection
       K - Keepalives, N - NAT-traversal
       X - IKE Extended Authentication
       psk - Preshared key, rsig - RSA signature
       renc - RSA encryption

C-id  Local           Remote          I-VRF    Encr Hash Auth DH Lifetime Cap.
518   172.16.1.4      77.1.23.14               aes  sha  psk  2  00:50:51

-------------------------------------------------------------------------------

fd-wv-ro02#show crypto ipsec sa

interface: FastEthernet0/0
    Crypto map tag: map01, local addr. 172.16.1.4

   protected vrf:
   local  ident (addr/mask/prot/port): (192.168.141.0/255.255.255.0/0/0)
   remote ident (addr/mask/prot/port): (192.168.86.0/255.255.255.0/0/0)
   current_peer: 77.1.23.14:500
     PERMIT, flags={}
    #pkts encaps: 4011, #pkts encrypt: 4011, #pkts digest 4011
    #pkts decaps: 4021, #pkts decrypt: 4021, #pkts verify 4021
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 1, #recv errors 0

     local crypto endpt.: 172.16.1.4, remote crypto endpt.: 77.1.23.14
     path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0
     current outbound spi: C6D78600

     inbound esp sas:
      spi: 0xBAB770F6(3132584182)
        transform: esp-3des esp-sha-hmac ,
        in use settings ={Tunnel, }
        slot: 0, conn id: 2090, flow_id: 91, crypto map: map01
        sa timing: remaining key lifetime (k/sec): (4602733/3026)
        IV size: 8 bytes
        replay detection support: Y

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0xC6D78600(3336013312)
        transform: esp-3des esp-sha-hmac ,
        in use settings ={Tunnel, }
        slot: 0, conn id: 2091, flow_id: 92, crypto map: map01
        sa timing: remaining key lifetime (k/sec): (4602733/3026)
        IV size: 8 bytes
        replay detection support: Y

     outbound ah sas:

     outbound pcp sas:

-------------------------------------------------------------------------------

fd-wv-ro02#show crypto map
Crypto Map "map01" 3 ipsec-isakmp
        Dynamic map template tag: dynmap01

Crypto Map "map01" 65536 ipsec-isakmp
        Peer = 77.1.23.14
        Extended IP access list
            access-list  permit ip 192.168.141.0 0.0.0.255 192.168.86.0 0.0.0.255
            dynamic (created from dynamic map dynmap01/1)
        Current peer: 77.1.23.14
        Security association lifetime: 4608000 kilobytes/3600 seconds
        PFS (Y/N): Y
        DH group:  group2
        Transform sets={
                3des-sha,
        }
        Interfaces using crypto map map01:
                FastEthernet0/0

 

Viel Erfolg! :)

FRITZ!OS ab 06.20: Änderungen bei VPNs

$
0
0

In den Release Notes der neuesten AVM FRITZ!Box Version FRITZ!OS 06.20 stand unter anderem: “VPN-Verbindungen unterstützen jetzt zusätzliche Diffie-Hellman-Gruppen 5, 14 und 15″. Coole Sache, ist doch die Sicherheit bei der Perfect Forward Secrecy mit DH-14 deutlich höher und der heutigen Zeit angemessen. Also habe ich das bei einem meiner VPNs direkt mal eingerichtet und entsprechend getestet. Leider hat sich aber mit der neuen Version die Kompatibilität zu diversen Firewalls/VPN-Gateways deutlich verschlechtert. Es ist also nicht nur Gewinn, die Version 06.20 am laufen zu haben.

Auf das neue AVM FRITZ!Box Update bin ich erst durch die Diskussion in meinem Blogpost über das VPN von der FRITZ!Box zur Juniper SSG gekommen. Dort haben sich einige Leser über Probleme mit der VPN-Verbindung seit dem Update auf FRITZ!OS 06.20 beklagt.

Probleme

(Alle folgenden Aussagen beziehen sich auf VPNs zwischen der FRITZ!Box und anderen Firewalls. Verbindungen zwischen zwei FRITZ!Boxen dürften super funktionieren.)

Auch ich habe folgende Probleme beim Experimentieren festgestellt:

  • Das manuelle Anlegen eines Site-to-Site VPNs über die GUI (ebenfalls neues Feature seit 06.20) hat mangels notwendiger Optionen nicht geklappt.
  • Das Importieren einer vpncfg Datei funktionierte nicht immer. Manchmal wurde nur ein Fehler angezeigt. Ich konnte es aber nicht richtig reproduzieren.
  • Die FRITZ!Box ändert die Optionen für Phase 1 und Phase 2 in ihrer Konfiguration ab. Beispiel: Ich hatte
    phase2ss = "esp-3des-sha/ah-no/comp-no/pfs";
    in der importierten vpncfg Datei stehen, aber die FRITZ!Box (“Sicherung” einfach im Notepad++ öffnen und nach “vpncfg” suchen) hat folgendes hinterlegt:
    phase2ss = "esp-all-all/ah-none/comp-all/pfs";
    .
  • Obwohl das VPN funktioniert, tauchen teilweise folgende Fehlermeldungen in der FRITZ!Box auf:
    VPN-Fehler: fd-wv-fw01, IKE-Error 0x2027
    . Ich kann nicht genau sagen, warum. In Summe sieht das denn in etwa so aus:
    FRITZ!Box 06.20 IKE-Error 0x2027
  • Das größte Problem jedoch scheint zu sein, dass die FRITZ!Box keine Verbindungen zu den gängigen VPN-Firewalls mehr herstellen kann. Ich habe es ebenfalls nicht hingekommen, dass die FRITZ!Box ein VPN initiiert. Dies könnte etwas mit der Kompression der Phase 2 zu tun haben, die man nicht mehr explizit deaktivieren kann, da es im Proposal (wie oben bereits erwähnt) immer zu “comp-all” geändert wird. Wenn das VPN allerdings von einer Firewall zur FRITZ!Box aufgebaut wird, dann klappt es weiterhin ohne Probleme. Das Problem ist viel mehr, dass das kaum eine Firewall unterstützt. Schließlich müsste sie dazu ein statisches VPN (Main Mode) zu einer dynamischen IP-Adresse (Dyn DNS) aufbauen. Die Juniper SSG kann es, die Cisco ASA oder Palo Alto aber nicht.

Immerhin: DH-14 funktioniert

Nunja, bei meinem Test zwischen der Juniper ScreenOS Firewall (SSG 5 mit 6.3.0r17) und der FRITZ!Box 7390 mit FRITZ!OS 06.20 hat es ohne Probleme geklappt, da die Juniper zu einem dynamischen DNS Namen ein VPN im Main Mode aufbauen kann (siehe hier).

Folgende Proposals für Phase 1 (IKE) und Phase 2 (IPsec mit PFS) haben bei meinem VPN mit DH-14, AES-256 und SHA-1 zum Ziel geführt:

  • phase1ss = "dh14/aes/sha";
  • phase2ss = "esp-all-all/ah-none/comp-all/pfs";

(Vorher konnte die FRITZ!Box bei Phase 2 nur 3DES. Jetzt klappt dort auch AES-256. Das ist also ein weiterer Sicherheitsgewinn.) Alle anderen Einstellungen bleiben wie gewohnt.

Natürlich müssen die Proposals auf der Firewall ebenfalls angepasst werden. Steht das VPN erst mal, haben bei mir folgende CLI Befehle auf der Juniper offenbart, dass wirklich Diffie-Hellman Gruppe 14 für Phase 1 und Phase 2 (PFS) verwendet wurden:

Phase 1:

fd-wv-fw01-> get ike cookies

IKEv1 SA -- Active: 9, Dead: 0, Total 9

80182f/0003, 77.0.182.119:500->172.16.0.2:500, PRESHR/grp14/AES256/SHA, xchg(2) (fdorf-foobar.webernetz.net/grp-1/usr-1)
resent-tmr 322 lifetime 28800 lt-recv 3600 nxt_rekey 27749 cert-expire 0
responder, err cnt 0, send dir 1, cond 0x0
nat-traversal map not available
ike heartbeat              : disabled
ike heartbeat last rcv time: 0
ike heartbeat last snd time: 0
XAUTH status: 0
DPD seq local 0, peer 0

Phase 2:

fd-wv-fw01-> get sa id 6
index 4, name fdorf-foobar.webernetz.net, peer gateway ip 77.0.182.119. vsys
auto key. tunnel if binding node, tunnel mode, policy id in:<-1> out:<-1> vpngrp:<-1>. sa_list_nxt:<-1>.
tunnel id 6, peer id 4, NSRP Local.     site-to-site. Local interface is ethernet0/0 <172.16.0.2>.
  esp, group 14, a256 encryption, sha1 authentication
  autokey, IN active, OUT active
  monitor<1>, latency: 37, availability: 100
  DF bit: clear
  app_sa_flags: 0x24001a7
  proxy id: local 192.168.96.0/255.255.224.0, remote 192.168.29.0/255.255.255.0, proto 0, port 0/0
  ike activity timestamp: 2057872643
  DSCP-mark : enabled, value : 0
nat-traversal map not available
incoming: SPI bfc5493a, flag 00004000, tunnel info 40000006, pipeline
  life 3600 sec, 2755 remain, 0 kb, 0 bytes remain
  anti-replay on, last 0x95, window 0xffffffff, idle timeout value <0>, idled 7 seconds
  next pak sequence number: 0x0
  bytes/paks:204451860/1715993; sw bytes/paks:204451816/1715992
outgoing: SPI dc4a29c6, flag 00000000, tunnel info 40000006, pipeline
  life 3600 sec, 2755 remain, 0 kb, 0 bytes remain
  anti-replay on, last 0x0, window 0x0, idle timeout value <0>, idled 7 seconds
  next pak sequence number: 0xa7
  bytes/paks:159531891/1916381; sw bytes/paks:159531891/1916381

 

Phase 1 Lifetime 3600

In diesem Zuge habe ich noch festgestellt, dass die FRITZ!Box auch für Phase 1 eine Lifetime von 3600 s vorgibt. Ich kenne standardmäßig eigentlich eine Lifetime von 8 h für Phase 1 und dann 1 h für Phase 2. Aber gut, sei’s drum. Diese Einstellung habe ich Firewallseitig bei mir jetzt noch korrigiert, so dass es jetzt so aussieht:

fd-wv-fw01-> get ike cookies

IKEv1 SA -- Active: 9, Dead: 0, Total 9

80182f/0003, 95.116.51.255:500->172.16.0.2:500, PRESHR/grp14/AES256/SHA, xchg(2) (fdorf-foobar.webernetz.net/grp-1/usr-1)
resent-tmr 322 lifetime 3600 lt-recv 3600 nxt_rekey 3429 cert-expire 0
responder, err cnt 0, send dir 1, cond 0x0
nat-traversal map not available
ike heartbeat              : disabled
ike heartbeat last rcv time: 0
ike heartbeat last snd time: 0
XAUTH status: 0
DPD seq local 0, peer 0

 

Soll ich mich jetzt freuen?

So ganz weiß ich ja noch nicht, ob das Update auf 06.20 jetzt gut ist oder nicht. Das Mehr an Sicherheit durch Diffie-Hellman Gruppe 14 ist zwar super, bringt aber nichts, wenn gefühlte 90 % der VPNs nicht mehr funktionieren dürften. Immerhin baut der Otto-Normalverbraucher sein VPN ja von der FRITZ!Box zur Firewall in der Firma auf. Hm. Mal schauen, ob AVM da etwas tut.

[Update] AVM hat geantwortet

Sehr cool. Dann warten wir mal auf das nächste finale Update…


VoIP von FRITZ!Box über Juniper SSG Firewall

$
0
0
VoIP Fritzbox über SSG - Featured Image

Ich habe bei mir zu Hause die AVM FRITZ!Box als alleinigen Router abgelöst und durch eine Juniper SSG 5 Firewall ersetzt. Die FRITZ!Box ist trotzdem noch vorhanden und steht als IP-Client hinter der Firewall, primär um die Internettelefonie zu 1&1 bereitzustellen. Leider hat es etwas gedauert, bis ich die richtigen Einstellungen herausgefunden hatte, damit die Telefonie auch wirklich in beide Richtungen funktionierte.

Von “es geht gar nichts” über “es kann nur einer reden” bis hin zu “meine Frau kann endlich wieder telefonieren” gab es mehrere Stufen. Und um es gleich vorweg zunehmen: Ich bin mir nicht überall zu 100 % sicher, ob ich die Probleme richtig erkannt und gelöst habt. Fakt ist aber, dass es jetzt funktioniert. ;) Ich habe aber nicht noch mehr recherchiert. Hier folgt mein Endstand.

Problem

Das Problem schien wohl zu sein, dass

  1. die SSG keinen ALG für RTP (sondern nur für SIP und RTSP) hat, bzw. dass
  2. die FRITZ!Box nicht korrekt die nötigen Verbindungen für SIP und RTP offen halten kann, obwohl es hier so beschrieben ist.

Ich hatte dann eine Weile mit den Einstellungen in der FRITZ!Box sowie den ALGs der SSG herumexperimentiert. Leider sieht man auf der SSG ja nicht wirklich, welche Verbindungen von außen blockiert werden. Unter anderem hatte ich das hier von Juniper getestet. Allerdings lief bei mir nie eine Verbindung in diese Regel rein. Es schien ohnehin mehr ein Problem von RTP und weniger von SIP zu sein. (?) Diesen Blogpost hatte ich dann gefunden, der direkt schreibt, dass die SSG keinen ALG für RTP hat.

Lösung

Wie es jetzt läuft:

  • Den 30 Sekunden Keepalive auf der FRITZ!Box aktiviert (Telefonie -> Eigene Rufnummern -> Anschlusseinstellungen -> Sprackpakete).
  • Die ALGs für SIP und RTSP auf der SSG ausgeschaltet (damit es ein definierter Zustand von “die SSG macht nichts Intelligentes” ist).
  • Auf der SSG ein “Port-Forwarding”, also die VIP und Policies für SIP (UDP 5060) und RTP (UDP 7078-7097, scheint FRITZ!Box spezifisch zu sein) eingerichtet, so wie es hier alternativ beschrieben ist. Diese Ports werden also an die FRITZ!Box weitergereicht.

Übersicht der weitergeleiteten Ports:

VoIP Fritzbox über SSG - Port-Forwarding

Und hier ein paar Screenshots. Man kann gut beobachten, dass pro Telefonat genau zwei RTP/RTSP Sessions aufgemacht werden. Bei einem ausgehenden Telefoncall werden die Verbindungen eingehend (!) geöffnet. Bei einem eingehenden Anruf dann entsprechend ausgehen. Außerdem interessant ist der immer erkannte “Fragmented Traffic” am Anfang eines jeden Telefonats. Ich habe während den Gesprächen zwar nichts gemerkt, aber es tritt immer auf. Siehe Bild-Beschreibungen für mehr Infos:

VoIP Fritzbox Portweiterleitung aktiv halten VoIP über SSG - VIP Services für SIP und RTP/RTSP und die entsprechende Policy from untrust to trust. Ausgehender Anruf = eingehende RTP Sessions Eingehender Anruf = ausgehende RTP Sessions Fragmented Traffic zu Beginn von Telefongesprächen.

 

Und hier noch ein Teil der CLI Konfiguration der SSG, welche ja leider für jeden Service der VIP einen einzelnen Eintrag braucht. Nerv.

set service "udp_5060_sip" protocol udp src-port 0-65535 dst-port 5060-5060
set service "udp_7078_rtp" protocol udp src-port 0-65535 dst-port 7078-7078
set service "udp_7079_rtp" protocol udp src-port 0-65535 dst-port 7079-7079
set service "udp_7080_rtp" protocol udp src-port 0-65535 dst-port 7080-7080
set service "udp_7081_rtp" protocol udp src-port 0-65535 dst-port 7081-7081
set service "udp_7082_rtp" protocol udp src-port 0-65535 dst-port 7082-7082
set service "udp_7083_rtp" protocol udp src-port 0-65535 dst-port 7083-7083
set service "udp_7084_rtp" protocol udp src-port 0-65535 dst-port 7084-7084
set service "udp_7085_rtp" protocol udp src-port 0-65535 dst-port 7085-7085
set service "udp_7086_rtp" protocol udp src-port 0-65535 dst-port 7086-7086
set service "udp_7087_rtp" protocol udp src-port 0-65535 dst-port 7087-7087
set service "udp_7088_rtp" protocol udp src-port 0-65535 dst-port 7088-7088
set service "udp_7089_rtp" protocol udp src-port 0-65535 dst-port 7089-7089
set service "udp_7090_rtp" protocol udp src-port 0-65535 dst-port 7090-7090
set service "udp_7091_rtp" protocol udp src-port 0-65535 dst-port 7091-7091
set service "udp_7092_rtp" protocol udp src-port 0-65535 dst-port 7092-7092
set service "udp_7093_rtp" protocol udp src-port 0-65535 dst-port 7093-7093
set service "udp_7094_rtp" protocol udp src-port 0-65535 dst-port 7094-7094
set service "udp_7095_rtp" protocol udp src-port 0-65535 dst-port 7095-7095
set service "udp_7096_rtp" protocol udp src-port 0-65535 dst-port 7096-7096
set service "udp_7097_rtp" protocol udp src-port 0-65535 dst-port 7097-7097
set service "udp_7078-7097_rtp" protocol udp src-port 0-65535 dst-port 7078-7097
set interface ethernet0/0 vip interface-ip 5060 "udp_5060_sip" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7078 "udp_7078_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7079 "udp_7079_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7080 "udp_7080_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7081 "udp_7081_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7082 "udp_7082_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7083 "udp_7083_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7084 "udp_7084_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7085 "udp_7085_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7086 "udp_7086_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7087 "udp_7087_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7088 "udp_7088_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7089 "udp_7089_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7090 "udp_7090_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7091 "udp_7091_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7092 "udp_7092_rtp" 192.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7093 "udp_7093_rtp" 193.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7094 "udp_7094_rtp" 194.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7095 "udp_7095_rtp" 195.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7096 "udp_7096_rtp" 196.168.86.2 manual
set interface ethernet0/0 vip interface-ip 7097 "udp_7097_rtp" 197.168.86.2 manual
set policy id 26 from "Untrust" to "Trust"  "Any-IPv4" "VIP(ethernet0/0)" "udp_5060_sip" permit log
set policy id 26
exit
set policy id 27 from "Untrust" to "Trust"  "Any-IPv4" "VIP(ethernet0/0)" "udp_7078-7097_rtp" permit log
set policy id 27
exit
set policy id 24 from "Trust" to "Untrust"  "Any-IPv4" "Any-IPv4" "SIP" nat src permit log count
set policy id 24
exit
set policy id 28 from "Trust" to "Untrust"  "Any-IPv4" "Any-IPv4" "udp_7078-7097_rtp" nat src permit log count
set policy id 28
exit

 

FRITZ!OS ab 06.23: IPsec P2 Proposals erweitert

$
0
0
FRITZ!OS 06.23 IPsec Proposals

Es geht in eine weitere Runde bei den VPNs von und zur FRITZ!Box. Nach den unglücklichen Änderungen in Version 06.20 hat AVM wieder ein paar Phase 2 Proposals hinzugenommen, die komplett ohne Kompression laufen. Somit ist es wieder möglich, die FRITZ!Box im Aggressive Mode VPN-Verbindungen zu diversen Firewalls aufbauen zu lassen. Komisch nur, dass noch nicht alles ganz wie erwartet funktioniert. Hier kommen meine Testergebnisse.

IPsec Proposals

Auf Anfrage hat mir AVM die “Strategien” für IPsec in der Version 06.23 zur Verfügung gestellt. Diese sind wie folgt:

Phase 1:

  • dh5/aes/sha
  • dh14/aes/sha
  • dh15/aes/sha
  • def/all/all
  • alt/all/all
  • all/all/all
  • LT8h/all/all/all

Phase 2:

  • esp-aes-sha/ah-all/comp-lzjh-no/pfs
  • esp-all-all/ah-all/comp-all/pfs
  • esp-all-all/ah-all/comp-all/no-pfs
  • esp-all-all/ah-none/comp-all/pfs
  • esp-3des-sha/ah-no/comp-no/no-pfs
  • esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs
  • esp-all-all/ah-none/comp-all/no-pfs
  • LT8h/esp-all-all/ah-none/comp-all/pfs
  • LT8h/esp-all-all/ah-none/comp-all/no-pfs

Mein Ziel war es also, in beiden Phase möglichst DH-14 und AES-256 einzusetzen, wobei Phase 1 gerne eine Lifetime von 8 Stunden haben darf, während Phase 2 nur eine Stunde laufen soll. (Hintergrund: Da es ständig zu Verbindungsabbrüchen beim Rekeying kommt, sind längere Lifetimes hier wohl besser.) Leider hat das nicht exakt so geklappt…

Tests

Die folgenden Tests habe ich extra alle im Aggressive Mode laufen lassen, so dass stets die FRITZ!Box (hinter einer dynamischen IP) die VPN-Verbindung initiiert. Bei einigen Kunden scheint das Voraussetzung zu sein. Als Gegenstelle hatte ich eine Juniper ScreenOS SSG 5 mit Version 6.3.0r18.0 im Labor (siehe hier). Die FRITZ!Box ist eine 7390 und wie gesagt mit FRITZ!OS Version 06.23.

Folgende Tabelle zeigt immer zweizeilig die Einstellungen für Phase 1 und 2:

#FRITZ!BoxJuniperLäuft?Kommentar
1dh14/aes/shapre-g14-aes256-sha1-3600sJaLeider nur mit 1 h bei Phase 1.
esp-aes256-3des-sha/ah-no/comp-lzs-no/pfsg14-esp-aes256-sha1-3600sJa
2LT8h/all/all/allpre-g14-aes256-sha1-28800sNeinPhase 1 Mismatch, also scheint DH-14 hier nicht zu klappen
esp-aes256-3des-sha/ah-no/comp-lzs-no/pfsg14-esp-aes256-sha1-3600s
3LT8h/all/all/allpre-g2-aes256-sha1-28800sJaAha, also mit DH-2 und 8 h klappt es
esp-aes256-3des-sha/ah-no/comp-lzs-no/pfsg14-esp-aes256-sha1-3600sNeinThere were no acceptable Phase 2 proposals. WARUM?
4LT8h/all/all/allpre-g2-aes256-sha1-28800sJa
esp-aes256-3des-sha/ah-no/comp-lzs-no/pfsg2-esp-aes256-sha1-3600sJaMit DH-2 klappt es auch hier. Komisch, weil es bei Test 1 ja exakt mit diesem Proposal lief.

Sehr komisch ist also zum Beispiel, dass bei Tests 1 und 3 für Phase 2 jeweils das gleiche Proposal seitens der FRITZ!Box verwendet wurde, es aber in Test 1 mit DH-14 funktioniert hat, in Test 3 aber nicht. Hm.

Bei Variante 1 sah es auf der Juniper SSG also so aus:

fd-wv-fw01-> get ike cookies

IKEv1 SA -- Active: 9, Dead: 0, Total 9

80182f/0006, 95.116.94.50:500->172.16.0.2:500, PRESHR/grp14/AES256/SHA, xchg(4) (fdorf-foobar.webernetz.net/grp-1/usr-1)
resent-tmr 322 lifetime 3600 lt-recv 3600 nxt_rekey 3040 cert-expire 0
responder, err cnt 0, send dir 1, cond 0xc0
nat-traversal map not available
ike heartbeat              : disabled
ike heartbeat last rcv time: 0
ike heartbeat last snd time: 0
XAUTH status: 0
DPD seq local 0, peer 0

fd-wv-fw01->
fd-wv-fw01->
fd-wv-fw01-> get sa id 6
index 4, name fdorf-foobar.webernetz.net, peer gateway ip 95.116.94.50. vsys
auto key. tunnel if binding node, tunnel mode, policy id in:<-1> out:<-1> vpngrp:<-1>. sa_list_nxt:<-1>.
tunnel id 6, peer id 4, NSRP Local.     site-to-site. Local interface is ethernet0/0 <172.16.0.2>.
  esp, group 14, a256 encryption, sha1 authentication
  autokey, IN active, OUT active
  monitor<1>, latency: 37, availability: 100
  DF bit: clear
  app_sa_flags: 0x24001a7
  proxy id: local 192.168.96.0/255.255.224.0, remote 192.168.29.0/255.255.255.0, proto 0, port 0/0
  ike activity timestamp: -1633079230
  DSCP-mark : enabled, value : 0
nat-traversal map not available
incoming: SPI f41f788e, flag 00004000, tunnel info 40000006, pipeline
  life 3600 sec, 3001 remain, 0 kb, 0 bytes remain
  anti-replay on, last 0x263, window 0xffffffff, idle timeout value <0>, idled 1 seconds
  next pak sequence number: 0x0
  bytes/paks:105778793/531384; sw bytes/paks:105772872/531377
outgoing: SPI d8c63b56, flag 00000000, tunnel info 40000006, pipeline
  life 3600 sec, 3001 remain, 0 kb, 0 bytes remain
  anti-replay on, last 0x0, window 0x0, idle timeout value <0>, idled 0 seconds
  next pak sequence number: 0x271
  bytes/paks:48706409/564603; sw bytes/paks:48706409/564603

 

Variante 4 entsprechend so:

fd-wv-fw01-> get ike cookies

IKEv1 SA -- Active: 9, Dead: 0, Total 9

80182f/0006, 95.116.94.50:500->172.16.0.2:500, PRESHR/grp2/AES256/SHA, xchg(4) (fdorf-foobar.webernetz.net/grp-1/usr-1)
resent-tmr 322 lifetime 28800 lt-recv 28800 nxt_rekey 28762 cert-expire 0
responder, err cnt 0, send dir 1, cond 0x0
nat-traversal map not available
ike heartbeat              : disabled
ike heartbeat last rcv time: 0
ike heartbeat last snd time: 0
XAUTH status: 0
DPD seq local 0, peer 0

fd-wv-fw01->
fd-wv-fw01->
fd-wv-fw01-> get sa id 6
index 4, name fdorf-foobar.webernetz.net, peer gateway ip 95.116.94.50. vsys
auto key. tunnel if binding node, tunnel mode, policy id in:<-1> out:<-1> vpngrp:<-1>. sa_list_nxt:<-1>.
tunnel id 6, peer id 4, NSRP Local.     site-to-site. Local interface is ethernet0/0 <172.16.0.2>.
  esp, group 2, a256 encryption, sha1 authentication
  autokey, IN active, OUT active
  monitor<0>, latency: -1, availability: 0
  DF bit: clear
  app_sa_flags: 0x2400027
  proxy id: local 192.168.96.0/255.255.224.0, remote 192.168.29.0/255.255.255.0, proto 0, port 0/0
  ike activity timestamp: -1630958802
  DSCP-mark : enabled, value : 0
nat-traversal map not available
incoming: SPI f41f789d, flag 00004000, tunnel info 40000006, pipeline
  life 3600 sec, 3518 remain, 0 kb, 0 bytes remain
  anti-replay on, last 0x56, window 0xffffffff, idle timeout value <0>, idled 0 seconds
  next pak sequence number: 0x0
  bytes/paks:105813717/531796; sw bytes/paks:105807796/531789
outgoing: SPI 6381d8bc, flag 00000000, tunnel info 40000006, pipeline
  life 3600 sec, 3518 remain, 0 kb, 0 bytes remain
  anti-replay on, last 0x0, window 0x0, idle timeout value <0>, idled 0 seconds
  next pak sequence number: 0x58
  bytes/paks:48741197/565019; sw bytes/paks:48741197/565019

 

Und hier noch ein Screenshot von einem Test zur Cisco ASA Version 8.4(7). Hier wurde ebenfalls die Variante mit einer IKE Lifetime von 8 h verwendet. Die Gegenstelle hatte sogar bereits FRITZ!OS 06.24 installiert:

Cisco ASA FRITZ!Box 06.24

 

Fazit

So ganz eindeutig scheint es noch nicht zu sein. Die “all/all/all” Varianten decken doch nicht alles ab und die anderen klappen manchmal und manchmal aber auch nicht. Man hat aktuell die Wahl, ob man DH-14 in beiden Phasen verwenden möchte (was aus sicherheitstechnischer Sicht Sinn macht) oder lieber auf eine Lifetime von 8 h in Phase 1 zurückgreift, dann aber nur DH-2 zum Laufen bekommt.

Templates

Hier noch mal zwei komplette Templates, so wie ich sie aktuell verwende. Bei beiden wird davon ausgegangen, dass die FRITZ!Box eine dynamische IP Adresse hat, also der Aggressive Mode verwendet wird.

DH-14 mit Lifetime 1 h

vpncfg {
        connections {
                enabled = yes;
                conn_type = conntype_lan;
                name = "NAME-OF-THE-VPN";
                always_renew = yes;
                reject_not_encrypted = no;
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = 192.0.2.86;
                remote_virtualip = 0.0.0.0;
                localid {
                        fqdn = "foobar.webernetz.net";
                }
                remoteid {
                        ipaddr = "192.0.2.86";
                }
                mode = phase1_mode_aggressive;
                phase1ss = "dh14/aes/sha";
                keytype = connkeytype_pre_shared;
                key = "ThisIsThePSKAndShouldBeGeneratedRandomly";
                cert_do_server_auth = no;
                use_nat_t = no;
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.178.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 192.168.0.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2ss = "esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs";
                accesslist = "permit ip any 192.168.0.0 255.255.255.0";
        }  ike_forward_rules =	"udp 0.0.0.0:500 0.0.0.0:500", 
								"udp 0.0.0.0:4500 0.0.0.0:4500";
	}

 

Lifetime 8 h aber nur DH-2

vpncfg {
        connections {
                enabled = yes;
                conn_type = conntype_lan;
                name = "NAME-OF-THE-VPN";
                always_renew = yes;
                reject_not_encrypted = no;
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = 192.0.2.86;
                remote_virtualip = 0.0.0.0;
                localid {
                        fqdn = "foobar.webernetz.net";
                }
                remoteid {
                        ipaddr = "192.0.2.86";
                }
                mode = phase1_mode_aggressive;
                phase1ss = "LT8h/all/all/all";
                keytype = connkeytype_pre_shared;
                key = "ThisIsThePSKAndShouldBeGeneratedRandomly";
                cert_do_server_auth = no;
                use_nat_t = no;
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.178.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 192.168.0.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2ss = "esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs";
                accesslist = "permit ip any 192.168.0.0 255.255.255.0";
        }  ike_forward_rules =	"udp 0.0.0.0:500 0.0.0.0:500", 
								"udp 0.0.0.0:4500 0.0.0.0:4500";
	}

 

IPsec Site-to-Site VPN FortiGate FRITZ!Box

$
0
0
S2S VPN FortiGate - FritzBox

Hier kommt ein kurzer Guide wie man ein Site-to-Site VPN zwischen einer FortiGate Firewall und einer AVM FRITZ!Box aufbaut. Anhand von Screenshots zeige ich die Einrichtung der FortiGate, während ich für die FRITZ!Box ein Template der *.cfg Konfigurationsdatei bereitstelle.

Labor

Mein Labor sah wie folgt aus:

S2S VPN FortiGate - FritzBox Laboratory

Die FRITZ!Box ist eine 7390 mit FRITZ!OS 06.30, während die Fortinet Firewall eine FortiWiFi 90D mit Version 5.2.2 ist. Wie im Internet üblich ist die FortiGate mit einer statischen IP-Adresse versehen (obgleich 1 zu 1 geNATet), während sich die FRITZ!Box hinter einer dynamischen IP verbirgt. Mit einem dynamischen DNS Dienst ist immerhin ein FQDN für die FRITZ!Box verfügbar.

Sehr praktisch bei FortiOS ist ja, dass bei IKE auch dann der Main Mode verwendet werden kann, wenn die Gegenstelle lediglich über eine dynamische IP (mit einem DynDNS Namen) verfügt. Sprich: Es ist nicht der Aggressive Mode nötig, um ein VPN zu bauen, und vorallem kann der Tunnelaufbau auch von der FortiGate selbst initiiert werden. (Exakt vergleichbar mit der Juniper SSG, die das genau so kann, siehe hier.)

FortiGate

Folgende Schritte sind seitens der FortiGate nötig. In den Beschriftungen unterhalb der Screenshots stehen weitere Details:

Neuer VPN Tunnel Der Remote Gateway ist ein "Dynamic DNS". PSK angeben und (trotz dynamischer IP) den Main Mode wählen. In diesem Beispiel ist für Phase 1 AES256, SHA1 und DH-14 ausgewählt. Die "Local ID" muss einfach nur ausgefüllt sein und zur Konfigurationsdatei der FRITZ!Box passen. Für Phase 2 muss das lokale und entfernte Netz angegeben werden. Außerdem die Krypto Protokolle. Wer mit Zonen auf der FortiGate arbeitet (empfehlenswert!): Das neue Interface der entsprechenden Zone, hier "vpn-s2s", zuordnen. Und schließlich eine statische Route zum Zielnetz in Richtung dem Tunnel-Interface anlegen. Trafficregeln entsprechend anlegen.

FRITZ!Box

Für die FRITZ!Box muss folgendes Template angepasst werden. Gelb markiert sind all die Zeilen, die zwingend angepasst werden müssen. Die Proposals für Phase 1 und 2 können natürlich auch anders gewählt werden, solange das Pendant bei der FortiGate stimmt (siehe hier für mehr Details bezüglich der Proposals der FRITZ!Box).

Hinweis: Dieses Template unterscheidet sich in einer Kleinigkeit von quasi allen anderen Templates, die hier auf meinem Blog sind: Es ist sowohl die localid als auch die remoteid vom Typ “fqdn”. In vielen anderen Beispielen habe ich hier bei der remoteid den Typ “ipaddr” gehabt. Dieser lässt sich auf der FortiGate leider nicht einstellen, da dort unter Verwendung einer IP-Adresse trotzdem ein String versendet wird. Daher ist hier bei der FRITZ!Box zwingend der fqdn nötig.

vpncfg {
        connections {
                enabled = yes;
                conn_type = conntype_lan;
                name = "fortigate-vpn";
                always_renew = yes;
                reject_not_encrypted = no;
                dont_filter_netbios = yes;
                localip = 0.0.0.0;
                local_virtualip = 0.0.0.0;
                remoteip = 80.154.108.233;
                remote_virtualip = 0.0.0.0;
                localid {
                        fqdn = "fritzbox.webernetz.net";
                }
                remoteid {
                        fqdn = "blubb";
                }
                mode = phase1_mode_idp;
                phase1ss = "dh14/aes/sha";
                keytype = connkeytype_pre_shared;
                key = "RX-2RUz2UKpFiPXi6B6DJss5TWbW-DzvTMwc";
                cert_do_server_auth = no;
                use_nat_t = no;
                use_xauth = no;
                use_cfgmode = no;
                phase2localid {
                        ipnet {
                                ipaddr = 192.168.29.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2remoteid {
                        ipnet {
                                ipaddr = 192.168.161.0;
                                mask = 255.255.255.0;
                        }
                }
                phase2ss = "esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs";
                accesslist = "permit ip any 192.168.161.0 255.255.255.0";
        }  ike_forward_rules =	"udp 0.0.0.0:500 0.0.0.0:500", 
								"udp 0.0.0.0:4500 0.0.0.0:4500";
	}

 

Es läuft …

wenn es grün leuchtet. 😉

FortiGate IPsec Monitor FRITZ!Box VPN

Wer mehr Infos zur VPN-Verbindung möchte, kann auf der FortiGate zum Beispiel mit den folgenden Befehlen Details herausfinden:

fd-wv-fw04 # get vpn ike gateway fritzbox

vd: root/0
name: fritzbox
version: 1
interface: wan1 6
addr: 172.16.1.6:500 -> 77.1.138.66:500
created: 1484s ago
peer-id: fritzbox.webernetz.net
peer-auth: no
IKE SA  created: 1/1  established: 1/1  time: 2260/2260/2260 ms
IPsec SA  created: 1/1  established: 1/1  time: 2190/2190/2190 ms

  id/spi: 27873 c0946dbb7e367bbf/98f5902234833225
  direction: initiator
  status: established 1484-1482s ago = 2260ms
  proposal: aes-256-sha1
  key: c24d006dcddd88db-561bdd168fb5ece9-fd87c497587cb16c-b0ccbb1302b38310
  lifetime/rekey: 3600/1817
  DPD sent/recv: 00016e13/00000000

fd-wv-fw04 #
fd-wv-fw04 #
fd-wv-fw04 # get vpn ipsec tunnel name fritzbox

gateway
  name: 'fritzbox'
  type: route-based
  local-gateway: 172.16.1.6:0 (static)
  remote-gateway: 77.1.138.66:0 (static)
  mode: ike-v1
  interface: 'wan1' (6)
  rx  packets: 2  bytes: 236  errors: 0
  tx  packets: 2  bytes: 168  errors: 3
  dpd: enabled/negotiated  idle: 5000ms  retry: 3  count: 0
  selectors
    name: 'fritzbox'
    auto-negotiate: disable
    mode: tunnel
    src: 0:192.168.161.0/255.255.255.0:0
    dst: 0:192.168.29.0/255.255.255.0:0
    SA
      lifetime/rekey: 3600/2121
      mtu: 1438
      tx-esp-seq: 3
      replay: enabled
      inbound
        spi: c97b3074
        enc:     aes  2cdc2d66d55ce60a9d0653e47045dc09495210ff01e4e164317407d19d8abd12
        auth:   sha1  a18c972688001670905a0de1d85e6383e79d4aad
      outbound
        spi: 4e200a54
        enc:     aes  d7a420011bf1b1e7408915e60a02e9eed4fdee6124bd9266d43a5e2f4e3f4ea2
        auth:   sha1  58f2788cf82545e5938a95fd421f5ab9828505b3
      NPU acceleration: encryption(outbound) decryption(inbound)

fd-wv-fw04 #
fd-wv-fw04 #
fd-wv-fw04 # get router info routing-table static
S*      0.0.0.0/0 [10/0] via 172.16.1.1, wan1
S       192.168.29.0/24 [10/0] is directly connected, fritzbox
S       192.168.121.0/24 [10/0] is directly connected, fd-wv-fw02
S       192.168.131.0/24 [10/0] is directly connected, fd-wv-fw03

 

FRITZ!Box VPN Speedtests

$
0
0
Fritzbox VPN Speedtests featured image

Ähnlich zum dem Site-to-Site VPN Throughput Test der FortiGate Firewalls wollte ich mal den FRITZ!Boxen auf den Zahn fühlen und herausfinden, in wie fern sich der VPN-Durchsatz bei den Modellen unterscheidet, bzw. welche Rolle die ausgewählten Verschlüsselungsverfahren spielen. Getestet habe ich eine (etwas ältere) FRITZ!Box 7270v3 mit FRITZ!OS 06.06 sowie eine (neuere, obgleich nicht Topmodell) FRITZ!Box 7430 in Version 06.30. Als VPN-Endpunkt auf der Gegenseite habe ich eine FortiGate Firewall genommen. Getestet wurde das reine Routing/NATting sowie verschiedene Phase 2 Proposals mit dem Netzwerk Tool Iperf.

Ein paar mehr Details bezüglich des Testaufbaus kann man in dem vorherigen Artikel von mir durchlesen. Hier wurde nur die eine FortiGate als Router umfunktioniert und dahinter die jeweilige FRITZ!Box gesetzt. Auf den Testnotebooks lief wieder Knoppix.

Labor

Folgende Einstellungen nahm ich auf der FRITZ!Box vor:

  • Internetzugang über LAN 1, Internetverbindung selber aufbauen
  • Übertragungsgeschwindigkeit auf 100.000 kbit/s für beide Richtungen gesetzt
  • Portfreigabe “Exposed Host” an Test-Client IP
  • WLAN deaktiviert
  • VPN zur FortiGate gemäß dieser Vorlage aufgebaut
  • An der FortiGate zwischen 3DES und AES256 in Phase 2 manuell gewechselt, bzw. auch mit “nur Routing” ohne VPN getestet.

Logisch sah das Labor dann so aus:

Firtzbox VPN Speedtests Labor

Physikalisch in etwa so: 😉

Fritzbox VPN Speedtests Labor physikalisch

Testergebnisse

Dies waren meine Testergebnisse (TCP):

Bzw. in Rohform (TCP und UDP):

ModellPhase 2
Proposal
TCP
Tx/Rx
[MBit/s]
UDP
Tx/Rx
[MBit/s]
IPerf Optionen-r-u -r -b 100M
7270v3
06.06
Kein VPN, nur Routing70/6596/94
3DES5,2/5,22,5/0,1
AES2569,4/9,85,5/0,1
7430
06.30
Kein VPN, nur Routing94/9496/96
3DES6,7/6,45,2/0,5
AES25614,6/15,59,1/10,7

Ohne VPN liefert die 7270 einigermaßen gute Ergebnisse. Zumindest beim UDP Tests waren die Maximalergebnisse (96 MBit netto) sehr gut. Beim Einsatz eines VPNs raucht die Geschwindigkeit aber total ab. Das Maximum war bei einer AES256 Verschlüsselung mit 10 MBit herauszuholen. Warum beim UDP Test der Rückweg nur 0,1 MBit liefert, kann ich nicht beurteilen.

Die 7430 liefert beim reinen Routing/NAT Test starke Werte um die 95 MBit. Aber auch sie knackt beim VPN-Durchsatz Test stark ein. Maximal 15 MBit bei der Verwendung von AES256 waren drin.

Fazit

Gerne wird die FRITZ!Box im privaten als auch im semi-professionellen Umfeld nicht nur als Internet-Router, sondern auch als VPN-Gateway eingesetzt. Ungeachtet der Tatsache, dass man im Firmenumfeld sowieso nicht auf ein Privatprodukt setzen sollte, ist der nutzbare VPN-Durchsatz bei knapp 15 MBit/s teilweise deutlich unter den reinen Internetgeschwindigkeiten, die man heute durch VDSL und Glasfaser so bekommt. Daher sollte man sich gut überlegen, wo und wie man die FRITZ!Box dafür einsetzt.

Mangels Hardware konnte ich leider nicht noch das aktuelle Topmodell von AVM, die FRITZ!Box 7490, testen. Da dasVer- und Entschlüsseln der VPNs aber rein in Software/CPU passiert, lässt ein Blick auf Vergleichstabellen der CPUs der Geräte [1, 2, 3] leider nur erahnen, dass auch das Topmodell nur wenig besser sein dürfte, da die Geschwindkeit der CPU nur leicht angehoben wurde.

DNSSEC Validation with Unbound on a Raspberry

$
0
0
Unbound RPi featured image

To overcome the chicken-or-egg problem for DNSSEC (“I don’t need a DNSSEC validating resolver if there are no signed zones”), let’s install the DNS server Unbound on a Raspberry Pi for home usage. Up then, domain names are DNSSEC validated. I am listing the commands to install Unbound on a Raspberry Pi as well as some further commands to test and troubleshoot it. Finally I am showing a few Wireshark screenshots from a sample iterative DNS capture. Here we go:

It is really simple to operate an Unbound DNS resolver locally on a Raspberry Pi. Merely an installation and some config changes. That’s it. The Unbound package on a Raspbian Linux of Unbound validates DNSSEC by default. Great!

Installation

I am using an “old” Raspberry Pi 1 Model B with Raspbian GNU/Linux 7 (wheezy) and kernel 4.1.13+. The version of Unbound which comes with this OS is not the newest one (1.4.17-3+deb7u2), but it fits. The installation is really simple:

sudo apt-get update
sudo apt-get install unbound

The Unbound server starts automatically. Have look at the listening ports with:

pi@jw-pi01 ~ $ sudo netstat -tulpen | grep unbound
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      0          7312680     27897/unbound
tcp        0      0 127.0.0.1:8953          0.0.0.0:*               LISTEN      0          7312684     27897/unbound
tcp6       0      0 ::1:53                  :::*                    LISTEN      0          7312676     27897/unbound
tcp6       0      0 ::1:8953                :::*                    LISTEN      0          7312682     27897/unbound
udp        0      0 127.0.0.1:53            0.0.0.0:*                           0          7312678     27897/unbound
udp6       0      0 ::1:53                  :::*                                0          7312674     27897/unbound

Unbound works out of the box for queries from the localhost. In order to allow queries from any host, the configuration file must be edited. It is stored at

/etc/unbound/unbound.conf
 . Note that the config has already DNSSEC validation enabled!
pi@jw-pi01 /etc/unbound $ cat unbound.conf
# Unbound configuration file for Debian.
#
# See the unbound.conf(5) man page.
#
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
# reference config file.

server:
    # The following line will configure unbound to perform cryptographic
    # DNSSEC validation using the root trust anchor.
    auto-trust-anchor-file: "/var/lib/unbound/root.key"

Now, to allow queries add the following lines within the “server:” paragraph:

interface: 0.0.0.0
interface: ::0
access-control: 0.0.0.0/0 allow
access-control: ::0/0 allow

check the config:

pi@jw-pi01 ~ $ unbound-checkconf
unbound-checkconf: no errors in /etc/unbound/unbound.conf

and restart the server:

pi@jw-pi01 ~ $ sudo service unbound restart
[ ok ] Restarting recursive DNS server: unbound.

That’s it! To see a list of all configuration options click here. If you only wanted to install Unbound you’re already done!

-> The following information are only for further analysis etc.

Root Hints & Root Key

Unbound uses a list of the root servers as well as the root dnskey for its DNSSEC validation. Both should be updated regularly to avoid DNS problems in case of real root server changes. To update and use the root-hints file (for the list of root-servers), download the official list:

sudo curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.root

and use it within the unbound.conf configuration file:

root-hints: "/etc/unbound/root.hints"

To update the root.key, use the simple “unbound-anchor” program which downloads the root.key file into /etc/unbound/:

sudo unbound-anchor

And change the auto-trust-anchor-file within the unbound.conf from the default to:

auto-trust-anchor-file: "/etc/unbound/root.key"

Restart Unbound:

sudo service unbound restart
 .

Done. (Click here for more information about the root.hints etc.)

Tests & Status

Here’s a basic test from another Linux machine that queries the Unbound server. Note the ad flag in line 8 which indicates the DNSSEC validation:

pi@ntp1:~ $ dig @192.168.7.5 weberdns.de +noadditional +noauthority

; <<>> DiG 9.9.5-9+deb8u6-Raspbian <<>> @192.168.7.5 weberdns.de +noadditional +noauthority
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43402
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;weberdns.de.                   IN      A

;; ANSWER SECTION:
weberdns.de.            3600    IN      A       80.154.108.230

;; Query time: 19 msec
;; SERVER: 192.168.7.5#53(192.168.7.5)
;; WHEN: Thu Jun 09 17:23:21 CEST 2016
;; MSG SIZE  rcvd: 186

Of course, a failure in DNSSEC leads to a SERVFAIL (line 7) without any answer:

pi@ntp1:~ $ dig @192.168.7.5 fail03.dnssec.works

; <<>> DiG 9.9.5-9+deb8u6-Raspbian <<>> @192.168.7.5 fail03.dnssec.works
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 42531
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;fail03.dnssec.works.           IN      A

;; Query time: 111 msec
;; SERVER: 192.168.7.5#53(192.168.7.5)
;; WHEN: Thu Jun 09 17:24:25 CEST 2016
;; MSG SIZE  rcvd: 48

Good.

In order to view the status of Unbound, use the following commands: 

unbound-control status
  and
unbound-control stats_noreset
 :
pi@jw-pi01 ~ $ sudo unbound-control status
version: 1.4.17
verbosity: 1
threads: 1
modules: 2 [ validator iterator ]
uptime: 11744 seconds
unbound (pid 28021) is running...
pi@jw-pi01 ~ $ sudo unbound-control stats_noreset
thread0.num.queries=120
thread0.num.cachehits=18
thread0.num.cachemiss=102
thread0.num.prefetch=0
thread0.num.recursivereplies=102
thread0.requestlist.avg=0.54902
thread0.requestlist.max=18
thread0.requestlist.overwritten=0
thread0.requestlist.exceeded=0
thread0.requestlist.current.all=0
thread0.requestlist.current.user=0
thread0.recursion.time.avg=0.201798
thread0.recursion.time.median=0.17367
total.num.queries=120
total.num.cachehits=18
total.num.cachemiss=102
total.num.prefetch=0
total.num.recursivereplies=102
total.requestlist.avg=0.54902
total.requestlist.max=18
total.requestlist.overwritten=0
total.requestlist.exceeded=0
total.requestlist.current.all=0
total.requestlist.current.user=0
total.recursion.time.avg=0.201798
total.recursion.time.median=0.17367
time.now=1465816919.018412
time.up=460.981236
time.elapsed=460.981236

To list the current values of options, e.g. the default values, use unbound-checkconf with the “-o parameter” option, such as:

pi@jw-pi01 ~ $ sudo unbound-checkconf -o use-syslog
yes
pi@jw-pi01 ~ $ sudo unbound-checkconf -o verbosity
1
pi@jw-pi01 ~ $ sudo unbound-checkconf -o do-ip6
yes
pi@jw-pi01 ~ $ sudo unbound-checkconf -o do-ip4
yes
pi@jw-pi01 ~ $ sudo unbound-checkconf -o do-udp
yes
pi@jw-pi01 ~ $ sudo unbound-checkconf -o do-tcp
yes

To dump the cache for further investigations, use this:

pi@jw-pi01 ~ $ sudo unbound-control dump_cache | less
pi@jw-pi01 ~ $ sudo unbound-control dump_cache | grep webernetz.net

Per default, the log messages are sent to syslog. That is, they are stored in the default /var/log/syslog file which can be followed with:

pi@jw-pi01 ~ $ tail -f /var/log/syslog | grep unbound

To increase the verbosity level, add/change the verbosity line in the unbound.conf file. The default is “1”. A level of “2” already logs every DNS request. Use it for troubleshooting but be careful with it!

verbosity: 2

All other details about the Unbound options are listed here.

DNS Server on LAN

To use this Unbound DNS server for all clients in the LAN, it must be announced via DHCP as the DNS server. In my home network I have an AVM FRITZ!Box router which connects to the Internet via FTTH. The settings are as follows. I am using the static IPv4 address as well as the link-local IPv6 address as the DNS server address:

Tested from another Raspberry Pi, this leads to the following resolv.conf entries:

pi@ntp1:~ $ cat /etc/resolv.conf
# Generated by resolvconf
domain fritz.box
nameserver 192.168.7.5
nameserver fe80::ba27:ebff:fec9:1637%eth0

This is a test from a Linux client. Once more, note the “ad” flag in line 7:

pi@ntp1:~ $ dig pa.weberdns.de +noadditional +noauthority

; <<>> DiG 9.9.5-9+deb8u6-Raspbian <<>> pa.weberdns.de +noadditional +noauthority
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58151
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;pa.weberdns.de.                        IN      A

;; ANSWER SECTION:
pa.weberdns.de.         3592    IN      A       80.154.108.228

;; Query time: 10 msec
;; SERVER: 192.168.7.5#53(192.168.7.5)
;; WHEN: Thu Jun 09 16:45:47 CEST 2016
;; MSG SIZE  rcvd: 189

However, there are problems when querying the IPv6 address via the “-6” switch:

pi@ntp1:~ $ dig -6 dnssec.works

; <<>> DiG 9.9.5-9+deb8u6-Raspbian <<>> -6 dnssec.works
;; global options: +cmd
;; connection timed out; no servers could be reached

But it works when the link-local IPv6 address is specified (with the %eth0 interface suffix) directly:

pi@ntp1:~ $ dig @fe80::ba27:ebff:fec9:1637%eth0 dnssec.works +noadditional +noauthority

; <<>> DiG 9.9.5-9+deb8u6-Raspbian <<>> @fe80::ba27:ebff:fec9:1637%eth0 dnssec.works +noadditional +noauthority
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48062
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dnssec.works.                  IN      A

;; ANSWER SECTION:
dnssec.works.           3600    IN      A       5.45.109.212

;; Query time: 71 msec
;; SERVER: fe80::ba27:ebff:fec9:1637%2#53(fe80::ba27:ebff:fec9:1637%2)
;; WHEN: Thu Jun 09 16:48:44 CEST 2016
;; MSG SIZE  rcvd: 113

So maybe it’s not a good idea to use the link-local address for the DNS server. Maybe I will disable the “IPv6 DNS Server” option in my home network since the availability of a legacy IP DNS server perfectly fits for dual-stacked clients.

And a web browser GUI test to http://dnssec.vs.uni-due.de looks like that:

DNSSEC Resolver Test okGreat!

Sample Wireshark Screenshots

This is a small tcpdump capture on the Raspberry Pi, displayed with Wireshark. It shows an iterative (!) lookup of “licher.de” with its initial request from the client to the Raspberry Pi, the iterative lookup and the final answer to the client. Also note the “Statistics -> DNS” summary within Wireshark which can be used for troubleshooting, too:

Conclusion

Now, all DNS answers are DNSSEC validated. Really all DNS answer? Well, actually, no. Only those which are DNSSEC signed. However, we solved the chicken-egg problem and are now able to validate DNSSEC answers.

IPsec Site-to-Site VPN Palo Alto AVM FRITZ!Box

$
0
0
Wer im Büro auf eine Palo Alto Networks Firewall setzt und von zu Hause hinter seiner FRITZ!Box per VPN im Büro arbeiten möchte, der muss die richtigen Einstellungen auf beiden Geräten finden. Genau das habe ich getan und stelle hier die entsprechenden Details online. Viel Spaß dabei. 😉 Während ich in meinem letzten Blogpost das … Continue reading IPsec Site-to-Site VPN Palo Alto <-> AVM FRITZ!Box

IPsec Site-to-Site VPN Cisco ASA AVM FRITZ!Box

$
0
0
Mit diesem Beitrag möchte ich zeigen, wie man ein Site-to-Site VPN von der FRITZ!Box zu einer Cisco ASA Firewall aufbaut. Mein Laboraufbau entspricht dabei dem typischen Fall, bei dem die FRITZ!Box hinter einer dynamischen IP hängt (klassisch: DSL-Anschluss), während die ASA eine statische IP geNATet bekommt. Beide Geräte habe ein policy-based VPN implementiert, so dass … Continue reading IPsec Site-to-Site VPN Cisco ASA <-> AVM FRITZ!Box

Benchmarking DNS: namebench & dnseval

$
0
0
If you’re running your own DNS resolver you’re probably interested in some benchmark tests against it, such as: how fast does my own server (read: Raspberry Pi) answer to common DNS queries compared to 8.8.8.8. In this blogpost I am showing how to use two tools for testing/benchmarking DNS resolvers: namebench & dnseval. I am … Continue reading Benchmarking DNS: namebench & dnseval

Internet’s Noise

$
0
0
If you are following the daily IT news you have probably seen many articles claiming they have scanned the whole Internet for this or that. Indeed there are tools such as the ZMap Project “that enable researchers to perform large-scale studies of the hosts and services that compose the public Internet”. This time I was … Continue reading Internet’s Noise

Yamaha R-N500 Network Receiver Packet Capture

$
0
0
Last but not least I was interested which “home-calling” connections my Yamaha R-N500 Network Receiver initiates. In my previous post I already analyzed the open ports within the network, while I showed a complete Apple AirPlay capture here. This time I was only interested in outgoing TCP/UDP connections to the Internet as well as how … Continue reading Yamaha R-N500 Network Receiver Packet Capture

IPsec Site-to-Site VPN Palo Alto AVM FRITZ!Box

$
0
0
Wer im Büro auf eine Palo Alto Networks Firewall setzt und von zu Hause hinter seiner FRITZ!Box per VPN im Büro arbeiten möchte, der muss die richtigen Einstellungen auf beiden Geräten finden. Genau das habe ich getan und stelle hier die entsprechenden Details online. Viel Spaß dabei. ;) Während ich in meinem letzten Blogpost das … Continue reading IPsec Site-to-Site VPN Palo Alto <-> AVM FRITZ!Box

IPsec Site-to-Site VPN Cisco ASA AVM FRITZ!Box

$
0
0
Mit diesem Beitrag möchte ich zeigen, wie man ein Site-to-Site VPN von der FRITZ!Box zu einer Cisco ASA Firewall aufbaut. Mein Laboraufbau entspricht dabei dem typischen Fall, bei dem die FRITZ!Box hinter einer dynamischen IP hängt (klassisch: DSL-Anschluss), während die ASA eine statische IP geNATet bekommt. Beide Geräte habe ein policy-based VPN implementiert, so dass … Continue reading IPsec Site-to-Site VPN Cisco ASA <-> AVM FRITZ!Box
Viewing all 26 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>