پیکر بندی open vpn
توسط Davatgar دذ ۲۸ آبان, ۱۳۹۴ دذ ۰۷:۳۰ قبل از ظهر | دسته‌بندی شده در امنیت شبکه, شبکه, گنو/لینوکس | با ۰ دیدگاه |785 views

در این مقاله چگونگی اتصال به openvpn از ipv6 و روی دبیان لینوکس شرح خواهیم داد. این پروسه با یک دبیان ۷ موجود روی kvm vps با اتصال ipv6 به عنوان سرور و یک debian 7 دسکتاپ به عنوان client تست شده است.
دستورات تحت root اجرا میشوند.

openvpn چیست ؟
openvpn یک برنامه vpn است که از ssl/tls برای ایجاد ارتباطات vpn امن و encrypted استفاده میکند و ترافیک اینترنت شما را rout میکند بنابراین از جاسوسی جلوگیری میکند. openvpn در سطح بالایی قادر به عبور واضحی از فایروال ها میباشد. در حقیقت شما میتوانید openvpn را روی tcp پورت یکسانی همانند https (پورت ۴۴۳) راه اندازی کنید که ترافیک غیرقابل تشخیص شود و بنابراین نتوان آن را فیلتر یا بلاک کرد.

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

چرا از openvpn استفاده کنیم ؟
اگر به ارتباطات امن فکر میکنید در حقیقت دارید به openvpn فکر میکنید. اگر نمیخواهید کسی روی ترافیک اینترنت تان جاسوسی کند از openvpn استفاده کنید تا تمام ترافیک تان را از طریق یک تانل امن و در سطح بالایی encrypt شده را rout کنید.
این ابزار علی الخصوص در اتصال به شبکه های wifi عمومی در فرودگاه ها و یا دیگر مکان ها بسیار مهم است شما هرگز نمیتوانید مطمین باشید که آیا ترافیک شما جاسوسی میشود یا نه؟ و میتوانید ترافیک تان را از طریق سرور openvpn شخصی خود کانال دهی کنید تا از snooping (جاسوسی) جلوگیری کنید.

اگر شما در هر کشوری هستید که به صورت روتین تمام ترافیک شما را مانیتور میکند و وب سایت ها را به دلخواه خودشان فیلتر میکند شما میتوانید از openvpn روی پورت tcp 443 استفاده کنید تا آن را از ترافیک https غیر قابل تشخیص کنید. همچنین میتوانید openvpn را با استراتژی های امنیتی دیگر مانند tunnelling ترافیک openvpn خود از طریق یک تانل ssl ترکیب کنید تا بتوانید جلوی تکنیک های بازرسی و جاسوسی حرفه ای پکت ها که ممکن است قادر به شناسایی openvpn signatures هم باشند را بگیرید.

تجهیزات مورد نیاز :
openvpn به حداقل تجهیزات نیاز دارد یک سیستم با ۶۴ مگابایت رم و ۱ گیگابایت فضای هارد برای راه اندازی openvpn کافیست و میتوانید آن را برروی اکثر سیستم عامل های موجود نصب و استفاده کنید.

نصب و کانفیگ openvpn روی debian 7 :
نصب openvpn روی سرور master :
دستور زیر رای برای نصب openvpn اجرا کنید :

کد:
# apt-get install openvpn

به صورت پیشفرض اسکریپت های easy-rsa در دایرکتوری /user/share/easy-rsa/ بنابراین ما باید این اسکریپت ها را به مسیر دلخواه مانند /root/easy-rsa/ کپی کنید :

کد:
# mkdir /root/easy-rsa 
cp -prv /usr/share/doc/openvpn/examples/easy-rsa/2.0 /root/easy-rsa

ایجاد CA Certificate و CA Key :
فایل vars را باز کنید و تغییرات زیر را لحاظ کنید اما پیشنهاد میکنم قبل از اعمال هر تغییری یک بک آپ از فایل اصلی بگیرید :

کد:
# cp vars{,.orig}

با استفاده از ادیتور متنی خود مقادیر پیش فرض را برای easy-rsa تعریف کنید. به طور مثال :

