በOpenVPN ላይ የኤስኤምቢ ድርጅት የርቀት ሥራ አደረጃጀት

የችግሩ ቀመር

ጽሁፉ የሰራተኞችን የርቀት አገልግሎት በክፍት ምንጭ ምርቶች አደረጃጀት የሚገልፅ ሲሆን ሁለቱንም ሙሉ በሙሉ ራሱን የቻለ ስርዓት ለመገንባት የሚያገለግል ሲሆን አሁን ባለው የንግድ ስርዓት የፈቃድ እጥረት ሲያጋጥም ወይም አፈፃፀሙ በቂ ካልሆነ ለማስፋፊያ ይጠቅማል።

የጽሁፉ ግብ ለአንድ ድርጅት የርቀት መዳረሻን ለማቅረብ የተሟላ ስርዓት መተግበር ነው፣ ይህም “OpenVPN በ10 ደቂቃ ውስጥ ከመጫን” የበለጠ ትንሽ ነው።

በውጤቱም, የምስክር ወረቀቶች እና (አማራጭ) የኮርፖሬት አክቲቭ ዳይሬክተሩ ተጠቃሚዎችን ለማረጋገጥ የሚጠቀሙበት ስርዓት እናገኛለን. ያ። ሁለት የማረጋገጫ ምክንያቶች ያሉት ስርዓት እናገኛለን - ያለኝ (የምስክር ወረቀት) እና የማውቀው (የይለፍ ቃል)።

ተጠቃሚው እንዲገናኝ የተፈቀደለት ምልክት በmyVPNUsr ቡድን ውስጥ አባልነታቸው ነው። የምስክር ወረቀት ባለስልጣኑ ከመስመር ውጭ ጥቅም ላይ ይውላል።

መፍትሄውን የመተግበር ዋጋ አነስተኛ የሃርድዌር ሀብቶች እና የስርዓቱ አስተዳዳሪ የ 1 ሰዓት ስራ ብቻ ነው.

በCetntOS 3 ላይ ከOpenVPN እና Easy-RSA ስሪት 7 ጋር ቨርቹዋል ማሽን እንጠቀማለን ይህም በ100 ግንኙነቶች 4 vCPUs እና 4 GiB RAM የተመደበ ነው።

ለምሳሌ የድርጅታችን ኔትዎርክ 172.16.0.0/16 ሲሆን አድራሻው 172.16.19.123 ያለው የቪፒኤን አገልጋይ ክፍል 172.16.19.0/24፣ ዲ ኤን ኤስ አገልጋዮች 172.16.16.16 እና 172.16.17.17. .172.16.20.0/23 ለቪፒኤን ደንበኞች ተመድቧል።

ከውጭ ለመገናኘት በፖርት 1194/udp በኩል ግንኙነት ጥቅም ላይ ይውላል፣ እና ለአገልጋያችን A-record gw.abc.ru በዲ ኤን ኤስ ውስጥ ተፈጥሯል።

SELinux ን ለማሰናከል በጥብቅ አይመከርም! OpenVPN የደህንነት ፖሊሲዎችን ሳያሰናክል ይሰራል።

ይዘቶች

  1. የስርዓተ ክወና እና የመተግበሪያ ሶፍትዌር መጫን
  2. ምስጠራ ማዋቀር
  3. OpenVPN በማዋቀር ላይ
  4. AD ማረጋገጫ
  5. ጅምር እና ምርመራዎች
  6. የምስክር ወረቀት ጉዳይ እና መሻር
  7. የአውታረ መረብ ውቅር
  8. የሚቀጥለው ምንድነው

የስርዓተ ክወና እና የመተግበሪያ ሶፍትዌር መጫን

የ CentOS 7.8.2003 ስርጭትን እንጠቀማለን. ስርዓተ ክወናውን በትንሹ ውቅር መጫን አለብን። ይህንን በመጠቀም ይህንን ለማድረግ ምቹ ነው kickstart, ቀደም ሲል የተጫነውን የስርዓተ ክወና ምስል እና ሌሎች መንገዶችን መዝጋት.

