spoiler

понедельник, 30 сентября 2013 г.

Настройка удаленного VPN-доступа на ASA5505

Теорию по VPN туннелям и используемым протоколам вкратце можно почитать тут.
Для начала главное, что построение туннеля происходит в два этапа (фазы):

1 фаза - два узла договариваются о методе идентификации, алгоритме шифрования, хэш алгоритме и группе Diffie Hellman. а так же узлы идентифицируют друг друга.
2 фаза - генерируются данные ключей, узлы договариваются насчёт используемой политики.

VPN-тунели могут быть статические или динамические, в зависимости от того, известен ли нам второй узел или нет. В данной статье рассмотрим настройку динамического варианта, когда у нас есть несколько удаленных сотрудников, которые должны подключаться из разных мест. Сразу скажу, в ASA предусмотрен более гибкий вариант, построение VPN туннеля через Web при использовании anyconnect и если у вас есть куча менеджеров, которым необходимо по максимуму упростить доступ в сеть - лучше использовать именно его.


Для построения VPN туннеля с использованием динамической карты (dynamic-map) необходимо следующее:

  1. Подготовить политики первой фазы. Если вы точно не знаете какое шифрование использует второй узел - то можно заготовить политики на все случаи жизни. При  установке связи будут перебираться все политики начиная с меньшего порядкового номера. Для того, что бы в будущем иметь возможность "вклинить" какую-нибудь политику можно нумеровать через 5-10 позиций. Для первой фазы можно использовать как IKEv1 так и IKEv2 политики. Для IKEv1 это выглядит следующим образом:

    crypto ikev1 policy 10
     authentication pre-share
     encryption 3des
     hash sha
     group 2
     lifetime 86400
    crypto ikev1 policy 15
     authentication pre-share
     encryption aes
     hash sha
     group 2
     lifetime 86400

    Можно добавить до 200 вариантов политики. Для IKEv2 это выглядит так:
    crypto ikev2 policy 10
     encryption 3des
     integrity sha
     group 2
     prf sha
     lifetime seconds 86400
    crypto ikev2 policy 20
     encryption aes
     integrity sha
     group 2
     prf sha
     lifetime seconds 86400
  2. Не забываем привязать эти политики к интерфейсам:

    crypto ikev1 enable internet
    crypto ikev2 enable internet client-services port 443

  3. Теперь создаем transform set для IKEv1, в которых указываем возможные варианты комбинации шифрования трафика и аутентификации узлов:
    crypto ipsec ikev1 transform-set tset_AesSha esp-aes esp-sha-hmac
    Для IKEv2 создаем предложение (аналогичная функция transform set):

    crypto ipsec ikev2 ipsec-proposal proposal_ikev2
     protocol esp encryption aes 3des des
     protocol esp integrity sha-1 md5

  4. Теперь создадим динамическую карту, в которой все это объединим(в данном случае используется IKEv1):

    crypto dynamic-map DMAP_REMACC 10 set ikev1 transform-set tset_AesSha

  5. Динамическую карту нельзя прикрепить напрямую к интерфейсу, поэтому мы создаем еще и статическую карту, к которую и привязываем к интерфейсу. Если вы предполагаете, что на этом интерфейсе будут и другие туннели, то лучше указать приоритет побольше, тогда динамическая карта будет применяться в последнюю очередь:

    crypto map outside 100 ipsec-isakmp dynamic DMAP_REMACC
    crypto map outside interface internet

  6. Перед завершением настройки самого VPN подготовим отдельные сети для удаленных пользователей. Для этого
    • Создадим объект с подсетью, в которой будут удаленные пользователи:

      object network obj_VPN
      subnet 172.16.17.0 255.255.255.0

    • Создаем пул адресов, выдаваемых клиентам:

      ip local pool POOL_VPN 172.16.17.1-172.16.17.254

    • Создаем так называемый SPLIT ACL, который укажет нашему маршрутизатору где удаленные адреса, а где локальные(можно использовать стандартные ACL указав в них только permit удаленных узлов):

      access-list ACL_VPN extended permit ip object obj_LAN object obj_VPN

    • Если у нас в локальной сети работает NAT, что бы он не действовал для адресов удаленной подсети необходимо прописать еще одно правило:

      nat (LAN,internet) source static obj_LAN obj_LAN destination static obj_VPN obj_VPN route-lookup

  7. Создадим групповые политики:

    group-policy GP_VPN internal
    group-policy GP_VPN attributes
    banner value Welcom to office network
    vpn-tunnel-protocol ikev1
    password-storage enable
    split-tunnel-policy tunnelspecified
    split-tunnel-network-list value ACL_VPN

  8. Создаем туннельную группу:

    tunnel-group TG_VPN type remote-access
    tunnel-group TG_VPN general-attributes
    address-pool POOL_VPN
    authentication-server-group
    default-group-policy GP_VPN
    tunnel-group TG_VPN ipsec-attributes
    ikev1 pre-shared-key *****
    isakmp keepalive threshold infinite
    !

    Последняя команда полезна, ну пути между узлами стоит куча NAT или есть другие причины длительной установки связи. Это удобно на стадии отладки, но на постоянный вариант, лучше указать конкретный таймаут.
  9. Создать пользователей на ASA, или использовать удаленный сервер.
На этом собственно и все. Теперь используем VPN клиент, например Cisco VPN Client, где указываем внешний адрес нашей ASA, группу (в нашем случае TG_VPN), пароль, который мы указали в pre-shared-key. Затем, когда спросят логин и пароль, указываем те, которые мы прописывали конкретному пользователю.

Комментариев нет: