SMB կազմակերպության հեռավար աշխատանքի կազմակերպում OpenVPN-ում

Խնդրի ձևակերպում

Հոդվածում նկարագրվում է բաց կոդով արտադրանքի վրա աշխատողների համար հեռահար մուտքի կազմակերպումը և կարող է օգտագործվել ինչպես ամբողջովին ինքնավար համակարգ կառուցելու համար, այնպես էլ օգտակար կլինի ընդլայնելու համար, երբ առկա առևտրային համակարգում լիցենզիաների պակաս կա կամ դրա կատարումը անբավարար է:

Հոդվածի նպատակն է ներդնել կազմակերպությանը հեռահար մուտք ապահովելու ամբողջական համակարգ, որը մի փոքր ավելին է, քան «10 րոպեում OpenVPN-ի տեղադրումը»:

Արդյունքում մենք կստանանք համակարգ, որում սերտիֆիկատները և (ըստ ցանկության) կորպորատիվ Active Directory-ը կօգտագործվեն օգտատերերի իսկությունը հաստատելու համար: Դա. մենք կստանանք երկու ստուգիչ գործոն ունեցող համակարգ՝ այն, ինչ ունեմ (սերտիֆիկատ) և այն, ինչ գիտեմ (գաղտնաբառ):

Նշան, որ օգտագործողին թույլատրվում է միանալ, նրա անդամակցությունն է myVPNUsr խմբին: Վկայագրի լիազորությունը կօգտագործվի անցանց:

Լուծման ներդրման արժեքը կազմում է միայն փոքր ապարատային ռեսուրսները և համակարգի ադմինիստրատորի 1 ժամ աշխատանքը։

Մենք կօգտագործենք վիրտուալ մեքենա OpenVPN-ով և Easy-RSA 3-րդ տարբերակով CetntOS 7-ում, որին հատկացվում է 100 vCPU և 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-record gw.abc.ru:

Խստիվ խորհուրդ չի տրվում անջատել SELinux-ը: OpenVPN-ն աշխատում է առանց անվտանգության քաղաքականությունը անջատելու։

Պարունակություն

  1. ՕՀ և կիրառական ծրագրերի տեղադրում
  2. Ծածկագրության կարգավորում
  3. OpenVPN-ի կարգավորում
  4. AD Նույնականացում
  5. Գործարկում և ախտորոշում
  6. Վկայականի տրամադրում և չեղարկում
  7. Ցանցի կոնֆիգուրացիա
  8. Ինչ է հաջորդը

ՕՀ և կիրառական ծրագրերի տեղադրում

Մենք օգտագործում ենք CentOS 7.8.2003 բաշխումը: Մենք պետք է տեղադրենք ՕՀ-ը նվազագույն կոնֆիգուրացիայով: Դա հարմար է դա անել օգտագործելով ատկատ, նախկինում տեղադրված OS պատկերի և այլ միջոցների կլոնավորում։

Տեղադրվելուց հետո, ցանցի ինտերֆեյսին հասցե նշանակելով (ըստ 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

Ծածկագրության կարգավորում

Գնացեք 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/

Ստեղծեք հիմնական 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 սերվերներ.
  • Վերջին 2 տողերն անհրաժեշտ են AD**-ում նույնականացումն իրականացնելու համար:

*Օրինակում ընտրված հասցեների շրջանակը թույլ կտա միաժամանակ միանալ մինչև 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» – թույլատրող խմբի կոնտեյներ (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>

Ծանուցում:

  • գծերը ԴՐԵՔ ՁԵՐ... փոխել բովանդակությանը նրանց վկայականներ;
  • հեռավոր հրահանգում նշեք ձեր դարպասի անունը/հասցեն.
  • auth-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

Բացատրություններ.

  • առաջին տողը սերվերի վկայագիրն է.
  • առաջին կերպարը
    • V (Վավերական) - վավեր;
    • R (Չեղյալ) - հիշեց.

Ցանցի կոնֆիգուրացիա

Վերջին քայլերը հաղորդման ցանցի կազմաձևումն է՝ երթուղավորում և firewalls:

Տեղական firewall-ում միացումների թույլտվություն.

$ 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 սերվերում պետք է կազմաձևվի նաև firewall: Իմ կարծիքով, ամենամեծ ճկունությունն ապահովվում է 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 կանոններ են, որոնք տարբեր կերպով փաթեթավորված են firewalld-ի հայտնվելուց հետո:

Նախնական կարգավորումներով նպատակակետ միջերեսը tun0 է, իսկ թունելի արտաքին ինտերֆեյսը կարող է տարբեր լինել, օրինակ՝ ens192՝ կախված օգտագործվող հարթակից:

Վերջին տողը ընկած փաթեթները գրանցելու համար է: Որպեսզի գրանցումը աշխատի, դուք պետք է փոխեք վրիպազերծման մակարդակը firewall-ի կազմաձևում.

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

Կարգավորումների կիրառումը սովորական firewall հրամանն է՝ կարգավորումները նորից կարդալու համար.

$ sudo firewall-cmd --reload

Դուք կարող եք դիտել բաց թողնված փաթեթները հետևյալ կերպ.

grep forward_fw /var/log/messages

Ինչ է հաջորդը

Սա ավարտում է կարգավորումը:

Մնում է միայն տեղադրել հաճախորդի ծրագրակազմը հաճախորդի կողմից, ներմուծել պրոֆիլը և միացնել: Windows օպերացիոն համակարգերի համար բաշխման փաթեթը տեղադրված է մշակողի կայք.

Վերջապես, մենք միացնում ենք մեր նոր սերվերը մոնիտորինգի և արխիվացման համակարգերին և չենք մոռանում պարբերաբար թարմացումներ տեղադրել:

Կայուն կապ!

Source: www.habr.com

Добавить комментарий