Подключение к CheckPoint с помощью strongswan и libreswan

From wiki.habital.lv
Jump to navigation Jump to search

Подключение к CheckPoint с помощью strongswan и libreswan

Евгений Мисник


1 Сертификаты для подключения

Для подключения к CheckPoint потребуются следующие сертификаты:

  • CA сертификат CheckPoint “internal_ca.pem”. Этот сертификат можно получить, подключившись к шлюзу CheckPoint на порт 18264:

$ wget http://<checkpoint gw address>:18264/internal_ca.cer 
$ openssl x509 -inform DER -outform PEM -in internal_ca.cer -out internal_cap.pem

  • Сертификат сервера “checkpoint-cert.pem”. Его можно получить с адреса шлюза:

$ openssl s_client -connect <checkpoint gw address>:443

  • CRL сертификат:

$ wget http://<checkpoint gw address>:18264/ICA_CRL1.crl 
$ openssl crl -in ICA_CRL1.crl -inform DER -outform PEM -out ICA_CRL1.crl

Срок действия сертификата “ICA_CRL1.crl” несколько дней. Поэтому “strongswan” будет пытаться обновить этот сертификат с CheckPoint шлюза.

  1.  openssl crl -in /etc/strongswan/ipsec.d/crls/ICA_CRL1.crl -text -noout 
    Certificate Revocation List (CRL): 
            Version 2 (0x1) 
        Signature Algorithm: sha256WithRSAEncryption 
            Issuer: /O=smartcenter..i6sh4u 
            Last Update: Jan 10 06:04:27 2021 GMT 
            Next Update: Jan 17 06:04:27 2021 GMT 
            CRL extensions: 
                X509v3 Issuing Distrubution Point: critical 
                    Full Name: 
                      URI:http://smartcenter.example.org:18264/ICA_CRL1.crl 
                      DirName: O = smartcenter..i6sh4u, CN = ICA_CRL1

Подключаться “strongswan” будет к сайту “smartcenter”. Так как адреса для этого имени нет, то в файле “/etc/hosts” надо принудительно прописать IP-адрес:

  1.  cat /etc/hosts 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 
    <checkpoint gw ip-address>   smartcenter smartcenter.example.org

Лог в файле “/var/log/messages” может выглядеть так:

Jan 19 17:46:13 kvm charon: 16[CFG]   using trusted ca certificate "O=smartcenter..i6sh4u" 
Jan 19 17:46:13 kvm charon: 16[CFG] checking certificate status of "O=smartcenter..i6sh4u, CN=smart VPN Certificate" 
Jan 19 17:46:13 kvm charon: 16[CFG]   fetching crl from ’O=smartcenter..i6sh4u, CN=ICA_CRL1’ ... 
Jan 19 17:46:13 kvm charon: 16[LIB] unable to fetch from O=smartcenter..i6sh4u, CN=ICA_CRL1, no capable fetcher found 
Jan 19 17:46:13 kvm charon: 16[CFG]   fetching crl from ’http://smartcenter:18264/ICA_CRL1.crl’ ...

Кроме этих сертификатов потребуется сертификат клиента, зарегистрированного на CheckPoint, “cpuser.p12”. Из этого сертификата надо получить сертификат клиента “cpuser.pem” и сертификат ключа “cpuser-key.pem”:

$ openssl pkcs12 -in cpuser.p12 -nocerts -out cpuser-key.pem 
$ openssl pkcs12 -in cpuser.p12 -nokeys -out temp.pem

Сертификат “temp.pem” содержит в себе сертификат пользователя и CA сертификат. С помощью редактора сертификат надо разделить на части, сохранить их как отдельные pem-файлы и с помощью openssl посмотреть содержимое сертификатов. Сертификат клиента будет содержать в себе что-то вроде этого: “Subject: O=smartcenter..i6sh4u, OU=users, CN=cpuser”.


2 Настройка strongswan

Расположение настроек strongswan в каждом дистрибутиве может отличаться. В CentOS 7, OL7 или RHEL 7 настройки располжены в каталоге “/etc/strongswan”:

  1.  tree -d /etc/strongswan 
    /etc/strongswan 
    _ ipsec.d 
      __ aacerts 
      __ acerts 
      __ cacerts 
      __ certs 
      __ crls 
      __ ocspcerts 
      __ private 
      __ reqs 
    _ strongswan.d 
      __ charon 
    _ swanctl 
       __ bliss 
       __ conf.d 
       __ ecdsa 
       __ pkcs12 
       __ pkcs8 
       __ private 
       __ pubkey 
       __ rsa 
       __ x509 
       __ x509aa 
       __ x509ac 
       __ x509ca 
       __ x509crl 
       __ x509ocsp

