Road warrior vpn что это
Setup SSL VPN Road Warrior¶
Road Warriors are remote users who need secure access to the companies infrastructure. OPNsense uses OpenVPN for its SSL VPN Road Warrior setup and offers OTP (One Time Password) integration with standard tokens and Googles Authenticator.
Did you know that OPNsense offers two-factor authentication throughout the entire system? See for more information: Two-factor authentication
The main advantages of using SSL VPN for Road Warriors instead of IPsec are:
Easy setup on almost all mobile clients using OPNsense’s Client Configuration Export.
Fine grained access control by using multiple servers or Client Specific Overrides.
No issues with NAT without NAT-T
With this how-to we’ll show you how to configure OPNsense’s SSL VPN for road warriors and give you configuration examples for:
Two Factor Authentication (2FA)
Multi Factor Authentication ( Client Certificate + Password + OTP )
Client configuration on Windows, macOS, iOS and Android
For the sample we will use a private IP for our WAN connection. This requires us to disable the default block rule on wan to allow private traffic. To do so, go to Interfaces ‣ [WAN] and uncheck “Block private networks”. (Dont forget to save and apply)
Sample Setup¶
For the sample configuration we configure OPNsense
Company Network with Remote Client
Company Network¶
Hostname
WAN IP
LAN IP
LAN DHCP Range
SSL VPN Clients
For our example we will use two factor authentication (2FA) and multi factor authentication. So before we start with the SSL VPN configuration we will need an TOTP server and a valid signing certificate authority.
For completeness of this how-to we will also prepare a user.
Configure TOTP server¶
To configure a Time based One Time Password server go to System ‣ Access ‣ Servers and click Add in the top right corner of the form.
You can also use the quick-search to jump right into the the Access Server configuration. Try it by typing Ac… and see for yourself:
Now first change the Type to Local + Timebased One time Password Enter a Descriptive name such as TOTP VPN Access Server
For our example we leave everything else default as we will be using Google’s Authenticator and the defaults are correct for that.
When using other tokens you may need to change the Token length.
Click Save to add the new server.
Add Certificate Authority¶
The VPN server needs a certificate authority to sign client or server certificates.
To setup a new certificate authority go to System ‣ Trust ‣ Authorities and click Add in the top right corner of the form.
For our example we will use the following setting:
Descriptive name
Method
Create an internal Certificate Authority
Key length (bits)
Digest Algorithm
Lifetime (days)
Country Code
State or Province
City
Organization
Email Address
Common Name
Click Save to add the new Certificate Authority.
Create a Server Certificate¶
After creating the Authority we will also need a certificate. To create a new certificate, go to System ‣ Trust ‣ Certificates and click Add in the upper right corner of the form.
Fill in the form with (leave the rest default):
Method
Create an internal Certificate
Descriptive name
SSLVPN Server Certificate
Certificate authority
Type
Key length (bits)
Digest Algorithm
Lifetime (days)
Country Code
State or Province
City
Organization
Email Address
Common Name
SSLVPN Server Certificate
Click Save to create the certificate.
Adding a User¶
To add a new user go to System ‣ Access ‣ Users and click Add in the top right corner.
Creating a user will be done in two steps, the first one is adding a basic user with a username, password, TOTP seed and user certificate. The second step (after saving) will be to activate the generated OTP seed with a Google Authenticator compatible app.
For the first step we enter:
Username
Password (2x)
Full name
Certificate
Check “Click to create a user certificate”
OTP seed
Check “Generate new secret”
Click Save and you will be redirected to create the User Certificate. Fill in the Certificate form with the following for our example (leave anything not listed on its presented defaults):
Method
Create an internal Certificate
Descriptive Name
Leave default (Donald)
Certificate authority
Type
Key length
Digest Algorithm
Click Save and you will be redirected to the User page. Now we will activate your newly created seed with your Google Authenticator compatible app. To do so click in the Click to unhide button in the OTP QR code row and you will get a QR code to scan with your smartphone. See also: Configure 2FA TOTP & Google Authenticator
Always make sure to use the same Certificate authority as the certificate authority created earlier, as this links the clients / users to the correct openvpn server.
Adding a new SSL VPN server is relatively simple. We’ll start by adding one that uses our two factor authentication. This setup offers a good protection and it is easy to setup on the clients as each client can use the same configuration.
Go to VPN ‣ OpenVPN ‣ Servers and click Add in the top right corner of the form.
For our example will use the following settings:
The setting Hardware Crypto is not used for new systems equipped with AES-NI, when the aesni module is loaded it will be used automatically.
Description
Server Mode
Remote Access (SSL/TLS + User Auth)
Backend for authentication
TOTP VPN Access Server
Protocol
Device Mode
Interface
Local port
TLS Authentication
Leave both on enabled (checked)
Peer Certificate Revocation List
Server Certificate
SSLVPN Server Certificate (CA: SSL VPN CA)
DH Parameters Length
Encryption algorithm
AES-256-CBC (256-bit key, 128-bit block)
Auth Digest Algorithm
Hardware Crypto
No Hardware Crypto Acceleration
Certificate Depth
IPv4 Tunnel Network
IPv6 Tunnel Network
Redirect Gateway
IPv4 Local Network/s
IPv6 Local Network/s
IPv4 Remote Network/s
IPv6 Remote Network/s
Concurrent connections
Compression
Enabled with Adaptive Compression
Type-of-Service
Duplicate Connections
Disable IPv6
Dynamic IP
Address Pool
Topology
DNS Default Domain
DNS Servers
Force DNS cache update
NTP Servers
NetBIOS Options
Client Management Port
Renegotiate time
Renegotiate time is used to renegotiate data channel key after n seconds (default=3600).When using a one time password, be advised that your connection will automatically drop because your password is not valid anymore.Set to 0 to disable, remember to change your client when changed later.
Click Save to add the new server.
Use Strict User/CN Matching to force the usage of the same username as certificate CN, this prevents people from logging in using other credentials than the certificate name supplied. (e.g. fred can’t login as root)
The option Enforce local group can be used to constraint access to only users in a specific (set of) group(s)
To allow SSL VPN client connections, we should allow access to the OpenVPN server port on the WAN interface. When using multiple servers we need to open up each port.
For our configuration we only use one server, accessible on UDP port 1194.
Next we also need to allow traffic from the VPN clients to our LAN interface. For our example we will allow client to access anything on our local area network, however you may decide just to allow traffic to one or more servers.
Using the Remote Access Server dropdown you can select the server for which you want to download client files, when there are certificates connected (using the same authority) it will list all available client certificates and attached users.
macOS & Windows¶
For macOS & Windows users we recommend using Viscosity from Sparklabs (https://www.sparklabs.com/viscosity/). Viscosity is very easy to setup and use and works well on both platforms.
Go to VPN ‣ OpenVPN ‣ Client Export and select the newly created VPN server from the list. Leave everything default and Download the Viscosity type from the list of export options under Export type.
Now on your Mac or Windows PC unpack the bundle and import the Viscosity.visc file. Double clicking it should be enough to get it imported. When asked for an application to open the file with search and select Viscosity.
Some sample screenshots (macOS):
Import Configuration
Connect & login
In the password field enter your TOTP token first followed by your password.
Connected
Android¶
For Android users we recommend using OpenVPN for Android (https://play.google.com/store/apps/details?id=de.blinkt.openvpn) from Arne Schwabe.
Go to VPN ‣ OpenVPN ‣ Client Export and select the newly created VPN server from the list. Leave everything default and Download the inline File only configuration from the list of export options under Export type.
Import the hostname-udp-1194-android-config.ovpn file into OpenVPN for Android. Clicking the file should be enough to get it imported. When asked for an application to open the file with, select OpenVPN for Android.
For iOS users we recommend using OpenVPN Connect (https://itunes.apple.com/us/app/openvpn-connect/id590379981) from OpenVPN Technologies.
Go to VPN ‣ OpenVPN ‣ Client Export and select the newly created VPN server from the list. Leave everything default and Download the inline File only configuration from the list of export options under Export type.
Import the hostname-udp-1194-ios-config.ovpn file into OpenVPN Connect. Clicking the file should be enough to get it imported. When asked for an application to open the file with, select OpenVPN Connect.
For two factor authentication you need the factors username/password and a token. OPNsense supports another layer, namely a user certificate. This means that every user will be uniquely identified by the user certificate. In this case the multi factors are:
Go to VPN ‣ OpenVPN ‣ Servers and click the pencil icon next to the server we just created to change the 2FA to multi factor authentication.
Now change Server Mode to Remote Access (SSL/TLS + User Auth) and leave everything else unchanged. Click Save on the bottom of the form.
Now when you go to the client exporter, you will see that each user is listed separately. In our case we see Donald listed. Exporting and importing this configuration works exactly the same as before, the only difference is that each user requires a User certificate and therefore their own configuration.
Настройка VPN IKEv2 сервера Mikrotik
Освоить MikroTik Вы можете с помощью онлайн-куса «Настройка оборудования MikroTik». Курс основан на официальной программе MTCNA. Автор курса – официальный тренер MikroTik. Подходит и тем, кто уже давно работает с микротиками, и тем, кто еще их не держал в руках. В курс входит 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.
IKE означает «Internet Key Exchange» и чтобы было, чем обмениваться, это надо сначала настроить. В общем, весь процесс настройки VPN сервера состоит из двух частей, по большому счету: выпуск и экспорт ключей и сертификатов и настройка IPSec. Дополнительно приведен пример firewall. Итак, есть микротик, VPN IKEv2 будем «вешать» на IP адрес 1.2.3.4. Можно и по доменному имени, а можно по публичному IP-адресу, без доменного имени. Рассмотрю вариант, когда доменного имени нет.
1. Точное время
Настройка времени важна для любого VPN, поэтому сразу проверим/настроим часовой пояс и синхронизацию времени:
/system clock set time-zone-name=Europe/Moscow
/system ntp client set enabled=yes server-dns-names=0.ru.pool.ntp.org,1.ru.pool.ntp.org
2. Сертификаты и ключи
Наш микротик будет:
а) выдавать и удостоверять ключи для себя (сервер VPN) и удаленных клиентов, для чего сначала будет настроен CA («удостоверяющий центр»),
б) выполнять роль VPN-сервера.
Подумайте, как лучше называть сертификаты. Вы не сможете это потом поменять без существенных проблем, особенно, если настраиваете рабочую систему, а не для себя одного. Если по имени сертификата будет неясно, для чего он и от чего, через какое-то время может возникнуть путаница, особенно, если объектов будет много.
/certificate add name=cacert organization=»Bozza.ru» common-name=»cacert» key-size=4096 days-valid=3650 key-usage=crl-sign,key-cert-sign trusted=yes
/certificate sign cacert
Не забывайте подписывать все выпускаемые сертификаты! CA подписывает сам себя, а потом CA подписывает все остальные сертификаты!
Серверный сертификат:
/certificate add name=Mikrotik organization=»Bozza.ru» common-name=»1.2.3.4″ subject-alt-name=IP:»1.2.3.4″ key-size=4096 days-valid=3650 key-usage=tls-server
/certificate sign Mikrotik ca=»cacert»
Клиентский сертификат:
Либо по стечению обстоятельств, либо это реально такое ограчение, но при выпуске сертификата, в левой части которого (до символа @) были заглавные буквы, Windows не подключалась к серверу с ошибкой 13801 «Неприемлемые учетные данные проверки подлинности ike».
/certificate add name=»vpnuser1@1.2.3.4″ organization=»Bozza.ru» common-name=»vpnuser1@1.2.3.4″ key-size=4096 days-valid=1095 key-usage=tls-client subject-alt-name=email:vpnuser1@1.2.3.4
/certificate sign vpnuser1 ca=»cacert»
В итоге, у нас есть ключи и сертификаты «cacert» (CA, выпускает и подписывает сертификаты), «Mikrotik» (VPN сервер), «vpnuser1» (клиент).
Экспорт ключей
Для установки на клиентский компьютер/смартфон надо экспортировать сертификат и ключ клиента, защитив пакет паролем:
/certificate export-certificate vpnuser1@1.2.3.4 type=pkcs12 export-passphrase=p@ssw0rd555
и сертификат CA «cacert» (только сертификат, БЕЗ ПРИВАТНОГО КЛЮЧА!):
На картинке опечатка закралась, экспорт происходит именно cacert, а не Mikrotik.
/certificate export-certificate cacert type=pem
Скачайте из Files файлы «cert_export_cacert.crt» и «cert_export_vpnuser1@1.2.3.4.p12» на клиентский компьютер и импортируйте сертификат и закрытый ключ в Личные сертификаты (если это Windows). Сертификат «ca» надо установить в «Доверенные корневые центры сертификации».
Сертификат должен стать для клиента VPN (неважно, Mac, Win, iPhone, Android) ДОВЕРЕННЫМ! Для этого и нужно экспортировать cacert и сделать его доверенным сертификатом CA на клиенте.
На iPhone можно отправить письмо с вложенными файлами сертификатов и установить их через Профили.
3. IKE VPN
3.1) Pool:
Клиентам VPN лучше всегда давать отдельные IP-адреса, отличные от основного диапазона. Создадим пул адресов для VPN:
/ip pool add name=»ike_vpn_pool» ranges=»10.0.100.2-10.0.100.30″
3.2) Modeconfig:
/ip ipsec mode-config add name=»modeconfig_ikev2″ address-pool=»ike_vpn_pool» address-prefix-length=32 split-include=0.0.0.0/0 static-dns=10.0.100.1 system-dns=no
/ip ipsec mode-config add address-pool=»ike_vpn_pool» address-prefix-length=32 name=»modeconfig_ikev2″ split-include=192.168.88.0/24 static-dns=10.0.100.1 system-dns=no
Если клиенты после подключения к удаленной сети должны иметь возможность обращаться к ресурсам удаленной сети не по IP, а по имени (например, server.office.local, а не 192.168.88.146), то надо передать клиенту не только маршрут до сети, но и сообщить ему адрес DNS сервера, отвечающего за разрешение имен в удаленной сети:
/ip ipsec mode-config add address-pool=»ike_vpn_pool» address-prefix-length=32 name=»modeconfig_ikev2″ split-include=192.168.88.0/24 static-dns=192.168.88.1 system-dns=no
3.3) Profile:
Касается т.н. фазы 1 (Phase 1, Security Association, SA), на которой согласовываются тип аутентификации, группа Diffie-Hellman, алгоритм шифрования. SA (фазы 1) существует определенное время, в течение которого устройства должны завершить вторую фазу. Если не успевают, то повторяется фаза 1.
/ip ipsec profile add name=»profile_ikev2″ dh-group=modp1024,modp1536,modp2048 enc-algorithm=aes-128,aes-192,aes-256 hash-algorithm=sha256 nat-traversal=yes proposal-check=obey
3.4) Peer (кого и куда принимаем):
/ip ipsec peer add name=»peer_ikev2″ exchange-mode=ike2 address=0.0.0.0/0 local-address=1.2.3.4 passive=yes send-initial-contact=yes profile=»profile_ikev2″
3.5) Proposal:
/ip ipsec proposal add name=»proposal_ikev2″ auth-algorithms=sha1,sha256,sha512 enc-algorithms=aes-128-cbc,aes-128-ctr,aes-128-gcm,aes-192-ctr,aes-192-gcm,aes-256-cbc,aes-256-ctr,aes-256-gcm lifetime=1h pfs-group=none
Относится к так называемой второй фазе (Phase 2, IPSec SA), когда устанавливается, как будет проходить шифрование и аутентификация (проверка, что получены именно те данные, которые были отправлены) данных, а также частота обновления ключей. По-умолчанию, ключи обновляются каждые 8 часов (это время можно менять параметром lifetime).
3.6) Policy group:
/ip ipsec policy group add name=group_ikev2
3.7) Policy:
/ip ipsec policy add src-address=0.0.0.0/0 dst-address=10.0.100.0/24 protocol=all template=yes group=»group_ikev2″ action=encrypt ipsec-protocols=esp proposal=»proposal_ikev2″
Внимательно и аккуратно выбирайте параметры. Для сертификата «vpnuser1@1.2.3.4» указывается Remote ID «vpnuser1@1.2.3.4» и проверка того, имеет ли право удаленный пользователь подключиться или нет, будет происходить на основании данных из сертификата:
/ip ipsec identity add auth-method=digital-signature certificate=Mikrotik remote-certificate=vpnuser1@1.2.3.4 generate-policy=port-strict match-by=certificate mode-config=»modeconfig_ikev2″ peer=»peer_ikev2″ policy-template-group=»group_ikev2″ remote-id=user-fqdn:vpnuser1@1.2.3.4
Дальше надо настроить firewall.
4. FIREWALL
Сферический firewall в вакууме, нужно аккуратно адаптировать эти правила в ваш firewall.
Пожалуйста, внимательно смотрите, что вы разрешаете или запрещаете в firewall. Любые сертификаты будут бессмысленны, если вы случайно разрешите input на внемнем интерфейсе.
INPUT (разрешить входящие на 500/udp И 4500/udp):
/ip firewall filter
add action=drop chain=input comment=»invalid» connection-state=invalid
add action=accept chain=input comment=»established» connection-state=established
add action=accept chain=input comment=»related» connection-state=related
add action=accept chain=input connection-state=new dst-port=500 protocol=udp
add action=accept chain=input connection-state=new dst-port=4500 protocol=udp
.
add action=drop chain=input comment=»drop everything else»
ЗЫ: еще пишут в примерах, что надо разрешить протокол ipsec-esp, но я проверял 🙂 отключение ни чему не мешает, поэтому и добавлять лишнее не будем.
FORWARD:
/ip firewall filter
add action=drop chain=forward comment=»invalid» connection-state=invalid
add action=accept chain=forward comment=»established» connection-state=established
add action=accept chain=forward comment=»related» connection-state=related
add action=accept chain=forward comment=»in:ipsec» ipsec-policy=in,ipsec
add action=accept chain=forward comment=»VPN-to-LAN» dst-address=\
192.168.88.0/24 ipsec-policy=in,ipsec src-address=10.0.100.0/24
Чтобы VPN-клиенты могли выходить в интернет, настроим NAT:
/ip firewall nat
add action=src-nat chain=srcnat ipsec-policy=out,none out-interface=ether1-gateway src-address=10.0.100.0/24 to-addresses=1.2.3.4
add action=masquerade chain=srcnat comment=»default» out-interface=ether1-gateway
5. Настройка клиентов
iPhone
Передать сертификаты в iPhone можно следующими способами:
1) по email (сертификаты как вложение), открыть вложенный cacert и vpnclient1 программой Mail и установить профиль;
2) по ссылке открыть в Safari и установить профиль
3) передать по AirDrop с MacBook, к примеру.
Например, можно на компе открыть микро-веб сервер, например, с помощью Python:
и с iPhone в Safari открыть http://ip-address-компа
Обратите внимание на то, что локальный ID повторяет имя (Name, Common Name, Subject Alternative Name) клиентского сертификата.
Аутентификация пользователя происходит автоматически, на основании данных из сертификата.
MacOS
Суть процесса: открываете «Связка ключей», в ней импортируете сначала cacert (доверенный центр сертификации), а потом сертификат vpnuser1. В «Системные настройки» в пункте «Сеть» добавляете VPN подключение, тип IKEv2, поля заполняете так же как в iOS (картинка выше), выбираете сертификат и все. Готово.
Windows 7/10
Ну и настраиваете IKEv2 VPN стандартно.
В общем, все, если все верно, VPN должен подключиться. На самом деле, совсем не факт, что все сразу заработает, логи и светлая голова вам в помощь. Спрашивайте в комментариях, если что-то вызываает вопросы, может, где очепятка, а я не заметил. Но в целом материал проверен руками, не раз. Удачи!