Автор: Сгибнев Михаил
С момента опубликования прошлой статьи, посвященной этой теме прошло уже много времени — изменились технологии, вышли новые версии ПО, но задача обеспечения пользователей безопасным, надежным и удобным инструментом удаленного доступа не исчезла. Мне понадобилось обеспечить развертывание массовой системы удаленного доступа, но при этом связываться с генерированием учетных записей, паролей и их последующим отслеживанием совершенно не хотелось. В связи с этим появилась идея использовать сертификаты — пользователь создает запрос, он рассматривается, подписывается и пользователь счастлив в период действия своего сертификата, после чего процесс повторяется.
Сразу оговорюсь, что приведенная здесь конфигурация CA неприменима в реальной жизни, хотя и позволяет организовать работу, настройка ASA выполнялась в стендовых условиях. Данный документ может помочь решить вам проблему, но не используйте его бездумно и весело!
Итак, схема нашего стенда:
Имея Cisco ASA 5505 и Windows 2008 Enterprise root CA обеспечить подключение клиентов через клиент AnyConnect с использованием сертификатов для аутентификации.
Начальная конфигурация ASA представлена ниже. Локальная сеть «предприятия» 192.168.100.0/24, СА имеет адрес 192.168.100.100, внутренний интерфейс МСЭ 192.168.100.1. СА имеет доступ к внешним сетям, сделан NAT портов TCP:80, TCP:3389. Разрешен доступ к ASDM с сети 10.200.18.0/24. MS AD установлено, но не используется.
: Saved
:
ASA Version 8.4(1)
!
hostname vpngate1
domain-name remote.example.ru
enable password XoXo encrypted
names
dns-guard
!
interface Vlan1
description --- Internal Net ---
nameif inside
security-level 100
ip address 192.168.100.1 255.255.255.0
!
interface Vlan2
description --- External Net ---
nameif outside
security-level 0
ip address dhcp setroute
!
interface Ethernet0/0
switchport access vlan 2
!
interface Ethernet0/1
shutdown
!
interface Ethernet0/2
shutdown
!
interface Ethernet0/3
shutdown
!
interface Ethernet0/4
shutdown
!
interface Ethernet0/5
shutdown
!
interface Ethernet0/6
shutdown
!
interface Ethernet0/7
!
ftp mode passive
clock timezone MSK/MSD 3
clock summer-time MSK/MDD recurring last Sun Mar 2:00 last Sun Oct 3:00
dns domain-lookup inside
dns server-group DefaultDNS
name-server 192.168.100.100
domain-name remote.example.ru
object network PKI
host 192.168.100.100
object service TCP_80
service tcp destination eq www
object service TCP_3389
service tcp destination eq 3389
object network Net_192.168.100.0
subnet 192.168.100.0 255.255.255.0
object-group icmp-type DM_INLINE_ICMP_1
icmp-object echo
icmp-object echo-reply
icmp-object traceroute
icmp-object unreachable
object-group service DM_INLINE_UDP_1 udp
port-object eq 4500
port-object eq isakmp
access-list outside_access_in extended permit tcp any object PKI eq www
access-list outside_access_in extended permit tcp any object PKI eq 3389
access-list outside_access_in extended permit tcp any interface outside eq https
access-list outside_access_in extended permit udp any interface outside object-group DM_INLINE_UDP_1
access-list outside_access_in extended permit icmp any interface outside object-group DM_INLINE_ICMP_1
access-list outside_access_in extended deny ip any any
access-list inside_access_in extended permit ip object Net_192.168.100.0 any
access-list inside_access_in extended deny ip any any
pager lines 24
mtu inside 1500
mtu outside 1500
no failover
icmp unreachable rate-limit 1 burst-size 1
icmp permit any echo inside
icmp permit any echo-reply inside
icmp permit any unreachable inside
no asdm history enable
arp timeout 14400
nat (outside,inside) source static any any destination static interface PKI service TCP_80 TCP_80 unidirectional
nat (outside,inside) source static any any destination static interface PKI service TCP_3389 TCP_3389 unidirectional
!
object network PKI
nat (any,outside) dynamic interface
access-group inside_access_in in interface inside
access-group outside_access_in in interface outside
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute
timeout tcp-proxy-reassembly 0:01:00
dynamic-access-policy-record DfltAccessPolicy
aaa authentication ssh console LOCAL
aaa authentication telnet console LOCAL
http server enable
http 192.168.100.0 255.255.255.0 inside
http 10.200.18.0 255.255.255.0 outside
no snmp-server location
no snmp-server contact
snmp-server enable traps snmp authentication linkup linkdown coldstart warmstart
telnet timeout 5
ssh timeout 5
console timeout 0
threat-detection basic-threat
threat-detection statistics access-list
no threat-detection statistics tcp-intercept
webvpn
anyconnect-essentials
username cisco password XoXo encrypted privilege 15
!
class-map inspection_default
match default-inspection-traffic
!
!
policy-map type inspect dns preset_dns_map
parameters
message-length maximum client auto
message-length maximum 512
policy-map global_policy
class inspection_default
inspect dns preset_dns_map
inspect ftp
inspect h323 h225
inspect h323 ras
inspect ip-options
inspect netbios
inspect rsh
inspect rtsp
inspect skinny
inspect esmtp
inspect sqlnet
inspect sunrpc
inspect tftp
inspect sip
inspect xdmcp
!
service-policy global_policy global
prompt hostname context
: end
Процесс получения сертификата CA на ASA незамысловат и полностью представлен на скриншотах:
Обратите внимание на то, что на СА необходимо создать копию шаблона IPSec(Offline request) и в дальнейшем работать с ним. После создания копии нам потребуется добавить в раздел Cerificate Templates шаблон Copy of IPSec(Offline request), для чего нажимаем правой кнопкой мыши на этот пункт, выбираем «New -> Cerificate Template to Issue» и в появившемся окне выбираем необходимый нам шаблон. Создание копии обусловлено добавлением новых Extension.
Обратите внимание, шаблон сделан по принципу «лишь бы работало», развертывание структуры PKI это очень серьезная и ответственная задача!
Теперь получаем сетификат для ASA:
Настраиваем AnyConnect с помощью Wizard, адреса клиентов раздаются из пула 192.168.200.0/24. В качестве сертификата устройства используем полученный с CA. В моем случае, так как на ASA есть NAT, необходимо добавть NAT Exempt для сети 192.168.200.0/24.
Создаем профиль клиента для AnyConnect. Обратите внимание на то, что для проверки сетификата можно указать много параметров, что позволит более гибко управлять доступом пользователей.
Далее, пользователю остается только зайти на СА, запросить сертификат, пользуясь шаблоном Copy of IPSec(Offline request) и, после его получения, начать работу. Повторюсь еще раз — сертификат должен выдавать только после анализа его офицером безопасности, СА не должен смотреть «в мир», как в данном, сугубо стендовом, случае.
Исходя из этого, мы сразу подхожим к основной проблеме данной схеме — необходимость обеспечения безопасной выдачи сертификатов пользователей. Самый очевидный шаг — использование eToken.
Полная конфигурация выглядит следующим образом:
: Saved
:
ASA Version 8.4(1)
!
hostname vpngate1
domain-name remote.example.ru
enable password quUKez8yLvmj.n/h encrypted
passwd 2KFQnbNIdI.2KYOU encrypted
names
dns-guard
!
interface Vlan1
description --- Internal Net ---
nameif inside
security-level 100
ip address 192.168.100.1 255.255.255.0
!
interface Vlan2
description --- External Net ---
nameif outside
security-level 0
ip address dhcp setroute
!
interface Ethernet0/0
switchport access vlan 2
!
interface Ethernet0/1
shutdown
!
interface Ethernet0/2
shutdown
!
interface Ethernet0/3
shutdown
!
interface Ethernet0/4
shutdown
!
interface Ethernet0/5
shutdown
!
interface Ethernet0/6
shutdown
!
interface Ethernet0/7
!
ftp mode passive
clock timezone MSK/MSD 3
clock summer-time MSK/MDD recurring last Sun Mar 2:00 last Sun Oct 3:00
dns domain-lookup inside
dns server-group DefaultDNS
name-server 192.168.100.100
domain-name remote.example.ru
object network PKI
host 192.168.100.100
object service TCP_80
service tcp destination eq www
object service TCP_3389
service tcp destination eq 3389
object network Net_192.168.100.0
subnet 192.168.100.0 255.255.255.0
object network NETWORK_OBJ_192.168.200.0_25
subnet 192.168.200.0 255.255.255.128
object-group icmp-type DM_INLINE_ICMP_1
icmp-object echo
icmp-object echo-reply
icmp-object traceroute
icmp-object unreachable
object-group service DM_INLINE_UDP_1 udp
port-object eq 4500
port-object eq isakmp
access-list outside_access_in extended permit tcp any object PKI eq www
access-list outside_access_in extended permit tcp any object PKI eq 3389
access-list outside_access_in extended permit tcp any interface outside eq https
access-list outside_access_in extended permit udp any interface outside object-group DM_INLINE_UDP_1
access-list outside_access_in extended permit icmp any interface outside object-group DM_INLINE_ICMP_1
access-list outside_access_in extended deny ip any any
access-list inside_access_in extended permit ip object Net_192.168.100.0 any
access-list inside_access_in extended deny ip any any
pager lines 24
mtu inside 1500
mtu outside 1500
ip local pool VPNPool 192.168.200.10-192.168.200.100 mask 255.255.255.0
no failover
icmp unreachable rate-limit 1 burst-size 1
icmp permit any echo inside
icmp permit any echo-reply inside
icmp permit any unreachable inside
no asdm history enable
arp timeout 14400
nat (outside,inside) source static any any destination static interface PKI service TCP_80 TCP_80 unidirectional
nat (outside,inside) source static any any destination static interface PKI service TCP_3389 TCP_3389 unidirectional
nat (inside,outside) source static Net_192.168.100.0 Net_192.168.100.0 destination static NETWORK_OBJ_192.168.200.0_25 NETWORK_OBJ_192.168.200.0_25
!
object network PKI
nat (any,outside) dynamic interface
access-group inside_access_in in interface inside
access-group outside_access_in in interface outside
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute
timeout tcp-proxy-reassembly 0:01:00
dynamic-access-policy-record DfltAccessPolicy
aaa authentication ssh console LOCAL
aaa authentication telnet console LOCAL
http server enable
http 192.168.100.0 255.255.255.0 inside
http 10.200.18.0 255.255.255.0 outside
no snmp-server location
no snmp-server contact
snmp-server enable traps snmp authentication linkup linkdown coldstart warmstart
crypto ca trustpoint ASDM_TrustPoint0
enrollment terminal
crl configure
crypto ca trustpoint ASDM_TrustPoint1
enrollment terminal
subject-name CN=vpngate1.remote.example.ru,O=EXAMPLE,C=RU
crl configure
crypto ca certificate chain ASDM_TrustPoint0
certificate ca 48fac8f50422038f4c8a89ce5ded6ad1
308203a5 3082028d a0030201 02021048 fac8f504 22038f4c 8a89ce5d ed6ad130
0d06092a 864886f7 0d010105 05003059 31123010 060a0992 268993f2 2c640119
16027275 31133011 060a0992 268993f2 2c640119 16037267 73311630 14060a09
quit
crypto ca certificate chain ASDM_TrustPoint1
certificate 16331c4b000000000021
3082063f 30820527 a0030201 02020a16 331c4b00 00000000 21300d06 092a8648
86f70d01 01050500 30593112 3010060a 09922689 93f22c64 01191602 72753113
3011060a 09922689 93f22c64 01191603 72677331 16301406 0a099226 8993f22c
64011916 0672656d 6f746531 16301406 03550403 130d7265 6d6f7465 2d504b49
2d434130 1e170d31 31303632 33313035 3433325a 170d3131 30373233 3130353
quit
telnet timeout 5
ssh timeout 5
console timeout 0
threat-detection basic-threat
threat-detection statistics access-list
no threat-detection statistics tcp-intercept
ssl trust-point ASDM_TrustPoint1 outside
webvpn
enable outside
anyconnect-essentials
anyconnect image disk0:/anyconnect-win-2.5.3041-k9.pkg 1
anyconnect profiles AnyConnectProfile disk0:/anyconnectprofile.xml
anyconnect enable
tunnel-group-list enable
group-policy GroupPolicy_AnyConnectVPN internal
group-policy GroupPolicy_AnyConnectVPN attributes
wins-server none
dns-server value 192.168.100.100
vpn-tunnel-protocol ssl-client
default-domain value remote.example.ru
webvpn
anyconnect mtu 1406
anyconnect ssl keepalive 20
anyconnect profiles value AnyConnectProfile type user
username cisco password ApLZHVsrcskV506W encrypted privilege 15
tunnel-group AnyConnectVPN type remote-access
tunnel-group AnyConnectVPN general-attributes
address-pool VPNPool
default-group-policy GroupPolicy_AnyConnectVPN
tunnel-group AnyConnectVPN webvpn-attributes
authentication certificate
group-alias AnyConnectVPN enable
!
class-map inspection_default
match default-inspection-traffic
!
!
policy-map type inspect dns preset_dns_map
parameters
message-length maximum client auto
message-length maximum 512
policy-map global_policy
class inspection_default
inspect dns preset_dns_map
inspect ftp
inspect h323 h225
inspect h323 ras
inspect ip-options
inspect netbios
inspect rsh
inspect rtsp
inspect skinny
inspect esmtp
inspect sqlnet
inspect sunrpc
inspect tftp
inspect sip
inspect xdmcp
!
service-policy global_policy global
prompt hostname context
Cryptochecksum:d934cdbe5b4f6e15759ed6db0f908903
: end
Процесс запроса сертификата пользователем выглядит так:
изображения не найдены
Используемая литература:
ASA/PIX 8.x and VPN Client IPSec Authentication Using Digital Certificates with Microsoft CA Configuration Example
Authenticating AnyConnect VPN client using certificates
[ad name=»Google Adsense»]
Уважайте труд автора, сохраняйте копирайты.
Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!
Если Вы заметите какие-либо ошибки или захотите меня дополнить — прошу в комментарии.!— Google Adsense —
Полная конфигурация выглядит следующим образом:
Очень заинтересовала Ваша статья. Имея опыт anyconnect с использованием сертификатов для аутентификации на Local CA cisco ASA, не совсем понимаю процедуру получения юзером своего user certificate на СА в Вашей схеме. Если Вас не затруднит, можно, пож., подробнее с предложения:
«Далее, пользователю остается только зайти на СА, запросить сертификат, пользуясь шаблоном Copy of IPSec(Offline request) и, после его получения, начать работу.»
С большим уважением, Сергей. (nikolaev_s_l@veb.ru)
Добрый день! В моем случае есть возможность подключения пользователя по логину/паролю для получения сертификата. То есть, есть учетная запись на VPN-концентраторе, позволяющая получить доступ по http только к серверу сертификатов.
Зайдя на СА (http://SERVNAME/certsrv) пользователь увидит пункт «Request a certificate». Вот именно в нем и будет возможность запонить поля и отправить запрос на сертификат. Я выложил пару картинок, показывающих этот процесс.
Дополнение: для анализа полей сертификата необходимо добавить строки конфигурации:
crypto ca certificate map MyGroupName 10
subject-name attr ou eq MyOU
!
webvpn
certificate-group-map MyGroupName 10 MyGroupName
Здравствуйте!
А существует механизм администрирования user сертификатов (изготовления под определенного user, отзыва, по аналогии с Local CA server cisco ASA)? Какой сертификат в Вашем случае получает user?
Извините за вопросы:)
С уважением, Сергей.
Сергей, добрый день!
Ну, конечно же существует, иначе для чего нужен СА? Работа с пользователями осуществляется на нём, а взаимодействие с ASA происходит с помощью CRL или OCSP (на высоконагруженных схемах). В моём случае используется сертификат, выданный центром сертификатов, а не Local CA server Cisco ASA.
Добрый день!
Я понимаю, что в Вашей схеме клиент получает user certificate с Microsoft CA, интересует механизм выработки этих сертификатов под конкретного user.
Может есть ссылка на какой-нибудь мануал, мне уже Вас неудобно спрашивать.
С большим уважением, Сергей.
Сергей, прошу прощения, много работы, не видел Ваш комментарий. Так механизм очень прост — создается template запроса на сертификат и потом все пользователи формируют сертификат согласно этому шаблону. Берется, например шаблон IPSec (offline), копируется и дополняется необходимыми параметрами.