اطلاعیه

بستن
No announcement yet.

نصب و راه اندازی OpenVPN سرور در لینوکس

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    نصب و راه اندازی OpenVPN سرور در لینوکس

    OpenVPN Server یک سرور VPN است که از SSL/TLS برای ایجاد ارتباطات vpn امن و encrypted استفاده میکند و مسیر ترافیک اینترنت شما را تغییر میدهد و از جاسوسی جلوگیری میکند. سرور OpenVPN در سطح بالایی قادر به عبور از فایروال ها میباشد. در حقیقت شما میتوانید OpenVPN سرور را روی پورت TCP یکسانی همانند HTTPS (پورت 443) راه اندازی کنید که ترافیک شما غیر قابل تشخیص شود و نتوان آن را فیلتر یا بلاک کرد.


    سرور اوپن وی پی ان میتواند روش های گوناگونی مانند pre-shared secret key ,certificates یا username/password استفاده کند تا به کلاینت ها اجازه وصل شدن به سرور را بدهد. Open VPN از پروتکل OpenSSL استفاه میکند و ابزارهای کنترل و امنیتی زیادی مانند challenge response authentication, single sign-on capability, load balancing و ابزار failover و multi daemon support را اجرا میکند.
    نصب و راه اندازی سرور openvpn در لینوکس





    همچنین توصیه میشود مطالعه بفرمایید :

    آموزش نصب آسان VPN Server با L2TP IPSec در لینوکس (Ubuntu, Debian, CentOS)

    نحوه تانل (Tunnel) زدن بین دو سرور لینوکسی (Site to Site Linux Server VPN) (به زودی)



    چرا از openvpn استفاده کنیم؟

    اگر به ارتباطات امن فکر میکنید در حقیقت دارید به OpenVPN فکر میکنید. اگر نمیخواهید کسی روی ترافیک اینترنت تان جاسوسی کند از openvpn استفاده کنید تا تمام ترافیک تان را از طریق یک تانل امن و در سطح بالایی که رمزنگاری شده را rout کنید.

    این ابزار بخصوص برای اتصال به شبکه های WIFI عمومی در فرودگاه ها یا دیگر امکان، بسیار مهم است. شما هرگز نمیتوانید مطمئن باشید که آیا ترافیک شما جاسوسی میشود یا نه؟ و میتوانید ترافیک تان را از طریق سرور OpenVPN شخصی خود مسیردهی کنید تا از snooping (جاسوسی) جلوگیری کنید.

    اگر شما در هر کشوری هستید که به صورت روزانه تمام ترافیک شما را مانیتور میکند و وب سایت ها را به دلخواه خودشان فیلتر میکنند شما میتوانید از OpenVPN روی پورت TCP 443 استفاده کنید تا آن را از ترافیک HTTPS غیر قابل تشخیص کنید. همچنین میتوانید OpenVPN را با استراتژی های امنیتی دیگر مانند tunnelling ترافیک openvpn خود از طریق یک تانل SSL ترکیب کنید تا بتوانید جلوی تکنیک های بازرسی و جاسوسی حرفه ای پکت ها که ممکن است قادر به شناسایی OpenVPN Signatures هم باشند را بگیرید.



    مرحله اول : نصب OpenVPN

    قبل از نصب OpenVPN پکیج های سیستم را آپدیت کنید.
    کد PHP:
    apt-get update 
    سپس با استفاده از دستور زیر OpenVPN Server را نصب کنید.
    کد PHP:
    apt-get install openvpn easy-rsa 


    مرحله دوم : پیکربندی OpenVPN

    فایل پیکربندی openvpn می بایست در مسیر /etc/openvpn قرار گیرد. با استفاده از دستور زیر این کار را انجام دهید.
    کد PHP:
    gunzip -/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf 
    با استفاده از ادیتور دلخواه خود فایل کانفیگ سرور را از مسیر زیر باز کنید.
    کد PHP:
    nano /etc/openvpn/server.conf 
    ابتدا ما طول کلید RSA مورد استفاده هنگامی که کلیدهای کلاینت و سرور ایجاد می شوند را تعیین می نماییم. در فایل کانفیگ بخش زیر را جستجو کنید.
    کد PHP:
    /etc/openvpn/server.conf
    # Diffie hellman parameters.
    # Generate your own with:
    #   openssl dhparam -out dh1024.pem 1024
    # Substitute 2048 for 1024 if you are using
    # 2048 bit keys.
    dh dh1024.pem 
    در قسمت زیر گزینه ی dh1024.pem را به dh2048.pem تغییر دهید.
    کد PHP:
    /etc/openvpn/server.conf
    dh  dh2048
    .pem 
    سپس نیاز داریم که ترافیک را به محل مناسبی هدایت کنیم. در فایل server.conf قسمت زیر را جستجو کنید.
    کد PHP:
    /etc/openvpn/server.conf
    # If enabled, this directive will configure
    # all clients to redirect their default
    # network gateway through the VPN, causing
    # all IP traffic such as web browsing and
    # and DNS lookups to go through the VPN
    # (The OpenVPN server machine may need to NAT
    # or bridge the TUN/TAP interface to the internet
    # in order for this to work properly).
    ;push "redirect-gateway def1 bypass-dhcp" 
    خط push "redirect-gateway def1 bypass-dhcp" را uncomment کنید، در این صورت سرور VPN ترافیک وب کلاینت ها را به مقصد هدایت می کند.
    کد PHP:
    /etc/openvpn/server.conf
    push 
    "redirect-gateway def1 bypass-dhcp" 
    سپس، ما می خواهیم به سرور بگوییم که OpenDNS برای resolve کردن DNS ها استفاده کند. قسمت زیر را جستجو کنید.
    کد PHP:
    /etc/openvpn/server.conf
    # Certain Windows-specific network settings
    # can be pushed to clients, such as DNS
    # or WINS server addresses.  CAVEAT:
    # http://openvpn.net/faq.html#dhcpcaveats
    # The addresses below refer to the public
    # DNS servers provided by opendns.com.
    ;push "dhcp-option DNS 208.67.222.222"
    ;push "dhcp-option DNS 208.67.220.220" 
    و کامنت کنار push "dhcp-option DNS 208.67.222.222" و push "dhcp-option DNS 208.67.220.220" را بردارید که به صورت زیر نشان داده شود.
    کد PHP:
    /etc/openvpn/server.conf
    push 
    "dhcp-option DNS 208.67.222.222"
    push "dhcp-option DNS 208.67.220.220" 
    در مرحل بعدی شما می بایست پرمیشن ها را نیز در server.conf تعریف کنید. قسمت زیر را جستجو کرده و کامنت user nobody و group nogroup را بردارید.
    کد PHP:
    /etc/openvpn/server.conf
    # You can uncomment this out on
    # non-Windows systems.
    ;user nobody
    ;group nogroup 
    به صورت زیر
    کد PHP:
    /etc/openvpn/server.conf
    user nobody
    group nogroup 
    به طور پیش فرض، OpenVPN با کاربر root اجرا می شود، بنابراین دسترسی root به سیستم داشته باشید. ما به جای این openvpn برای کاربر nobody و گروه nogroup محدود خواهیم کرد. این یک کاربر unprivileged با قابلیت لاگین غیر دیفالت است ، اغلب برای اجرای برنامه هایی شبیه سرور web-facing استفاده می شود.
    حال تغییرات را ذخیره کرده و از فایل بیرون بیایید.



    مرحله سوم : فعال کردن Packet Forwarding

    در این بخش ما می خواهیم کرنل سرور، ترافیک کلاینت ها را به سمت اینترنت هدایت کند. برای فعال کردن آن از دستور زیر استفاده کنید.
    کد PHP:
    echo > /proc/sys/net/ipv4/ip_forward 
    برای اینکه این تغییرات به صورت دائمی باشد و در هنگام ریست سیستم از بین نرود نیاز است آنرا در فایل sysctl فعال کنید.
    کد PHP:
    nano /etc/sysctl.conf 
    در فایل باز شده به صورت زیر کامنت net.ipv4.ip_forward=1 را بردارید.
    کد PHP:
    /etc/openvpn/server.conf
    # Uncomment the next line to enable packet forwarding for IPv4
    net.ipv4.ip_forward=


    مرحله چهارم : نصب iptables و پیکربندی NAT

    Iptables به صورت پیش فرض در اکثر توزیع های لینوکس نصب است. در صورتی که نصب نباشد می توان با دستور زیر آنرا نصب کرد.
    کد PHP:
    apt-get install iptables 

    برای Nat کردن ip های کلاینت به اینترفیس سمت اینترنت از دستور زیر استفاده کنید.
    کد PHP:
    iptables -t nat -A POSTROUTING -s 10.8.0.0/-o eth0 -j MASQUERADE 
    برای ذخیره کردن تغییرات از دستور زیر استفاده کنید.
    کد PHP:
    Iptables-save 

    مرحله پنجم : پیکربندی و ساخت Ceritificate Authority

    OpenVPN از ceritificate ها برای رمزنگاری ترافیک استفاده می کند. در این بخش ما CA ها یمان را در بخش های زیر تنظیم خواهیم کرد:

    1 . تنظیمات متغیرها
    2 . ایجاد CA ها


    OpenVPN احراز هویت دوطرفه را پشتیبانی می کند، به این معنی که باید کلاینت ceritificate های سرور را تایید کرده و سرور نیز ceritificate های کلاینت را تایید کند. ما از اسکریپت Easy RSA استفاده خواهیم کرد. ابتدا اسکریپت های ایجاد Easy RSA را کپی می کنیم.
    کد PHP:
    cp -/usr/share/easy-rsa/ /etc/openvpn 
    سپس یک دایرکتوری برای کلید ها ایجاد می کنیم.
    کد PHP:
    mkdir /etc/openvpn/easy-rsa/keys 
    بعد ما باید فایل vars را با ادیتور دلخواه خود از مسیر زیر باز کنیم.
    کد PHP:
    nano /etc/openvpn/easy-rsa/vars 
    پارامترهای موجود در فایل را به صورت زیر تغییر دهید.
    کد PHP:
    export KEY_COUNTRY="US"
    export KEY_PROVINCE="TX"
    export KEY_CITY="Dallas"
    export KEY_ORG="My Company Name"
    export KEY_EMAIL="sammy@example.com"
    export KEY_OU="MYOrganizationalUnit" 
    در همان فایل به دنبال قسمت زیر می گردیم.
    کد PHP:
    /etc/openvpn/easy-rsa/vars
    # X509 Subject Field
    export KEY_NAME="EasyRSA" 
    و کلمه ی EasyRSA را با نامی که برای کلیدهای سرور می گذاریم عوض می کنیم. در اینجا ما از نام server استفاده کرده ایم.
    کد PHP:
    /etc/openvpn/easy-rsa/vars
    # X509 Subject Field
    export KEY_NAME="server" 
    فایل را ذخیره کرده و خارج می شویم.

    در مرحله بعد ما پارامترهای Diffie-Helman را با استفاده از ابزار OpenSSL به نام dhparam ایجاد می کنیم. این ممکن است چندین دقیقه طول بکشد. آپشن -out محل ذخیره شدن فایل را تعیین می کند.
    کد PHP:
    openssl dhparam -out /etc/openvpn/dh2048.pem 2048 
    حال به مسیر زیر می رویم.
    کد PHP:
    cd /etc/openvpn/easy-rsa 
    اسکریپت vars را اجرا می کنیم.
    کد PHP:
    . ./vars 
    خروجی زیر ظاهر خواهد شد. نگران نباشید و مراحل بعد را انجام دهید.
    کد PHP:
    The following warning will be printed. Do not worry, as the directory specified in the warning is empty. NOTE: If you run ./clean-allI will be doing a rm -rf on /etc/openvpn/easy-rsa/keys.

    ./
    clean-all 

    سرانجام ما CA را با استفاده از دستور OpenSSL اجرا می کنیم. این دستور برای شما لیستی از متغیر ها را خواهد پرسید که می توانید آنهارا تایید کرده و اینتر را بزنید.
    کد PHP:
    ./build-ca 


    مرحله ششم : ایجاد یک Ceritificate و کلید برای سرور

    ابتدا در دایرکتوری ای که در آن بودیم /etc/openvpn/easy-rsa کلیدهای خودتان را با نام سرور ایجاد کنید. این نام باید همان نامی باشد که در فایل پیکربندی سرور در قسمت KEY_NAME تعریف کرده اید.
    کد PHP:
    ./build-key-server server 
    دوباره برای تایید اینتر را بزنید تا گزینه ی زیر ظاهر شود.
    کد PHP:
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password 
    []:
    An optional company name []: 
    هر دو را به صورت خالی با زدن کلید اینتر رها کنید. در مرحله بعد سوالات زیر نمایش داده خواهد شد.
    کد PHP:
    Sign the certificate? [y/n]
    1 out of 1 certificate requests certifiedcommit? [y/n
    جت تایید گزینه y را بزنید سپس کلید شما تولید خواهد شد.



    مرحله هفتم : move کردن Ceritificate ها و کلیدهای سرور

    کد PHP:
    cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn 
    شما می توانید فایل های کپی شده را به صورت زیر بررسی کنید.
    کد PHP:
    ls /etc/openvpn 
    در این نقطه سرور شما آماد است و می توانید openvpn را استارت کنید.
    کد PHP:
    service openvpn start

    service openvpn status 
    خروجی وضعیت سرور می بایست به صورت زیر باشد.
    کد PHP:
    Output
    openvpn
    .service OpenVPN service
    Loaded
    loaded (/lib/systemd/system/openvpn.serviceenabled)
    Activeactive (exitedsince Thu 2015-06-25 02:20:18 EDT9s ago
    Process
    2505 ExecStart=/bin/true (code=exitedstatus=0/SUCCESS)
    Main PID2505 (code=exitedstatus=0/SUCCESS


    مرحله هشتم : ایجاد یک Ceritificate و کلید برای کلاینت ها

    تاکنون ما سرور OpenVPN را نصب وپیکربندی کرده ایم، یک CA ایجاد کرده و کلیدهای سرور را نیز ایجاد کرده ایم. در این بخش از CA های سرور برای ایجاد کلیدهایی برای کلاینت استفاده خواهیم کرد.


    ساختن کلید و ceritificate

    ایده ال است که برای هر کلاینتی که به vpn کانکت می شود کلیدها و certificate های منحصر به فردی را داشته باشند. این نسبت به ایجاد یک کلید برای تمام کلاینت ها قابل ترجیح تر است. به صورت پیش فرضopenvpn به کلاینت ها اجازه ی کانکت شدن با یک کلید را نمی دهند. برای ایجاد کلید هایی برای کلاینتها شما می توانید گام های زیر را برای هر کلاینت انجام دهید ولی نام client1 را برای هر کدام تغییر دهید تا در مسیر /etc/openvpn/easy-rsa قرار گیرید.
    دستور زیر را اجرا کنید.
    کد PHP:
    ./build-key client1 
    تمامی گزینه ها را به صورت پیش فرض رها کرده و اینتر بزنید. سپس ما کلیدهای تولید شده را به دایرکتوری keys کپی خواهیم کرد.

    نکته : ما پسوند .conf را به .ovpn تغییر خواهیم داد.
    کد PHP:
    cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn 
    فایل کپی شده را باز می کنیم.
    کد PHP:
    nano /etc/openvpn/easy-rsa/keys/client.ovpn 
    در فایل به جای your_server_ip آدرس آی پی سرور خود را تایپ کنید.
    کد PHP:
    /etc/openvpn/easy-rsa/keys/client.ovpn
    # The hostname/IP and port of the server.
    # You can have multiple remote entries
    # to load balance between the servers.
    remote your_server_ip 1194 
    و در قسمت زیر نیز user nobody و group nogroup را از حالت کامنت خارج کنید.
    کد PHP:
    /etc/openvpn/easy-rsa/keys/client.ovpn
    # Downgrade privileges after initialization (non-Windows only)
    user nobody
    group no group 

    انتقال کلیدها و ceritificate ها به سیستم کلاینت

    در اینجا می بایست چندین فایل را به دستگاه کلاینت منتقل کنید. کلید ها در مسیر /etc/openvpn/easy-rsa-keys وجود دارند. در این مثال فایلهای زیر را برای انتقال نیاز داریم.
    کد PHP:
    /etc/openvpn/easy-rsa/keys/client1.crt
    /etc/openvpn/easy-rsa/keys/client1.key
    /etc/openvpn/easy-rsa/keys/client.ovpn
    /etc/openvpn/ca.crt 

    با استفاده از برنامه های انتقال فایل همچون Winscp و یا SFTP و یا Filezilla می توانید فایل ها را منتقل کنید.



    مرحله نهم : ایجاد یک پروفایل OpenVPN واحد برای کلاینت ها

    به جای انتقال تمامی فایل ها می توانید کلید ها را در فایل .ovpn کپی کرده و تنها فایل ovpn را به کلاینت منقل کنید.
    برای این کار تغییرات زیر را انجام دهید.
    کد PHP:
    /etc/openvpn/easy-rsa/keys/client.ovpn
    # SSL/TLS parms.
    # . . .
    ;ca ca.crt
    ;cert client.crt
    ;key client.key 
    تغییرات را ذخیره کرده و خارج شوید. سپس دستورات زیر را در شل انجام دهید.


    اضافه کردن CA

    کد PHP:
    echo '<ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

    cat 
    /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn

    echo '</ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn 

    اضافه کردن Ceritificate ها

    کد PHP:
    echo '<cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

    cat 
    /etc/openvpn/easy-rsa/keys/client1.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn

    echo '</cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn 

    اضافه کردن کلیدها

    کد PHP:
    echo '<key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn

    cat 
    /etc/openvpn/easy-rsa/keys/client1.key >> /etc/openvpn/easy-rsa/keys/client.ovpn

    echo '</key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn 


    مرحله دهم : نصب پروفایل کلاینت

    نرم افزار زیر را از لینک زیر دریافت کرده و برروی کلاینت نصب کنید و فایل ovpn را در مسیر config قرار داده و برنامه را با دسترسی Administration اجرا کنید.
    کد PHP:
    C:\Program Files\OpenVPN\config 
    OpenVPN's Downloads page
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 04-09-2020, 04:26 AM.

    #2
    ممنونم ، اگه بخوایم از احراز هویت با یوزنیم و پسورد استفاده کنیم باید چه تغیراتی بدیم .

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

    کامنت

    درباره انجمن منطقه لینوکسی ها

    انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

    شبکه های اجتماعی

    ایمیل مدیریت

    Habili@linux-zone.org

    در حال انجام ...
    X