کد:
KEY_SIZE=4096
 KEY_COUNTRY="IN"
 KEY_PROVINCE="UP"
 KEY_CITY="Noida"
 KEY_ORG="Home" 
KEY_EMAIL="[email protected]"

در اینجا من از یک key که ۴۰۹۶ بیت هست استفاده میکنم. شما میتوانید یک key که ۱۰۲۴ , ۲۰۴۸ , ۴۰۹۶ یا ۸۱۹۲ بیت باشد به دلخواه خود استفاده کنید.
با اجرای دستور زیر مقدارهای پیش فرض را اکسپورت کنید :

کد:
# source ./vars

با دستور زیر هر certificates که قبلا ایجاد شده را پاک کنید :

کد:
./clean-all

سپس برای ایجاد ca certificate و ca key دستور زیر را اجرا کنید :

کد:
# ./build-ca

بااستفاده از دستور زیر certificate سرور را ایجاد میکنیم دقت کنید که به جای server-name نام سرور خود را قرار دهید :

کد:
# ./build-key-server server-name

ایجاد Diffie Hellman PEM Certificate :

کد:
# ./build-dh

ایجاد certificate کلاینت :
به جای client-name نام کلاینت خود را قرار دهید :

کد:
# ./build-key client-name

ایجاد HMAC code :

کد:
# openvpn --genkey --secret /root/easy-rsa/keys/ta.key

certificate های ایجاد شده را به ماشین های کلاینت و سرور همانند زیر کپی کنید :

۱ – مطمین شوید که فایل ca.crt در هر دو ماشین سرور و کلاینت موجود باشد.
۲ – فایل ca.key باید تنها در کلاینت موجود باشد.
۳ – سرور نیاز به فایل های server.crt , dh4096.pem , server.key و ta.key دارد.
۴ – فایل های client.crt , client,key باید روی client موجود باشند.

برای نصب keys و certificate روی سرور دستور زیر را اجرا کنید :

کد:
# mkdir -p /etc/openvpn/certs # 
cp -pv /root/easy-rsa/keys/{ca.{crt,key},server-name.{crt,key},ta.key,dh4096.pem} /etc/openvpn/certs/

کانفیگ سرور openvpn :
اکنون شما نیاز دارید سرور openvpn را کانفیگ کنید. فایل /etc/openvpn/server.conf/ را باز کنید و تغییرات را همانند آنچه که در زیر موجود است اعمال کنید :

کد:

 

 

 

کد:

script security 3 
system port 1194 
proto udp 
dev tap  
ca /etc/openvpn/certs/ca.crt 
cert /etc/openvpn/certs/server-name.crt 
key /etc/openvpn/certs/server-name.key 
dh /etc/openvpn/certs/dh4096.pem 
tls-auth /etc/openvpn/certs/ta.key 0  
server 192.168.88.0 255.255.255.0 
ifconfig-pool-persist ipp.txt 
push "redirect-gateway def1 bypass-dhcp" 
push "dhcp-option DNS 8.8.8.8" 
push "dhcp-option DNS 8.8.4.4"  
keepalive 1800 4000  
cipher DES-EDE3-CBC # Triple-DES 
comp-lzo  max-clients 10  
user nobody 
group nogroup  
persist-key 
persist-tun 
 #log openvpn.log 
#status openvpn-status.log 
verb 5 
mute 20

فعال سازی ip forwarding روی سرور :

کد:
# echo 1 > /proc/sys/net/ipv4/ip_forward

دستور زیر را اجرا کنید تا openvpn در زمان بوت start شود. (start on boot)

کد:
# update-rc.d -f openvpn defaults

start کردن سرویس openvpn :

کد:
# service openvpn restart

نصب openvpn روی client :
با استفاده از دستور زیر openvpn را روی ماشین کلاینت نصب میکنید :

کد:
# apt-get install openvpn

با استفاده از یک ادیتور متن فایل کانفیگ کلاینت openvpn در مسیر /etc/openvpn/client.conf/ را تنظیم کنید. نمونه ای از این فایل در زیر موجود است :

