Multi-Factor Authentication (MFA/2FA) for Cisco AnyConnect

Описание конфигурации тестового стенда

Данная инструкция содержит информацию, которая поможет вам настроить Cisco ASA для совместного использования средств удаленного доступа и сервиса двухфакторной аутентификации vhod-v-lichnyj-kabinet.ru.

В качестве средств удаленного доступа рассматривается использование клиента Cisco AnyConnect, IPSec VPN с помощью сторонних клиентов (Shrew) и IPSec поверх L2TP.

В зависимости от версии ASA, настройки могут отличаться. При написании данной статьи использовалась Cisco ASA версии 9.6.

Ниже представлена диаграмма, соответствующая тестовому стенду:

Базовая настройка ASA

На данном этапе необходимо произвести базовую настройку устройства, которое предполагается использовать в качестве VPN-сервера. Базовая настройка устройства остается неизменной для всех типов удаленного доступа, какой бы из них вы ни выбрали.

В базовую настройку включается:

  1. Конфигурирование и активация интерфейсов устройства. Пример:
  2. !Интерфейс внутренней сети:
    interface GigabitEthernet0/0
    nameif inside
    security-level 100
    ip address 192.168.10.1 255.255.255.0

    !Интерфейс внешней сети:
    interface GigabitEthernet0/1
    nameif outside
    security-level 0
    ip address 10.212.254.2 255.255.255.248

  3. Создание пула адресов для удаленных клиентов. Пример:
  4. ip local pool REMOTE 192.168.20.1-192.168.20.20 mask 255.255.255.0

  5. Определение объектов, соответствующих используемым сетевым сегментам. Пример:
  6. !Объект для внутренней сети:
    object network INSIDE-HOSTS
    subnet 192.168.10.0 255.255.255.0

    !Объект для удаленной сети:
    object network VPN-HOSTS
    subnet 192.168.20.0 255.255.255.0

  7. Конфигурирование NAT.
  8. Необходимо настроить трансляцию IP-адресов локальной сети в сторону Интернет, а также отключить NAT между пулами локальной сети и сети удаленных клиентов.

    Пример:
    object network NAT
    subnet 192.168.10.0 255.255.255.0
    nat (inside,outside) dynamic interface
    nat (inside,outside) source static INSIDE-HOSTS INSIDE-HOSTS destination static VPN-HOSTS VPN-HOSTS

Конфигурирование ACL:

На данном этапе необходимо явно описать сетевые взаимодействия по которым удаленные клиенты будут получать доступ подключаясь с помощью anyconnect либо иных клиентских приложений.

Для конфигураций, предусматривающих использование IPSec, необходимо также разрешить использование соответствующих портов.

Настройки ACL для ASA для различных типов удаленного доступа приведены ниже:

AnyConnectL2TP/IPSecShrew и другие сторонние IPSec-клиенты
!Доступ для удаленных пользователей к внутренней сети:
access-list split_vpn extended permit ip object INSIDE-HOSTS object VPN-HOSTS

access-group outside in interface outside

!Открытие доступа для протоколов IPSec на внешнем интерфейсе:
access-list outside extended permit udp any host 10.212.254.2 eq isakmp

access-list outside extended permit udp any host 10.212.254.2 eq 4500

access-list outside extended permit esp any host 10.212.254.2

access-group outside in interface outside

!Открытие доступа для протоколов IPSec на внешнем интерфейсе:
access-list outside extended permit udp any host 10.212.254.2 eq isakmp

access-list outside extended permit udp any host 10.212.254.2 eq 4500

access-list outside extended permit esp any host 10.212.254.2

access-group outside in interface outside

!Доступ для удаленных пользователей к внутренней сети:
access-list RVPN-ALLOWED extended permit ip object VPN-HOSTS object INSIDE-HOSTS
!Доступ для удаленных пользователей к внутренней сети:
access-list RVPN-ALLOWED extended permit ip object VPN-HOSTS object INSIDE-HOSTS
!указываем какой трафик туннелировать:
access-list RVPN-SPLITT standard permit 192.168.10.0 255.255.255.0
!указываем какой трафик туннелировать:
access-list RVPN-SPLITT standard permit 192.168.10.0 255.255.255.0

Test 2FA for Cisco AnyConnect Login

With the help of this guide you will be able to configure Two-Factor Authentication (2FA/MFA) for Cisco AnyConnect VPN Client Login.