Файлы “internal_ca.pem”, “checkpoint-cert.pem” и “cpuser.pem”,
“ICA_CRL1.crl”, “cpuser-key.pem” надо разместить в каталогах
“/etc/strongswan/ipsec.d/cacerts”, “/etc/strongswan/ipsec.d/certs”,
“/etc/strongswan/ipsec.d/crls” и в “/etc/strongswan/ipsec.d/private” соответственно.

Файл “cpuser-key.pem” должен имет права “0600” и владельцем всех вышеуказанных файлов должен быть “root:root”.


2.1 Файл конфигурации “ipsec.conf”

Файл конфигурации “ipsec.conf” расположен в каталоге “/etc/strongswan”:

  1.  ipsec.conf - strongSwan IPsec configuration file 
     
    # basic configuration 
    config setup 
            # strictcrlpolicy=yes 
            # uniqueids = no 
            # charondebug=1 
            # charondebug="cfg 2, dmn 2, ike 2, net 2, lib 3, knl 4" 
     
    # Add connections here. 
    conn %default 
            # Left side is strongSwan - RoadWarrior 
            left=%defaultroute 
            leftcert=cpuser.pem # Cert of user - from /etc/strongswan/certs 
            leftid="/O=smartcenter..i6sh4u/OU=users/CN=cpuser" 
            leftrsasigkey=%cert 
            auto=route 
     
    conn remote 
            # Right side is CheckPoint 
            right=<checkpoint gw ip-address> 
            rightcert=checkpoint-cert.pem # Cert of FW - from /etc/strongswan/certs 
            rightid=<checkpoint gw ip-address> 
            # config 
            ike=aes256-sha1-modp1024 # check if IKE P1 are allowed under Global Prop. 
            esp=aes256-sha1 # check if IKE P2 are allowed 
            type=tunnel 
            keyexchange=ikev1 # use IKE v1 
            keyingtries=3 
            authby=rsasig 
            ikelifetime=8h # Lifetime for IKE Phase 1 
            lifetime=1h # Lifetime for IKE Phase 2 
     
    conn net-192.168.xx.0 
           also=remote 
           rightsubnet=192.168.xx.0/24 
           auto=start 
     
    conn net-192.168.yy.0 
           also=remote 
           rightsubnet=192.168.yy.0/24 
           auto=start


2.2 Файл “ipsec.secrets”

Файл расположен в каталоге “/etc/strongswan”:

  1.  ipsec.secrets - strongSwan IPsec secrets file 
    : RSA cpuser-key.pem "key file password"


2.3 Запуск “strongswan”

Создание “IPsec VPN” между клиентом и CheckPoint выполняется несколькими командами:

  1.  strongswan start 
    Starting strongSwan 5.7.2 IPsec [starter]... 
    # strongswan up remote 
    generating QUICK_MODE request 2566461280 [ HASH SA No ID ID ] 
    sending packet: from local.ip.address[4500] to checkpoint.gw.ip[4500] (204 bytes) 
    received packet: from checkpoint.gw.ip[4500] to local.ip.address[4500] (156 bytes) 
    parsed QUICK_MODE response 2566461280 [ HASH SA No ID ID ] 
    selected proposal: ESP:AES_CBC_256/HMAC_SHA1_96/NO_EXT_SEQ 
    detected rekeying of CHILD_SA bank{3} 
    CHILD_SA bank{4} established with SPIs c3789495_i 55115f06_o and TS local.ip.address/32 === checkpoint.gw.ip/32 
    generating QUICK_MODE request 2566461280 [ HASH ] 
    sending packet: from local.ip.address[4500] to checkpoint.gw.ip[4500] (60 bytes) 
    connection ’remote’ established successfully


3 Настройка libreswan

В RHEL 7, OEL 7 или CentOS 7 файлы настроек находятся к каталогах “/etc” и “/etc/ipsec.d”.

/etc/ipsec.conf 
/etc/ipsec.secrets 
/etc/ipsec.d/ipsec.conf 
/etc/ipsec.d/ipsec.secrets 
/etc/ipsec.d/cert9.db 
/etc/ipsec.d/key4.db 
/etc/ipsec.d/nsspassword


3.1 База данных “nssdb”

Сертификаты клиента и сервера для “libreswan” хранятся в базе данных “nss”. Исходно база данных находится в “/etc/ipsec.d”. Для использования базы данных её надо инициализировать:

  1.  ipsec initnss

Пароль для базы данных надо будет сохранить в файле “nsspassword”:

  1.  cat /etc/ipsec.d/nsspassword 
    NSS Certificate DB:<Here is my strong NSS password>

