Organizácia vzdialenej práce organizácie SMB na OpenVPN

Vyhlásenie o probléme

Článok popisuje organizáciu vzdialeného prístupu pre zamestnancov na open source produktoch a dá sa použiť jednak na vybudovanie úplne autonómneho systému, jednak bude užitočný pri rozširovaní, keď je v existujúcom komerčnom systéme nedostatok licencií alebo je jeho výkon nedostatočný.

Cieľom článku je implementovať kompletný systém na poskytovanie vzdialeného prístupu organizácii, čo je o niečo viac ako „inštalácia OpenVPN za 10 minút“.

V dôsledku toho získame systém, v ktorom sa na autentifikáciu používateľov budú používať certifikáty a (voliteľne) podnikový Active Directory. To. získame systém s dvoma overovacími faktormi – čo mám (certifikát) a čo viem (heslo).

Znakom toho, že používateľ má povolené pripojenie, je jeho členstvo v skupine myVPNUsr. Certifikačná autorita sa bude používať offline.

Náklady na implementáciu riešenia sú len malé hardvérové ​​prostriedky a 1 hodina práce správcu systému.

Na CetntOS 3 použijeme virtuálny stroj s OpenVPN a Easy-RSA verzie 7, ktorý má pridelené 100 vCPU a 4 GiB RAM na 4 pripojení.

V príklade je sieť našej organizácie 172.16.0.0/16, v ktorej sa VPN server s adresou 172.16.19.123 nachádza v segmente 172.16.19.0/24, DNS servery 172.16.16.16 a 172.16.17.17. .172.16.20.0/23 je pridelená pre klientov VPN.

Na pripojenie zvonku sa používa pripojenie cez port 1194/udp a v DNS pre náš server bol vytvorený A-záznam gw.abc.ru.

Dôrazne sa neodporúča deaktivovať SELinux! OpenVPN funguje bez vypnutia bezpečnostných zásad.

Obsah

  1. Inštalácia OS a aplikačného softvéru
  2. Nastavenie kryptografie
  3. Nastavenie OpenVPN
  4. Autentifikácia AD
  5. Spustenie a diagnostika
  6. Vydanie a zrušenie certifikátu
  7. Nastavenie siete
  8. čo ďalej

Inštalácia OS a aplikačného softvéru

Používame distribúciu CentOS 7.8.2003. Musíme nainštalovať OS v minimálnej konfigurácii. Je vhodné to urobiť pomocou nakopnúť, klonovanie predtým nainštalovaného obrazu OS a ďalšie prostriedky.

Po inštalácii, priradení adresy k sieťovému rozhraniu (podľa podmienok úlohy 172.16.19.123), aktualizujeme OS:

$ sudo yum update -y && reboot

Musíme sa tiež uistiť, že na našom stroji prebieha synchronizácia času.
Na inštaláciu aplikačného softvéru potrebujete balíky openvpn, openvpn-auth-ldap, easy-rsa a vim ako hlavný editor (budete potrebovať úložisko EPEL).

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

Je užitočné nainštalovať hosťujúceho agenta pre virtuálny počítač:

$ sudo yum install open-vm-tools

pre hostiteľov VMware ESXi alebo pre oVirt

$ sudo yum install ovirt-guest-agent

Nastavenie kryptografie

Prejdite do adresára easy-rsa:

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

Vytvorte variabilný súbor:

$ sudo vim vars

nasledujúci obsah:

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

Parametre pre podmienenú organizáciu ABC LLC sú popísané tu, môžete ich opraviť na skutočné alebo ich nechať z príkladu. V parametroch je najdôležitejší posledný riadok, ktorý určuje dobu platnosti certifikátu v dňoch. V príklade je použitá hodnota 10 rokov (365*10+2 priestupné roky). Túto hodnotu bude potrebné upraviť pred vydaním používateľských certifikátov.

Ďalej nakonfigurujeme autonómnu certifikačnú autoritu.

Nastavenie zahŕňa export premenných, inicializáciu CA, vydanie koreňového kľúča a certifikátu CA, kľúča Diffie-Hellman, kľúča TLS a kľúča a certifikátu servera. Kľúč CA je potrebné starostlivo chrániť a uchovávať v tajnosti! Všetky parametre dopytu môžu byť ponechané ako predvolené.

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

Tým sa dokončí hlavná časť nastavenia kryptografického mechanizmu.

Nastavenie OpenVPN

Prejdite do adresára OpenVPN, vytvorte adresáre služieb a pridajte odkaz na 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/

Vytvorte hlavný konfiguračný súbor OpenVPN:

$ sudo vim server.conf

nasledujúci obsah

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

Niekoľko poznámok k parametrom:

  • ak bol pri vydávaní certifikátu uvedený iný názov, uveďte ho;
  • špecifikujte skupinu adries tak, aby vyhovovala vašim úlohám*;
  • môže existovať jedna alebo viac trás a serverov DNS;
  • Posledné 2 riadky sú potrebné na implementáciu autentifikácie v AD**.

*Rozsah adries zvolených v príklade umožní súčasné pripojenie až 127 klientom, pretože je vybratá sieť /23 a OpenVPN vytvorí podsieť pre každého klienta pomocou masky /30.
Ak je to obzvlášť potrebné, port a protokol je možné zmeniť, treba však mať na pamäti, že zmena čísla portu si vyžiada konfiguráciu SELinuxu a použitie protokolu tcp zvýši réžiu, pretože Riadenie doručovania paketov TCP sa už vykonáva na úrovni paketov zapuzdrených v tuneli.