Ad freeradius google authenticator. установка с нуля для cisco anyconnect и не только

Итак, у нас встала задача включить двухфакторную аутентификацию для Cisco AnyconnectVPN и некоторых других пакетов. Общими у всех задач есть одно – они умеют аутентифицироваться в Radius.

Существует большое количество платных решений (например Cisco DUO), но – платное не значит лучше и зачем платить больше?

Да, критики скажут — это очередная статья как натянуть сову на глобус или как подружить FreeRadius, MS Acitve Directory и Google Authenticator. Но есть нюансы, которые я хочу показать.

Во-первых. Мне нужно несколько типов аутентификации. Я это реализую нестандартными настройками FreeRadius и получу на трех разных портах одного сервера три типа аутентификации:

  1. ADlogin, ADPasswordGoogleAuth (логин из AD, паролем выступает склееная фраза из пароля в AD и цифр от GoogleAuth )
  2. ADlogin, ADPassword (стандартный вариант логина и пароля от AD, по сути чисто технический вариант, но нужен для Anyconnect)
  3. ADLogin, GoogleAuth ( логин из AD, пароль цифры GoogleAuth. Так сказать GoogleAuthenticator в чистом виде)

Во-вторых.

Используя модуль shellinabox предоставляем возможность клиенту создать себе GoogleAuth токен самостоятельно, при этом не понижая уровня безопасности системы. Возможно не самое красивое решение – но 100% работающее.

И в-третьих. Мне так и не удалось победить проблему: когда истекает время жизни пароля в AD, FreeRadius перестает считать его валидным и пробрасывает дальше ошибку. Т.е перестает предлагать сменить пароль в такой ситуации. Решение shellinabox позволяет решить эту проблему, предлагая пользователю в такой ситуации зайти на URL shellinabox.

Все проверено на Centos7, но без особых изменений зайдет на любом RedHat дистрибутиве и с непринципиальными модификациями на Ubuntu и FreeBSD. Другие дистрибуты не проверял, но общий смысл обязан сохранится.

1) Включаем NTP – если не включено. Можно заменить любой аналогичной службой, важно чтобы время было синхронизировано корректно.

a) Установка

#yum install ntp

b) Включение на старте и сразу запуск

#systemctl enable –now ntpd

c) Проверка

#ntpq –p

2)

Включаем Linux в AD.

Я предпочитаю SSSD.

a) Установка

#yum install –y sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python

Здесь есть один момент. Возможно спецы меня поправят и часть пакетов лишняя именно для этой задачи, но я предпочитаю стандартизацию и именно такой набор работает у меня везде.

b) собственно ввод в домен

#realm join my.domen --user=имя-пользователя-домена

c) проверка

#realm list

Должно вывести нечто подобное:

my.domen
  type: kerberos
  realm-name: MY.DOMEN
  domain-name: my.domen
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: oddjob
  required-package: oddjob-mkhomedir
  required-package: sssd
  required-package: adcli
  required-package: samba-common-tools
  login-formats: %U
  login-policy: allow-permitted-logins
  permitted-logins:

d) редактируем

/etc/sssd/sssd.conf

для ограничения по AD группам, которым можно ходить на эту машину. Читай – аутентифицироваться в AD с этой машины.

use_fully_qualified_names = False
simple_allow_groups = [email protected], [email protected]
ad_gpo_ignore_unreadable = True

первая группа

[email protected]

, члены которой могут администрировать систему, вторая —

[email protected]

– это те кто потом будет ходить в VPN.

e) Запускаем sssd

#chown root.root /etc/sssd/sssd.conf&&chmod 600 /etc/sssd/sssd.conf
#systemctl restart sssd

Убеждаемся что sssd работает корректно:

#id  имя-пользователя-домена

Должно вывести список групп AD в которые входит пользователь домена «имя-пользователя-домена»

f) Разрешаем админам sudo

#echo "%[email protected] ALL=(ALL) ALL" > /etc/sudoers.d/sudoadmin
#chown root.root /etc/sudoers.d/sudoadmin&&chmod 600 /etc/sudoers.d/sudoadmin

g) Выключаем root для ssh, разрешаем ssh только членам группы

[email protected]

.

Редактируем /etc/ssh/sshd_config, изменив или добавив строки ниже. ВАЖНО! Тут и дальше имена групп нужно использовать только в нижнем регистре.

PermitRootLogin no
AllowGroups  grouplinuxadmins

