Настройка EasyVPN на Cisco (split tunneling)

May 22, 2012 16:02

Который раз убеждаюсь в том, что какие доки не бери с cisco.com, а как готовое решение они не пойдут, постоянно что-то да в них недосказано, что-то упущено. Хочется верить, что это делалось на благо, а не из корыстных побуждений ))) Хотя, в любом случае, то, что заставляет мозг работать - есть на благо, как ни крути )) Вот так, у меня собственно и было на днях. Пришлось разбираться, что называется «с нуля» качать кучу доков, в том числе и официальных, перелопачивать форумы, и прочие статьи. Вот этот опыт я и хочу увековечить в цифре, чтоб не потерялся, ну и ещё кому-нибудь пригодился.
В общем, понадобилось связать удалённые филиалы нашей организации с сеткой. Основное требование - это защищённость, наличие шифрования канала и простота в настройке у клиентов. Остановился я на цисковской технологии EasyVPN, тут вам и поддержка IPSec, и минимализм в настройках на клиентской части, что с одной стороны облегчает развёртывание VPN инфраструктуры, а с другой повышает безопасность, т.к. все параметры взаимодействия и политики безопасности, в данном случае, располагаются на центральном сервере сети VPN, к которому подключаются удаленные устройства - аппаратные и программные VPN-клиенты.



Итак, дано:
1)Роутер Cisco 2821;
2)Клиентские машинки, имеющие выход в инет и не имеющие статического IP;
3)Сеть предприятия;
Настройка cisco:
В первую очередь настраиваем aaa:
aaa new-model
!
aaa authentication login vpn_xauth_1 local
aaa authorization network vpn_group_1 local
!
Тут vpn_xauth_1 и vpn_group_1, ну скажем так, профили пользовательской и групповой аутентификации и авторизации, в них указывается порядок получения групповых и пользовательских политик, в нашем случае local обозначает, что настройки беруться из конфига циски, сейчас у меня настроена аутентификация через радиус, но об этом в отдельной заметке, т.к. это отдельная история, и чтобы никого не путать разберём сначала локальный вариант.
Далее добавляем пользователя, который будет у нас логиниться при установлении vpn-соединения:
username cisco password cisco
Настраиваем протокол isakmp (неотъемлемая часть протокола IPSec предназначена для шифрованного обмена ключами):
crypto isakmp policy 1
 encr 3des
 authentication pre-share
 group 2
В данном случае pre-share обозначает, что для генерации ключа будет использован не сертификат, а некоторая строка pre shared key, которая будет задана администратором для каждой группы.
Далее идут групповые настройки для подключения:
crypto isakmp client configuration group remote-clients
 key megakey123
 dns 192.168.1.10
 domain domain.local
 pool POOL_1
 acl 100
Тут remote-clients произвольное имя групповой политики таких политик может быть много. Всё зависит от ваших требований к сетям VPN. Key - это и есть вышеупомянутый pre shared key для группы remote-clients.  Pool - имя локального пула ip-адресов которые будут выдаваться клиентам. Acl - имя аксесс-листа, в моём случае это нужно для организации split tunneling. Что такое split tunneling? Дело в том, что, в моём случае, большая часть удалённых клиентов выходит в инет посредствам 3G-модемов и при установлении vpn-подключения будет «теряться интернет», просто пакеты адресованные узлам сети Интернет пойдут через VPN-соединение, и дойдя до циски теряться, т.к. узлов с такими адресами в нашей сети нет, так, что этим правилом access-list, относящимся к split tunneling мы блокируем все адреса не относящиеся к нашей сети, чтобы циска их блокировала, и пакеты не терялись, а отправлялись в глобальную сеть. Ну это так, немного забегая вперёд, само же правило будет ниже, здесь только ссылка на него. Почему именно split tunneling? Да потому что (опять же повторюсь) в нашем случае раздавать инет через наш шлюз не рационально, и бессмысленно, учитывая мобильность клиентов.  Пакеты, адресованные узлам сети Интернет, фактически будут проходить через Интернет дважды, во-первых, через VPN соединение, которое и так устанавливается через инет (и весьма не быстрый канал), а во-вторых, с нашего шлюза до адресата уже непосредственно в инете, что будет порождать задержки и увеличивать нагрузку на наш шлюз. Так же и биллинг для vpn-клиентов становится бессмысленным, учитывая тот факт, что соединение через vpn можно разорвать и пользоваться интернетом напрямую. Другое дело стационарные офисы имеющие свою сеть и постоянное соединение по vpn с центральным офисом, тут уже split tunneling не нужен, вот для этого и пригодятся нам групповые политики, для кого-то можно разрешить пользоваться «личным» инетом, а кому-то можно и запретить. Ладно, вернёмся к нашим баранам ))
Настраиваем профиль для isakmp. Он пригодится нам для дальнейшей настройки IPSec:
crypto isakmp profile ike-profile-1
   match identity group remote-clients
   client authentication list vpn_xauth_1
   isakmp authorization list vpn_group_1
   client configuration address respond
   virtual-template 1
