Organisasie van afgeleë werk van 'n SMB-organisasie op OpenVPN

Probleemstelling

Die artikel beskryf die organisasie van afstandtoegang vir werknemers op oopbronprodukte en kan beide gebruik word om 'n heeltemal outonome stelsel te bou, en sal nuttig wees vir uitbreiding wanneer daar 'n tekort aan lisensies in die bestaande kommersiële stelsel is of die werkverrigting daarvan onvoldoende is.

Die doel van die artikel is om 'n volledige stelsel te implementeer vir die verskaffing van afstandtoegang aan 'n organisasie, wat bietjie meer is as om OpenVPN binne 10 minute te installeer.

Gevolglik sal ons 'n stelsel kry waarin sertifikate en (opsioneel) die korporatiewe Active Directory gebruik sal word om gebruikers te staaf. Daardie. ons sal 'n stelsel kry met twee verifikasiefaktore - wat ek het (sertifikaat) en wat ek weet (wagwoord).

'n Teken dat 'n gebruiker toegelaat word om te koppel, is hul lidmaatskap in die myVPNUsr-groep. Die sertifikaatowerheid sal vanlyn gebruik word.

Die koste van die implementering van die oplossing is slegs klein hardewarehulpbronne en 1 uur se werk van die stelseladministrateur.

Ons sal 'n virtuele masjien met OpenVPN en Easy-RSA weergawe 3 op CetntOS 7 gebruik, wat 100 vCPU's en 4 GiB RAM per 4 verbindings toegeken word.

In die voorbeeld is ons organisasie se netwerk 172.16.0.0/16, waarin die VPN-bediener met die adres 172.16.19.123 geleë is in die segment 172.16.19.0/24, DNS-bedieners 172.16.16.16 en 172.16.17.17, sub .172.16.20.0/23 word vir VPN-kliënte toegeken.

Om van buite af te koppel, word 'n verbinding via poort 1194/udp gebruik, en 'n A-rekord gw.abc.ru is in die DNS vir ons bediener geskep.

Dit word streng nie aanbeveel om SELinux uit te skakel nie! OpenVPN werk sonder om sekuriteitsbeleide te deaktiveer.

inhoud

  1. Installasie van bedryfstelsel en toepassingsagteware
  2. Die opstel van kriptografie
  3. Stel OpenVPN op
  4. AD-verifikasie
  5. Opstart en diagnostiek
  6. Sertifikaat uitreiking en herroeping
  7. Netwerkkonfigurasie
  8. Wat is volgende?

Installasie van bedryfstelsel en toepassingsagteware

Ons gebruik die CentOS 7.8.2003 verspreiding. Ons moet die bedryfstelsel in 'n minimale konfigurasie installeer. Dit is gerieflik om dit te doen met behulp van skop begin, kloning van 'n voorheen geïnstalleerde OS-beeld en ander maniere.

Na die installasie, toewysing van 'n adres aan die netwerkkoppelvlak (volgens die bepalings van taak 172.16.19.123), werk ons ​​die bedryfstelsel op:

$ sudo yum update -y && reboot

Ons moet ook seker maak dat tydsinchronisasie op ons masjien uitgevoer word.
Om toepassingsagteware te installeer, benodig u die openvpn-, openvpn-auth-ldap-, easy-rsa- en vim-pakkette as hoofredigeerder (jy sal die EPEL-bewaarplek nodig hê).

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

Dit is nuttig om 'n gasagent vir 'n virtuele masjien te installeer:

$ sudo yum install open-vm-tools

vir VMware ESXi-gashere, of vir oVirt

$ sudo yum install ovirt-guest-agent

Die opstel van kriptografie

Gaan na die easy-rsa gids:

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

Skep 'n veranderlike lêer:

$ sudo vim vars

die volgende inhoud:

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

Die parameters vir die voorwaardelike organisasie ABC LLC word hier beskryf; u kan dit regstel na die regte of dit uit die voorbeeld laat. Die belangrikste ding in die parameters is die laaste reël, wat die geldigheidstydperk van die sertifikaat in dae bepaal. Die voorbeeld gebruik die waarde 10 jaar (365*10+2 skrikkeljare). Hierdie waarde sal aangepas moet word voordat gebruikerssertifikate uitgereik word.