И перезапускаем sshd

#systemctl restart sshd

3)

Установка FreeRadius

a) Собственно установка

#yum -y install freeradius freeradius-utils
#ln -s /etc/raddb/mods-available/pam /etc/raddb/mods-enabled/pam

b) Редактируем

/etc/raddb/sites-enabled/default

:

Находим в разделе authenticate строку вида

# pam

и убираем комментарий в начале строки ( символ # )

c) Редактируем

/etc/raddb/sites-enabled/users

:

добавляем строку

DEFAULT Auth-Type := PAM

d) Собственно базовый радиус установлен. Только для

localhost

но уже можем проверять.

Парольное слово в Radius для localhost по умолчанию: testing123

# radtest userVPN ‘password_for_userVPN’ localhost 0 testing123

Правильный ответ будет если в конце ответа

Received Access-Accept

При неправильном пароле (тоже стоит обязательно проверить).

В конце ответа будет

Received Access-Reject

и дальше

(0)	-: Expected Access-Accept got Access-Reject

e) Добавляем систему, которой можно обращаться к Radius, т.е устройство, которое будет организовывать Cisco Anyconnect VPN. У меня это Cisco Firepower. Пусть у него будет IP 10.10.10.5.

Добавляем в файл /etc/raddb/clients.conf

client ftd {
  ipaddr = 10.10.10.5
  secret = secretFTD
}

f) Редактируем

/etc/raddb/radiusd.conf

. данная настройка нужна для того, чтобы Google Authenticator мог проверить файл $HOME/.google_authenticator для всех пользователей.

находим

user = radiusd
group = radiusd

и меняем на

user = root
group = root

И включаем радиус со стартом

#systemctl enable --now radiusd

g) Radius установлен. Если при установке FreeRadius что-то идет не так, очень полезная возможность консольной работы с FreeRadius. Для этого стопаем службу и запускаем Radius в консольном режиме с debug

#systemctl stop radius
#radiusd -Xx

4)

Ставим Google Autenticator

a) К сожалению, я не знаю как подружить Google Authenticator и selinux. Поэтому отключаем.

Файл

/etc/selinux/config

меняем:

SELINUX=enforcing

на

SELINUX=permissive

После чего

#setenforce 0

а лучше вообще перезагрузить машину

b)

#yum install –y epel-release
#yum install –y google-authenticator

5) Модифицируем FreeRadius для 3 типов аутентификации

a) Редактируем /etc/raddb/mods-enabled/pam, добавляя строки

pam radius11812{
  pam_auth = radiusd_ad
}

pam radius21812{
  pam_auth = radiusd_ga
}

b) В папке

/etc/pam.d

копируем ‘pam’ настройки для разных типов аутентификации

Для «просто в AD» берем системную

#ln –s /etc/pam.d/password-auth-ac /etc/pam.d/radiusd_ad

Для просто GoogleAuth пишем самостоятельно в

/etc/pam.d/radiusd_ga

#%PAM-1.0
#
auth		required	pam_google_authenticator.so nullok
auth		required	pam_permit.so
account		required	pam_nologin.so
account    	include		password-auth
password   	include		password-auth
session    	include		password-auth

!!! очень важный момент

. При такой конфигурации если отсутствует привязка пользователя в профиле к GoogleAuth то такой пользователь считается валидным. Если нужно без ввода цифр GoogleAuth не пускать вообще, не зависимо от привязки, то нужно в первой строке убрать nullok а вторую строку убрать вообще.

c) Копируем /etc/raddb/sites-enabled/default для двух дополнительных портов

# cp /etc/raddb/sites-enabled/default /etc/raddb/sites-enabled/radius11812
# cp /etc/raddb/sites-enabled/default /etc/raddb/sites-enabled/radius21812

d) Редактируем /etc/raddb/sites-enabled/radius11812
Меняем имя

server default

на

server radius11812

Находим в секции listen

type = auth
port  = 0 

меняем на

type = auth
port  = 11812 

Находим в следующей секции listen

type = acct
port  = 0 

меняем на

type = acct
port  = 11812 

Остальные секции listen я рекомендую удалить. Если конечно вы не планируете работать с IP v6

Находим в разделе authenticate строку вида

pam

и заменяем на

Auth-Type pam {
radius11812
	}

e) Аналогично

/etc/raddb/sites-enabled/radius21812

Находим в разделе authenticate строку вида

pam

и заменяем на