!
Где, match identity group - имя созданной ранее группы на которую будет распространятся данные настройки шифрования (если групп несколько, то и этих строк тоже должно быть несколько); ike-profile-1 - имя профиля; client authentication list - метод аутентификации (точнее его имя, см. выше); isakmp authorization list - метод авторизации (так же его имя, так же см. выше); virtual-template 1 - интерфейс к которому происходит подключение, в нашем случае виртуальный, привязанный к реальному (см. настройки ниже).
Создаём профиль трансформы (не знаю как правильнее на великом и могучем сказать):
crypto ipsec transform-set transform-1 esp-3des esp-sha-hmac
transform-1 - имя профиля, может быть произвольным, остальное параметры IPSec отвечающие за алгоритм шифрования и хэширования соответственно.
Далее непосредственно настройки профиля IPSec:
crypto ipsec profile Cisco_Profile1
 set transform-set transform-1
 set isakmp-profile ike-profile-1
Cisco_Profile1 - имя профиля, может быть произвольным. set transform-set - указывается имя профиля ipsec transform-set (см. чуть выше). set isakmp-profile - указывается имя профиля isakmp.
На этом с параметрами криптографии покончено, теперь перейдём к созданию нашего виртуального туннельного интерфейса:
interface Virtual-Template1 type tunnel
 ip unnumbered GigabitEthernet0/1
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile Cisco_Profile1
Тут особо уже и нечего расписывать, после всего вышесказанного догадаться по логике вещей не сложно, единственно, что можно уточнить - это GigabitEthernet0/1 - внешний сетевой интерфейс циски.
Создаём пул раздаваемых айпишников, помните, мы назвали его POOL_1 ;)
ip local pool POOL_1 192.168.7.1 192.168.7.100
Можно для каждой групповой политики задать свой пул, правда советую не увлекаться, тут есть грабли )) Всё дело в том, что для каждого подключившегося клиента циска создаёт SA (Security Association), по умолчанию время жизни SA - 1 час, и если задать по одному айпишнику для каждого подключения в группе, может получиться неприятная ситуация, когда произойдёт случайный разрыв связи (пропадёт инет у клиента, или комп зависнет, или модем), айпишник окажется в «подвешенном» состоянии на час, и за неимением свободного адреса в пуле, клиент за ново сможет подключиться только через час )) Время жизни SA конечно же можно уменьшить, но и увлекаться этим тоже не стОит, т.к. при выходе таймаута циска будет пересчитывать ключи, когда у тебя один - два клиента - это не страшно, но когда ближе к 20 это уже может вызвать значительную нагрузку на процессор роутера. Время жизни SA можно посмотреть так:
show crypto ipsec security-association lifetime
Занятость ip-адресов и кол-во подключившихся по группам можно посмотреть так:
show ip local pool
Ну и в завершение, access-list для split tunneling:
access-list 100 permit ip 192.168.0.0 0.0.255.255 any
Т.е. мы разрешаем проход трафика в нашу сеть.