ከተጫነ በኋላ አድራሻውን ለአውታረ መረቡ በይነገጽ በመመደብ (በተግባር 172.16.19.123 መሠረት) ስርዓተ ክወናውን እናዘምነዋለን-

$ sudo yum update -y && reboot

እንዲሁም የጊዜ ማመሳሰል በእኛ ማሽን ላይ መደረጉን ማረጋገጥ አለብን።
አፕሊኬሽን ሶፍትዌሮችን ለመጫን፡- openvpn፣ openvpn-auth-ldap፣ easy-rsa እና vim ጥቅሎችን እንደ ዋና አርታዒ (የ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

ምስጠራ ማዋቀር

ወደ ቀላል-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 root ቁልፍ እና የምስክር ወረቀት፣ 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 ማውጫ ይሂዱ፣ የአገልግሎት ማውጫዎችን ይፍጠሩ እና ወደ ቀላል-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/

ዋናውን የ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

በመለኪያዎች ላይ አንዳንድ ማስታወሻዎች፡-

  • የምስክር ወረቀቱን በሚሰጥበት ጊዜ የተለየ ስም ከተገለጸ, ያመልክቱ;
  • ተግባሮችዎን ለማሟላት የአድራሻ ገንዳውን ይግለጹ *;
  • አንድ ወይም ከዚያ በላይ መንገዶች እና የዲ ኤን ኤስ አገልጋዮች ሊኖሩ ይችላሉ;
  • በ AD ** ውስጥ ማረጋገጫን ለመተግበር የመጨረሻዎቹ 2 መስመሮች ያስፈልጋሉ።

*በምሳሌው ላይ የተመረጡት የአድራሻዎች ብዛት እስከ 127 ደንበኞች በአንድ ጊዜ እንዲገናኙ ያስችላቸዋል። የ/23 አውታረመረብ ተመርጧል፣ እና OpenVPN ለእያንዳንዱ ደንበኛ የ/30 ጭንብል በመጠቀም ንዑስ መረብ ይፈጥራል።
በተለይም አስፈላጊ ከሆነ ወደብ እና ፕሮቶኮል ሊቀየሩ ይችላሉ ፣ ሆኖም ፣ የወደብ ወደብ ቁጥር መለወጥ SELinux ን ማዋቀርን እንደሚያስፈልግ እና የ tcp ፕሮቶኮሉን መጠቀም ከራስ በላይ ስለሚጨምር ግምት ውስጥ መግባት አለበት። የ TCP ፓኬት ማቅረቢያ ቁጥጥር ቀድሞውኑ በዋሻው ውስጥ በተዘጉ ፓኬቶች ደረጃ ይከናወናል።

** በ AD ውስጥ ማረጋገጥ የማያስፈልግ ከሆነ አስተያየት ይስጡባቸው፣ ቀጣዩን ክፍል ይዝለሉ እና በአብነት ውስጥ የuth-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/ተጠቃሚዎች መያዣ);
  • የይለፍ ቃል b1ndP@SS - ለማሰር የተጠቃሚ ይለፍ ቃል;
  • BaseDN "OU=allUsr,DC=abc,DC=ru" - ተጠቃሚውን መፈለግ የምንጀምርበት መንገድ;
  • BaseDN "OU = myGrp, DC=abc, DC=ru" - የሚፈቅደው ቡድን መያዣ (ቡድን myVPNUsr በመያዣው ውስጥ abc.rumyGrp);
  • SearchFilter "(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>

ማስታወሻዎች

  • መስመሮች ያንተን... ወደ ይዘት መቀየር የግል የምስክር ወረቀቶች;
  • በርቀት መመሪያው ውስጥ የመግቢያዎን ስም / አድራሻ ይግለጹ;
  • የuth-user-pass መመሪያ ለተጨማሪ ውጫዊ ማረጋገጫ ጥቅም ላይ ይውላል።

በቤት ማውጫ (ወይም ሌላ ምቹ ቦታ) የምስክር ወረቀት ለመጠየቅ እና መገለጫ ለመፍጠር ስክሪፕት እንፈጥራለን፡-

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

ማብራሪያዎች

  • የመጀመሪያው መስመር የአገልጋይ የምስክር ወረቀት ነው;
  • የመጀመሪያ ቁምፊ
    • ቪ (የሚሰራ) - የሚሰራ;
    • አር (ተሽሯል) - ተጠርቷል.

የአውታረ መረብ ውቅር

የመጨረሻዎቹ ደረጃዎች የማስተላለፊያ አውታረመረብ - ራውቲንግ እና ፋየርዎል ማዋቀር ናቸው.

በአካባቢው ፋየርዎል ውስጥ ግንኙነቶችን መፍቀድ፡-

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

በመቀጠል የአይፒ ትራፊክ ማዘዋወርን አንቃ፡-

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

በድርጅት አካባቢ፣ ሳብኔትቲንግ ሊኖር ይችላል እና ለቪፒኤን ደንበኞቻችን የታቀዱ ፓኬጆችን እንዴት መላክ እንደምንችል ለራውተር(ዎች) መንገር አለብን። በትእዛዝ መስመሩ ላይ ትዕዛዙን እንፈጽማለን (በተጠቀሙበት መሣሪያ ላይ በመመስረት)

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

እና አወቃቀሩን ያስቀምጡ.

በተጨማሪም, የውጭ አድራሻ gw.abc.ru በሚቀርብበት የድንበር ራውተር በይነገጽ ላይ, የ udp / 1194 ፓኬቶችን ማለፍ መፍቀድ አስፈላጊ ነው.

ድርጅቱ ጥብቅ የደህንነት ደንቦች ካለው፣ ፋየርዎል በእኛ የቪፒኤን አገልጋይ ላይም መዋቀር አለበት። በእኔ አስተያየት, ትልቁን ተለዋዋጭነት የሚቀርበው iptables FORWARD ሰንሰለቶችን በማዘጋጀት ነው, ምንም እንኳን እነሱን ማዋቀር ብዙም አመቺ ባይሆንም. እነሱን ስለማዋቀር ትንሽ ተጨማሪ። ይህንን ለማድረግ "ቀጥታ ደንቦችን" መጠቀም በጣም አመቺ ነው - ቀጥተኛ ደንቦች , በፋይል ውስጥ የተከማቸ /ወዘተ/ፋየርዎልድ/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 ነው፣ እና የዋሻው ውጫዊ በይነገጽ እንደ ተጠቀመው መድረክ ላይ በመመስረት ለምሳሌ ኤን192 የተለየ ሊሆን ይችላል።

የመጨረሻው መስመር የተጣሉ ፓኬቶችን ለመመዝገብ ነው. መግባቱን ለመስራት በፋየርዎል ውቅር ውስጥ ያለውን የማረሚያ ደረጃ መለወጥ ያስፈልግዎታል፡-

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

መቼቶችን መተግበር ቅንብሩን እንደገና ለማንበብ የተለመደው የፋየርዎል ትእዛዝ ነው፡-

$ sudo firewall-cmd --reload

የተጣሉ ፓኬጆችን እንደዚህ ማየት ይችላሉ፡-

grep forward_fw /var/log/messages

የሚቀጥለው ምንድነው

ይህ ማዋቀሩን ያጠናቅቃል!

የቀረው የደንበኛውን ሶፍትዌር በደንበኛው በኩል መጫን ፣መገለጫውን ማስመጣት እና መገናኘት ነው። ለዊንዶውስ ኦፐሬቲንግ ሲስተሞች, የማከፋፈያ ኪት በ ላይ ይገኛል የገንቢ ጣቢያ.

በመጨረሻም አዲሱን አገልጋያችንን ከክትትልና ከማህደር ስርአቶች ጋር እናገናኘዋለን፣ እና አዘውትረን ዝመናዎችን መጫን እንዳትረሳ።

የተረጋጋ ግንኙነት!

ምንጭ: hab.com

አስተያየት ያክሉ