Auth-Type pam {
Radius21812
		}

6)

Устанавливаем shellinabox

a)

#yum install –y shellinabox	
#yum enable –now shellinabox

b) В принципе этого достаточно. Но некоторые любят красоту ;). Тогда дополнительно ставим еще figlet, и шрифт rebel.tlf ( взять с репозитория https://github.com/xero/figlet-fonts и положить в /usr/share/figlet ).

c) Добавляем вызов логики генерации GoogleAuth токена для всех пользователей

#echo ‘. /usr/local/etc/radius_user_profiles.sh’ >> /etc/skel/.bash_profile

d) Создаем

/usr/local/etc/radius_user_profiles.sh

( то вариант с украшательствами)

#!/bin/bash

# Set groups for vpn, etc. 
#
#   !!! Names of groups without caps letters !!!
#
VPNissuer="MyCompany"
GROUP_VPN="groupusevpn"

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
# Make several commands available from user shell
# for group VPN that use 2FA Google authenticator

if [[ -n $(id $USER | grep $GROUP_VPN) ]]
  then 
    clear

    [[ ! -d $HOME/bin ]] && mkdir $HOME/bin
    [[ ! -f $HOME/bin/id ]] && ln -s /usr/bin/id $HOME/bin/id
    [[ ! -f $HOME/bin/google-auth ]] && ln -s /usr/bin/google-authenticator $HOME/bin/google-auth
    [[ ! -f $HOME/bin/grep ]] && ln -s /usr/bin/grep $HOME/bin/grep
    [[ ! -f $HOME/bin/figlet ]] && ln -s /usr/bin/figlet $HOME/bin/figlet
    [[ ! -f $HOME/bin/rebel.tlf ]] && ln -s /usr/share/figlet/rebel.tlf $HOME/bin/rebel.tlf
    [[ ! -f $HOME/bin/sleep ]] && ln -s /usr/bin/sleep $HOME/bin/sleep
  # Set PATH env to <home user directory>/bin
    PATH=$HOME/bin
    export PATH

    if [[ ! -e $HOME/.google_authenticator ]]
      then
        figlet -t -c -f $HOME/bin/rebel.tlf "Welcome to $VPNissuer GAuth setup portal"
        sleep 1.5
        echo "Please, run Google Authenticator to setup OTP and prepare to scan QR code.

If you don't have, please download that from market:

AppStore    - https://apps.apple.com/us/app/google-authenticator/id388497605
Play Market - https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en

"
        sleep 1.5
        google-auth -f -t -w 3 -r 3 -R 30 -d -e 1 -l "$VPNissuer" -i "$USER"
        echo "Congratulations, now you can use an OTP token from application as a password to VPN."
        logout
    else
        echo "You have already setup a Google Authenticator
        "
        logout
    fi
fi

e) Устанавливаем разрешения на выполнение всем.

#chmod 755  /usr/local/etc/radius_user_profiles.sh

f) Можно файлы типа .google_authenticator вынести в отдельный каталог (по-умолчанию это файлы $HOME/.google_authenticator). Увеличивает ли это безопасность системы? Нет, а удобство — дело привычки. Для этого надо сделать несколько шагов:

7)

Теперь самое интересное.

Shellinabox это по-сути графическая web оболочка для шелла. Для того, чтоб не нарушить безопасность системы делаем отдельный sshd c ограничением по группе AD на нестандартном порту и направляем shellinabox на этот порт. Стандартный 22 остается для администраторов и снаружи недоступен.

a) Копируем systemd service скрипт и конфиг sshd:

#cp /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd_web.service
#cp /etc/ssh/sshd/sshd_config /etc/ssh/sshd_web_config

b) Редактируем /usr/lib/systemd/system/sshd_web.service заменяя строку

ExecStart=/usr/sbin/sshd -D $OPTIONS

на

ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd_web_config $OPTIONS

c) Редактируем

/etc/ssh/sshd_web_config

добавляя или исправляя параметры:

port 2022
MaxAuthTries 3
MaxSessions  1
AllowGroups	groupusevpn

Таким образом мы запускаем дополнительный шелл sshd на порту 2022 не открывая его на firewall т.к обращения к нему исключительно по интерфейсу local.

d) Редактируем /etc/sysconfig/shellinaboxd изменив параметр на

OPTS=" -s /:SSH:localhost:2022"

e) В папке

/var/lib/shellinabox