Vervolgens stel ons 'n outonome sertifiseringsowerheid op.

Opstelling sluit die uitvoer van veranderlikes, die inisiasie van die CA, die uitreiking van die CA-wortelsleutel en sertifikaat, Diffie-Hellman-sleutel, TLS-sleutel en bedienersleutel en sertifikaat in. Die CA-sleutel moet versigtig beskerm en geheim gehou word! Alle navraagparameters kan as verstek gelaat word.

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

Dit voltooi die hoofgedeelte van die opstel van die kriptografiese meganisme.

Stel OpenVPN op

Gaan na die OpenVPN-gids, skep diensgidse en voeg 'n skakel by 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/

Skep die hoof OpenVPN-konfigurasielêer:

$ sudo vim server.conf

volgende inhoud

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

Enkele notas oor die parameters:

  • indien 'n ander naam by die uitreiking van die sertifikaat gespesifiseer is, dui dit aan;
  • spesifiseer die poel adresse om by jou take te pas*;
  • daar kan een of meer roetes en DNS-bedieners wees;
  • Die laaste 2 reëls is nodig om verifikasie in AD** te implementeer.

*Die reeks adresse wat in die voorbeeld gekies is, sal tot 127 kliënte gelyktydig toelaat om te koppel, omdat die /23-netwerk word gekies, en OpenVPN skep 'n subnet vir elke kliënt wat die /30-masker gebruik.
Indien dit veral nodig is, kan die poort en protokol verander word, maar dit moet in gedagte gehou word dat die verandering van die poortpoortnommer die konfigurasie van SELinux sal behels, en die gebruik van die tcp-protokol sal bokoste verhoog, want TCP-pakkieafleweringsbeheer word reeds uitgevoer op die vlak van pakkies wat in die tonnel ingekapsuleer is.

** As stawing in AD nie nodig is nie, lewer kommentaar daarop, slaan die volgende afdeling oor en in die sjabloon verwyder die gesag-gebruiker-paslyn.

AD-verifikasie

Om die tweede faktor te ondersteun, sal ons rekeningverifikasie in AD gebruik.

Ons benodig 'n rekening in die domein met die regte van 'n gewone gebruiker en 'n groep, lidmaatskap waarin die vermoë om te koppel sal bepaal.

Skep 'n konfigurasielêer:

/etc/openvpn/ldap.conf

volgende inhoud

<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>

