IPSec на CentOs 7 с помощью LibreSwan

Ниже небольшой гайд по настройке IPSec в двух топологиях с помощью LibreSwan:

  • для сервера с публичным IP на интерфейсе;
  • для сервера c локальным IP и за маршрутизатором с NAT, используя NAT Traversal (NAT-T)


Подготовительный этап одинаков в обоих случаях:

  1. Устанавливаем libreswan:
    yum install libreswan
    
  2. Включаем IP forwarding, а IP redirects отключаем, перезагружаем параметры:
    # Открываем файл
    nano /etc/sysctl.conf
    
    # и добавляем параметры:
    net.ipv4.ip_forward = 1
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.all.send_redirects = 0
    
    # Применяем новые параметры
    sysctl -p
    
  3. Разрешаем IPSec траффик в firewalld:
    firewall-cmd --zone=public --add-service=ipsec
    
  4. Добавляем сервис в автозагрузку и запускаем
    systemctl enable ipsec
    systemctl start ipsec
    

Дальнейшая конфигурация отличается от топологии. Оба случая описаны ниже.


1. Сервер CentOs имеет на одном из интерфейсов публичный IP, NAT-T не используется.

Топология без NAT

Приводится конфиг только для стороны A, на стороне B конфиг симметричный и там может быть любое устройство, поддерживающее IPSEC.
LAN адрес из указанной подсети может находится как и непосредственно на самом сервере, или же за ним (сервер используется в качестве маршрутизатора).

  1. Для более удобной работы с логами рекомендую внести следующие изменения в глобальный конфиг:
    nano /etc/ipsec.conf
    
    # Для логирования раскоментировать/добавить строку 
    logfile=/var/log/pluto.log
    
  2. Для нового тоннеля рекомендуется создавать новый файл в директории /etc/ipsec.d/ а не в глобальном /etc/ipsec.conf, поэтому создаём файл конфигурации тоннеля:
    nano /etc/ipsec.d/tunnel-to-b.conf
    
    #Пример конфига:
    conn tunnel-to-b
            authby=secret # Выбрана аутентификация по pre-shared key
            auto=start
            ike=3des-sha1-modp1024 # Параметры шифрования первой фазы
            ## phase 1 ##
            keyexchange=ike
            ## phase 2 ##
            phase2=esp
            phase2alg=3des-sha1 # Параметры шифрования второй фазы
            compress=no
            pfs=no # Использовать ли pfs
            type=tunnel
            left=1.1.1.1 # Публичный адрес нашей стороны для инициализации (PEER)
            leftsourceip=1.1.1.1
            leftsubnet=10.10.10.10/24 # Сеть с нашей стороны (ENCRYPTION DOMAIN)
            ## for direct routing ##
            leftnexthop=%defaultroute
            right=2.2.2.2 # Публичный адрес удалённой стороны для инициализации (PEER)
            rightsubnet=192.168.0.0/24 # Сеть удалённой стороны (ENCRYPTION DOMAIN)
    

    Поддерживаемые типы шифрования описаны тут — https://libreswan.org/wiki/FAQ#Which_ciphers_.2F_algorithms_does_libreswan_support.3F

  3. Теперь нужно создать файл с pre-shared key для аутентификации, опять таки рекомендуется делать в виде отдельного файла для каждого тоннеля:
    nano /etc/ipsec.d/tunnel-to-b.secrets
    
    # Пример ключа в файле
    1.1.1.1 2.2.2.2: PSK "key"
    
  4. Перезапускаем службу
    systemctl restart ipsec
    

На этом конфигурация завершена, и если всё сделано правильно (и с обеих сторон) то тоннель будет работать.
Проверить работу тоннеля можно пропинговав удалённый узел, статус тоннеля можно посмотреть командой:

ipsec status

И в выводе найти секцию с именем подключения, в ней будет примерно следующее:

000 #10: "tunnel-to-b":4500 STATE_MAIN_I4 (<strong>ISAKMP SA established</strong>); EVENT_SA_REPLACE in 1278s; newest ISAKMP; lastdpd=5s(seq in:0 out:0); idle; import:admin initiate

Established означает что тоннель запущен.
Подробнее о всём выводе команды описано тут — https://libreswan.org/wiki/How_to_read_status_output
При отладке помогут логи в /var/log/pluto.log


2. Сервер CentOs с локальным IP находится за маршрутизатором, на маршрутизаторе настроен NAT, используется NAT-T

Топология за NAT, используя NAT-T


Сторона A находится за NAT и имеет только локальный адрес — в данном случае тоннель будем строить до него, а не для всей сети (но при желании можно и до сети, исходя из нужд). NAT настроен на роутере и все запросы приходящие на публичный адрес пробрасываются на локальный. В такой топологии рекомендуется использовать NAT-T для корректной работы IPSec за NAT — зачастую маршрутизаторы/фаерволы блокируют прямое прохождение IPSEC траффика внутрь сети.
На стороне B при такой топологии в качестве удалённого PEER адреса используют публичный IP.

Общие принципы конфигурации будут как в пункте 1, опишу только отличия

  1. Создаём конфиг тоннеля
    nano /etc/ipsec.d/tunnel-to-b.conf
    
    #Пример конфига:
    conn tunnel-to-b
            authby=secret # Выбрана аутентификация по pre-shared key
            auto=start
            ike=3des-sha1-modp1024 # Параметры шифрования первой фазы
            ## phase 1 ##
            keyexchange=ike
            ## phase 2 ##
            phase2=esp
            phase2alg=3des-sha1 # Параметры шифрования второй фазы
            compress=no
            pfs=no # Использовать ли pfs
            type=tunnel
            left=10.10.10.2 # Указываются PEER адреса узла, при NAT-T с нашей стороны локальный а не публичный
            leftsourceip=10.10.10.2
            leftsubnet=10.10.10.2/32 # Сеть/хост с нашей стороны (ENCRYPTION DOMAIN)
            ## for direct routing ##
            leftnexthop=%defaultroute # При желании можно указать адрес роутера, если дефолтный маршрут вдруг смотрит не на него.
            right=2.2.2.2 # Публичный адрес удалённой стороны для инициализации (PEER)
            rightsubnet=192.168.0.0/24 # Сеть удалённой стороны (ENCRYPTION DOMAIN)
    
  2. Создаём файл с pre-shared key
    nano /etc/ipsec.d/tunnel-to-b.secrets
    
    # Пример ключа в файле
    10.10.10.2 2.2.2.2: PSK "key" # Тут указываются PEER адреса узлов, при NAT-T с нашей стороны локальный
    

После перезапуска сервиса тоннель должен заработать.

0

Добавить комментарий

Ваш e-mail не будет опубликован.