WIUNIX ACADEMY
احراز هویت OpenVPN با گواهی و Google Authenticator
صفحهٔ 3 از 5؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من7 مقدار قابلتغییر
قدم بعدی
تنظیمات مستقل سرور پایلوت را بسازید
فایل کامل بعدی را برای همین پایلوت ذخیره کنید؛ به listener تولیدی ادغام نکنید. تطبیق کلید و گواهی هنگام شروع بررسی میشود؛ شروع ناموفق باید تا رفع علت متوقف بماند. رمزهای AEAD، حداقل TLS1.2 و منع compression اعمال شدهاند؛ BF-CBC و fallback قدیمی وجود ندارند. برای عیبیابی یکنواخت پایلوت TUN، DCO خاموش است.
VM مستقل پایلوت؛ ترمینال خصوصی برای ثبت دستگاه
set -eu
sudo sh -c 'umask 077; set -C; : > "/srv/academy-openvpn-mfa/server.conf"'
sudo nano '/srv/academy-openvpn-mfa/server.conf'
فایل خصوصی و تازهٔ تنظیمات پایلوت آماده است.
قدم بعدی
هر دو verifier را همراه هویت اصلی گواهی الزام کنید
renegotiation یکساعته تضمین طول نشست یا توکنِ دورزننده نیست. prompt تازه پس از renegotiation، قطعووصل و suspend را با کلاینت واقعی بسنجید. listener مدیریتی، لاگ اطلاعات ورود، احراز هویت اختیاری و duplicate-CN فعال نیستند. پس از کاهش امتیاز daemon به nobody/nogroup، نوشتن وضعیت PAM از helper دارای امتیاز انجام میشود.
VM مستقل پایلوت؛ ترمینال خصوصی برای ثبت دستگاه
local 192.0.2.40
port 11940
proto udp4
dev tun-mfa
dev-type tun
topology subnet
server 10.93.0.0 255.255.255.0
ca /srv/academy-openvpn-mfa/pki/ca.crt
cert /srv/academy-openvpn-mfa/pki/server.crt
key /srv/academy-openvpn-mfa/pki/server.key
dh none
crl-verify /srv/academy-openvpn-mfa/pki/crl.pem
tls-crypt /srv/academy-openvpn-mfa/pki/tls-crypt.key
verify-client-cert require
remote-cert-tls client
tls-version-min 1.2
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
allow-compression no
disable-dco
plugin /srv/academy-openvpn-mfa/auth-pam.so "academy-mfa login USERNAME Verification PASSWORD"
script-security 2
auth-user-pass-verify /srv/academy-openvpn-mfa/bind-cn.py via-file
tmp-dir /srv/academy-openvpn-mfa/auth-tmp
user nobody
group nogroup
persist-key
persist-tun
keepalive 10 60
reneg-sec 3600
verb 3
کاندیدای کامل، گواهی معتبر کلاینت، PAM مبتنی بر OTP و تطبیق دقیق CN را الزام میکند.
قدم بعدی
واحد مستقل systemd را آماده کنید
واحد از پوشههای auto-discovery توزیع و VPN موجود مستقل است. شروع با root برای مقداردهی helper بستهٔ PAM لازم است؛ سپس تنظیمات OpenVPN امتیاز daemon اصلی را کم میکند. User=nobody، NoNewPrivileges یا محدودیت فایلسیستم را بدون آزمون اثر آن بر تغییر هویت PAM و نوشتن وضعیت اضافه نکنید. این واحد یک پروفایل جامع hardening نیست.
VM مستقل پایلوت؛ ترمینال خصوصی برای ثبت دستگاه
set -eu
sudo sh -c 'umask 022; set -C; : > "/etc/systemd/system/academy-mfa.service"'
sudo nano '/etc/systemd/system/academy-mfa.service'
فایل واحد مستقل آماده است؛ واحد موجود بازنویسی نشده است.
قدم بعدی
فقط پایلوت بررسیشده را اجرا کنید
OpenVPN تنظیمات خصوصی و کلید را پیش از کاهش امتیاز میخواند. seed شخصی با مجوز ۰۶۰۰ میماند. فعالسازی هنگام بوت را تا قبولی آزمونهای مثبت و منفی و پذیرش مسئولیت عملیاتی همین VM انجام ندهید.
VM مستقل پایلوت؛ ترمینال خصوصی برای ثبت دستگاه
[Unit]
Description=WIUNIX Academy certificate and TOTP pilot
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/sbin/openvpn --config /srv/academy-openvpn-mfa/server.conf
Restart=on-failure
RestartSec=5
UMask=0077
[Install]
WantedBy=multi-user.target
واحد فقط تنظیمات همین پایلوت را اجرا میکند؛ شروع خودکار هنگام بوت هنوز فعال نیست.
قدم بعدی
واحد را بررسی و با کنسول باز شروع کنید
این مرحله روی VM مستقل و با کنسول باز اجرا میشود. OpenVPN حالت dry-run عمومی برای تمام تنظیمات ندارد؛ systemd-analyze فقط نحو واحد را بررسی میکند، نه صحت TLS و احراز هویت. شروع واقعی و محدود، کنترل تنظیمات این نمونه است. journal را خصوصی بخوانید؛ خطای افزونه، CRL، کلید، TUN یا مجوز نیازمند توقف است، نه افزودن گزینهٔ ناامن.
VM مستقل پایلوت؛ ترمینال خصوصی برای ثبت دستگاه
set -eu
sudo systemd-analyze verify '/etc/systemd/system/academy-mfa.service'
sudo systemctl daemon-reload
sudo systemctl start 'academy-mfa.service'
sudo systemctl is-active 'academy-mfa.service'
sudo journalctl -u 'academy-mfa.service' -n 60 --no-pager
ip -br address show dev 'tun-mfa'
sudo ss -lunp
ps -eo user,pid,ppid,args | grep '[o]penvpn'
پایلوت روی UDP 11940 فعال است؛ tun-mfa آدرس 10.93.0.1/24 دارد و daemon اصلی nobody است؛ helper PAM امتیاز لازم را حفظ کرده است.
قدم بعدی
پروفایل خصوصی و تعاملی کلاینت را آماده کنید
روی کلاینت لینوکسی قابلاعتماد، پوشهٔ تازهٔ ۰۷۰۰ را با روش معمول فایل خصوصی بسازید و CA، گواهی، کلید شخصی و tls-crypt را از کانال محافظتشده قرار دهید. فایل بعدی با نام pilot.ovpn کنار آنها ذخیره میشود؛ کلید خصوصی هرگز وارد مقاله یا تنظیمات عمومی نشود. CN گواهی پایلوت academyvpn است. کلید را مطابق سیاست دستگاه و ترجیحاً با passphrase قابلپشتیبانی حفاظت کنید.
پروفایل هم کاربرد serverAuth و هم نام دقیق vpn-server را بررسی میکند؛ اعتماد صرف به CA کافی نیست. vpn.example.net مقصد شبکه است و نام گواهی عمداً در پیشنیاز PKI ثابت شده. GUI و سیستمعامل دیگر به آزمون جداگانهٔ import، prompt و نگهداری کلید نیاز دارند.
کلاینت لینوکس آزمایشی
umask 077
test ! -e pilot.ovpn && test ! -L pilot.ovpn
set -C
: > pilot.ovpn
set +C
nano pilot.ovpn
پروفایل تازه در پوشهٔ خصوصی کلاینت آماده است؛ اطلاعات خصوصی جدا منتقل شدهاند.
قدم بعدی
اعتبارسنجی سرور و دریافت کد تازه را حفظ کنید
به auth-user-pass نام فایل اضافه نکنید؛ prompt تازه به استفادهٔ دوباره از کد ذخیرهشده تبدیل میشود. نمونهٔ کلید خصوصی inline وجود ندارد. auth-nocache ورودی cacheشده را پاک میکند، اما رفتار صحیح تمام GUIها را تضمین نمیکند؛ نسخههای مورد استفاده را بیازمایید.
کلاینت لینوکس آزمایشی
client
dev tun
proto udp4
remote vpn.example.net 11940
nobind
resolv-retry infinite
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
tls-crypt tls-crypt.key
remote-cert-tls server
verify-x509-name vpn-server name
tls-version-min 1.2
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
allow-compression no
disable-dco
auth-user-pass
auth-nocache
auth-retry interact
verb 3
کلاینت vpn-server را اعتبارسنجی و نام کاربر و کد تازه را تعاملی دریافت میکند.