Por: @jonasc Publicado em: 2021-06-10

Libreswan IPsec com IKEv2

Topologia

Dois Firewalls FWFLEX com IPsec instalado.

Versão do IPsec: Libreswan 4.3

Configuração

Configurar IPsec padrão entre os dois firewalls, negociando uma rede LAN. Conf exemplo abaixo:

conn teste01
    authby=secret
    auto=start
    keyingtries=%forever
    type=tunnel
    compress=no
    aggrmode=no
    cisco_unity=no
    mark=12/0xffffff
    vti-interface=teste01
    vti-routing=yes
    vti-shared=no

    # Phase 1
    keyexchange=ike
    ikelifetime=28800s
    ike=aes128-sha256;modp1024

    # Phase 2
    phase2alg=aes128-sha256;modp1024
    pfs=yes
    keylife=3600s

    # Network - local
    left=172.28.60.10
    leftsubnet=10.152.0.0/24
    leftsourceip=172.28.60.10
    leftid=172.28.60.10
    leftupdown="ipsec _updown ; itflex-reload-routes"

    # Network - Remote
    right=172.28.60.13
    rightsubnet=10.157.0.0/24
    rightsourceip=172.28.60.13
    rightid=172.28.60.13

Testes das funcionalidades

Por padrão, o Libreswan já permite o IKEv2 se a outra ponta tiver suporte. Com estas configurações, dois nodes Libreswan já fecharam o IPsec no IKEv2.

000 #1: "teste01":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); EVENT_SA_REKEY in 23575s; newest ISAKMP; idle;
000 #3: "teste01":500 STATE_V2_ESTABLISHED_CHILD_SA (IPsec SA established); EVENT_SA_REKEY in 1254s; newest IPSEC; eroute owner; isakmp#1; idle;

O prefixo STATE_V2 indica ser IKEv2, além da nomenclatura CHILD SA ser associada também ao IKEv2.

O parâmetro que pode ser ajustado na configurações é o ikev2. Os valores possíveis são no ou never, que força somente o IKEv1 e insist, que força somente o IKEv2.

Alterando o conf para never, o log de SA ficou assim:

000 #3: "teste01":500 STATE_MAIN_R3 (IKE SA established); EVENT_SA_REPLACE in 28525s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle;
000 #4: "teste01":500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 3325s; newest IPSEC; eroute owner; isakmp#3; idle;

Informação importante: A versão 4 do IPsec se comporta assim, mas na versão 3, o comportamento era diferente. O manual do ipsec.conf diz:

    ikev2
        Wether to use IKEv1 (RFC 4301) or IKEv2 (RFC 7296) as the Internet Key Exchange (IKE) protcol. Currently the accepted values are no (or never) signifying only IKEv1 is accepted, or insist(the
        default), signifying only IKEv2 is accepted. Previous versions allowed the keywords propose, yes or permit that would allow either IKEv1 or IKEv2, but this is no longer supported and both options
        now cause the connection to fail to load.  WARNING: This behaviour differs from upstream libreswan, which only accepts yes or no where yes means the same as insist.

Ou seja, a versão anterior tinha os parâmetros propose, yes ou permit, sendo possível habilitar ambos os métodos, o que dependia da outra ponta para espeficiar a forma de conexão.