OpenVPN پر SMB تنظیم کے دور دراز کام کی تنظیم

مسئلہ کی تشکیل

مضمون میں اوپن سورس پروڈکٹس پر ملازمین کے لیے ریموٹ رسائی کی تنظیم کی وضاحت کی گئی ہے اور اسے مکمل طور پر خود مختار نظام بنانے کے لیے استعمال کیا جا سکتا ہے، اور یہ توسیع کے لیے مفید ہو گا جب موجودہ تجارتی نظام میں لائسنس کی کمی ہو یا اس کی کارکردگی ناکافی ہو۔

مضمون کا مقصد کسی تنظیم تک ریموٹ رسائی فراہم کرنے کے لیے ایک مکمل نظام کو نافذ کرنا ہے، جو کہ "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 کو غیر فعال کرنے کی سختی سے سفارش نہیں کی جاتی ہے! اوپن وی پی این سیکیورٹی پالیسیوں کو غیر فعال کیے بغیر کام کرتا ہے۔

مواد

  1. OS اور ایپلیکیشن سافٹ ویئر کی تنصیب
  2. خفیہ نگاری ترتیب دینا
  3. OpenVPN ترتیب دینا
  4. AD کی توثیق
  5. آغاز اور تشخیص
  6. سرٹیفکیٹ کا مسئلہ اور تنسیخ
  7. نیٹ ورک سیٹ اپ
  8. آگے کیا ہے

OS اور ایپلیکیشن سافٹ ویئر کی تنصیب

ہم CentOS 7.8.2003 کی تقسیم کا استعمال کرتے ہیں۔ ہمیں OS کو کم سے کم ترتیب میں انسٹال کرنے کی ضرورت ہے۔ اس کا استعمال کرتے ہوئے ایسا کرنا آسان ہے۔ شروعات کریں، پہلے سے انسٹال کردہ OS امیج اور دیگر ذرائع کی کلوننگ۔

انسٹالیشن کے بعد، نیٹ ورک انٹرفیس کو ایڈریس تفویض کرنا (ٹاسک کی شرائط 172.16.19.123 کے مطابق)، ہم OS کو اپ ڈیٹ کرتے ہیں:

$ sudo yum update -y && reboot

ہمیں یہ بھی یقینی بنانا ہوگا کہ ہماری مشین پر وقت کی مطابقت پذیری کی گئی ہے۔
ایپلیکیشن سوفٹ ویئر انسٹال کرنے کے لیے، آپ کو اوپن وی پی این، اوپن وی پی این-آتھ-ل ڈیاپ، ایزی-آر ایس اے اور ویم پیکجز کی ضرورت ہے بطور مین ایڈیٹر (آپ کو EPEL ریپوزٹری کی ضرورت ہوگی)۔

$ sudo yum install epel-release
$ sudo yum install openvpn openvpn-auth-ldap easy-rsa vim

ورچوئل مشین کے لیے گیسٹ ایجنٹ کو انسٹال کرنا مفید ہے:

$ sudo yum install open-vm-tools

VMware ESXi میزبانوں کے لیے، یا oVirt کے لیے

$ sudo yum install ovirt-guest-agent

خفیہ نگاری ترتیب دینا

easy-rsa ڈائریکٹری پر جائیں:

$ cd /usr/share/easy-rsa/3/

متغیر فائل بنائیں:

$ sudo vim vars

مندرجہ ذیل مواد:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="[email protected]"
export KEY_CN="allUsers"
export KEY_OU="allUsers"
export KEY_NAME="gw.abc.ru"
export KEY_ALTNAMES="abc-openvpn-server"
export EASYRSA_CERT_EXPIRE=3652

مشروط تنظیم ABC LLC کے پیرامیٹرز یہاں بیان کیے گئے ہیں؛ آپ ان کو درست کر سکتے ہیں یا انہیں مثال سے چھوڑ سکتے ہیں۔ پیرامیٹرز میں سب سے اہم چیز آخری لائن ہے، جو دنوں میں سرٹیفکیٹ کی درستگی کی مدت کا تعین کرتی ہے۔ مثال 10 سال (365*10+2 لیپ سال) کا استعمال کرتی ہے۔ صارف کے سرٹیفکیٹ جاری ہونے سے پہلے اس قدر کو ایڈجسٹ کرنے کی ضرورت ہوگی۔

اگلا، ہم ایک خود مختار سرٹیفیکیشن اتھارٹی تشکیل دیتے ہیں۔

سیٹ اپ میں متغیرات کو برآمد کرنا، CA کو شروع کرنا، CA روٹ کلید اور سرٹیفکیٹ جاری کرنا، Diffie-Hellman کلید، TLS کلید، اور سرور کلید اور سرٹیفکیٹ شامل ہیں۔ CA کلید کو احتیاط سے محفوظ اور خفیہ رکھا جانا چاہیے! تمام استفسار کے پیرامیٹرز کو بطور ڈیفالٹ چھوڑا جا سکتا ہے۔

cd /usr/share/easy-rsa/3/
. ./vars
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-dh
./easyrsa gen-req myvpngw nopass
./easyrsa sign-req server myvpngw
./easyrsa gen-crl
openvpn --genkey --secret pki/ta.key

یہ کرپٹوگرافک میکانزم کو ترتیب دینے کا بنیادی حصہ مکمل کرتا ہے۔

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 میں اکاؤنٹ کی تصدیق کا استعمال کریں گے۔

ہمیں ڈومین میں ایک اکاؤنٹ کی ضرورت ہے جس میں ایک عام صارف اور ایک گروپ کے حقوق ہوں، رکنیت جس میں رابطہ قائم کرنے کی صلاحیت کا تعین کیا جائے۔

