خادم VPN مفتوح في حالات الطوارئ Openconnect بتفويض من عاملين على Centos 8

مقدمة


مساء يوم الأحد في منتصف مارس ، تلقيت مكالمة هاتفية ، كان جوهرها أن أكثر من 200 شخص لن يحضروا إلى المكتب يوم الاثنين ، ولكن سيتم نقلهم إلى عن بعد. عبارة: واحد على "البعيد" ، والمسؤولين على "الموسعة" ، نسج في رأسي.


هذا لا يعني أنه لم يكن لدينا وصول بعيد إلى الموارد الداخلية على الإطلاق ، ولكننا استخدمنا IPSEC VPN على مجموعة من عميل VPN Shrew soft + Pfsense للوصول الطارئ لبعض متخصصي تكنولوجيا المعلومات إلى أنظمة المعلومات المحسوبة عليهم في الدعم. أظهر عميل Shrew soft VPN خصوصية تتمثل في حقيقة أنه بعد عدد من الاتصالات الناجحة توقفت مسارات ipv4 عن العمل. تمت معالجة هذا الموقف عن طريق إعادة تشغيل خدمات Windows أو إعادة تشغيل الجهاز النهائي. تسبب احتمال شرح هذا الفروق الدقيقة للزملاء لعدد غير محدد من المرات في اليوم عصبية ورعاش في الأطراف في نفس الوقت.


طحين الاختيار


لقد حددت متطلبات الحل التالية لتنظيم VPN للأنظمة المكتبية:

  1. خطوه سهله. على أمل أن يتأقلم البعض من تلقاء أنفسهم ؛
  2. توفر عميل لأنظمة التشغيل الشائعة ؛
  3. دعم مصادقة كلمة المرور Active Directory ؛ لم يكن هناك مشكلة عاجلة في المفاتيح (الشهادات) في خططي
  4. توثيق ذو عاملين. يفضل أن تكون مجانية ؛
  5. الحد الأدنى من الاستثمار ، والأفضل مجانًا ، نظرًا لأن ميزانية معدات تكنولوجيا المعلومات 2020 لا تعني تكلفة بوابة الوصول عن بُعد ؛
  6. والاستقرار والأداء المتوقع ؛

WireGuard , openvpn-gui, , , SoftEther VPN, , Shrew soft . Openconnect VPN Server + OpenConnect SSL VPN Client — 1 , tcp, , LDAP, ! Cisco Anyconnect client :)



Centos 8. Centos 8 , glibc-langpack-en, >

dnf install glibc-langpack-en
setfont UniCyr_8x16
  /etc/vconsole.conf FONT="UniCyr_8x16"

:


#  trusted -    
#     nftables     Firewalld      Forward.     trusted 
firewall-cmd --set-default-zone=trusted
#    firewalld - ocserv (  443/tcp 443/udp)
firewall-cmd --permanent --new-service=ocserv
firewall-cmd --permanent --service=ocserv --set-description="OpenConnect SSL VPN Server"
firewall-cmd --permanent --service=ocserv --add-port=443/tcp
firewall-cmd --permanent --service=ocserv --add-port=443/udp
# (   ens192)   drop
firewall-cmd --zone=drop --change-interface=ens192 --permanent
firewall-cmd --reload
#  drop       ocserv
firewall-cmd --zone=drop --permanent --add-service=ocserv
firewall-cmd --reload

يمكن لـ OpenConnect SSL VPN Server استخدام آلية pam للتفويض. للحصول على تفويض "شامل" لعملاء Active Directory ، أضف خادمنا الجديد إلى النطاق:


#   
dnf install realmd sssd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation

التحقق من توفر البنية التحتية للدليل النشط
realm  discover mydomain.ru

mydomain.ru
type: kerberos
realm-name: MYDOMAIN.RU
domain-name: mydomain.ru
configured: no
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

 #    Active Directory
realm join mydomain.ru -U Username

سيتم إنشاء ملف التكوين SSSD (System Security Services System) /etc/sssd/sssd.conf تلقائيًا. يجب عليك إضافة خدمة VPN لخادم ocserv لم يتم تثبيتها بعد على الإعدادات. تعتبر المعلمة use_fully_qualified_names مسؤولة عن تنسيق اسم المستخدم.
العقار /etc/sssd/sssd.conf
[sssd]
domains = mydomain.ru
config_file_version = 2
services = nss, pam
default_domain_suffix = mydomain.ru

