Mikrotik IPsec – strongSwan

VPN Verbindungen sind immer wichtiger um vertrauliche Informationen zu übermitteln. Hier zeige ich wie man eine Verbindung zwischen einem Mikrotik Router und einem Cloud Server aufbauen kann. Auf dem Cloud Server ist Ubuntu 20.04 LTS + strongSwan installiert. Der Mikrotik 750G r3 dient im Heimnetzwerk als Router und ist hinter einem DSL Anschluss. Durch die Zwangstrennung nach 24 Stunden ist es notwendig das die IPsec Verbindung aktiv vom Mirkotik Router hergestellt und bei bedarf erneuert wird.

  • hier im Beispiel wird der Tunnel Mode in Verbindung mit einem GRE Tunnel verwendet um dann direkt routen zu können
  • Mikrotik IPsec Profil und Proposal sollte später angepasst werden um unsichere Ciphers / DH Groups zu deaktivieren

Serverkonfiguration

Netzwerkkonfiguration

Subnetz für die IPsec Tunnel Verbindung in der Netzwerkkonfguation hinzufügen:

auto eth0
iface eth0 inet dhcp
    up ip addr add 10.100.0.1/30 dev eth0  # IPsec Tunnel Subnetz

GRE Tunnel konfigurieren:

auto gre-ipsec
iface gre-ipsec inet static
  address 10.100.1.1
  netmask 255.255.255.252
  mtu 1382
  pre-up iptunnel add gre-ipsec mode gre local 10.100.0.1 remote 10.100.2.1 ttl 64
  up ifconfig gre-ipsec multicast
  pointopoint 10.100.1.2/30
  post-down iptunnel del gre-ipsec

strongSwan – Konfiguration

root@server:~# cat /etc/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file

# basic configuration

config setup

conn %default
    dpdaction=restart
    mobike=yes
    keyexchange=ikev2

conn mikrotik
 left=1.1.1.1/32            # Server IP
 leftsubnet=10.100.0.0/30   # Locales - Serverseitiges Subnetz für den Tunnel
 leftprotoport=gre          # Beschänkung auf GRE Protokoll
 leftid=%defaultroute
 leftfirewall=yes           # Aktivert iptables Regeln
 right=%any                 # any da dynamische DSL IP
 rightprotoport=gre         # Beschränkung auf GRE Protokoll
 rightsubnet=10.100.2.0/24  # Subnetz auf dem Mirkotik Router
 ikelifetime = 2h           # entspricht /ip ipsec profile lifetime
 lifetime = 30m             # entspricht /ip ipsec proposal lifetime
 dpddelay = 3s              # entspricht /ip ipsec profiles dpd-interval
 authby=secret              # Passwort Authetifizierung
 auto=start
 type=tunnel
 keyexchange=ikev2
root@server:~# cat /etc/ipsec.secrets 
# This file holds shared secrets or RSA private keys for authentication.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.
: PSK "SehrLangesSicheresSuperPasswort"

RouterOS

Netzwerk Konfiguration

IPsec Tunnel Netz anlegen

Hierfür legen wir eine Netzwerkbrücke (Bridge) an und konfigurieren die lokale IP.

/ip address
add address=10.100.2.1/30 disabled=no interface=ipsec-bridge network=10.100.2.0

GRE Tunnel anlegen

/interface gre
add allow-fast-path=no clamp-tcp-mss=yes disabled=no dont-fragment=no dscp=inherit \
    !ipsec-secret keepalive=10s,10 local-address=10.100.2.1 mtu=auto name=gre-ipsec-tunnel \
    remote-address=10.100.0.1

IPsec Konfiguration

Standardeinstellungen

/ip ipsec mode-config
set [ find default=yes ] name=request-only responder=no use-responder-dns=exclusively
/ip ipsec policy group
set [ find default=yes ] name=default
/ip ipsec profile
set [ find default=yes ] dh-group=modp2048,modp1024 dpd-interval=2m dpd-maximum-failures=5 \
    enc-algorithm=aes-128,3des hash-algorithm=sha1 lifetime=1d name=default nat-traversal=yes \
    proposal-check=obey
/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha1 disabled=no enc-algorithms=\
    aes-256-cbc,aes-192-cbc,aes-128-cbc lifetime=30m name=default pfs-group=modp1024
/ip ipsec policy
set 0 disabled=no dst-address=::/0 group=default proposal=default protocol=all src-address=\
    ::/0 template=yes

In der Standardkonfiguration werden im Profil und Proposal Verschlüsselungs- / Hashalgorithmen und Diffie-Hellman (DH) Gruppen erlaubt die zu einer schlechten Verschlüsselung führen können. Da die Leistung des RouterBoards begrenzt ist muss man einen Mittelweg zwischen Geschwindigkeit und Verschlüsselungsstärke ermitteln.

Serververbindung – Peer Konfiguration

/ip ipsec peer
add address=[SERVER-IP]/32 disabled=no exchange-mode=ike2 name=server profile=default \
    send-initial-contact=yes

Authentifizierung via Pre-Shared-Key (PSK)

/ip ipsec identity
add auth-method=pre-shared-key disabled=yes generate-policy=no peer=server secret=\
    SehrLangesSicheresSuperPasswort

Pre-Shared-Key (PSK) Authentifizierung ist nicht sicher und sollte später mit der Zertifikats-basierenden Authentifizierung ersetzt werden.

Policy Konfiguration

/ip ipsec policy
set 0 disabled=yes dst-address=::/0 group=default proposal=default protocol=all \
    src-address=::/0 template=yes
add action=encrypt disabled=no dst-address=10.100.0.0/30 dst-port=any ipsec-protocols=esp \
    level=require peer=server proposal=default protocol=gre sa-dst-address=[SERVER-IP] \
    sa-src-address=0.0.0.0 src-address=10.100.2.0/30 src-port=any tunnel=yes

Die Policy regelt welche Daten vom Router verschlüsselt und über die IPsec Verbindung übertragen werden. Die Standard Policy wird deaktiviert. Zusätzlich wird eine Policy hinzugefügt die jeglichen GRE Datenverkehr zwischen den beiden Netzen 10.100.0.0/30 und 10.100.2.0/30 der Tunnelverbindung verschlüsselt.

Eine Fehlkonfiguration an dieser Stelle kann dazu führen das die Daten nicht über den IPsec Tunnel übertragen werden und nicht Verschlüsselt sind.