Trefnu gwaith o bell sefydliad SMB ar OpenVPN

Datganiad o'r broblem

Mae'r erthygl yn disgrifio trefniadaeth mynediad o bell i weithwyr ar gynhyrchion ffynhonnell agored a gellir ei ddefnyddio i adeiladu system gwbl ymreolaethol, a bydd yn ddefnyddiol ar gyfer ehangu pan fo prinder trwyddedau yn y system fasnachol bresennol neu pan fydd ei pherfformiad yn annigonol.

Nod yr erthygl yw gweithredu system gyflawn ar gyfer darparu mynediad o bell i sefydliad, sydd ychydig yn fwy na “gosod OpenVPN mewn 10 munud.”

O ganlyniad, byddwn yn cael system lle bydd tystysgrifau ac (yn ddewisol) y Active Directory corfforaethol yn cael eu defnyddio i ddilysu defnyddwyr. Hynny. byddwn yn cael system gyda dau ffactor dilysu - yr hyn sydd gennyf (tystysgrif) a'r hyn yr wyf yn ei wybod (cyfrinair).

Arwydd bod defnyddiwr yn cael cysylltu yw ei aelodaeth yn y grŵp myVPNUsr. Bydd yr awdurdod tystysgrif yn cael ei ddefnyddio all-lein.

Dim ond adnoddau caledwedd bach ac 1 awr o waith gweinyddwr y system yw cost gweithredu'r datrysiad.

Byddwn yn defnyddio peiriant rhithwir gydag OpenVPN a fersiwn Easy-RSA 3 ar CetntOS 7, a ddyrennir 100 vCPUs a 4 GiB RAM fesul 4 cysylltiad.

Yn yr enghraifft, rhwydwaith ein sefydliad yw 172.16.0.0/16, lle mae'r gweinydd VPN gyda'r cyfeiriad 172.16.19.123 wedi'i leoli yn y segment 172.16.19.0/24, gweinyddwyr DNS 172.16.16.16 a 172.16.17.17 a 172.16.20.0. Dyrennir .23/XNUMX ar gyfer cleientiaid VPN .

I gysylltu o'r tu allan, defnyddir cysylltiad trwy borthladd 1194/udp, ac mae cofnod A gw.abc.ru wedi'i greu yn y DNS ar gyfer ein gweinydd.

Nid yw'n cael ei argymell yn llym i analluogi SELinux! Mae OpenVPN yn gweithio heb analluogi polisïau diogelwch.

Cynnwys

  1. Gosod OS a meddalwedd cymhwysiad
  2. Sefydlu cryptograffeg
  3. Setup OpenVPN
  4. AD Dilysu
  5. Cychwyn a diagnosteg
  6. Cyhoeddi tystysgrif a'i dirymu
  7. Cyfluniad rhwydwaith
  8. Beth sydd nesaf

Gosod OS a meddalwedd cymhwysiad

Rydym yn defnyddio dosbarthiad CentOS 7.8.2003. Mae angen i ni osod yr OS mewn cyfluniad lleiaf posibl. Mae'n gyfleus i wneud hyn gan ddefnyddio cic gychwyn, clonio delwedd OS a osodwyd yn flaenorol a dulliau eraill.

Ar ôl gosod, gan aseinio cyfeiriad i'r rhyngwyneb rhwydwaith (yn ôl telerau tasg 172.16.19.123), rydym yn diweddaru'r OS:

$ sudo yum update -y && reboot

Mae angen i ni hefyd sicrhau bod cydamseru amser yn cael ei berfformio ar ein peiriant.
I osod meddalwedd cymhwysiad, mae angen y pecynnau openvpn, openvpn-auth-ldap, easy-rsa a vim arnoch fel y prif olygydd (bydd angen y storfa EPEL arnoch).

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

Mae'n ddefnyddiol gosod asiant gwadd ar gyfer peiriant rhithwir:

$ sudo yum install open-vm-tools

ar gyfer gwesteiwyr VMware ESXi, neu ar gyfer oVirt

$ sudo yum install ovirt-guest-agent

Sefydlu cryptograffeg

Ewch i'r cyfeiriadur easy-rsa:

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

Creu ffeil newidiol:

$ sudo vim vars

y cynnwys canlynol:

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

Disgrifir y paramedrau ar gyfer y sefydliad amodol ABC LLC yma; gallwch eu cywiro i'r rhai go iawn neu eu gadael o'r enghraifft. Y peth pwysicaf yn y paramedrau yw'r llinell olaf, sy'n pennu cyfnod dilysrwydd y dystysgrif mewn dyddiau. Mae'r enghraifft yn defnyddio'r gwerth 10 mlynedd (365*10+2 flwyddyn naid). Bydd angen addasu'r gwerth hwn cyn cyhoeddi tystysgrifau defnyddwyr.

Nesaf, rydym yn ffurfweddu awdurdod ardystio ymreolaethol.

Mae'r gosodiad yn cynnwys allforio newidynnau, cychwyn y CA, cyhoeddi'r allwedd gwraidd CA a thystysgrif, allwedd Diffie-Hellman, allwedd TLS, ac allwedd gweinydd a thystysgrif. Rhaid diogelu allwedd CA yn ofalus a'i gadw'n gyfrinachol! Gellir gadael yr holl baramedrau ymholiad fel rhagosodiad.

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

Mae hyn yn cwblhau'r prif ran o sefydlu'r mecanwaith cryptograffig.

Setup OpenVPN

Ewch i'r cyfeiriadur OpenVPN, creu cyfeiriaduron gwasanaeth ac ychwanegu dolen i 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/

Creu prif ffeil ffurfweddu OpenVPN:

$ sudo vim server.conf

cynnwys canlynol

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

Rhai nodiadau ar y paramedrau:

  • os nodwyd enw gwahanol wrth roi'r dystysgrif, ei nodi;
  • nodi'r gronfa o gyfeiriadau sy'n addas ar gyfer eich tasgau*;
  • gall fod un neu fwy o lwybrau a gweinyddwyr DNS;
  • Mae angen y 2 linell olaf i weithredu dilysu yn AD**.

*Bydd yr ystod o gyfeiriadau a ddewisir yn yr enghraifft yn caniatáu hyd at 127 o gleientiaid i gysylltu ar yr un pryd, oherwydd dewisir y rhwydwaith /23, ac mae OpenVPN yn creu is-rwydwaith ar gyfer pob cleient gan ddefnyddio'r mwgwd /30.
Os yw'n arbennig o angenrheidiol, gellir newid y porthladd a'r protocol, fodd bynnag, dylid cofio y bydd newid rhif y porthladd porthladd yn golygu ffurfweddu SELinux, a bydd defnyddio'r protocol tcp yn cynyddu gorbenion, oherwydd Mae rheolaeth danfon pecynnau TCP eisoes yn cael ei berfformio ar lefel y pecynnau sydd wedi'u crynhoi yn y twnnel.

**Os nad oes angen dilysu mewn AD, rhowch sylwadau arnynt, sgipiwch yr adran nesaf, ac yn y templed cael gwared ar y llinell auth-user-pass.

AD Dilysu

I gefnogi'r ail ffactor, byddwn yn defnyddio dilysu cyfrif yn AD.

Mae angen cyfrif yn y parth gyda hawliau defnyddiwr cyffredin a grŵp, a bydd aelodaeth ynddo yn pennu'r gallu i gysylltu.

Creu ffeil ffurfweddu:

/etc/openvpn/ldap.conf

cynnwys canlynol

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