по умолчанию лежат самосгенеренные и самоподписанные сертификаты shellinabox. Лично у себя я установил дополнительно nginx в который внес реальные сертификаты ssl, вынеся shellinabox на порт 8443 ( любой нестандартный )

#yum install –y nginx

Конфигурация для nginx:

server {
    listen      443 ssl;
    server_name shellinabox.my.domen;

    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;

    set $upstream https://localhost:8443;

    proxy_intercept_errors on;
    underscores_in_headers on;

    location ~ ^/(.*) {
proxy_pass  $upstream$request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    }

    ssl_certificate		/etc/ssl/fullchain.pem;
    ssl_certificate_key	/etc/ssl/ privkey.pem;
    ssl_protocols 		TLSv1.2;
    ssl_dhparam		/etc/ssl/ssl-dhparams.pem;
}

и в

/etc/sysconfig/shellinaboxd

меняем

PORT=8443

f) Перезапускаем после всех изменений.

#systemctl daemon-reload
#systemctl enable –now sshd_web
#systemctl enable –now shellinabox

Если ставили nginx то

#systemctl enable –now nginx

g) Открываем порты firewalld

firewall-cmd --new-zone=radius –permanent
firewall-cmd --zone=radius --add-source=10.10.10.5 --permanent
firewall-cmd --zone=radius --add-port=1812/udp --permanent
firewall-cmd --zone=radius --add-port=11812/udp --permanent
firewall-cmd --zone=radius --add-port=21812/udp --permanent
firewall-cmd --reload

8)

Тестируем весь конструктор.

a) Заходим на shellinabox.my.domen
b) Логинимся пользователем VPN и получаем QR-код для GoogleAuth
c) Ставим на смартфон GoogleAuthenticator и сканим им QR-код.
d)

#radtest userVPN ‘password_for_userVPNXXXXXX’ localhost 0 testing123

где XXXXXX – цифры с GoogleAuthenticator. Результат должен быть Received Access-Accept

e)

#radtest userVPN ‘password_for_userVPN’ localhost:11812 0 testing123

Результат должен быть Received Access-Accept

f)

#radtest userVPN ‘XXXXXX’ localhost:21812 0 testing123 

где XXXXXX – цифры с GoogleAuthenticator. Результат должен быть Received Access-Accept

9) Собственно VPN
a) Если все предыдущие этапы прошли успешно то прописываем сервер типа Radius c IP и портом 11812/UDP как первый фактор в CISCO AnyconnectVPN и его же с портом 21812/UDP как второй фактор.

Multi-Factor Authentication (MFA/2FA) for Cisco AnyConnect

Multi-Factor Authentication (MFA/2FA) for Cisco AnyConnect

Multi-Factor Authentication (MFA/2FA) for Cisco AnyConnect

Multi-Factor Authentication (MFA/2FA) for Cisco AnyConnect

b) Деплоим конфигурацию и проверяем.

Как понятно из процесса тестирования, те системы, которые не умеют отдельно спрашивать первый и второй фактор ( или мы не хотим факторы разделять специально) мы направляем на порт Radius 1812 и используем схему “пароль_AD”XXXXXX добавляя цифры с Google Authenticator сразу после пароля без пробела.

Незакрытые вопросы:

P.S. В статье использовались материалы

https://habr.com/ru/post/516362

, откуда взята идея shellinabox.

Загрузка anyconnect-пакета на устройство

Данный шаг необходим только при настройке удаленного доступа с помощью AnyConnect.

Настройка cisco asa

На ASA лучше настроить AnyConnect VPN gateway с локальной аутентификацией. Убедиться, что подключение работает, после чего приступить к настройке аутентификации через Radius.

Настраиваем RADIUS:

Настройка freeradius

Так как FreeRadius должен иметь доступ к .google_authenticator токенам во всех пользовательских директориях, он должен иметь права root-а. Для предоставления прав редактируем файл /etc/freeradius/radusd.conf.

Находим строки:

Настройка tunnel-group и привязка к групповой политике

На финальном шаге следует определить “tunnel-group” и привязать ее к групповой политике.

Настройки “tunnel-groups” для различных типов удаленного доступа приведены ниже:

AnyConnectL2TP/IPSecShrew и другие сторонние IPSec-клиенты
!Настройка tunnel-group и привязка к групповой политике:
tunnel-group ANYCONNECT type remote-access

tunnel-group ANYCONNECT general-attributes