کد:

script security 3 system 
client 
remote vpn_server_ip 
ca /etc/openvpn/certs/ca.crt 
cert /etc/openvpn/certs/client.crt 
key /etc/openvpn/certs/client.key 
cipher DES-EDE3-CBC 
comp-lzo yes 
dev tap 
proto udp 
tls-auth /etc/openvpn/certs/ta.key 1 
nobind 
auth-nocache 
persist-key
 persist-tun 
user nobody 
group nogroup

با استفاده از دستور زیر تعریف میکنیم که openvpn هنگام بوت start شود :

کد:
# update-rc.d -f openvpn defaults

start کردن سرویس openvpn روی client :
به محض اینکه شما از کارکرد openvpn روی ipv4 راضی شدید وقت آن است که از نحوه کار openvpn روی ipv6 بدانید.

کد:
# service openvpn restart

کار کردن ipv6 با openvpn روی سرور :

خطوط زیر را به انتهای فایل کانفیگ سرور /etc/openvpn/server.conf/ اضافه کنید :

کد:
client-connect /etc/openvpn/client-connect.sh 
client-disconnect /etc/openvpn/client-disconnect.sh

۲ اسکریپت زیر برای ایجاد و تخریب تانل ipv6 میباشد که هربار که یک کلاینت conect یا disconect میشود اجرا میگردد. محتوای client-conect.sh به شرح زیر میباشد :

کد:
#!/bin/bash 
BASERANGE="2a00:dd80:003d:000c" 
ifconfig $dev up 
ifconfig $dev add ${BASERANGE}:1001::1/64 
ip -6 neigh add proxy 2a00:dd80:003d:000c:1001::2 dev eth0 
exit 0

host من ادرس های ipv6 از ۲a00:dd80:003d:000c::/6 بلاک این را به من اختصاص میدهد. بعلاوه من ۲a00:dd80:003d:000c را به عنوان BASERANGE استفاده میکند. این مقدار را با توجه به انچه که host تان به شما اختصاص میدهد تغییر دهید.

هر بار که یک کلاینت به openvpn کانکت میشود این اسکریپت آدرس ۲a00:dd80:003d:000c:1001::1 را به عنوان آدرس ipv6 مربوط به اینترفیس tap0 روی سرور را به کلاینت اختصاص میدهد.

خط آخر Neighbour Discovery را برای تانل شما تنظیم میکند من آدرس ipv6 مربوط به سمت کلاینت را به عنوان آدرس proxy اضافه کردم.

در زیر محتوای client-disconnect.sh را مشاهده میکنید :

کد:
#!/bin/bash 
BASERANGE="2a00:dd80:003d:000c" 
/sbin/ip -6 addr del ${BASERANGE}::1/64 dev $dev 
exit 0

زمانی که کلاینت disconect میشود این اسکریپت تنها آدرس تانل ipv6 سرور را پاک میکند. مقدار BASERANG را به مقدار مناسب تغییر دهید.

با استفاده از دستور های زیر ۲ اسکریپت را قابل اجرا (executable) میسازیم :

کد:
# chmod 700 /etc/openvpn/client-connect.sh # 
chmod 700 /etc/openvpn/client-disconnect.sh

موارد زیر را به /etc/rc.local/ اضافه میکنیم. (همچنین میتوانید sysctl مناسب در /etc/sysctl.conf/ را تغییر دهید :

کد:
echo 1 >/proc/sys/net/ipv6/conf/all/proxy_ndp 
echo 1 > /proc/sys/net/ipv4/ip_forward 
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding 
/etc/init.d/firewall stop && /etc/init.d/firewall start

این موارد neighbor discovery و forwarding را فعال میکند. همچنین یک فایروال اضافه کردم.

فایل /etc/init.d/firewall/ را ایجاد کرده و محتوای زیر را در آن قرار دهید :

کد:
#!/bin/sh # 
description: Firewall 
IPT=/sbin/iptables 
IPT6=/sbin/ip6tables 
case "$1" in 
start) 
$IPT -F INPUT 
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT 
$IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT 
$IPT -A INPUT -i eth0 -p icmp -j ACCEPT 
$IPT -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT 
$IPT -A INPUT -i tap+ -j ACCEPT 
$IPT -A FORWARD -i tap+ -j ACCEPT 
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 
$IPT -t nat -F POSTROUTING 
$IPT -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE 
$IPT -A INPUT -i eth0 -j DROP 
$IPT6 -F INPUT
 $IPT6 -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT 
