پیکوسیستم خدمات فنی IT

نصب OpenVPN روی اوبونتو: ساخت سرور VPN با easy-rsa و فایل کلاینت

راه اندازی سرور OpenVPN روی اوبونتو با easy-rsa: ساخت مرجع گواهی، گواهی سرور و کاربران، فایل server.conf، فعال کردن مسیریابی و فایروال، ساخت فایل ovpn، ابطال گواهی کاربر و نکات امنیتی و عیب یابی.

نصب OpenVPN روی اوبونتو: ساخت سرور VPN با easy-rsa و فایل کلاینت

نصب OpenVPN روی یک سرور لینوکس راهی آزمایش شده و انعطاف پذیر برای دسترسی کارمندان دور کار به شبکه شرکت است. OpenVPN روی هر سیستم عاملی کلاینت دارد (ویندوز، macOS، لینوکس، اندروید و iOS) و کاربران را با گواهی دیجیتال یا نام کاربری و رمز احراز هویت می کند. اینجا یک سرور با گواهی برای هر کاربر روی اوبونتو می سازیم. اگر شبکه تان میکروتیک است و فقط VPN ساده می خواهید، VPN در میکروتیک بدون سرور جدا کار را انجام می دهد، و برای مقایسه پروتکل ها VPN سازمانی چیست را ببینید. WireGuard جایگزین ساده تر و سریع تر است که در نصب WireGuard آمده.

پیش نیازها

  • سرور اوبونتو با IP عمومی ثابت (یا دامنه ای که به آن اشاره می کند). اگر پشت NAT است، پورت VPN باید Port Forward شود (NAT چیست).
  • آدرس شبکه VPN را برای کاربران انتخاب کنید که با شبکه های داخلی هم پوشان نباشد (مثلاً 10.8.0.0/24). مفهوم آن در subnet چیست آمده.
  • سرور را اول امن کنید (راه اندازی سرور مجازی).

نصب و ساخت گواهی ها

sudo apt update
sudo apt install openvpn easy-rsa

make-cadir ~/openvpn-ca
cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey secret ta.key

خط build-ca مرجع گواهی (CA) خودتان را می سازد. گزینه nopass یعنی کلید CA رمز ندارد که برای آزمایش ساده است؛ در محیط واقعی کلید CA را با رمز بسازید و جدا از سرور VPN نگه دارید، چون هرکس به آن برسد می تواند گواهی جعلی بسازد. فایل ها را در پوشه سرور کپی کنید:

sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem ta.key /etc/openvpn/server/

تنظیم سرور

فایل /etc/openvpn/server/server.conf را بسازید:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-crypt ta.key
server 10.8.0.0 255.255.255.0
push "route 192.168.10.0 255.255.255.0"
keepalive 10 120
data-ciphers AES-256-GCM:AES-128-GCM
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
  • خط server بازه آدرس کاربران VPN را تعیین می کند.
  • خط push route به کلاینت می گوید شبکه داخلی 192.168.10.0/24 از طریق تونل برود (split tunnel). برای عبور همه ترافیک از VPN به جای آن push "redirect-gateway def1" بگذارید، که پهنای باند سرور را بیشتر مصرف می کند.
  • گزینه tls-crypt کانال کنترل را با کلید مشترک رمز می کند و پورت را از اسکن و حمله های ساده پنهان می کند.
  • گزینه UDP برای سرعت بهتر است. اگر شبکه کاربر UDP را می بندد، می توان یک نمونه روی TCP پورت 443 هم داشت.

مسیریابی و فایروال

سرور باید ترافیک را بین تونل و شبکه داخلی عبور دهد:

echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-vpn.conf
sudo sysctl --system
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

اگر شبکه داخلی مسیر برگشت به 10.8.0.0/24 ندارد (یعنی گیت وی سرورها خود این سرور VPN نیست)، یا روی روتر یک مسیر ثابت به سرور VPN بگذارید یا روی سرور NAT خروجی (MASQUERADE) فعال کنید. روش اول تمیزتر است چون لاگ سرورهای داخلی آدرس واقعی کاربر VPN را می بیند. بعد از آن قاعده های فایروال کاربران VPN را محدود کنید (فایروال چیست). حالا سرویس را فعال کنید:

sudo systemctl enable --now openvpn-server@server
sudo systemctl status openvpn-server@server
journalctl -u openvpn-server@server -f

ساخت گواهی و فایل کلاینت

برای هر کاربر یک گواهی جدا بسازید، تا هر نفر را بتوانید جداگانه قطع کنید:

cd ~/openvpn-ca
./easyrsa gen-req ali nopass
./easyrsa sign-req client ali

فایل پیکربندی کلاینت (ali.ovpn) همه چیز را در یک فایل دارد:

client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
data-ciphers AES-256-GCM:AES-128-GCM
verb 3
<ca>
(محتوای ca.crt)
</ca>
<cert>
(محتوای ali.crt)
</cert>
<key>
(محتوای ali.key)
</key>
<tls-crypt>
(محتوای ta.key)
</tls-crypt>

این فایل شامل کلید خصوصی کاربر است. آن را فقط با کانال امن برای خود کاربر بفرستید و در ایمیل ساده یا پیام رسان گروهی نفرستید. کاربر با برنامه OpenVPN Connect یا کلاینت جامعه OpenVPN فایل را وارد می کند و وصل می شود. برای گواهی هایی که به دستگاه های شخصی کارمند می روند، گذاشتن رمز روی کلید خصوصی کاربر (بدون nopass) لایه محافظت اضافه می دهد.

ابطال گواهی

وقتی کارمند شرکت را ترک می کند یا لپ تاپی گم می شود، گواهی اش باید باطل شود:

cd ~/openvpn-ca
./easyrsa revoke ali
./easyrsa gen-crl
sudo cp pki/crl.pem /etc/openvpn/server/
# در server.conf اضافه کنید:
crl-verify crl.pem
sudo systemctl restart openvpn-server@server

بدون خط crl-verify سرور وجود فهرست ابطال را نمی فهمد و گواهی باطل شده همچنان کار می کند. فهرست کاربران و تاریخ صدور را مستند کنید تا بدانید چه کسی هنوز دسترسی دارد.

امنیت بیشتر

  • دسترسی کاربران را در فایروال به سرورها و پورت های لازم محدود کنید.
  • برای احراز هویت دومرحله ای، OpenVPN با PAM و برنامه هایی مثل Google Authenticator یا سرویس RADIUS ترکیب می شود. تنظیمش بین نسخه ها فرق می کند؛ مستندات نسخه خودتان را دنبال کنید.
  • OpenVPN را به روز نگه دارید و لاگ اتصال ها را بخوانید. ورودهای ناموفق مکرر یا ورود از جای غیرعادی را هشدار بدهید.
  • مدیریت سرور را با کلید SSH امن کنید (SSH چیست) و بکاپ پوشه /etc/openvpn و pki را بگیرید. کلید CA را جدا و آفلاین نگه دارید.

رفع مشکل اتصال

  • کلاینت وصل نمی شود: پورت UDP 1194 در فایروال سرور، شبکه یا Port Forward باز نیست. با sudo tcpdump -i eth0 -n udp port 1194 ببینید بسته ها می رسند یا نه (فرق TCP و UDP).
  • خطای TLS handshake: کلید tls-crypt کلاینت و سرور یکی نیست، یا ساعت سرور و کلاینت اختلاف زیاد دارد و گواهی معتبر دیده نمی شود (NTP چیست).
  • وصل می شود ولی شبکه داخلی را نمی بیند: IP forwarding، مسیر برگشت یا فایروال را بررسی کنید.
  • نام های داخلی پیدا نمی شوند: DNS داخلی را با push "dhcp-option DNS 192.168.10.2" بدهید.
  • سرعت پایین یا قطع و وصل: MTU تونل یا لینک اینترنت را بررسی کنید.

آدرس ثابت برای هر کاربر

به صورت پیش فرض هر بار کاربر وصل می شود ممکن است آدرس متفاوتی از بازه VPN بگیرد. برای اینکه آدرس هر کاربر ثابت بماند و بشود برایش قاعده فایروال نوشت، پوشه تنظیمات اختصاصی کاربران را فعال کنید. در server.conf این دو خط را اضافه کنید (و topology subnet را هم بگذارید):

topology subnet
client-config-dir /etc/openvpn/ccd

سپس برای کاربر ali فایلی با نام دقیقاً برابر نام گواهی (Common Name) بسازید:

# /etc/openvpn/ccd/ali
ifconfig-push 10.8.0.50 255.255.255.0

حالا ali همیشه 10.8.0.50 را می گیرد و در فایروال می توانید بنویسید این آدرس فقط به سرور فایل برسد. با همین پوشه می شود برای هر کاربر مسیر جداگانه هم فرستاد.

ورود با نام کاربری و رمز کنار گواهی

گواهی تنها یعنی هر کس فایل ovpn را داشته باشد وارد می شود. برای لایه دوم، OpenVPN می تواند علاوه بر گواهی نام کاربری و رمز بپرسد (با auth-user-pass-verify یا افزونه PAM و LDAP) و حتی با کد یک بار مصرف ترکیب شود. این کار خطر دستگاه گم شده را کم می کند. تنظیم آن به سیستم احراز هویت شرکت (مثلاً اکتیو دایرکتوری با LDAP یا RADIUS) بستگی دارد و بین نسخه ها فرق می کند؛ مستندات نسخه خودتان را بخوانید و روی کاربر آزمایشی امتحان کنید.

دیدن کاربران وصل و لاگ

فایل status که در تنظیمات معرفی کردیم فهرست کاربران وصل و ترافیک هر کدام را نشان می دهد:

sudo cat /var/log/openvpn-status.log
sudo journalctl -u openvpn-server@server --since "1 hour ago"

خطاهای ورود ناموفق و اتصال از آدرس های غیرعادی را در لاگ بگردید و برای آن ها هشدار بگذارید. اگر مانیتورینگ مرکزی دارید، تعداد کاربران وصل و وضعیت سرویس را هم پایش کنید (مانیتورینگ سرور چیست).

تفاوت انواع تونل و کاربرد هرکدام در VPN چیست توضیح داده شده است.

منابع و مستندات رسمی

طراحی و راه اندازی VPN برای کارمندان دور کار و شعبه ها، همراه با دسترسی محدود و پایش، از خدمات راه اندازی VPN سازمانی و اتصال شعب است.

نحوه تهیه مقاله ها

مقاله های مرتبط

استعلام

کارتان را بگویید، مسیر و هزینه را می گوییم

چند خط درباره وضعیت فعلی و چیزی که می خواهید بنویسید. یک مهندس خودش با شما تماس می گیرد و درخواست به واحد فروش نمی رود.

  1. 01درخواست را می خوانیم و اگر ابهامی بود تماس می گیریم.
  2. 02در صورت نیاز، بررسی اولیه ریموت یا بازدید انجام می شود.
  3. 03پیشنهاد مکتوب با دامنه کار، زمان بندی و هزینه می فرستیم.

اطلاعات شما فقط برای پاسخ به همین درخواست استفاده می شود. حریم خصوصی