address-pool REMOTE

authentication-server-group AUTHAS

authentication-server-group (outside) AUTHAS default-group-policy Default

tunnel-group ANYCONNECT webvpn-attributes

!Windows L2TP клиент не имеет опции определения туннельной группы, поэтому используем дефолтную туннельную группу DefaultRAGroup:
tunnel-group DefaultRAGroup general-attributes

address-pool REMOTE

authentication-server-group (outside) AUTHAS

default-group-policy HOSTS_L2TP

tunnel-group DefaultRAGroup ipsec-attributes

ikev1 pre-shared-key cisco

tunnel-group DefaultRAGroup ppp-attributes

authentication pap

!Настройка tunnel-group и привязка к групповой политике:
tunnel-group RVPN type remote-access

tunnel-group RVPN general-attributes

authentication-server-group AUTHAS

authentication-server-group (outside) AUTHAS

default-group-policy RVPN

tunnel-group RVPN ipsec-attributes

ikev1 pre-shared-key 0987654321

!Название группы в окне пользователя:
group-alias ANYCONNECT enable

Настройка групповой политики

На данном шаге нужно определить групповую политику для удаленных пользователей. Особое внимание нужно уделить команде “vpn-tunnel-protocol”, указывающая, какой тип шифрования будет использован для клиентов, а также “split-tunnel-network-list”, которая указывает, что трафик будет шифроваться в том случае, если он будет соответствовать параметрам, указанным в acl “split_vpn”.

В разделе “group-policy” также возможна конфигурация дополнительных параметров, которые будут передаваться клиенту, например, адреса DNS, WINS и т.д.

Настройки групповых политик для различных типов удаленного доступа приведены ниже:

AnyConnectL2TP/IPSecShrew и другие сторонние IPSec-клиенты
!Настройка групповой политики:
group-policy Default internal

group-policy Default attributes

vpn-tunnel-protocol ssl-client ssl-clientless

split-tunnel-policy tunnelspecified

!Настройка групповой политики:
group-policy HOSTS_L2TP internal

group-policy HOSTS_L2TP attributes

vpn-tunnel-protocol l2tp-ipsec

!Настройка групповой политики:
group-policy RVPN internal

group-policy RVPN attributes

!Указываем какой трафик попадет в туннель:
split-tunnel-network-list value split_vpn

address-pools value REMOTE

!Доступ только к внутренней сети:
vpn-filter value RVPN-ALLOWED
!Доступ только к внутренней сети:
vpn-filter value RVPN-ALLOWED

vpn-tunnel-protocol ikev1

!Туннелировать только трафик указанный в ACL:
split-tunnel-policy tunnelspecified
!Туннелировать только трафик указанный в ACL:
split-tunnel-policy tunnelspecified
!Указываем какой трафик попадет в туннель:
split-tunnel-network-list value RVPN-SPLITT

address-pools value REMOTE

!Указываем какой трафик попадет в туннель:
split-tunnel-network-list value RVPN-SPLITT

address-pools value REMOTE

Настройка клиента – anyconnect

1. Установите и запустите Cisco AnyConnect Secure Mobility Client. Введите адрес или имя вашего VPN-шлюза в поле для ввода и нажмите кнопку “Connect”:

2. В случае, если для аутентификации шлюза вы используете самоподписанный сертификат, вам будет выведено информационное сообщение:

Настройка клиента – ipsec/l2tp

1. Откройте центр управления сетями и общим доступом.

2. Выберите “Настройка нового подключения или сети”:

3. В появившемся окне выберите “Подключение к рабочему месту” -> “Использовать мое текущее подключение (VPN)”.

4. Введите параметры подключения. Обратите внимание, что производить подключение после настройки не следует, так как необходимо будет задать PSK, использующийся для установки IPSec-соединения. Вводить имя пользователя и пароль не нужно.

5. Откройте список ваших сетевых подключений и откройте свойства созданного подключения:

Во вкладке “Безопасность” нужно установить тип VPN так, как это показано на рисунке, а также задать ключ, используемый для подключения, в меню, вызвать которое можно нажатием кнопки “Дополнительные” параметры.

Так как аутентификация пользователя требует передачи RADIUS-серверу пароля пользователя, то необходимо установить PAP в качестве используемого протокола аутентификации и снять выделение со всех других пунктов:

Настройка параметров криптографии

Конфигурация устройства ASA на данном этапе существенно различается в зависимости от выбранного способа организации удаленного доступа.

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

