Настройка VPN-сервера ocserv с 2FA на AlmaLinux 8
RHEL / Security Сегодня, 15:18 sobir 15 0
В этом туториале мы рассмотрим настройку двухфакторной аутентификации (2FA) с использованием приложения Google Authenticator для пользователей VPN-сервера ocserv. Предполагается, что у вас уже подготовлен сервер на базе ОС AlmaLinux 8 и настроен сервер Active Directory (AD) для аутентификации пользователей через LDAP.
1. Обновим GPG-ключ для репозиториев:
rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux
2. Выполним апдейт репозиториев:
dnf check-update
3. Установим репозиторий пакетов EPEL (Extra Packages for Enterprise Linux):
dnf install epel-release -y
4. Установим необходимые пакеты для интеграции с AD:
dnf install realmd sssd oddjob oddjob-mkhomedir adcli samba-common-tools krb5-workstation -y
5. Выполним поиск домена AD и добавим сервер в домен:
realm discover example.local
realm join example.local
6. Изменим конфигурацию файла /etc/sssd/sssd.conf на следующую:
[sssd]
domains = example.local
config_file_version = 2
services = nss, pam
[domain/example.local]
ad_site = Default-First-Site-Name
ad_domain = example.local
ad_gpo_map_remote_interactive = +ocserv
ad_gpo_access_control = disabled
krb5_realm = EXAMPLE.LOCAL
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u@%d
access_provider = ad
7. Перезапускаем службу sssd для применения изменений:
systemctl stop sssd
rm -rf /var/lib/sss/{db,mc}/*
systemctl start sssd
systemctl status sssd
8. Установим необходмые пакеты для работы VPN-сервера:
dnf install ocserv certbot google-authenticator qrencode-libs -y
9. Создадим резервную копию текущей конфигурации ocserv:
mv /etc/ocserv/ocserv.conf /etc/ocserv/ocserv.conf.bak
10. Изменим конфигурацию файла /etc/ocserv/ocserv.conf на следующую:
auth = "pam"
tcp-port = 443
udp-port = 443
run-as-user = ocserv
run-as-group = ocserv
socket-file = ocserv.sock
chroot-dir = /var/lib/ocserv
#server-cert = /etc/pki/ocserv/public/server.crt
#server-key = /etc/pki/ocserv/private/server.key
server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem
isolate-workers = true
#max-clients = 16
max-clients = 0
max-same-clients = 2
rate-limit-ms = 100
server-stats-reset-time = 604800
#keepalive = 32400
keepalive = 600
dpd = 90
mobile-dpd = 1800
switch-to-tcp-timeout = 25
try-mtu-discovery = false
cert-user-oid = 0.9.2342.19200300.100.1.1
tls-priorities = "NORMAL:%SERVER_PRECEDENCE"
auth-timeout = 240
min-reauth-time = 300
max-ban-score = 80
ban-reset-time = 1200
cookie-timeout = 300
deny-roaming = false
rekey-time = 172800
rekey-method = ssl
use-occtl = true
pid-file = /var/run/ocserv.pid
log-level = 3
device = vpns
predictable-ips = true
default-domain = example.local
ipv4-network = 192.168.100.0
ipv4-netmask = 255.255.255.0
dns = 8.8.8.8
dns = 1.1.1.1
ping-leases = false
route = 10.0.0.0/8
route = 172.16.0.0/12
route = 192.168.0.0/16
cisco-client-compat = true
dtls-legacy = true
cisco-svc-client-compat = false
client-bypass-protocol = false
camouflage = false
camouflage_secret = "mysecretkey"
camouflage_realm = "Restricted Content"
included-http-headers = Strict-Transport-Security: max-age=31536000 ; includeSubDomains
included-http-headers = X-Frame-Options: deny
included-http-headers = X-Content-Type-Options: nosniff
included-http-headers = Content-Security-Policy: default-src 'none'
included-http-headers = X-Permitted-Cross-Domain-Policies: none
included-http-headers = Referrer-Policy: no-referrer
included-http-headers = Clear-Site-Data: "cache","cookies","storage"
included-http-headers = Cross-Origin-Embedder-Policy: require-corp
included-http-headers = Cross-Origin-Opener-Policy: same-origin
included-http-headers = Cross-Origin-Resource-Policy: same-origin
included-http-headers = X-XSS-Protection: 0
included-http-headers = Pragma: no-cache
included-http-headers = Cache-control: no-store, no-cache
11. Получаем валидный SSL сертификат от Let's Encrypt:
certbot --certonly --standalone -d vpn.example.com
12. Проверим наличие ошибок в конфиге и запустим сервис:
ocserv -t
systemctl enable --now ocserv
13. Подключим модуль pam_google_authenticator для PAM:
vi /etc/pam.d/ocserv
#%PAM-1.0
auth required pam_google_authenticator.so
auth include password-auth
account required pam_nologin.so
account include password-auth
session include password-auth
14. Включаем форвардинг пакетов между интерфейсами:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
15. Теперь необходимо войти в консоль сервера с использованием доменной учетной записи и получить QR-код для приложения:
su - [email protected]
google-authenticator
Поднимаем VPN сервер OpenConnect (ocserv) в контейнере Docker с аутентификацией пользователей из Microsoft...
ПодробнееQuick setup docker and docker-compose with a simple bash script....
ПодробнееНастроим аутентификацию пользователей Jira с Active Directory....
ПодробнееQuick setup Apache Cassandra with a simple bash script....
ПодробнееАвторизация VPN-пользователей с помощью Network Policy Server (NPS) на сервере SoftEther....
ПодробнееПоднимаем мультипротокольное VPN решение для удаленного доступа — SoftEther VPN Server, а также настроим...
ПодробнееНовые комментарии
Цитата: FidoNet Цитата: sobir Цитата: FidoNet Спасибо за статью. Остальные
К комментариюЦитата: sobir Цитата: FidoNet Спасибо за статью. Остальные статьи что находил
К комментариюЦитата: FidoNet Цитата: sobir Цитата: FidoNet Можт быть дело в
К комментариюЦитата: sobir Цитата: FidoNet Можт быть дело в dnsmasq.service? Ошибка Failed
К комментариюЦитата: FidoNet Цитата: sobir Цитата: FidoNet Спасибо за статью. Остальные
К комментариюМожт быть дело в dnsmasq.service? Ошибка Failed to set DNS configuration: Unit
К комментарию