Описание конфигурации тестового стенда
Данная инструкция содержит информацию, которая поможет вам настроить Cisco ASA для совместного использования средств удаленного доступа и сервиса двухфакторной аутентификации vhod-v-lichnyj-kabinet.ru.
В качестве средств удаленного доступа рассматривается использование клиента Cisco AnyConnect, IPSec VPN с помощью сторонних клиентов (Shrew) и IPSec поверх L2TP.
В зависимости от версии ASA, настройки могут отличаться. При написании данной статьи использовалась Cisco ASA версии 9.6.
Ниже представлена диаграмма, соответствующая тестовому стенду:
Базовая настройка ASA
На данном этапе необходимо произвести базовую настройку устройства, которое предполагается использовать в качестве VPN-сервера. Базовая настройка устройства остается неизменной для всех типов удаленного доступа, какой бы из них вы ни выбрали.
В базовую настройку включается:
- Конфигурирование и активация интерфейсов устройства. Пример:
- Создание пула адресов для удаленных клиентов. Пример:
- Определение объектов, соответствующих используемым сетевым сегментам. Пример:
- Конфигурирование NAT.
!Интерфейс внутренней сети:
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
ip local pool REMOTE 192.168.20.1-192.168.20.20 mask 255.255.255.0
!Объект для внутренней сети:
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
Необходимо настроить трансляцию 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 для различных типов удаленного доступа приведены ниже:
AnyConnect | L2TP/IPSec | Shrew и другие сторонние 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 и получу на трех разных портах одного сервера три типа аутентификации:
- ADlogin, ADPasswordGoogleAuth (логин из AD, паролем выступает склееная фраза из пароля в AD и цифр от GoogleAuth )
- ADlogin, ADPassword (стандартный вариант логина и пароля от AD, по сути чисто технический вариант, но нужен для Anyconnect)
- 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
первая группа
, члены которой могут администрировать систему, вторая —
– это те кто потом будет ходить в 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 только членам группы
.
Редактируем /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 как второй фактор.
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” для различных типов удаленного доступа приведены ниже:
AnyConnect | L2TP/IPSec | Shrew и другие сторонние 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 и т.д.
Настройки групповых политик для различных типов удаленного доступа приведены ниже:
AnyConnect | L2TP/IPSec | Shrew и другие сторонние 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. Настройки криптографии для различных типов удаленного доступа приведены ниже:
AnyConnect | L2TP/IPSec | Shrew и другие сторонние 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 | !По умолчанию используется туннельный режим, 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: