Organizo de fora laboro de SMB-organizo sur OpenVPN

Formulado de la problemo

La artikolo priskribas la organizon de fora aliro por dungitoj pri malfermkodaj produktoj kaj povas esti uzata ambaŭ por konstrui tute aŭtonoman sistemon, kaj estos utila por ekspansio kiam mankas licencoj en la ekzistanta komerca sistemo aŭ ĝia agado estas nesufiĉa.

La celo de la artikolo estas efektivigi kompletan sistemon por provizi foran aliron al organizo, kio estas malmulte pli ol "instali OpenVPN en 10 minutoj."

Kiel rezulto, ni ricevos sistemon en kiu atestiloj kaj (laŭvole) la kompania Aktiva Dosierujo estos uzataj por aŭtentikigi uzantojn. Tio. ni ricevos sistemon kun du kontrolaj faktoroj - kion mi havas (atestilo) kaj kion mi scias (pasvorto).

Signo, ke uzanto rajtas konekti, estas ilia membreco en la grupo myVPNUsr. La atestila aŭtoritato estos uzata eksterrete.

La kosto de efektivigo de la solvo estas nur malgrandaj aparataj rimedoj kaj 1 horo da laboro de la sistemadministranto.

Ni uzos virtualan maŝinon kun OpenVPN kaj Easy-RSA versio 3 sur CetntOS 7, al kiu estas asignitaj 100 vCPU-oj kaj 4 GiB-RAM por 4 konektoj.

En la ekzemplo, la reto de nia organizo estas 172.16.0.0/16, en kiu la VPN-servilo kun la adreso 172.16.19.123 situas en la segmento 172.16.19.0/24, DNS-serviloj 172.16.16.16 kaj 172.16.17.17 kaj 172.16.20.0, kaj la sub.23. .XNUMX/XNUMX estas asignita por VPN-klientoj.

Por konektiĝi de ekstere, oni uzas konekton per haveno 1194/udp, kaj A-rekordo gw.abc.ru estis kreita en la DNS por nia servilo.

Estas strikte ne rekomendite malŝalti SELinux! OpenVPN funkcias sen malŝalti sekurecpolitikojn.

Enhavo

  1. Instalado de OS kaj aplikaĵa programaro
  2. Agordo de kriptografio
  3. Agordante OpenVPN
  4. AD Aŭtentikigo
  5. Ekfunkciigo kaj diagnozo
  6. Atestilo-emisio kaj revoko
  7. Reta agordo
  8. Kio sekvas

Instalado de OS kaj aplikaĵa programaro

Ni uzas la distribuon CentOS 7.8.2003. Ni devas instali la OS en minimuma agordo. Estas oportune fari ĉi tion uzante piedbato, klonante antaŭe instalitan OS-bildon kaj aliajn rimedojn.

Post instalado, atribuante adreson al la reto-interfaco (laŭ la kondiĉoj de tasko 172.16.19.123), ni ĝisdatigas la OS:

$ sudo yum update -y && reboot

Ni ankaŭ devas certigi, ke temposinkronigado estas farita sur nia maŝino.
Por instali aplikaĵon, vi bezonas la pakaĵojn openvpn, openvpn-auth-ldap, easy-rsa kaj vim kiel la ĉefa redaktilo (vi bezonos la deponejon de EPEL).

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

Estas utile instali gastan agenton por virtuala maŝino:

$ sudo yum install open-vm-tools

por VMware ESXi-gastigantoj, aŭ por oVirt

$ sudo yum install ovirt-guest-agent

Agordo de kriptografio

Iru al la dosierujo easy-rsa:

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

Kreu varian dosieron:

$ sudo vim vars

jena enhavo:

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

La parametroj por la kondiĉa organizo ABC LLC estas priskribitaj ĉi tie; vi povas korekti ilin al la realaj aŭ lasi ilin el la ekzemplo. La plej grava afero en la parametroj estas la lasta linio, kiu determinas la validecperiodon de la atestilo en tagoj. La ekzemplo uzas la valoron 10 jaroj (365*10+2 superjaroj). Ĉi tiu valoro devos esti ĝustigita antaŭ ol uzantaj atestiloj estos emisiitaj.

Poste ni agordas aŭtonomian atestan aŭtoritaton.

Agordo inkluzivas eksporti variablojn, pravalorigi la CA, elsendi la radikan ŝlosilon kaj atestilon de CA, Diffie-Hellman-ŝlosilon, TLS-ŝlosilon kaj servilan ŝlosilon kaj atestilon. La CA-ŝlosilo devas esti zorge protektita kaj konservita sekreta! Ĉiuj demandaj parametroj povas esti lasitaj kiel defaŭlte.

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

Ĉi tio kompletigas la ĉefan parton de starigo de la kripta mekanismo.

Agordante OpenVPN

Iru al la dosierujo OpenVPN, kreu servodosierujojn kaj aldonu ligon 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/

Kreu la ĉefan agordan dosieron de OpenVPN:

$ sudo vim server.conf

jenaj enhavoj

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

Kelkaj notoj pri la parametroj:

  • se alia nomo estis specifita dum eldonado de la atestilo, indiku ĝin;
  • specifu la aron da adresoj laŭ viaj taskoj*;
  • povas esti unu aŭ pluraj itineroj kaj DNS-serviloj;
  • La lastaj 2 linioj estas necesaj por efektivigi aŭtentikigon en AD**.

*La gamo de adresoj elektitaj en la ekzemplo permesos ĝis 127 klientoj konekti samtempe, ĉar la reto /23 estas elektita, kaj OpenVPN kreas subreton por ĉiu kliento uzante la /30-maskon.
Se aparte necese, la haveno kaj protokolo povas esti ŝanĝitaj, tamen, oni devas konsideri, ke ŝanĝi la havenan numeron de haveno implicos agordon de SELinux, kaj uzi la tcp-protokolon pliigos superkompeton, ĉar TCP-pakaĵliveraĵkontrolo jam estas farita sur la nivelo de pakaĵetoj enkapsuligitaj en la tunelo.

**Se aŭtentigo en AD ne estas bezonata, komentu ilin, saltu la sekvan sekcion, kaj en la ŝablono forigi la aŭt-uzanto-paslinion.

AD Aŭtentikigo

Por subteni la duan faktoron, ni uzos kontan konfirmon en AD.

Ni bezonas konton en la domajno kun la rajtoj de ordinara uzanto kaj grupo, membreco en kiu determinos la kapablon konekti.

Kreu agordan dosieron:

/etc/openvpn/ldap.conf

jenaj enhavoj

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

Ŝlosilaj parametroj:

  • URL "ldap://ldap.abc.ru" - adreso de domajna regilo;
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru” - kanona nomo por ligado al LDAP (UZ - bindUsr en la ujo abc.ru/Users);
  • Pasvorto b1ndP@SS — uzanta pasvorto por ligado;
  • BaseDN "OU=allUsr,DC=abc,DC=ru" — la vojo de kiu komenci serĉi la uzanton;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – ujo de la permesanta grupo (grupo myVPNUsr en la ujo abc.rumyGrp);
  • Serĉfiltrilo "(cn=myVPNUsr)" estas la nomo de la permesanta grupo.

Ekfunkciigo kaj diagnozo

Nun ni povas provi ebligi kaj komenci nian servilon:

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

Komenca kontrolo:

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

Atestilo-emisio kaj revoko

Ĉar Krom la atestiloj mem, vi bezonas ŝlosilojn kaj aliajn agordojn; estas tre oportune envolvi ĉion ĉi en unu profildosiero. Ĉi tiu dosiero tiam estas transdonita al la uzanto kaj la profilo estas importita sur la OpenVPN-kliento. Por fari tion, ni kreos agordan ŝablonon kaj skripton, kiu generas la profilon.

Vi devas aldoni la enhavon de la radika atestilo (ca.crt) kaj TLS-ŝlosilo (ta.key) dosieroj al la profilo.