[domain/mydomain.ru]
ad_domain = mydomain.ru
ad_gpo_map_remote_interactive = +ocserv
krb5_realm = MYDOMAIN.RU
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 = True
fallback_homedir = /home/%u@%d
access_provider = ad

قم بتشغيل خدمة SSSD وابدأ تشغيلها

systemctl enable sssd
systemctl start sssd

من الممكن تحديد عدد المستخدمين الذين لديهم الحق في الاتصال. في هذه الحالة ، سمحت لجميع المستخدمين بالاتصال بالخادم.

realm permit --all

في هذه المرحلة ، يجب أن تعمل مصادقة ssh على الخادم لمستخدمي المجال.

اختيار وحدة نمطية لتنفيذ اثنين - عامل اثنين - المصادقة الخطوة، نظرت إلى تكلفة الأمن الثنائي معتمد من المربع واختار TOTP (على الوقت، لمرة واحدة كلمة المرور) ممثلة مصادقة Google. في هذا التطبيق ، يعد توقيت مزامنة وقت الخادم من خلال خدمات الوقت الدقيقة أمرًا بالغ الأهمية. يمكنك التحقق من العملية الصحيحة لبرنامج chronyd باستخدام الأمر: chronyc sources

اختتام مصادر chronyc
210 Number of sources = 2
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp1.vniiftri.ru 1 6 17 1 -171us[ -171us] ± 2166us
^* ntp2.vniiftri.ru 1 6 17 1 -237us[ -57us] ± 2494us

تثبيت Google Authenticator:

dnf install epel-release
dnf install google-authenticator qrencode-libs

بعد ذلك ، تحتاج إلى تشغيل أمر google-Authentator من حساب المستخدم على الخادم (sudo su DomainUser) والإجابة على جميع الأسئلة بشكل إيجابي للحصول على كود التعريف / qr لتطبيق Google Authenticator على الهاتف الذكي للمستخدم ( IOS ، Google play )

Openconnect VPN Server:

dnf install ocserv
#    
systemctl enable ocserv

/etc/ocserv/ocserv.conf
auth = «pam»
#IPv4
listen-host = 1.1.111.1
tcp-port = 443
udp-port = 443
run-as-user = ocserv
run-as-group = ocserv
socket-file = ocserv.sock
chroot-dir = /var/lib/ocserv
isolate-workers = true
max-clients = 0

# -
max-same-clients = 1
keepalive = 32400
dpd = 90
mobile-dpd = 1800
switch-to-tcp-timeout = 25
try-mtu-discovery = true

#LetsenCrypt
server-cert = /etc/letsencrypt/live/vpn.mydomain.ru/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.mydomain.ru/privkey.pem

########################
cert-user-oid = 0.9.2342.19200300.100.1.1
compression = true
tls-priorities = "@SYSTEM"
auth-timeout = 240
idle-timeout = 1200
mobile-idle-timeout = 2400
min-reauth-time = 300
max-ban-score = 50
ban-reset-time = 300
cookie-timeout = 300
deny-roaming = false
rekey-time = 172800
rekey-method = ssl
use-occtl = true
pid-file = /var/run/ocserv.pid
device = vpns
predictable-ips = true
default-domain = vpn.mydomain.ru
# VPN
ipv4-network = 192.168.178.0/24

# DNS-
tunnel-all-dns = true
dns = 192.168.1.1
########################
ping-leases = false

# VPN
route = 192.168.1.0/255.255.255.0
route = 192.168.2.0/255.255.255.0
########################
cisco-client-compat = true
dtls-legacy = true
user-profile = profile.xml

LetsEncrypt VPN . . , , 3- COVID-19 .


firewall-cmd --zone=drop --add-service=http
curl -O  https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto
certbot-auto certonly --standalone --preferred-challenges http -d vpn.mydomain.ru
firewall-cmd --zone=drop --remove-service=http

VPN

sed '/^#%PAM-1.0$/a auth       required     pam_google_authenticator\.so' /etc/pam.d/ocserv
systemctl start ocserv
systemctl start ocserv



echo "net.ipv4.ip_forward=1">/etc/sysctl.d/0-ocserv.conf
sysctl -w net.ipv4.ip_forward=1


openconnect-gui. vpn.mydomain.ru




Password OTP Google Authenticator. Password1 Active Directory.







...


All Articles