**Ak overenie v AD nie je potrebné, zakomentujte ich, preskočte nasledujúcu časť a v šablóne odstráňte linku auth-user-pass.

Autentifikácia AD

Na podporu druhého faktora použijeme overenie účtu v AD.

Potrebujeme účet v doméne s právami bežného používateľa a skupinu, členstvo v ktorej bude určovať možnosť pripojenia.

Vytvorte konfiguračný súbor:

/etc/openvpn/ldap.conf

nasledujúci obsah

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

Hlavné nastavenia:

  • URL „ldap://ldap.abc.ru“ - adresa radiča domény;
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru” - kanonický názov pre väzbu na LDAP (UZ - bindUsr v kontajneri abc.ru/Users);
  • Heslo b1ndP@SS — heslo používateľa pre viazanie;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — cesta, z ktorej sa má začať hľadať používateľa;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – kontajner povoľujúcej skupiny (skupina myVPNUsr v kontajneri abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" je názov povoľujúcej skupiny.

Spustenie a diagnostika

Teraz sa môžeme pokúsiť povoliť a spustiť náš server:

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

Kontrola spustenia:

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

Vydanie a zrušenie certifikátu

Pretože Okrem samotných certifikátov potrebujete kľúče a ďalšie nastavenia, to všetko je veľmi vhodné zabaliť do jedného profilového súboru. Tento súbor sa potom prenesie používateľovi a profil sa importuje do klienta OpenVPN. Na tento účel vytvoríme šablónu nastavení a skript, ktorý vygeneruje profil.

Do profilu musíte pridať obsah súborov koreňového certifikátu (ca.crt) a kľúča TLS (ta.key).

Pred vydaním užívateľských certifikátov nezabudnite nastaviť požadovanú dobu platnosti certifikátov v súbore parametrov. Nemali by ste to robiť príliš dlho, odporúčam vám obmedziť sa na maximálne 180 dní.

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>

Poznámky:

  • čiary DAJ TVOJ... zmeniť obsah ich certifikáty;
  • vo vzdialenej direktíve zadajte názov/adresu vašej brány;
  • direktíva auth-user-pass sa používa na dodatočnú externú autentifikáciu.

V domovskom adresári (alebo inom vhodnom mieste) vytvoríme skript na vyžiadanie certifikátu a vytvorenie profilu:

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 ~

Vytvorenie spustiteľného súboru:

chmod a+x ~/make.profile.sh

A môžeme vydať náš prvý certifikát.

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

Recenzia

V prípade kompromitácie certifikátu (strata, krádež) je potrebné tento certifikát zneplatniť:

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

Zobraziť vydané a zrušené certifikáty

Ak chcete zobraziť vydané a zrušené certifikáty, jednoducho si pozrite indexový súbor:

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

Vysvetlenie:

  • prvý riadok je certifikát servera;
  • prvý znak
    • V (Platné) - platné;
    • R (Revoked) - odvolaný.

Nastavenie siete

Poslednými krokmi je konfigurácia prenosovej siete – routingu a firewallov.

Povolenie pripojení v lokálnej bráne firewall:

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

Ďalej povoľte smerovanie IP prevádzky:

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

V podnikovom prostredí je pravdepodobné, že dôjde k podsieti a musíme smerovačom povedať, ako majú odosielať pakety určené pre našich klientov VPN. Na príkazovom riadku vykonáme príkaz spôsobom (v závislosti od použitého zariadenia):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

a uložte konfiguráciu.

Navyše na rozhraní hraničného smerovača, kde je obsluhovaná externá adresa gw.abc.ru, je potrebné povoliť prechod paketov udp/1194.

V prípade, že má organizácia prísne bezpečnostné pravidlá, musí byť na našom serveri VPN nakonfigurovaný aj firewall. Podľa môjho názoru najväčšiu flexibilitu poskytuje nastavenie reťazcov iptables FORWARD, aj keď ich nastavenie je menej pohodlné. Trochu viac o ich nastavení. Na tento účel je najvhodnejšie použiť „priame pravidlá“ - priame pravidlá uložené v súbore /etc/firewalld/direct.xml. Aktuálnu konfiguráciu pravidiel nájdete takto:

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

Pred zmenou súboru si vytvorte jeho záložnú kópiu:

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

Približný obsah súboru je:

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

Vysvetlenie

Toto sú v podstate bežné pravidlá iptables, inak zabalené po príchode firewalld.

Cieľové rozhranie s predvolenými nastaveniami je tun0 a externé rozhranie pre tunel sa môže líšiť, napríklad ens192, v závislosti od použitej platformy.

Posledný riadok je na zaznamenávanie zahodených paketov. Aby prihlasovanie fungovalo, musíte zmeniť úroveň ladenia v konfigurácii brány firewall:

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

Použitie nastavení je obvyklý príkaz brány firewall na opätovné načítanie nastavení:

$ sudo firewall-cmd --reload

Zahodené pakety môžete zobraziť takto:

grep forward_fw /var/log/messages

čo ďalej

Týmto je nastavenie dokončené!

Zostáva len nainštalovať klientsky softvér na strane klienta, importovať profil a pripojiť sa. Pre operačné systémy Windows sa distribučná súprava nachádza na web pre vývojárov.

Nakoniec pripájame náš nový server k monitorovacím a archivačným systémom a nezabúdame na pravidelnú inštaláciu aktualizácií.

Stabilné spojenie!

Zdroj: hab.com

Pridať komentár