Organizzazzjoni ta' xogħol mill-bogħod ta' organizzazzjoni SMB fuq OpenVPN

Dikjarazzjoni tal-problema

L-artikolu jiddeskrivi l-organizzazzjoni ta 'aċċess mill-bogħod għall-impjegati fuq prodotti ta' sors miftuħ u jista 'jintuża kemm biex tinbena sistema kompletament awtonoma, u se tkun utli għall-espansjoni meta jkun hemm nuqqas ta' liċenzji fis-sistema kummerċjali eżistenti jew il-prestazzjoni tagħha ma tkunx biżżejjed.

L-għan tal-artiklu huwa li timplimenta sistema kompluta biex tipprovdi aċċess mill-bogħod lil organizzazzjoni, li hija ftit aktar minn "installazzjoni ta' OpenVPN f'10 minuti."

Bħala riżultat, se jkollna sistema li fiha ċertifikati u (b'għażla) l-Active Directory korporattiv se jintużaw biex jawtentikaw l-utenti. Dik. se jkollna sistema b'żewġ fatturi ta' verifika - dak li għandi (ċertifikat) u dak li naf (password).

Sinjal li utent huwa permess li jgħaqqad huwa s-sħubija tiegħu fil-grupp myVPNUsr. L-awtorità taċ-ċertifikat se tintuża offline.

L-ispiża tal-implimentazzjoni tas-soluzzjoni hija biss riżorsi ta 'hardware żgħar u siegħa ta' xogħol tal-amministratur tas-sistema.

Se nużaw magna virtwali b'OpenVPN u Easy-RSA verżjoni 3 fuq CetntOS 7, li hija allokata 100 vCPUs u 4 GiB RAM għal kull 4 konnessjoni.

Fl-eżempju, in-netwerk tal-organizzazzjoni tagħna huwa 172.16.0.0/16, li fih is-server VPN bl-indirizz 172.16.19.123 jinsab fis-segment 172.16.19.0/24, servers DNS 172.16.16.16 u 172.16.17.17 u 172.16.20.0 sub. .23/XNUMX huwa allokat għall-klijenti VPN.

Biex tikkonnettja minn barra, tintuża konnessjoni permezz tal-port 1194/udp, u nħoloq A-record gw.abc.ru fid-DNS għas-server tagħna.

Huwa strettament mhux rakkomandat li tiddiżattiva SELinux! OpenVPN jaħdem mingħajr ma jiddiżattiva l-politiki tas-sigurtà.

Kontenut

  1. Installazzjoni ta 'OS u softwer ta' applikazzjoni
  2. Twaqqif ta' kriptografija
  3. Twaqqif ta' OpenVPN
  4. Awtentikazzjoni AD
  5. Startup u dijanjostika
  6. Ħruġ ta' ċertifikat u revoka
  7. Twaqqif tan-netwerk
  8. X'hemm Li jmiss

Installazzjoni ta 'OS u softwer ta' applikazzjoni

Aħna nużaw id-distribuzzjoni CentOS 7.8.2003. Għandna bżonn ninstallaw l-OS f'konfigurazzjoni minima. Huwa konvenjenti li tagħmel dan bl-użu kick start, klonazzjoni ta 'immaġni OS installata qabel u mezzi oħra.

Wara l-installazzjoni, nassenja indirizz lill-interface tan-netwerk (skond it-termini tal-kompitu 172.16.19.123), aħna naġġornaw l-OS:

$ sudo yum update -y && reboot

Għandna bżonn ukoll niżguraw li s-sinkronizzazzjoni tal-ħin titwettaq fuq il-magna tagħna.
Biex tinstalla s-softwer tal-applikazzjoni, għandek bżonn il-pakketti openvpn, openvpn-auth-ldap, easy-rsa u vim bħala l-editur ewlieni (ser ikollok bżonn ir-repożitorju EPEL).

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

Huwa utli li tinstalla aġent mistieden għal magna virtwali:

$ sudo yum install open-vm-tools

għall-hosts VMware ESXi, jew għal oVirt

$ sudo yum install ovirt-guest-agent

Twaqqif ta' kriptografija

Mur fid-direttorju easy-rsa:

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

Oħloq fajl varjabbli:

$ sudo vim vars

il-kontenut li ġej:

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

Il-parametri għall-organizzazzjoni kondizzjonali ABC LLC huma deskritti hawn; tista 'tikkoreġihom għal dawk reali jew tħallihom mill-eżempju. L-iktar ħaġa importanti fil-parametri hija l-aħħar linja, li tiddetermina l-perjodu ta 'validità taċ-ċertifikat f'jiem. L-eżempju juża l-valur 10 snin (365*10+2 snin biżestili). Dan il-valur jeħtieġ li jiġi aġġustat qabel ma jinħarġu ċ-ċertifikati tal-utent.

Sussegwentement, aħna kkonfiguraw awtorità awtonoma taċ-ċertifikazzjoni.

Is-setup jinkludi l-esportazzjoni ta 'varjabbli, l-inizjalizzazzjoni tas-CA, il-ħruġ taċ-ċavetta u ċ-ċertifikat tal-għerq CA, iċ-ċavetta Diffie-Hellman, iċ-ċavetta TLS, u ċ-ċavetta u ċ-ċertifikat tas-server. Iċ-ċavetta CA trid tkun protetta bir-reqqa u tinżamm sigrieta! Il-parametri kollha tal-mistoqsija jistgħu jitħallew bħala default.

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

Dan itemm il-parti prinċipali tat-twaqqif tal-mekkaniżmu kriptografiku.

Twaqqif ta' OpenVPN

Mur fid-direttorju OpenVPN, oħloq direttorji tas-servizz u żid link għal 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/

Oħloq il-fajl ewlieni tal-konfigurazzjoni OpenVPN:

$ sudo vim server.conf

kontenut li ġej

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

Xi noti dwar il-parametri:

  • jekk kien speċifikat isem differenti meta ħareġ iċ-ċertifikat, indikah;
  • speċifika l-grupp ta' indirizzi li jixirqu l-kompiti tiegħek*;
  • jista' jkun hemm rotta waħda jew aktar u servers DNS;
  • L-aħħar 2 linji huma meħtieġa biex tiġi implimentata l-awtentikazzjoni f'AD**.

* Il-firxa ta 'indirizzi magħżula fl-eżempju se tippermetti sa 127 klijent biex jgħaqqdu simultanjament, minħabba jintgħażel in-netwerk /23, u OpenVPN joħloq subnet għal kull klijent billi juża l-maskra /30.
Jekk ikun partikolarment meħtieġ, il-port u l-protokoll jistgħu jinbidlu, madankollu, wieħed għandu jżomm f'moħħu li t-tibdil tan-numru tal-port tal-port se jinvolvi l-konfigurazzjoni ta 'SELinux, u l-użu tal-protokoll tcp se jżid l-overhead, minħabba li Il-kontroll tal-kunsinna tal-pakketti TCP diġà jitwettaq fil-livell tal-pakketti inkapsulati fil-mina.

**Jekk ma tkunx meħtieġa l-awtentikazzjoni f'AD, ikkummentahom, aqbeż it-taqsima li jmiss, u fil-mudell neħħi l-linja auth-user-pass.

Awtentikazzjoni AD

Biex nappoġġjaw it-tieni fattur, se nużaw il-verifika tal-kont f'AD.

Għandna bżonn kont fid-dominju bid-drittijiet ta 'utent ordinarju u grupp, is-sħubija li tiddetermina l-abbiltà li tikkonnettja.

Oħloq fajl tal-konfigurazzjoni:

/etc/openvpn/ldap.conf

kontenut li ġej

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

Parametri ewlenin:

  • URL "ldap://ldap.abc.ru" - indirizz tal-kontrollur tad-dominju;
  • BindDN "CN=bindUsr,CN=Users,DC=abc,DC=ru" - isem kanoniku għall-irbit ma' LDAP (UZ - bindUsr fil-kontenitur abc.ru/Users);
  • Password b1ndP@SS — password tal-utent għall-irbit;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — il-mogħdija minn fejn tibda t-tfittxija għall-utent;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – kontenitur tal-grupp li jippermetti (grupp myVPNUsr fil-kontenitur abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" huwa l-isem tal-grupp li jippermetti.

Startup u dijanjostika

Issa nistgħu nippruvaw nippermettu u nibdew is-server tagħna:

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

Kontroll tal-istartjar:

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

Ħruġ ta' ċertifikat u revoka

Għax Minbarra ċ-ċertifikati nfushom, għandek bżonn ċwievet u settings oħra; huwa konvenjenti ħafna li tkebbeb dan kollu f'fajl wieħed tal-profil. Dan il-fajl imbagħad jiġi trasferit lill-utent u l-profil jiġi importat fuq il-klijent OpenVPN. Biex tagħmel dan, aħna noħolqu mudell tas-settings u skript li jiġġenera l-profil.

Ikollok bżonn iżżid il-kontenut taċ-ċertifikat tal-għeruq (ca.crt) u l-fajls taċ-ċavetta TLS (ta.key) mal-profil.

Qabel ma joħorġu ċertifikati tal-utent tinsiex tistabbilixxi l-perjodu ta' validità meħtieġ għaċ-ċertifikati fil-fajl tal-parametri. M'għandekx tagħmel dan twil wisq; nirrakkomanda li tillimita lilek innifsek għal massimu ta '180 jum.

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>

Noti:

  • linji poġġi TIEGĦEK... bidla għall-kontenut tagħhom ċertifikati;
  • fid-direttiva remota, speċifika l-isem/indirizz tal-portal tiegħek;
  • id-direttiva auth-user-pass tintuża għal awtentikazzjoni esterna addizzjonali.

Fid-direttorju tad-dar (jew post ieħor konvenjenti) noħolqu skript biex nitolbu ċertifikat u noħolqu profil:

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 ~

Nagħmlu l-fajl eżekutibbli:

chmod a+x ~/make.profile.sh

U nistgħu noħorġu l-ewwel ċertifikat tagħna.

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

Rispons

F'każ ta' kompromess ta' ċertifikat (telf, serq), huwa meħtieġ li dan iċ-ċertifikat jiġi revokat:

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

Ara ċertifikati maħruġa u revokati

Biex tara ċertifikati maħruġa u revokati, sempliċement ara l-fajl tal-indiċi:

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

Spjegazzjoni:

  • l-ewwel linja hija ċ-ċertifikat tas-server;
  • l-ewwel karattru
    • V (Validu) - validu;
    • R (Revokata) - imfakkar.

Twaqqif tan-netwerk

L-aħħar passi huma li jiġi kkonfigurat in-netwerk ta 'trażmissjoni - routing u firewalls.

Nippermettu konnessjonijiet fil-firewall lokali:

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

Sussegwentement, ippermetti r-rotot tat-traffiku tal-IP:

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

F'ambjent korporattiv, x'aktarx ikun hemm subnetting u għandna bżonn ngħidu lir-router(i) kif tibgħat pakketti ddestinati għall-klijenti VPN tagħna. Fuq il-linja tal-kmand aħna tesegwixxi l-kmand bil-mod (skond it-tagħmir użat):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

u ssalva l-konfigurazzjoni.

Barra minn hekk, fuq l-interface tar-router tal-fruntiera fejn jiġi moqdi l-indirizz estern gw.abc.ru, huwa meħtieġ li jitħalla jgħaddi l-pakketti udp/1194.

F'każ li l-organizzazzjoni jkollha regoli ta 'sigurtà stretti, għandu jiġi kkonfigurat ukoll firewall fuq is-server VPN tagħna. Fl-opinjoni tiegħi, l-akbar flessibilità hija pprovduta billi twaqqaf iptables FORWARD ktajjen, għalkemm it-twaqqif tagħhom huwa inqas konvenjenti. Ftit aktar dwar it-twaqqif tagħhom. Biex tagħmel dan, huwa l-aktar konvenjenti li tuża "regoli diretti" - regoli diretti, maħżuna f'fajl /etc/firewalld/direct.xml. Il-konfigurazzjoni attwali tar-regoli tista 'tinstab kif ġej:

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

Qabel ma tibdel fajl, agħmel kopja ta' backup tiegħu:

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

Il-kontenut approssimattiv tal-fajl huwa:

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

Spjegazzjonijiet

Dawn huma essenzjalment regoli iptables regolari, inkella ppakkjati wara l-miġja ta 'firewalld.

L-interface tad-destinazzjoni b'settings default hija tun0, u l-interface esterna għall-mina tista 'tkun differenti, pereżempju, ens192, skont il-pjattaforma użata.

L-aħħar linja hija għall-illoggjar pakketti waqgħu. Biex il-logging jaħdem, għandek bżonn tibdel il-livell tad-debug fil-konfigurazzjoni tal-firewalld:

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

L-applikazzjoni tas-settings hija l-kmand tas-soltu tal-firewalld biex terġa’ taqra s-settings:

$ sudo firewall-cmd --reload

Tista' tara pakketti mwaqqfa bħal dan:

grep forward_fw /var/log/messages

X'hemm Li jmiss

Dan itemm is-setup!

Kulma jibqa 'huwa li tinstalla s-softwer tal-klijent fuq in-naħa tal-klijent, timporta l-profil u tikkonnettja. Għas-sistemi operattivi Windows, il-kit tad-distribuzzjoni jinsab fuq websajt tal-iżviluppatur.

Fl-aħħarnett, aħna nqabbdu s-server il-ġdid tagħna mas-sistemi ta 'monitoraġġ u arkivjar, u ma ninsewx li jinstallaw aġġornamenti regolarment.

Konnessjoni stabbli!

Sors: www.habr.com

Żid kumment