Antaŭ emisiado de uzantaj atestiloj ne forgesu agordi la bezonatan validecperiodon por atestiloj en la parametra dosiero. Vi ne faru ĝin tro longa; mi rekomendas limigi vin al maksimumo de 180 tagoj.

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>

Notoj:

  • kordoj METU VIA... ŝanĝi al enhavo de iliaj atestiloj;
  • en la fora direktivo, specifu la nomon/adreson de via enirejo;
  • la direktivo auth-user-pass estas uzata por plia ekstera aŭtentigo.

En la hejma dosierujo (aŭ alia oportuna loko) ni kreas skripton por peti atestilon kaj krei profilon:

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 ~

Farante la dosieron plenumebla:

chmod a+x ~/make.profile.sh

Kaj ni povas eldoni nian unuan atestilon.

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

Retrosciigo

En kazo de kompromiso de atestilo (perdo, ŝtelo), necesas revoki ĉi tiun atestilon:

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

Vidu eldonitajn kaj nuligitajn atestojn

Por vidi eldonitajn kaj revokitajn atestojn, simple vidu la indeksan dosieron:

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

Klarigoj:

  • la unua linio estas la servila atestilo;
  • unua karaktero
    • V (Valida) - valida;
    • R (Revokita) - revokita.

Reta agordo

La lastaj paŝoj estas agordi la transdonreton - enrutadon kaj fajroŝirmilojn.

Permesante konektojn en la loka fajroŝirmilo:

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

Poste, ebligu IP-trafikan vojigon:

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

En kompania medio, verŝajne estos subreto kaj ni devas diri al la enkursigilo(j) kiel sendi pakaĵetojn destinitajn por niaj VPN-klientoj. Sur la komandlinio ni plenumas la komandon en la maniero (depende de la ekipaĵo uzata):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

kaj konservu la agordon.

Krome, sur la landlima enkursigilo interfaco kie la ekstera adreso gw.abc.ru estas servata, necesas permesi la trairejon de udp/1194-pakoj.

Se la organizo havas striktajn sekurecajn regulojn, fajroŝirmilo ankaŭ devas esti agordita sur nia VPN-servilo. Laŭ mi, la plej granda fleksebleco estas disponigita per agordo de iptables FORWARD ĉenoj, kvankam agordi ilin estas malpli oportuna. Iom pli pri agordo de ili. Por fari tion, estas plej oportune uzi "rektajn regulojn" - rektajn regulojn, konservitajn en dosiero /etc/firewalld/direct.xml. La nuna agordo de la reguloj troveblas jene:

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

Antaŭ ol ŝanĝi dosieron, faru rezervan kopion de ĝi:

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

La proksimuma enhavo de la dosiero estas:

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

Klarigoj

Ĉi tiuj estas esence regulaj reguloj de iptables, alie pakitaj post la apero de firewalld.

La celinterfaco kun defaŭltaj agordoj estas tun0, kaj la ekstera interfaco por la tunelo povas esti malsama, ekzemple, ens192, depende de la platformo uzata.

La lasta linio estas por registri faligitajn pakaĵojn. Por ke la ensalutu funkciu, vi devas ŝanĝi la sencimigan nivelon en la agordo firewalld:

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

Apliki agordojn estas la kutima firewalld komando por relegi la agordojn:

$ sudo firewall-cmd --reload

Vi povas vidi faligitajn pakaĵojn jene:

grep forward_fw /var/log/messages

Kio sekvas

Ĉi tio kompletigas la aranĝon!

Restas nur instali la klientan programaron ĉe la klienta flanko, importi la profilon kaj konekti. Por Vindozaj operaciumoj, la distribua ilaro troviĝas sur programejo.

Fine, ni konektas nian novan servilon al la monitoraj kaj arkivaj sistemoj, kaj ne forgesas regule instali ĝisdatigojn.

Stabila konekto!

fonto: www.habr.com

Aldoni komenton