Сетевые технологии
Туннели IPsec
Особенности настройки IPsec в дистрибутивах Linux на основе Debian/Ubuntu

В дистрибутивах, основанных на Debian/Ubuntu, штатным решением для IPsec является пакет StrongSWAN (в т.ч. основанный на нём же плагин для Network Manager). Работающей конфигурации для стыковки StrongSWAN с OpenSWAN/LibreSWAN автору сего документа, на момент его написания, не известно.

Для соединения хоста с актуальными Ubuntu-производными дистрибутивами и устройства с NSG Linux 2.1 рекомендуется:

  1. Удалить StrongSWAN и связанные с ним пакеты (плагин для Network Manager и др.), если они были установлены.
  2. Установить LibreSWAN:

    sudo apt-get install libreswan
    
  3. Установить ключи и сертификаты (если они используются). В отличие от OpenSWAN и ранних версий LibreSWAN, актуальные версии LibreSWAN хранят их только в защищённой базе NSS. Ubuntu и её производные, по умолчанию, хранят NSS в директории /var/lib/ipsec/nss/. (В отличие от оригинального LibreSWAN, который использует /etc/ipsec.d; в других дистрибутивах может быть иначе.) Утилиты для импорта в неё требуют, чтобы корневой сертификат был сохранён в формате .der, а ключ и сертификат клиента — в одном файле .p12. Этому файлу необходимо назначить пароль длиной не менее 4 символов (на момент написания сей статьи, в будущем требования могут быть ужесточены).
    sudo ipsec initnss
    sudo certutil -A -i root.der -d sql:/var/lib/ipsec/nss/ -n "root" -t 'CT,,'
    sudo ipsec import client.p12
    
    Проверить результат можно командой:
    sudo certutil -L -d sql:/var/lib/ipsec/nss/ 
    
    В выводе должно быть 2 строки: одна с локальным именем (nickname) root, явно назначенным выше, другая с локальным именем, взятым автоматически из поля CommonName сертификата. (Вручную можно назначить и другое имя, см. man certutil, но явной надобности в этом нет.)
  4. Создать файл настройки /etc/ipsec.conf или /etc/ipsec.d/любое_имя.conf обычным образом. В качестве основы для него можно взять вывод команды show.config (или часть его, относящуюся к общим настройкам и к данному клиенту), но несколько несимметричных параметров потребуется изменить. В качестве сертификата указывается его локальное имя в NSS:
    leftcert=nickname 
    
    полученное на предыдущем шаге — т.е. по существу CommonName сертификата.
  5. Полученная конфигурация работает в туннельном режиме, используя хост Ubuntu в качестве шлюза IPsec. Чтобы подключить этот же хост, как единичную машину, к защищённой сети, проще всего назначить ему некоторый адрес с маской /32 (на любой интерфейс, но желательно — всегда поднятый) и рассматривать этот адрес в качестве сегмента защищённой сети, расположенного за этим же хостом как шлюзом. Удобно это сделать путём добавления/удаления желаемого адреса в файле /lib/systemd/system/ipsec.service:

    .........................
    # Add IPsec private address to lo
    ExecStartPre=/sbin/ip addr add my.private.ip.address/32 dev lo
    # Check configuration file
    ExecStartPre=/usr/lib/ipsec/addconn --config /etc/ipsec.conf --checkconfig
    # Check for kernel modules
    ExecStartPre=/usr/lib/ipsec/_stackmanager start
    # Check for nss database status and migration
    ExecStartPre=/usr/sbin/ipsec --checknss
    # Check for nflog setup
    ExecStartPre=/usr/sbin/ipsec --checknflog
    # Start the actual IKE daemon
    ExecStart=/usr/lib/ipsec/pluto --leak-detective --config /etc/ipsec.conf --nofork
    ExecStop=/usr/lib/ipsec/whack --shutdown
    ExecStopPost=/sbin/ip xfrm policy flush
    ExecStopPost=/sbin/ip xfrm state flush
    ExecStopPost=/usr/sbin/ipsec --stopnflog
    ExecStopPost=/sbin/ip addr del my.private.ip.address/32 dev lo
    ExecReload=/usr/lib/ipsec/whack --listen
    .........................	
    }
    
  6. И после этого перезагрузить изменённые настройки systemd:
    sudo systemctl daemon-reload
    
  7. Для ручного запуска и остановки IPsec использовать команды, соответственно:
    sudo systemctl start ipsec.service 
    sudo systemctl stop ipsec.service 
    sudo systemctl restart ipsec.service 
    

    Для запуска или запрета запуска при старте системы, сооответственно:

    sudo systemctl enable ipsec.service 
    sudo systemctl disable ipsec.service 
    
    (При установке LibreSWAN он автоматически ставится в состояние enable, но не стартует, потому что не находит ни одного файла конфигурации).
Обратно в узел ipsec...

© Network Systems Group 2015–2024 Отдел документации