Sunday, September 29, 2013

IPSec туннель Linux-Cisco и туннели в облака.



«Я думаю, нам с тобой пора перейти на следующий этап», - сказала она мне за 5 минут до того, как мы расстались. Словом, туннель между линуксами построен, можно двигаться дальше и настраивать туннель между Linux и Cisco. Сначала построим обычный Site-to-site туннель. Дальше представим, что у нас Linux-сервер находится в облаке, сейчас это очень модно, и построим к нему туннель из нашей маленькой сети с использованием оборудования Cisco. Итак, соединение между двумя разными платформами всегда интересно, ибо каждый реализует протокол, так как считает нужным и у каждого свое «по-умолчанию». Со стороны Linux будем использовать уже знакомый strongswan, а со стороны Cisco это будет роутер на IOS.

Случай номер один: Site-to-site
Топология изображена на рисунке. 

Перейдем к конфигам, конфигурационный файл ipsec.conf на Linux имеет такие строки

conn To-Cisco
      left=78.12.34.56
      leftsubnet=192.168.10.0/24
      right=193.98.76.54
      rightsubnet=10.100.0.0/16
      ike=3des-sha1-modp1024
      esp=3des-sha1,3des-md5
      ikelifetime=3600s
      keylife=1800s
      type=tunnel
      authby=secret
      auto=start
      keyexchange=ikev1
      pfs=no


Что добавилось после первого разбирательства с strongswan
ikelifetime – указывается время жизни первой фазы.
keylife – время жизни второй фазы.
keyexchange – указывает версию использования протокола IKE. Для соединения с Cisco указывайте первую версию. По-умолчанию – вторая.
pfs – указывает, использовать ли perfect forward secrecy. Cisco его не использует, и мы не будем.
Изменяем ключ в файле ipsec.secrets

193.98.76.54 78.12.34.56 : PSK "12345678Qq"

Перейдем к конфигу Cisco. Мы уже знакомились с процедурой настройки более детально, поэтому повторяться не стану. Настраиваем первую фазу:

crypto isakmp policy 10
 encr 3des
 authentication pre-share
 group 2
 lifetime 3600

Задаем ключ для соединения

crypto isakmp key 12345678Qq address 193.98.76.54 no-xauth

Указываем время жизни второй фазы

crypto ipsec security-association lifetime seconds 1800

Указываем параметры шифрования на воторой фазе

crypto ipsec transform-set MyTS ah-sha-hmac esp-3des esp-sha-hmac

Создаем карту шифрования

crypto map myCM 10 ipsec-isakmp

 set peer 193.98.76.54

 set transform-set MyTS

 match address ipsecacl

Создаем список доступа, для того, чтобы определить какой трафик будет идти через туннель.

ip access-list extended ipsecacl

 permit ip 192.168.10.0 0.0.0.255 10.100.0.0 0.0.255.255

Привязываем карту шифрования к интерфейсу

interface Vlan12

 ip address 78.12.34.56 255.255.255.0

 crypto map myCM

не забываем прописать маршрут в удаленную сеть.

ip route 10.100.0.0 255.255.0.0 193.98.76.54

На этом все, туннель должен подняться

EvilRouter#show crypto engine connections active

Crypto Engine Connections



   ID Interface  Type  Algorithm           Encrypt  Decrypt IP-Address

    5 Vl12       IPsec SHA+3DES+SHA              0        0 78.12.34.56

    6 Vl12       IPsec SHA+3DES+SHA              0        0 78.12.34.56

 1021 Vl12       IKE   SHA+3DES                  0        0 78.12.34.56

 1022 Vl12       IKE   SHA+3DES                  0        0 78.12.34.56



EvilRouter#

Несколько слов на тот случай, если туннель не поднимается. Простенький траблшутинг IPSec на Cisco описан у меня здесь. Что касается Linux, то рекомендую читать лог, у strongswan он весьма адекватный, как по мне, и чего-то понять таки можно. Лог пишется в файл /var/log/auth.logDebian) или в /var/log/secureRedHat).
Мониторить состояние туннеля можно командой ipsec status, но там довольно много информации и если хочется просто узнать поднят туннель или нет, то можно воспользоваться прелестью unix-овой командной строки и делать так:

root@debianCL:~# ipsec status | grep 'esp'
000 #3: "To-Cisco" ah.da400bc2@78.12.34.56 ah.c9dd82cb@193.98.76.54 esp.bd8a925e@78.12.34.56 (35676 bytes, 12s ago) esp.cac24a70@193.98.76.54 (25256 bytes, 0s ago); tunnel
root@debianCL:~#

Если что-то выводит, значит, туннель поднят, можно даже посмотреть, сколько байт прошло через туннель.

Случай номер два. Туннель в облако.
Используемая топология изображена на рисунке

Метод первый, немного кривоват, зато простой как три копейки, практически ничего не надо менять. Смысл в том, чтобы на Linux указать на интерфейсе, смотрящем в Интернет (сейчас мы допускаем, что у нас один сетевой интерфейс) второй адрес, который будет соответствовать диапазону внутренних адресов, для которых применяется шифрование.

root@debianCL:~# ifconfig eth1:1 10.100.0.1/16

Получится на одном интерфейсе eth1 два адреса:

root@debianCL:~# ifconfig

eth1      Link encap:Ethernet  HWaddr 08:00:27:1b:a1:56

          inet addr:193.98.76.54  Bcast:193.98.76.255  Mask:255.255.255.0

          inet6 addr: fe80::a00:27ff:fe1b:a156/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:8582 errors:0 dropped:0 overruns:0 frame:0

          TX packets:9307 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:1095471 (1.0 MiB)  TX bytes:3032789 (2.8 MiB)



eth1:1    Link encap:Ethernet  HWaddr 08:00:27:1b:a1:56

          inet addr:10.100.0.1  Bcast:10.100.255.255  Mask:255.255.0.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1



root@debianCL:~#

Таким образом, когда из внутренней сети я начну пинговать хост 10.100.0.1, то данные уйдут в туннель.

Вариант второй: не такой кривой, как первый и тоже работает. Так как за linux-ом сети нет,  а есть только один глобальный адрес, то и шифровать будем только то, что идет из нашей локалки на глобальный адрес linux-а и оттуда наоборот. Для этого соответственным образом изменяем access-list на Cisco
ip access-list extended ipsecacl
 permit ip 192.168.10.0 0.0.0.255 host 193.98.76.54
а на Linux изменяем файл ipsec.conf
conn To-Cisco
      left=78.12.34.56
      leftsubnet=192.168.10.0/24
      right=193.98.76.54
      ike=3des-sha1-modp1024
      esp=3des-sha1,3des-md5
      ikelifetime=3600s
      keylife=1800s
      type=tunnel
      authby=secret
      auto=start
      keyexchange=ikev1
      pfs=no
Вся разница заключается в том, что пропала строка rightsubnet так как сети за Linux, как уже говорилось, по сути нет. Посмотрим, что об этом думает команда ipsec status, вот часть ее вывода
root@debianCL:~# ipsec status

000 "To-Cisco": 193.98.76.54[193.98.76.54]...78.12.34.56[78.12.34.56]===192.168.10.0/24; erouted; eroute owner: #3
Вот такую он видит схему туннеля. Все как и должно быть.

Вариант третий: использовать обычный host-to-host VPN, но на cisco настроить NAT. Таким образом, все, что будет идти на Linux будет проходить через NAT и потом шифроваться. Не проверял, но не вижу причин этому способу не работать.

No comments:

Post a Comment