Вместо команды “ipsec initnss” можно воспользоваться командой “certutil”:

  1.  certutil -N -d sql:/etc/ipsec.d

В базу данных надо занести сертификаты сервера и клиента (файл .p12):

  1.  ipsec import cpuser.p12

Содержимое базы данных можно увидеть, используя “certutil”:

  1.  certutil -L -d sql:/etc/ipsec.d 
     
    Certificate Nickname                Trust Attributes 
                                        SSL,S/MIME,JAR/XPI 
     
    checkpoint-cert.pem                 P,, 
    internal_ca.pem                     CT,, 
    cpuser                              u,u,u


3.2 Конфигурационные файлы

Исходный файл конфигурации “libreswan” - это “/etc/ipsec.conf”. В нём можно определить местонахождение логфайла, отладку:

  1.  /etc/ipsec.conf - Libreswan IPsec configuration file 

    # see ’man ipsec.conf’ and ’man pluto’ for more information 

    # For example configurations and documentation, see https://libreswan.org/wiki/ 
     
    config setup 
            # Normally, pluto logs via syslog. 
            logfile=/var/log/pluto.log 
            # 
            # Do not enable debug options to debug configuration issues! 
            # 
            # plutodebug="control parsing" 
            # plutodebug="all crypt" 
            plutodebug=none 
            # 
            # NAT-TRAVERSAL support 
            # exclude networks used on server side by adding %v4:!a.b.c.0/24 
            # It seems that T-Mobile in the US and Rogers/Fido in Canada are 
            # using 25/8 as "private" address space on their wireless networks. 
            # This range has never been announced via BGP (at least up to 2015) 
            virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:100.64.0.0/10,%v6:fd00::/8,%v6:fe80::/10 
     
    # if it exists, include system wide crypto-policy defaults 
    # include /etc/crypto-policies/back-ends/libreswan.config 
     
    # It is best to add your IPsec connections as separate files in /etc/ipsec.d/ 
    include /etc/ipsec.d/*.conf

В каталоге “/etc/ipsec.d/” размещаются файлы соединений, например “/etc/ipsec.d/ipsec.conf”:

  1.  cat /etc/ipsec.d/ipsec.conf 
    conn home 
            # Right side is libreswan 
            right=%defaultroute 
            rightcert=cpuser 
            # rightid="/O=smartcenter..i6sh4u/OU=users/CN=cpuser" 
            rightid=%fromcert 
            rightrsasigkey=%cert 
            # Left side is CheckPoint 
            left=<checkpoint gw ip-address> 
            # leftsubnet=192.168.xx.0/24 
            leftcert=checkpoint-cert.pem 
            # leftid=<checkpoint gw ip-address> 
            leftid=%fromcert 
            # Config 
            vti-interface=ip_vti0 
            type=tunnel 
            keyingtries=3 
            disablearrivalcheck=no 
            authby=rsasig 
            ike=aes256-sha1;modp1024 
            phase2=esp 
            phase2alg=aes256-sha1 
            pfs=no 
            ikelifetime=8h 
            salifetime=1h 
            ikev2=no 
            keyexchange=ike 
            auto=route 
     
    conn net-192.168.xx.0 
           also=home 
           leftsubnet=192.168.xx.0/24 
           #auto=start


3.3 Запуск “libreswan”

Запуск сервиса возможен как напрямую, так и через “systemctl”:

  1.  ipsec start 
    Redirecting to: systemctl start ipsec.service 
    # ipsec auto --up home 
    au002 "home" #1: initiating Main Mode 
    104 "home" #1: STATE_MAIN_I1: initiate 
    106 "home" #1: STATE_MAIN_I2: sent MI2, expecting MR2 
    002 "home" #1: I am sending my cert 
    002 "home" #1: I am sending a certificate request 
    108 "home" #1: STATE_MAIN_I3: sent MI3, expecting MR3 
    002 "home" #1: Peer ID is ID_IPV4_ADDR: ’<checkpoint gw ip-address>’ 
    002 "home" #1: certificate verified OK: CN=smart VPN Certificate,O=smartcenter..i6sh4u 
    003 "home" #1: Authenticated using RSA 
    004 "home" #1: STATE_MAIN_I4: ISAKMP SA established {auth=RSA_SIG cipher=aes_256 integ=sha group=MODP1024} 
    002 "home" #2: initiating Quick Mode RSASIG+ENCRYPT+TUNNEL+UP+IKEV1_ALLOW+SAREF_TRACK+IKE_FRAG_ALLOW+ESN_NO {using isakmp#1 msgid:c80d7f54 proposal=AES_CBC_256-HMAC_SHA1_96 pfsgroup=no-pfs} 
    117 "home" #2: STATE_QUICK_I1: initiate 
    004 "home" #2: STATE_QUICK_I2: sent QI2, IPsec SA established tunnel mode {ESP/NAT=>0xcfeff49e <0xb0d447b9 xfrm=AES_CBC_256-HMAC_SHA1_96 NATOA=none NATD=<checkpoint gw ip-address>:4500 DPD=passive}


3.4 Проверка “libreswan”

Проверить настройки “libreswan” можно с помощью команды “ipsec verify”:

  1.  ipsec verify 
    Verifying installed system and configuration files 
     
    Version check and ipsec on-path                         [OK] 
    Libreswan 3.25 (netkey) on 5.4.17-2036.102.0.2.el7uek.x86_64 
    Checking for IPsec support in kernel                    [OK] 
     NETKEY: Testing XFRM related proc values 
             ICMP default/send_redirects                    [OK] 
             ICMP default/accept_redirects                  [OK] 
             XFRM larval drop                               [OK] 
    Pluto ipsec.conf syntax                                 [OK] 
    Two or more interfaces found, checking IP forwarding    [OK] 
    Checking rp_filter                                      [OK] 
    Checking that pluto is running                          [OK] 
     Pluto listening for IKE on udp 500                     [OK] 
     Pluto listening for IKE/NAT-T on udp 4500              [OK] 
     Pluto ipsec.secret syntax                              [OK] 
    Checking ’ip’ command                                   [OK] 
    Checking ’iptables’ command                             [OK] 
    Checking ’prelink’ command does not interfere with FIPS [OK] 
    Checking for obsolete ipsec.conf options                [OK]


4 Фаервол

В настройках фаервола надо добавить “NAT masquerading”, протоколы аутентификации IPsec (AH) и энкапсуляции (ESP):

  1.  firewall-cmd --zone=public --permanent --add-rich-rule=’rule protocol value="esp" accept’ 
    # firewall-cmd --zone=public --permanent --add-rich-rule=’rule protocol value="ah" accept’ 
    # firewall-cmd --zone=public --permanent --add-masquerade

А также добавить “UDP” порты и сервис “ipsec”:

  1.  firewall-cmd --zone=public --permanent --add-port=500/udp 
    # firewall-cmd --zone=public --permanent --add-port=4500/udp 
    # firewall-cmd --zone=public --permanent --add-service="ipsec" 
    # firewall-cmd --reload

Посмотреть, что всё вышеуказанное включено в фаервол, можно с помощью команды “firewall-cmd --list-all”:

  1.  firewall-cmd --list-all 
    public (active) 
      target: default 
      icmp-block-inversion: no 
      interfaces: wlo1 
      sources: 
      services: ipsec rpc-bind ssh 
      ports: 500/udp 4500/udp 
      protocols: 
      masquerade: yes 
      forward-ports: 
      source-ports: 
      icmp-blocks: 
      rich rules: 
            rule protocol value="esp"accept 
            rule protocol value="ah"accept


5 Sysctl

В дополнение к исходным настройкам strongswan, надо дополнительно внести изменения в сетевые настройки ядра. Для этого надо добавить следующие строки в файл “/etc/sysctl.conf”:

  1.  sysctl settings are defined through files in 
    # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. 

    # Vendors settings live in /usr/lib/sysctl.d/. 
    # To override a whole file, create a new file with the same in 
    # /etc/sysctl.d/ and put new settings there. To override 
    # only specific settings, add a file with a lexically later 
    # name in /etc/sysctl.d/ and put new settings there. 

    # For more information, see sysctl.conf(5) and sysctl.d(5). 
    net.ipv4.ip_forward = 1 
    net.ipv4.conf.all.accept_redirects = 0 
    net.ipv4.conf.all.send_redirects = 0 
    net.ipv4.conf.all.rp_filter = 0 
    net.ipv4.conf.default.accept_source_route = 0 
    net.ipv4.conf.default.accept_redirects = 0 
    net.ipv4.conf.default.send_redirects = 0 
    net.ipv4.conf.default.rp_filter = 0 
    net.ipv4.conf.eno1.rp_filter = 0 
    net.ipv4.conf.wlo1.rp_filter = 0 
    net.ipv4.conf.ip_vti0.rp_filter = 0

Наименования интерфейсов “eno1”, “wlo1”, “ip_vti0” могут отличаться, а также могут присутствовать и другие интерфейсы, например “virbr0”, “virbr0-nic”. Посмотреть все имеющиеся интерфейсы можно с помощью команды “ip a”.