Клиентская часть
В качестве клиента можно использовать:
1)Аппаратный роутер или файервол Cisco;
2)Программный клиент Cisco VPN Client для windows;
3) Программный клиент Shrew Soft VPN Client для windows;
4) Программный клиент Shrew Soft VPN Client для Linux and BSD
5) Программный клиент VPNC для FreeBSD;
6) Программный клиент VPNC для Linux;
7) Программный клиент VPNC для Android;
Может и ещё что-то есть, я не задавался вопросом, но мне и этого вполне хватает ))
Аппаратный клиент в этой заметке я рассматривать не буду, т.к. планирую посвятить этому отдельную статейку. Остановлюсь на программном клиенте для Windows, т.к. все остальные клиенты настраиваются практически одинаково, есть только разница в установке, но это тема уже отдельного поста, если будет желание, напишу позже.
Итак, качаем, устанавливаем, запускаем ))

Создаём новое подключение - нажимаем кнопку New. Заполняем поля в форме создания нового подключения:

- Connection Entry - Название подключения (произвольно);
- Description - Ремарка (произвольно);
- Host - Внешний адрес нашего роутера Cisco;
Ставим галку на групповой аутентификации (вроде по умолчанию там уже должна стоять).
-  name - имя группы (именно группы, а не пользователя, аутентификация-то групповая);
- password - тут вводим pre shared key для этой группы;
Всё, настройка завершена, нажимаем Save. В главном окне программы видим наше сохранённое подключение.

Подключаемся, кликаем на connect. Если всё нормально, и программа «подружилась» с циской, т.е. аутентификация прошла успешно, наступает пора авторизации, т.е. ввода пары логин/пасс - это именно тот пользователь, которого мы вносили с конфиг.

Вот тут немного остановлюсь и расскажу про один момент, дело в том, что если оставить групповые настройки именно в таком виде, в котором я их привёл для группы remote-clients, то имя и пароль придётся вводить каждый раз при подключении, если же мы люди ленивые, или… кхым… пользователи слишком… талантливые, и не могут запомнить пароль, а бумажки вечно куда-то теряют, и если безопасность не критична, можно разрешить клиентской программе «запоминать» пароль, для этого, в групповые настройки для нашей группы remote-clients нужно добавить строчку save-password, в общем это будет выглядеть так:
crypto isakmp client configuration group remote-clients
 key megakey123
 dns 192.168.1.10
 domain domain.local
 pool POOL_1
 acl 100
save-password
Тогда на форме ввода пароля появится чек-бокс «Save Password», как на картинке. Иначе его не будет.
Вообще, для особо ленивых случаев, или когда нужно установить массу клиентов, или когда время на установку ограниченно, можно полностью настроить подключение на одном компьютере, и затем экспортировать его в файл, далее настройка рабочего места будет заключаться в установке Cisco VPN Client и импорте файла настроек, что очень удобно, т.к. не требует высокой квалификации устанавливающего. Про возможные проблемы с установкой Cisco VPN Client и пути их решения расскажу в следующем посте.
Вот вроде бы и всё. Полный конфиг как всегда...
[...под спойлером]
! Last configuration change at 11:30:44 MSK Tue Feb 14 2012 by admin
! NVRAM config last updated at 11:30:38 MSK Tue Feb 14 2012 by admin
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname router1
!
boot-start-marker
boot-end-marker
!
enable secret 5 $398749885ivkhjkt87ed.
!
aaa new-model
!
!
aaa authentication login vpn_xauth_1 local
aaa authorization network vpn_group_1 local
!
aaa session-id common
!
resource policy
!
clock timezone MSK 4
!
!
ip cef
!
!
ip domain name domain.local
ip name-server xxx.xxx.xx1.xx3
ip name-server xxx.xxx.xx1.xx4
!
!
voice-card 0
 no dspfarm
!
!
crypto pki trustpoint TP-self-signed-502790975
 enrollment selfsigned
 subject-name cn=IOS-Self-Signed-Certificate-502790975
 revocation-check none
 rsakeypair TP-self-signed-502790975
