مضمون میں اوپن سورس پروڈکٹس پر ملازمین کے لیے ریموٹ رسائی کی تنظیم کی وضاحت کی گئی ہے اور اسے مکمل طور پر خود مختار نظام بنانے کے لیے استعمال کیا جا سکتا ہے، اور یہ توسیع کے لیے مفید ہو گا جب موجودہ تجارتی نظام میں لائسنس کی کمی ہو یا اس کی کارکردگی ناکافی ہو۔
مضمون کا مقصد کسی تنظیم تک ریموٹ رسائی فراہم کرنے کے لیے ایک مکمل نظام کو نافذ کرنا ہے، جو کہ "10 منٹ میں OpenVPN انسٹال کرنے" سے کچھ زیادہ ہے۔
نتیجے کے طور پر، ہمیں ایک ایسا نظام ملے گا جس میں سرٹیفکیٹ اور (اختیاری طور پر) کارپوریٹ ایکٹو ڈائریکٹری صارفین کی تصدیق کے لیے استعمال کی جائے گی۔ وہ. ہمیں دو تصدیقی عوامل کے ساتھ ایک نظام ملے گا - میرے پاس کیا ہے (سرٹیفکیٹ) اور میں کیا جانتا ہوں (پاس ورڈ)۔
صارف کو جوڑنے کی اجازت دینے کی علامت myVPNUsr گروپ میں ان کی رکنیت ہے۔ سرٹیفکیٹ اتھارٹی آف لائن استعمال کی جائے گی۔
حل کو لاگو کرنے کی لاگت صرف چھوٹے ہارڈویئر وسائل اور سسٹم ایڈمنسٹریٹر کا 1 گھنٹہ کام ہے۔
ہم CetntOS 3 پر OpenVPN اور Easy-RSA ورژن 7 کے ساتھ ایک ورچوئل مشین استعمال کریں گے، جس میں 100 vCPUs اور 4 GiB RAM فی 4 کنکشنز مختص کیے گئے ہیں۔
مثال کے طور پر، ہماری تنظیم کا نیٹ ورک 172.16.0.0/16 ہے، جس میں ایڈریس 172.16.19.123 کے ساتھ VPN سرور سیگمنٹ 172.16.19.0/24، DNS سرورز 172.16.16.16 اور 172.16.17.17 اور ذیلی 172.16.20.0 میں واقع ہے۔ .23/XNUMX VPN کلائنٹس کے لیے مختص کیا گیا ہے۔
باہر سے جڑنے کے لیے، پورٹ 1194/udp کے ذریعے ایک کنکشن استعمال کیا جاتا ہے، اور ہمارے سرور کے لیے DNS میں ایک A-ریکارڈ gw.abc.ru بنایا گیا ہے۔
SELinux کو غیر فعال کرنے کی سختی سے سفارش نہیں کی جاتی ہے! اوپن وی پی این سیکیورٹی پالیسیوں کو غیر فعال کیے بغیر کام کرتا ہے۔
ہم CentOS 7.8.2003 کی تقسیم کا استعمال کرتے ہیں۔ ہمیں OS کو کم سے کم ترتیب میں انسٹال کرنے کی ضرورت ہے۔ اس کا استعمال کرتے ہوئے ایسا کرنا آسان ہے۔ شروعات کریں، پہلے سے انسٹال کردہ OS امیج اور دیگر ذرائع کی کلوننگ۔
انسٹالیشن کے بعد، نیٹ ورک انٹرفیس کو ایڈریس تفویض کرنا (ٹاسک کی شرائط 172.16.19.123 کے مطابق)، ہم OS کو اپ ڈیٹ کرتے ہیں:
$ sudo yum update -y && reboot
ہمیں یہ بھی یقینی بنانا ہوگا کہ ہماری مشین پر وقت کی مطابقت پذیری کی گئی ہے۔
ایپلیکیشن سوفٹ ویئر انسٹال کرنے کے لیے، آپ کو اوپن وی پی این، اوپن وی پی این-آتھ-ل ڈیاپ، ایزی-آر ایس اے اور ویم پیکجز کی ضرورت ہے بطور مین ایڈیٹر (آپ کو EPEL ریپوزٹری کی ضرورت ہوگی)۔
مشروط تنظیم ABC LLC کے پیرامیٹرز یہاں بیان کیے گئے ہیں؛ آپ ان کو درست کر سکتے ہیں یا انہیں مثال سے چھوڑ سکتے ہیں۔ پیرامیٹرز میں سب سے اہم چیز آخری لائن ہے، جو دنوں میں سرٹیفکیٹ کی درستگی کی مدت کا تعین کرتی ہے۔ مثال 10 سال (365*10+2 لیپ سال) کا استعمال کرتی ہے۔ صارف کے سرٹیفکیٹ جاری ہونے سے پہلے اس قدر کو ایڈجسٹ کرنے کی ضرورت ہوگی۔
اگلا، ہم ایک خود مختار سرٹیفیکیشن اتھارٹی تشکیل دیتے ہیں۔
سیٹ اپ میں متغیرات کو برآمد کرنا، CA کو شروع کرنا، CA روٹ کلید اور سرٹیفکیٹ جاری کرنا، Diffie-Hellman کلید، TLS کلید، اور سرور کلید اور سرٹیفکیٹ شامل ہیں۔ CA کلید کو احتیاط سے محفوظ اور خفیہ رکھا جانا چاہیے! تمام استفسار کے پیرامیٹرز کو بطور ڈیفالٹ چھوڑا جا سکتا ہے۔
یہ کرپٹوگرافک میکانزم کو ترتیب دینے کا بنیادی حصہ مکمل کرتا ہے۔
OpenVPN ترتیب دینا
OpenVPN ڈائرکٹری پر جائیں، سروس ڈائریکٹریز بنائیں اور easy-rsa میں ایک لنک شامل کریں:
cd /etc/openvpn/
mkdir /var/log/openvpn/ /etc/openvpn/ccd /usr/share/easy-rsa/3/client
ln -s /usr/share/easy-rsa/3/pki/ /etc/openvpn/
مین اوپن وی پی این کنفیگریشن فائل بنائیں:
$ sudo vim server.conf
مندرجہ ذیل مواد
port 1194
proto udp
dev tun
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/myvpngw.crt
key /etc/openvpn/pki/private/myvpngw.key
crl-verify /etc/openvpn/pki/crl.pem
dh /etc/openvpn/pki/dh.pem
server 172.16.20.0 255.255.254.0
ifconfig-pool-persist ipp.txt
push "route 172.16.0.0 255.255.255.0"
push "route 172.17.0.0 255.255.255.0"
client-config-dir ccd
push "dhcp-option DNS 172.16.16.16"
push "dhcp-option DNS 172.16.17.17"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
username-as-common-name
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so /etc/openvpn/ldap.conf
پیرامیٹرز پر کچھ نوٹ:
اگر سرٹیفکیٹ جاری کرتے وقت کوئی مختلف نام بیان کیا گیا ہو تو اس کی نشاندہی کریں۔
آپ کے کاموں کے مطابق پتے کے پول کی وضاحت کریں*؛
ایک یا زیادہ راستے اور DNS سرور ہو سکتے ہیں۔
AD** میں تصدیق کو نافذ کرنے کے لیے آخری 2 لائنوں کی ضرورت ہے۔
*مثال میں منتخب کردہ پتوں کی رینج 127 کلائنٹس کو بیک وقت مربوط ہونے کی اجازت دے گی، کیونکہ /23 نیٹ ورک کو منتخب کیا گیا ہے، اور OpenVPN /30 ماسک کا استعمال کرتے ہوئے ہر کلائنٹ کے لیے ایک سب نیٹ بناتا ہے۔
اگر خاص طور پر ضروری ہو تو، پورٹ اور پروٹوکول کو تبدیل کیا جا سکتا ہے، تاہم، یہ ذہن میں رکھنا چاہیے کہ پورٹ پورٹ نمبر کو تبدیل کرنے سے SELinux کو کنفیگر کرنا پڑے گا، اور tcp پروٹوکول کے استعمال سے اوور ہیڈ بڑھ جائے گا، کیونکہ TCP پیکٹ کی ترسیل کا کنٹرول پہلے سے ہی سرنگ میں موجود پیکٹوں کی سطح پر انجام پا چکا ہے۔
**اگر AD میں تصدیق کی ضرورت نہیں ہے، تو ان پر تبصرہ کریں، اگلے حصے کو چھوڑ دیں، اور ٹیمپلیٹ میں auth-user-pass لائن کو ہٹا دیں۔.
AD کی توثیق
دوسرے عنصر کو سپورٹ کرنے کے لیے، ہم AD میں اکاؤنٹ کی تصدیق کا استعمال کریں گے۔
ہمیں ڈومین میں ایک اکاؤنٹ کی ضرورت ہے جس میں ایک عام صارف اور ایک گروپ کے حقوق ہوں، رکنیت جس میں رابطہ قائم کرنے کی صلاحیت کا تعین کیا جائے۔
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
سرٹیفکیٹ کا مسئلہ اور تنسیخ
کیونکہ خود سرٹیفکیٹس کے علاوہ، آپ کو چابیاں اور دیگر ترتیبات کی ضرورت ہے؛ یہ سب ایک پروفائل فائل میں لپیٹنا بہت آسان ہے۔ اس فائل کو پھر صارف کو منتقل کیا جاتا ہے اور پروفائل OpenVPN کلائنٹ پر درآمد کیا جاتا ہے۔ ایسا کرنے کے لیے، ہم ایک سیٹنگ ٹیمپلیٹ اور اسکرپٹ بنائیں گے جو پروفائل تیار کرتا ہے۔
آپ کو روٹ سرٹیفکیٹ (ca.crt) اور TLS کلید (ta.key) فائلوں کے مواد کو پروفائل میں شامل کرنے کی ضرورت ہے۔
صارف سرٹیفکیٹ جاری کرنے سے پہلے سرٹیفکیٹس کے لیے مطلوبہ میعاد کی مدت متعین کرنا نہ بھولیں۔ پیرامیٹرز فائل میں۔ آپ کو اسے زیادہ لمبا نہیں کرنا چاہئے؛ میں خود کو زیادہ سے زیادہ 180 دنوں تک محدود رکھنے کی تجویز کرتا ہوں۔
vim /usr/share/easy-rsa/3/vars
...
export EASYRSA_CERT_EXPIRE=180
vim /usr/share/easy-rsa/3/client/template.ovpn
client
dev tun
proto udp
remote gw.abc.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
PUT YOUR CA CERT (ca.crt) HERE
-----END CERTIFICATE-----
</ca>
key-direction 1
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
PUT YOUR TA KEY (ta.key) HERE
-----END OpenVPN Static key V1-----
</tls-auth>
نوٹ:
ڈور اپنا ڈالو... مواد میں تبدیلی ان کا اپنا سرٹیفکیٹ؛
ریموٹ ڈائرکٹیو میں، اپنے گیٹ وے کا نام/پتہ بتا دیں۔
auth-user-pass directive کو اضافی بیرونی تصدیق کے لیے استعمال کیا جاتا ہے۔
ہوم ڈائریکٹری (یا دوسری آسان جگہ) میں ہم سرٹیفکیٹ کی درخواست کرنے اور پروفائل بنانے کے لیے اسکرپٹ بناتے ہیں:
vim ~/make.profile.sh
#!/bin/bash
if [ -z "$1" ] ; then
echo Missing mandatory client name. Usage: $0 vpn-username
exit 1
fi
#Set variables
basepath=/usr/share/easy-rsa/3
clntpath=$basepath/client
privpath=$basepath/pki/private
certpath=$basepath/pki/issued
profile=$clntpath/$1.ovpn
#Get current year and lowercase client name
year=`date +%F`
client=${1,,}
echo Processing $year year cert for user/device $client
cd $basepath
if [ -f client/$client* ]; then
echo "*** ERROR! ***"
echo "Certificate $client already issued!"
echo "*** ERROR! ***"
exit 1
fi
. ./vars
./easyrsa --batch --req-cn=$client gen-req $client nopass
./easyrsa --batch sign-req client $client
#Make profile
cp $clntpath/template.ovpn $profile
echo "<key>" >> $profile
cat $privpath/$1.key >> $profile
echo "</key>" >> $profile
echo -e "n" >> $profile
openssl x509 -in $certpath/$1.crt -out $basepath/$1.crt
echo "<cert>" >> $profile
cat $basepath/$1.crt >> $profile
echo "</cert>" >> $profile
echo -e "n" >> $profile
#remove tmp file
rm -f $basepath/$1.crt
echo Complete. See $profile file.
cd ~
فائل کو قابل عمل بنانا:
chmod a+x ~/make.profile.sh
اور ہم اپنا پہلا سرٹیفکیٹ جاری کر سکتے ہیں۔
~/make.profile.sh my-first-user
تاثرات
کسی سرٹیفکیٹ (نقصان، چوری) سے سمجھوتہ کرنے کی صورت میں اس سرٹیفکیٹ کو منسوخ کرنا ضروری ہے:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
جاری کردہ اور منسوخ شدہ سرٹیفکیٹ دیکھیں
جاری کردہ اور منسوخ شدہ سرٹیفکیٹ دیکھنے کے لیے، بس انڈیکس فائل دیکھیں:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
وضاحت:
پہلی سطر سرور سرٹیفکیٹ ہے؛
پہلا کردار
V (Valid) - درست؛
R (منسوخ) - واپس بلایا گیا۔
نیٹ ورک سیٹ اپ
آخری مراحل ٹرانسمیشن نیٹ ورک - روٹنگ اور فائر والز کو ترتیب دینا ہے۔
کارپوریٹ ماحول میں، سب نیٹنگ ہونے کا امکان ہوتا ہے اور ہمیں روٹر (ز) کو یہ بتانے کی ضرورت ہوتی ہے کہ ہمارے VPN کلائنٹس کے لیے تیار کردہ پیکٹ کیسے بھیجے جائیں۔ کمانڈ لائن پر ہم کمانڈ کو اس طریقے سے چلاتے ہیں (استعمال شدہ آلات پر منحصر ہے):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
اور کنفیگریشن کو محفوظ کریں۔
اس کے علاوہ، بارڈر روٹر انٹرفیس پر جہاں بیرونی ایڈریس gw.abc.ru پیش کیا جاتا ہے، udp/1194 پیکٹوں کو گزرنے کی اجازت دینا ضروری ہے۔
اگر تنظیم کے سخت حفاظتی اصول ہیں، تو ہمارے VPN سرور پر فائر وال کو بھی ترتیب دینا ضروری ہے۔ میری رائے میں، سب سے بڑی لچک iptables FORWARD زنجیروں کو ترتیب دے کر فراہم کی جاتی ہے، حالانکہ انہیں ترتیب دینا کم آسان ہے۔ ان کو ترتیب دینے کے بارے میں کچھ اور۔ ایسا کرنے کے لئے، "براہ راست قواعد" - براہ راست قواعد، فائل میں ذخیرہ کرنے کے لئے یہ سب سے آسان ہے /etc/firewalld/direct.xml. قواعد کی موجودہ ترتیب مندرجہ ذیل کے طور پر پایا جا سکتا ہے:
$ sudo firewall-cmd --direct --get-all-rule
فائل کو تبدیل کرنے سے پہلے، اس کی بیک اپ کاپی بنائیں:
یہ بنیادی طور پر iptables کے باقاعدہ اصول ہیں، بصورت دیگر فائر والڈ کی آمد کے بعد پیک کیا جاتا ہے۔
پہلے سے طے شدہ ترتیبات کے ساتھ منزل کا انٹرفیس tun0 ہے، اور سرنگ کا بیرونی انٹرفیس مختلف ہو سکتا ہے، مثال کے طور پر، ens192، استعمال کیے گئے پلیٹ فارم کے لحاظ سے۔
آخری لائن گرے ہوئے پیکٹوں کو لاگنگ کرنے کے لیے ہے۔ کام پر لاگ ان کرنے کے لیے، آپ کو فائر والڈ کنفیگریشن میں ڈیبگ لیول کو تبدیل کرنے کی ضرورت ہے:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
ترتیبات کو دوبارہ پڑھنے کے لیے ترتیبات کو لاگو کرنا معمول کی فائر والڈ کمانڈ ہے:
$ sudo firewall-cmd --reload
آپ گرے ہوئے پیکٹ اس طرح دیکھ سکتے ہیں:
grep forward_fw /var/log/messages
آگے کیا ہے
یہ سیٹ اپ مکمل کرتا ہے!
جو کچھ باقی ہے وہ کلائنٹ کی طرف سے کلائنٹ سافٹ ویئر کو انسٹال کرنا، پروفائل درآمد کرنا اور جڑنا ہے۔ ونڈوز آپریٹنگ سسٹمز کے لیے، ڈسٹری بیوشن کٹ پر واقع ہے۔ ڈویلپر کی ویب سائٹ.
آخر میں، ہم اپنے نئے سرور کو مانیٹرنگ اور آرکائیونگ سسٹم سے منسلک کرتے ہیں، اور باقاعدگی سے اپ ڈیٹس انسٹال کرنا نہ بھولیں۔