Sleutelparameters:

  • URL "ldap://ldap.abc.ru" - domeinbeheerder adres;
  • BindDN “CN=bindUsr,CN=Gebruikers,DC=abc,DC=ru” - kanonieke naam vir binding aan LDAP (UZ - bindUsr in die houer abc.ru/Users);
  • Wagwoord b1ndP@SS — gebruikerswagwoord vir binding;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — die pad vanwaar om na die gebruiker te begin soek;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” - houer van die toelaatende groep (groepeer myVPNUsr in die houer abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" is die naam van die toelaatende groep.

Opstart en diagnostiek

Nou kan ons probeer om ons bediener te aktiveer en te begin:

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

Opstartkontrole:

systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log

Sertifikaat uitreiking en herroeping

Omdat Benewens die sertifikate self, benodig u sleutels en ander instellings; dit is baie gerieflik om dit alles in een profiellêer toe te draai. Hierdie lêer word dan na die gebruiker oorgedra en die profiel word op die OpenVPN-kliënt ingevoer. Om dit te doen, sal ons 'n instellings sjabloon en 'n skrif skep wat die profiel genereer.

Jy moet die inhoud van die wortelsertifikaat (ca.crt) en TLS sleutel (ta.key) lêers by die profiel voeg.

Voordat u gebruikerssertifikate uitreik moenie vergeet om die vereiste geldigheidstydperk vir sertifikate in te stel nie in die parameterlêer. Jy moet dit nie te lank maak nie; Ek beveel aan om jouself tot 'n maksimum van 180 dae te beperk.

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>

Notas:

  • lyne SIT JOU... verander na inhoud eie sertifikate;
  • spesifiseer die naam/adres van jou poort in die afstandaanwysing;
  • die outoriteit-gebruikerspas-aanwysing word gebruik vir bykomende eksterne verifikasie.

In die tuisgids (of ander gerieflike plek) skep ons 'n skrif om 'n sertifikaat aan te vra en 'n profiel te skep:

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 ~

Maak die lêer uitvoerbaar:

chmod a+x ~/make.profile.sh

En ons kan ons eerste sertifikaat uitreik.

~/make.profile.sh my-first-user

Onthou

In die geval van kompromie van 'n sertifikaat (verlies, diefstal), is dit nodig om hierdie sertifikaat te herroep:

cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl

Bekyk uitgereikte en herroepe sertifikate

Om uitgereikte en herroepe sertifikate te sien, bekyk eenvoudig die indekslêer:

cd /usr/share/easy-rsa/3/
cat pki/index.txt

Verduidelikings:

  • die eerste reël is die bedienersertifikaat;
  • eerste karakter
    • V (Geldig) - geldig;
    • R (Herroep) - herroep.

Netwerkkonfigurasie

Die laaste stappe is om die transmissienetwerk op te stel - roetering en firewalls.

Laat verbindings in die plaaslike brandmuur toe:

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

Aktiveer dan IP-verkeerroetering:

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

In 'n korporatiewe omgewing sal daar waarskynlik subnetwerk wees en ons moet die router(s) vertel hoe om pakkies te stuur wat vir ons VPN-kliënte bestem is. Op die opdragreël voer ons die opdrag uit op die manier (afhangende van die toerusting wat gebruik word):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

en stoor die konfigurasie.

Daarbenewens, op die grensroeteerderkoppelvlak waar die eksterne adres gw.abc.ru bedien word, is dit nodig om die deurgang van udp/1194-pakkies toe te laat.

As die organisasie streng sekuriteitsreëls het, moet 'n firewall ook op ons VPN-bediener opgestel word. Na my mening word die grootste buigsaamheid verskaf deur iptables FORWARD-kettings op te stel, hoewel dit minder gerieflik is om dit op te stel. 'N bietjie meer oor die opstel van hulle. Om dit te doen, is dit die gerieflikste om "direkte reëls" te gebruik - direkte reëls, gestoor in 'n lêer /etc/firewalld/direct.xml. Die huidige opstelling van die reëls kan soos volg gevind word:

$ sudo firewall-cmd --direct --get-all-rule

Voordat jy 'n lêer verander, maak 'n rugsteunkopie daarvan:

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

Die benaderde inhoud van die lêer is:

<?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>

verduidelikings

In wese is dit gereelde iptables-reëls, anders verpak na die koms van firewalld.

Die bestemmingskoppelvlak met verstekinstellings is tun0, en die eksterne koppelvlak vir die tonnel kan verskil, byvoorbeeld ens192, afhangende van die platform wat gebruik word.

Die laaste reël is vir die aanteken van pakkies wat gedaal is. Om aan te meld om te werk, moet jy die ontfoutingsvlak in die firewalld-konfigurasie verander:

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

Die toepassing van instellings is die gewone firewalld-opdrag om die instellings weer te lees:

$ sudo firewall-cmd --reload

Jy kan pakkies wat gelaat is soos volg sien:

grep forward_fw /var/log/messages

Wat is volgende?

Dit voltooi die opstelling!

Al wat oorbly, is om die kliëntsagteware aan die kliëntkant te installeer, die profiel in te voer en aan te sluit. Vir Windows-bedryfstelsels is die verspreidingskit geleë op ontwikkelaar webwerf.

Laastens koppel ons ons nuwe bediener aan die monitering- en argiveringstelsels, en moenie vergeet om gereeld opdaterings te installeer nie.

Stabiele verbinding!

Bron: will.com

Voeg 'n opmerking