!
!
crypto pki certificate chain TP-self-signed-502790975
 certificate self-signed 01
  30820247 308201B0 A0030201 02020101 37876889 2A864886 F7D30101 04050030
  30312E30 2C060355 04031325 494F532D 53656C66 2D536967 6E65642D 43657274
  66576577 6174652D 35303237 39303937 35301E17 0D313230 32313331 31303630
  305A170D 3236AA78 30313030 30303030 5A303031 2EK8H3D6 03550403 1325494F
  532D5365 6C662D53 69676E65 642D4365 72746966 69636174 652D3530 32373930
  39373530 819F300D 06092A86 4886F70D 01010105 0003818D 90998765 02818100
  CDA45772 99436E19 6DBFTKHJ 49ED3575 F335917A F05C887C 908F5164 7724C050
  26646F2A 69D3F175 46ADF308 DC474017 C55D1AA1 525B5FD4 60A8C7E5 A8A6D812
  325E2349 BF50BEC4 348D5B78 EB3F5F9F 46D95C99 221829D4 8B76B020 39BE1868
  E3SBVFFF BED38DC1 48B948C0 F7A5A594 7CD427F4 15078CCA DDCD0816 9376CC43
  02030100 01A37130 6F300F06 03551D13 0101FF04 03031801 01FF301C 0603551D
  11041530 13821172 6F757465 72312E61 6C76697A 2E636F6D 301F0603 551D2304
  18301680 14F917E3 6D797DBC E936F290 68686768 DD7341A5 A1301D06 03551D0E
  04160414 F917E36D 797DBCE9 36F29039 A6FE0EDD 7341A5A1 300D0609 2A864886
  68767868 04050003 81810039 ECDCBAA7 0D299A4F 92E19740 8AFADAEC 3A8DF5CB
  114ADE4B 8A03406F A6F548
  quit
username admin privilege 15 secret 5 $398749885ivkhjkt87ed.
username cisco password 7 0546465465480500701E1D
!
!
!
crypto isakmp policy 1
 encr 3des
 authentication pre-share
 group 2
!
crypto isakmp client configuration group remote-clients
 key megakey123
 dns 192.168.1.10
 domain domain.local
 pool POOL_1
 acl 100
crypto isakmp profile ike-profile-1
   match identity group remote-clients
   client authentication list vpn_xauth_1
   isakmp authorization list vpn_group_1
   client configuration address respond
   virtual-template 1
!
!
crypto ipsec transform-set transform-1 esp-3des esp-sha-hmac
!
crypto ipsec profile Cisco_Profile1
 set transform-set transform-1
 set isakmp-profile ike-profile-1
!
!
interface GigabitEthernet0/0
 ip address 192.168.1.1 255.255.0.0
 ip nat inside
 ip virtual-reassembly
 duplex auto
 speed auto
 no cdp enable
!
interface GigabitEthernet0/1
 ip address xxx.xxx.xx1.xx1 255.255.255.248
 ip nat outside
 ip virtual-reassembly
 duplex auto
 speed auto
 no cdp enable
!
interface Virtual-Template1 type tunnel
 ip unnumbered GigabitEthernet0/1
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile Cisco_Profile1
!
ip local pool POOL_1 192.168.7.1 192.168.7.100
ip route 0.0.0.0 0.0.0.0 xxx.xxx.xx1.xx2
!
!
ip http server
ip http secure-server
ip nat inside source list 10 interface GigabitEthernet0/1 overload
!
access-list 10 permit 192.168.0.0 0.0.255.255
access-list 23 permit 192.168.0.0 0.0.255.255
access-list 100 permit ip 192.168.0.0 0.0.255.255 any
no cdp run
!
control-plane
!

line con 0
 exec-timeout 0 0
line aux 0
line vty 0 4
 access-class 23 in
 exec-timeout 120 0
 privilege level 15
 logging synchronous
 transport input ssh
!
scheduler allocate 20000 1000
ntp clock-period 17180118
ntp update-calendar
ntp server 62.76.96.10 source GigabitEthernet0/1
ntp server 193.124.4.177 source GigabitEthernet0/1 prefer
ntp server 80.90.180.140 source GigabitEthernet0/1
!
end


UPD: Ну и добавлю небольшое видео с демонстрацией работы всего описанного выше.

image Click to view

информационная безопасность, cisco, IT'шное

Previous post Next post
Up