Paramedrau allweddol:

  • URL “ldap://ldap.abc.ru” - cyfeiriad rheolwr parth;
  • BindDN “CN = bindUsr, CN = Defnyddwyr, DC = abc, DC = ru” - enw canonaidd ar gyfer rhwymo i LDAP (UZ - bindUsr yn y cynhwysydd abc.ru/Users);
  • Cyfrinair b1ndP@SS — cyfrinair defnyddiwr ar gyfer rhwymo;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — y llwybr i ddechrau chwilio am y defnyddiwr ohono;
  • BaseDN “OU = myGrp, DC = abc, DC = ru” - cynhwysydd y grŵp caniatáu (grŵp myVPNUsr yn y cynhwysydd abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" yw enw'r grŵp sy'n caniatáu.

Cychwyn a diagnosteg

Nawr gallwn geisio galluogi a chychwyn ein gweinydd:

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

Gwiriad cychwyn:

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

Cyhoeddi tystysgrif a'i dirymu

Achos Yn ogystal â'r tystysgrifau eu hunain, mae angen allweddi a gosodiadau eraill arnoch; mae'n gyfleus iawn lapio hyn i gyd mewn un ffeil proffil. Yna trosglwyddir y ffeil hon i'r defnyddiwr a chaiff y proffil ei fewnforio i'r cleient OpenVPN. I wneud hyn, byddwn yn creu templed gosodiadau a sgript sy'n cynhyrchu'r proffil.

Mae angen i chi ychwanegu cynnwys y ffeiliau tystysgrif gwraidd (ca.crt) ac allwedd TLS (ta.key) i'r proffil.

Cyn rhoi tystysgrifau defnyddiwr peidiwch ag anghofio gosod y cyfnod dilysrwydd gofynnol ar gyfer tystysgrifau yn y ffeil paramedrau. Ni ddylech ei wneud yn rhy hir; rwy'n argymell cyfyngu'ch hun i uchafswm o 180 diwrnod.

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>

Примечания:

  • llinellau RHOI EICH... newid i gynnwys o'u tystysgrifau;
  • yn y gyfarwyddeb bell, nodwch enw/cyfeiriad eich porth;
  • defnyddir y gyfarwyddeb auth-user-pass ar gyfer dilysu allanol ychwanegol.

Yn y cyfeiriadur cartref (neu le cyfleus arall) rydym yn creu sgript ar gyfer gofyn am dystysgrif a chreu proffil:

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 ~

Gwneud y ffeil yn weithredadwy:

chmod a+x ~/make.profile.sh

A gallwn gyhoeddi ein tystysgrif gyntaf.

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

Adborth

Mewn achos o gyfaddawdu tystysgrif (colled, lladrad), mae angen dirymu'r dystysgrif hon:

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

Gweld tystysgrifau a gyhoeddwyd ac a ddirymwyd

I weld tystysgrifau a gyhoeddwyd ac a ddirymwyd, edrychwch ar y ffeil mynegai:

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

Esboniadau:

  • y llinell gyntaf yw tystysgrif y gweinydd;
  • cymeriad cyntaf
    • V (Dilys) - dilys;
    • R (Dirymwyd) - wedi'i alw'n ôl.

Cyfluniad rhwydwaith

Y camau olaf yw ffurfweddu'r rhwydwaith trawsyrru - llwybro a waliau tân.

Caniatáu cysylltiadau yn y wal dân leol:

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

Nesaf, galluogi llwybro traffig IP:

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

Mewn amgylchedd corfforaethol, mae'n debygol y bydd is-rwydwaith ac mae angen i ni ddweud wrth y llwybrydd(wyr) sut i anfon pecynnau sydd ar gyfer ein cleientiaid VPN. Ar y llinell orchymyn rydym yn gweithredu'r gorchymyn yn y modd (yn dibynnu ar yr offer a ddefnyddir):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

ac arbed y cyfluniad.

Yn ogystal, ar y rhyngwyneb llwybrydd ffin lle mae'r cyfeiriad allanol gw.abc.ru yn cael ei weini, mae angen caniatáu i becynnau udp/1194 fynd heibio.

Rhag ofn bod gan y sefydliad reolau diogelwch llym, rhaid hefyd ffurfweddu wal dân ar ein gweinydd VPN. Yn fy marn i, darperir yr hyblygrwydd mwyaf trwy sefydlu cadwyni iptables FORWARD, er bod eu gosod yn llai cyfleus. Ychydig mwy am eu sefydlu. I wneud hyn, mae'n fwyaf cyfleus defnyddio "rheolau uniongyrchol" - rheolau uniongyrchol, wedi'u storio mewn ffeil /etc/firewalld/direct.xml. Mae ffurfweddiad presennol y rheolau i'w weld fel a ganlyn:

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

Cyn newid ffeil, gwnewch gopi wrth gefn ohoni:

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

Mae cynnwys bras y ffeil fel a ganlyn:

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

Esboniadau

Mae'r rhain yn eu hanfod yn rheolau iptables rheolaidd, fel arall wedi'u pecynnu ar ôl dyfodiad firewalld.

Y rhyngwyneb cyrchfan gyda gosodiadau diofyn yw tun0, a gall y rhyngwyneb allanol ar gyfer y twnnel fod yn wahanol, er enghraifft, ens192, yn dibynnu ar y platfform a ddefnyddir.

Mae'r llinell olaf ar gyfer logio pecynnau wedi'u gollwng. Er mwyn mewngofnodi i'r gwaith, mae angen i chi newid y lefel dadfygio yn y ffurfweddiad firewalld:

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

Cymhwyso gosodiadau yw'r gorchymyn firewalld arferol i ailddarllen y gosodiadau:

$ sudo firewall-cmd --reload

Gallwch weld pecynnau sydd wedi'u gollwng fel hyn:

grep forward_fw /var/log/messages

Beth sydd nesaf

Mae hyn yn cwblhau'r gosodiad!

Y cyfan sydd ar ôl yw gosod meddalwedd y cleient ar ochr y cleient, mewnforio'r proffil a chysylltu. Ar gyfer systemau gweithredu Windows, mae'r pecyn dosbarthu wedi'i leoli ar safle datblygwr.

Yn olaf, rydym yn cysylltu ein gweinydd newydd â'r systemau monitro ac archifo, a pheidiwch ag anghofio gosod diweddariadau yn rheolaidd.

Cysylltiad sefydlog!

Ffynhonnell: hab.com

Ychwanegu sylw