$IPT6 -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT 
$IPT6 -A INPUT -i eth0 -p icmpv6 -j ACCEPT 
$IPT6 -A FORWARD -s 2a00:dd80:003d:000c::/64 -i tap0 -o eth0 -j ACCEPT 
$IPT6 -A INPUT -i eth0 -j DROP 
exit 0 
;; 
stop) 
$IPT -F 
$IPT6 -F 
exit 0
 ;;
 *) 
echo "Usage: /etc/init.d/firewall {start|stop}" 
exit 1 
;; 
esac

اسکریپت /etc/rc.local/ را اجرا کنید و فایروال را start کنید :

کد:
# sh /etc/rc.local

در این مرحله تغییرات سمت سرور کامل میشود.

کار کردن ipv6 با openvpn روی client :

خطوط زیر را به انتهای فایل کانفیگ سرور /etc/openvpn/client.conf/ اضافه کنید :

کد:
# create the ipv6 tunnel up /etc/openvpn/up.sh down /etc/openvpn/down.sh # need this so when the client disconnects it tells the server explicit-exit-notify

۲ اسکریپت up/down زیر برای ایجاد و تخریب تانل ipv6 کلاینت میباشد که هربار که یک کلاینت conect یا disconect میشود اجرا میگردد.

محتوای up.sh به شرح زیر میباشد :

کد:
#!/bin/bash 
IPV6BASE="2a00:dd80:3d:c" 
ifconfig $dev up 
ifconfig $dev add ${IPV6BASE}:1001::2/64 
ip -6 route add default via ${IPV6BASE}:1001::1 
exit 0

اسکریپت آدرس ipv6 این ۲a00:dd80:3d:c:1001::2 را به عنوان آدرس ipv6 کلاینت اختصاص میدهد و route i مربوط به ipv6 پیش فرض را از طریق سرور تنظیم میکند.

IPV6BASE را تغییر دهید تا در تنظیمات سرور همانند BASERANGE میباشد.

محتوای down.sh به شرح زیر میباشد :

کد:
#!/bin/bash
 IPV6BASE="2a00:dd80:3d:c" 
/sbin/ip -6 addr del ${IPV6BASE}::2/64 dev $dev 
/sbin/ip link set dev $dev down 
/sbin/ip route del ::/0 via ${IPV6BASE}::1 
exit 0

این اسکریپت تنها آدرس ipv6 کلاینت را پاک میکند و route مربوطه را در زمان disconect کلاینت و سرور از بین میبرد.

IPV6BASE را تغییر دهید تا برابر با BASERANGE در تنظیمات سرور شود همچنین به اسکریپت ها پرمیژن اجرایی بدهید :

کد:
# chmod 700 /etc/openvpn/up.sh 
# chmod 700 /etc/openvpn/down.sh

به صورت اختیاری میتوانید /etc/resolv.conf/ را تغییر دهید و nameserver های google را به عنوان DNS اضافه میکنید :

کد:
nameserver 2001:4860:4860::8888 
nameserver 2001:4860:4860::8844

سرویس openvpn را در سمت سرور restart کنید و از کلاینت به آن متصل شوید. شما باید بتوانید کانکت شوید. برای مشاهده جزییات بیشتر در مورد اتصال ipv6 از طریق openvpn لینک زیر را مشاهده بفرمایید :
http://test-ipv6.com/

درباره - رشته تحصیلیم مهندسی عمران هست، در این گروه به عنوان گرافیست فعالیت می کنم.

دیدگاه‌ها بسته شده‌اند