В ином случае, нужно произвести настройки IPSec на ASA. Настройки криптографии для различных типов удаленного доступа приведены ниже:

AnyConnectL2TP/IPSecShrew и другие сторонние IPSec-клиенты
!Генерируем RSA ключи:
crypto key generate rsa label AnyConnect-KeyPair
!Выбор политики шифрования (параметры защиты данных, передаваемых в туннеле фаза 2):
crypto ipsec ikev1 transform-set 3DES_SHA esp-3des esp-sha-hmac
!Выбор политики шифрования (параметры защиты данных передаваемых в туннеле фаза 2):
crypto ipsec ikev1 transform-set 3DES_md5 esp-3des esp-md5-hmac
!Настройка самостоятельно выпускаемого сертификата:
crypto ca trustpoint AnyConnect_Trustpoint

enrollment self

subject-name CN=ASA-AnyConnect

keypair AnyConnect-KeyPair

proxy-ldc-issuer

crl configure

crypto ca enroll localtrust noconfirm

crypto ca certificate chain AnyConnect_Trustpoint

certificate ef9a8059
....
quit

!По умолчанию используется туннельный режим, Windows клиенты L2TP используют транспортный режим IPSec:
crypto ipsec ikev1 transform-set 3DES_SHA mode transport
!Применение transform-set к динамической crypto map:
crypto dynamic-map RVPN 10 set ikev1 transform-set 3DES_md5
!Привязываем trust-point для ssl соединений на внешний интерфейс:
ssl trust-point AnyConnect_Trustpoint outside
!Применение transform-set к динамической crypto map:
crypto dynamic-map L2TP 10 set ikev1 transform-set 3DES_SHA
!Настройка вставки обратного статического маршрута к адресу выданному клиенту (RRI):
crypto dynamic-map RVPN 10 set reverse-route
!Применение динамической crypto map к статической (динамическая карта не может быть напрямую привязана к интерфейсу):
crypto map L2TP 10 ipsec-isakmp dynamic L2TP
!Применение динамической crypto map к статической (динамическая карта не может быть напрямую привязана к интерфейсу):
crypto map vpn 20 ipsec-isakmp dynamic RVPN
!Применение crypto map к интерфейсу:
crypto map L2TP interface outside
! Применение crypto map к интерфейсу:
crypto map vpn interface outside
!Создание политики шифрования для фазы 1:
crypto isakmp identity address

crypto ikev1 enable outside

crypto ikev1 policy 20

authentication pre-share

encryption 3des

hash sha

group 2

lifetime 86400

!Создание политики шифрования для фазы 1:
crypto isakmp identity address

crypto ikev1 enable outside

crypto ikev1 policy 10

authentication pre-share

encryption 3des

hash md5

group 2

lifetime 86400

Настройка пользователя

Создаем пользователя:

Опредение radius-серверов vhod-v-lichnyj-kabinet.ru

На данном шаге необходимо определить используемые для аутентификации RADIUS-сервера сервиса vhod-v-lichnyj-kabinet.ru.

Для авторизации пользователей посредством RADIUS сервис vhod-v-lichnyj-kabinet.ru использует порт UDP/1812, что требуется явно указать при настройке “aaa-server” на устройстве. Также в конфигурации aaa-server необходимо указать ключ (PSK), который будет использоваться при совершении RADIUS-запросов к серверам. Задать или узнать установленный ключ можно в системе vhod-v-lichnyj-kabinet.ru.

При необходимости указания группы серверов, следует поочередно определить их с помощью команды aaa-server AUTHAS (interface) host “ip”

Пример:aaa-server AUTHAS protocol radiusaaa-server AUTHAS (outside) host 10.213.56.3key 6N4q93toauthentication-port 1812accounting-port 1813

Установка компонентов

Для установки FreeRaduis в данном случае используется Debian Jessie 8.0 на виртуальной машине.

Ввиду того, что для авторизации будет использоваться TOTP, время на сервере должно быть правильным. Лучший способ синхронизировать время – установка NTP.

sudo apt-get update
sudo apt-get install ntp

Далее устанавливаем FreeRadius и необходимые модули:

sudo apt-get install build-essential libpam0g-dev freeradius libqrencode3 git

Загружаем и устанавливаем Google Authenticator:

Похожее:  Кроссдоменная авторизация: часть 1 | Через терни к звездам

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *