Einige standen schon vor der Herausforderung zwischen Windows und Unix/Linux Systemen eine verschlüsselte Verbindung herzustellen. Hierüber können auch diese Systeme in Server and Domain Isolation Umgebungen eingebunden werden

In diesem (Blog) Post wird beispielhaft beschrieben, wie man zwischen Windows Server 2012 R2 und einem FreeBSD v9.2 System mit Racoon2, eine IPsec Transport Mode Verbindung, geschützt mit einem Pre-Shared Key, herstellen kann. Dies ist natürlich auch auf X.509 Zertifikatsbasis bzw. auch auf anderen Plattformen (Linux, NetBSD, etc.) möglich.

 

Anpassen des FreeBSD Kernels für Racoon2

Für Racoon2 muss die “options IPsec” und das “device cypto” dem FreeBSD v9.2 Kernel hinzugefügt werden. Die notwendigen Schritte hierzu sind im FreeBSD Handbook im Kapitel “8.3 Building and Installing a Custom Kernel” beschrieben.

device  crypto
options IPSEC        # IP security
options IPSEC_DEBUG  # debug for IP security – optional

 

Empfohlene Systemanpassungen für Racoon2
(Quelle - http://www.racoon2.wide.ad.jp/cvsweb/racoon2/doc/USAGE?rev=1.36)

Sowohl NetBSD als auch FreeBSD haben einen Kernel-State “net.key.blockacq_count” um das Verhalten des Kernels, wie viele Pakete geblockt werden bevor eine geeignete Security Association (SA) installiert wird, zu konfigurieren.  Der Kernel-State stört bisweilen die Übertragung des Schlüsselaustauschs. Es wird empfohlen diesen auf Null zu setzen.

# sysctl -w net.key.blockacq_count=0

FreeBSD hat zusätzlich noch den Kernel-State “net.key.preferred_old” um eine alte SA einer neuen vorzuziehen. Dieser Kernel-State stört manchmal die Interoperabilität. Es wird empfohlen diesen auf Null zu setzen.

# sysctl -w net.key.preferred_oldsa=0

 

Erstellung eines Racoon2 .psk files

Racoon2 verwendet eine andere Formatierung für das Pre-Shared Key File als Racoon. In Racoon2 wird der gesamte Inhalt der Datei (Zeilenumbrüche, Leerzeichen, etc.) als Key behandelt.
Ein Pre-Shared Key File mit dem Key “test123” kann z.B. über den Befehl unten erstellt werden.

# printf test123 > test.psk

 

Racoon2 Beispielkonfiguration

  • racoon2.conf

# $Id: racoon2.conf.in,v 1.34 2007/12/27 01:08:52 mk Exp $
## Edit vals.conf for your environment
include "/usr/local/etc/racoon2/vals.conf";

# interface info
interface
   {
    ike { MY_IP port 500; };
    kink { MY_IP; };
    spmd { unix "/var/run/racoon2/spmif"; };
    spmd_password "/usr/local/etc/racoon2/spmd.pwd";
   };

# resolver info
resolver
   {
    resolver off;
   };

include "/usr/local/etc/racoon2/default.conf";
include "/usr/local/etc/racoon2/transport_ike.conf";

  • default.conf

# $Id: default.conf,v 1.7 2009/03/24 06:13:24 mk Exp $
# default section

default
   {
     remote {
             acceptable_kmp { ikev1; };
             ikev1 {
                    exchange_mode main;
                    proposal_check obey;
                    logmode normal;

                    # Main Mode
                    kmp_sa_lifetime_time 28800 sec;
                    kmp_sa_lifetime_byte infinite;
                    interval_to_send 10 sec;
                    times_per_send 1;
                    ipsec_sa_nego_time_limit 40 sec;
                    kmp_enc_alg { aes256_cbc; aes128_cbc; 3des_cbc; };
                            
                    kmp_hash_alg { sha2_256; sha1; };
                    kmp_dh_group { modp2048; modp1024; };
                    random_pad_content on;
                    # max_padlen 50 bytes;
                    need_pfs no;
                    };
            };
   };

ipsec ipsec_ah_esp {
                    ipsec_sa_lifetime_time 3600 sec;
                    ipsec_sa_lifetime_byte 100000 KB;
                    sa_index { ah_01; esp_01; };
                   };

ipsec ipsec_esp {
                 ipsec_sa_lifetime_time 3600 sec;
                 ipsec_sa_lifetime_byte 100000 KB;
                 sa_index esp_01;
                };

sa ah_01 {
          sa_protocol ah;
          ah_auth_alg { hmac_sha1; };
         };

sa esp_01 {
           sa_protocol esp;
           esp_enc_alg { aes256_cbc; aes128_cbc; 3des_cbc; };
           esp_auth_alg { hmac_sha1; };
          };

  • vals.conf

# $Id: vals.conf.in,v 1.13 2007/12/27 01:08:52 mk Exp $

setval {
        ### Directory Settings ###
        # Preshared key file directory : specify if you want to use
        # preshared keys
        PSKDIR "/usr/local/etc/racoon2/psk";
    
        # Cert file directory : specify if you want to use certs
        CERTDIR "/usr/local/etc/racoon2/cert";
            
        ### ID Settings ###
        # your FQDN : specify if you want to use FQDN as your ID
        MY_FQDN "FreeBSD92.xxxx.zzz";

        # Peer's FQDN : specify if you want to use FQDN as peer's ID
        PEERS_FQDN "W2012R2SRV.xxxx.zzz";

        ### Preshared Key Setting ###
        # Preshared Key file name
        # You can generate it by pskgen.
        PRESHRD_KEY "test.psk";

        ### Transport Mode Settings ###
        # Your IP Address
        MY_IPADDRESS "192.168.1.2";
        # Peer's IP Address
        PEERS_IPADDRESS "192.168.1.3";

        ### Scripts
        ## IKEv2
        IKESAUP_SCR "/usr/local/etc/racoon2/hook/ikesa-up";
        IKESADOWN_SCR "/usr/local/etc/racoon2/hook/ikesa-down";
        CHILDUP_SCR "/usr/local/etc/racoon2/hook/child-up";
        CHILDOWN_SCR "/usr/local/etc/racoon2/hook/child-down";
        IKESAREKEY_SCR "/usr/local/etc/racoon2/hook/ikesa-rekey";
        CHILDREKEY_SCR "/usr/local/etc/racoon2/hook/child-rekey";
        MIGRATION_SCR "/usr/local/etc/racoon2/hook/migration";

        ## IKEv1
        PH1UP_SCR "/usr/local/etc/racoon2/hook/ph1-up";
        PH1DOWN_SCR "/usr/local/etc/racoon2/hook/ph1-down";
};

Für zusätzliche Racoon2 Settings siehe -
http://www.racoon2.wide.ad.jp/cvsweb/racoon2/doc/config-usage.txt

 

Windows Firewall with Advanced Security Konfiguration

Die Konfiguration der IPsec Settings in der Windows Firewall muss zu der Konfiguration von Racoon2 passen; zu große Abweichungen können zu Fehlverhalten führen.

  • IPsec Main Mode Konfiguration
    • Integritätsalgorithmus (z.B. SHA-256)
    • Verschlüsselungsalgorithmus (z.B. AES-CBC 256)
    • Schlüsselaustauschalgorithmus (z.B. Diffie-Hellman Group 14)

clip_image001

  • IPsec Quick Mode Konfiguration
      • Protokol (z.B. Encapsulating Security Payload (ESP))
      • Verschlüsselungsalgorithmus (z.B. AES-CBC 256)
      • Integritätsalgorithmus (z.B. SHA-1)
      • Schlüsselgültigkeitsdauer (z.B. 60 min. / 100.000 kB ) 

clip_image002

  • Windows Firewall IPsec Regel in Verbindungssicherheitsregeln
    • zu schützende Protokolle (z.B. Any, TCP, etc.)
    • Vorinstallierter Schlüssel (Pre-Shared Key)
      (z.B. test123)

clip_image003

clip_image004

Vorsicht
Die Methode der vorinstallierten Schlüssel wird aus Gründen der Interoperabilität angeboten und um dem IPsec-Standard zu entsprechen. Vorinstallierte Schlüssel sollten nur zu Testzwecken verwendet werden. Die häufige Verwendung vorinstallierter Schlüssel zur Authentifizierung wird nicht empfohlen, weil der Authentifizierungsschlüssel in ungesichertem Zustand in der IPsec-Richtlinie gespeichert wird.