کنفیگریشن فائل بنائیں:

/etc/openvpn/ldap.conf

مندرجہ ذیل مواد

<LDAP>
        URL             "ldap://ldap.abc.ru"
        BindDN          "CN=bindUsr,CN=Users,DC=abc,DC=ru"
        Password        b1ndP@SS
        Timeout         15
        TLSEnable       no
        FollowReferrals yes
</LDAP>
<Authorization>
        BaseDN          "OU=allUsr,DC=abc,DC=ru"
        SearchFilter    "(sAMAccountName=%u)"
        RequireGroup    true
        <Group>
                BaseDN          "OU=myGrp,DC=abc,DC=ru"
                SearchFilter    "(cn=myVPNUsr)"
                MemberAttribute "member"
        </Group>
</Authorization>

کلیدی پیرامیٹرز:

  • URL "ldap://ldap.abc.ru" - ڈومین کنٹرولر ایڈریس؛
  • BindDN "CN=bindUsr,CN=Users,DC=abc,DC=ru" - LDAP کو بائنڈنگ کرنے کے لیے کینونیکل نام (UZ - bindUsr abc.ru/Users کنٹینر میں)؛
  • پاس ورڈ b1ndP@SS — بائنڈنگ کے لیے صارف کا پاس ورڈ؛
  • BaseDN "OU=allUsr,DC=abc,DC=ru" — وہ راستہ جہاں سے صارف کی تلاش شروع کرنی ہے۔
  • BaseDN "OU=myGrp,DC=abc,DC=ru" - اجازت دینے والے گروپ کا کنٹینر (کنٹینر abc.rumyGrp میں myVPNUsr گروپ)؛
  • سرچ فلٹر "(cn=myVPNUsr)" اجازت دینے والے گروپ کا نام ہے۔

آغاز اور تشخیص

اب ہم اپنے سرور کو فعال اور شروع کرنے کی کوشش کر سکتے ہیں:

$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]

آغاز چیک:

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 (منسوخ) - واپس بلایا گیا۔

نیٹ ورک سیٹ اپ

آخری مراحل ٹرانسمیشن نیٹ ورک - روٹنگ اور فائر والز کو ترتیب دینا ہے۔

مقامی فائر وال میں کنکشن کی اجازت دینا:

$ sudo firewall-cmd --add-service=openvpn
$ sudo firewall-cmd --add-service=openvpn --permanent

اگلا، IP ٹریفک روٹنگ کو فعال کریں:

$ sudo sysctl net.ipv4.ip_forward=1
$ sudo echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/50-sysctl.conf

کارپوریٹ ماحول میں، سب نیٹنگ ہونے کا امکان ہوتا ہے اور ہمیں روٹر (ز) کو یہ بتانے کی ضرورت ہوتی ہے کہ ہمارے 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

فائل کو تبدیل کرنے سے پہلے، اس کی بیک اپ کاپی بنائیں:

cp /etc/firewalld/direct.xml /etc/firewalld/direct.xml.`date +%F.%T`.bak

فائل کے تخمینی مواد یہ ہیں:

<?xml version="1.0" encoding="utf-8"?>
<direct>
 <!--Common Remote Services-->
  <!--DNS-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o ens192 -p udp --dport 53 -j ACCEPT</rule>
  <!--web-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.200 --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.201 --dport 443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
  <!--Some Other Systems-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p udp -d 172.16.19.100 --dport 7000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
  <!--just logging-->
    <rule priority="1" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -j LOG --log-prefix 'forward_fw '</rule>
</direct>

وضاحتیں

یہ بنیادی طور پر iptables کے باقاعدہ اصول ہیں، بصورت دیگر فائر والڈ کی آمد کے بعد پیک کیا جاتا ہے۔

پہلے سے طے شدہ ترتیبات کے ساتھ منزل کا انٹرفیس tun0 ہے، اور سرنگ کا بیرونی انٹرفیس مختلف ہو سکتا ہے، مثال کے طور پر، ens192، استعمال کیے گئے پلیٹ فارم کے لحاظ سے۔

آخری لائن گرے ہوئے پیکٹوں کو لاگنگ کرنے کے لیے ہے۔ کام پر لاگ ان کرنے کے لیے، آپ کو فائر والڈ کنفیگریشن میں ڈیبگ لیول کو تبدیل کرنے کی ضرورت ہے:

vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2

ترتیبات کو دوبارہ پڑھنے کے لیے ترتیبات کو لاگو کرنا معمول کی فائر والڈ کمانڈ ہے:

$ sudo firewall-cmd --reload

آپ گرے ہوئے پیکٹ اس طرح دیکھ سکتے ہیں:

grep forward_fw /var/log/messages

آگے کیا ہے

یہ سیٹ اپ مکمل کرتا ہے!

جو کچھ باقی ہے وہ کلائنٹ کی طرف سے کلائنٹ سافٹ ویئر کو انسٹال کرنا، پروفائل درآمد کرنا اور جڑنا ہے۔ ونڈوز آپریٹنگ سسٹمز کے لیے، ڈسٹری بیوشن کٹ پر واقع ہے۔ ڈویلپر کی ویب سائٹ.

آخر میں، ہم اپنے نئے سرور کو مانیٹرنگ اور آرکائیونگ سسٹم سے منسلک کرتے ہیں، اور باقاعدگی سے اپ ڈیٹس انسٹال کرنا نہ بھولیں۔

مستحکم کنکشن!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں