Organisera distansarbete för smÄ och medelstora företag OpenVPN

Problem uttalande

Artikeln beskriver organisationen av fjÀrrÄtkomst för anstÀllda pÄ produkter med öppen kÀllkod och kan anvÀndas bÄde för att bygga ett helt autonomt system och kommer att vara anvÀndbart för expansion nÀr ett befintligt kommersiellt system fÄr slut pÄ licenser eller dess prestanda Àr otillrÀcklig.

Syftet med den hÀr artikeln Àr att implementera ett komplett system för att tillhandahÄlla fjÀrrÄtkomst till en organisation, vilket inte Àr mycket mer Àn "installation". OpenVPN om 10 minuter."

Resultatet Ă€r ett system som anvĂ€nder certifikat och (valfritt) företagets Active Directory för att autentisera anvĂ€ndare. Att. Vi fĂ„r ett system med tvĂ„ verifieringsfaktorer – vad jag har (certifikat) och vad jag vet (lösenord).

En indikation pÄ att en anvÀndare har behörighet att ansluta Àr deras medlemskap i myVPNUsr-gruppen. Certifieringscentret kommer att anvÀndas autonomt.

Kostnaden för att implementera lösningen Àr endast smÄ hÄrdvaruresurser och 1 timmes arbete för systemadministratören.

Vi kommer att anvÀnda en virtuell maskin med OpenVPN och Easy-RSA version 3 pÄ CetntOS 7, som allokeras 4 vCPU, 4 GiB RAM per 100 anslutningar.

I exemplet Àr vÄr organisations nÀtverk 172.16.0.0/16, dÀr VPN-servern med adressen 172.16.19.123 finns i segmentet 172.16.19.0/24, DNS-servrarna Àr 172.16.16.16 och 172.16.17.17, och subnÀtet 172.16.20.0/23 Àr allokerat för VPN-klienter.

För extern anslutning anvÀnds en anslutning via port 1194/udp, och i DNS för vÄr server har en A-post gw.abc.ru skapats.

Det rekommenderas starkt att inte inaktivera SELinux! OpenVPN Fungerar utan att inaktivera sÀkerhetspolicyer.

InnehÄll

  1. Installation av operativsystem och programvara
  2. Konfigurera kryptografi
  3. justering OpenVPN
  4. Autentisering i AD
  5. Lansering och diagnostik
  6. UtfÀrdande och Äterkallelse av ett certifikat
  7. NĂ€tverkskonfiguration
  8. Vad Àr nÀsta

Installation av operativsystem och programvara

Vi anvÀnder distributionen CentOS 7.8.2003. Vi behöver installera operativsystemet i en minimal konfiguration. Det Àr bekvÀmt att göra detta med hjÀlp av kickstart, kloning av en tidigare installerad operativsystemavbildning och andra metoder.

Efter installationen, efter att ha tilldelat en adress till nÀtverksgrÀnssnittet (enligt villkoren för uppgiften 172.16.19.123), utför vi en OS-uppdatering:

$ sudo yum update -y && reboot

Vi mÄste ocksÄ se till att vÄr maskin Àr tidssynkroniserad.
För att installera programvaran behöver du paketen openvpn, openvpn-auth-ldap, easy-rsa och vim som huvudredigerare (du behöver EPEL-arkivet).

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

Det Àr anvÀndbart att installera en gÀstagent för en virtuell maskin:

$ sudo yum install open-vm-tools

för VMware ESXi-vÀrdar eller för oVirt

$ sudo yum install ovirt-guest-agent

Konfigurera kryptografi

GĂ„ till easy-rsa-katalogen:

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

Skapa en variabelfil:

$ sudo vim vars

följande innehÄll:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="admin@abc.ru"
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

HÀr Àr parametrarna för den villkorade organisationen LLC "ABC", du kan Àndra dem till de riktiga eller lÀmna dem frÄn exemplet. Det viktigaste i parametrarna Àr den sista raden, som definierar certifikatets giltighetstid i dagar. Exemplet anvÀnder vÀrdet 10 Är (365*10+2 skottÄr). Detta vÀrde mÄste justeras innan anvÀndarcertifikat utfÀrdas.

DÀrefter inrÀttade vi ett autonomt certifieringscenter.

Installationen inkluderar export av variabler, initiering av CA, utfÀrdande av rot-CA-nyckel och certifikat, Diffie-Hellman-nyckeln, TLS-nyckeln samt servernyckeln och certifikatet. CertifikatutfÀrdarens nyckel mÄste noggrant skyddas och hÄllas hemlig! Alla parametrar i förfrÄgningar kan lÀmnas som standard.

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

Detta avslutar huvuddelen av att konfigurera den kryptografiska mekanismen.

justering OpenVPN

GÄ till katalogen OpenVPN, skapa servicekataloger och lÀgg till en lÀnk till 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/

Skapa en huvudkonfigurationsfil OpenVPN:

$ sudo vim server.conf

nÀsta innehÄll

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

NÄgra anmÀrkningar om parametrarna:

  • Om ett annat namn angavs nĂ€r certifikatet utfĂ€rdades, vĂ€nligen ange det;
  • ange adresspoolen för dina uppgifter*;
  • Det kan finnas en eller flera rutter och DNS-servrar;
  • De sista tvĂ„ raderna behövs för att implementera autentisering i AD**.

*Adressintervallet som valts i exemplet tillÄter upp till 127 klienter att ansluta samtidigt, eftersom nÀtverket /23 Àr valt, och OpenVPN skapar ett subnÀt med masken /30 för varje klient.
Om sÀrskilda behov uppstÄr kan port och protokoll Àndras, men det bör noteras att Àndring av portnumret kommer att medföra SE-konfiguration.Linux, och anvÀndningen av TCP-protokollet kommer att öka omkostnaderna, eftersom kontrollen av leveransen av TCP-paket redan utförs pÄ nivÄn av paket som Àr inkapslade i tunneln.

**Om du inte behöver AD-autentisering, kommentera bort dem, hoppa över nÀsta avsnitt och i mallen ta bort raden auth-user-pass.

Autentisering i AD

För att stödja den andra faktorn kommer vi att anvÀnda kontoverifiering i AD.

Vi behöver ett domÀnkonto med vanliga anvÀndarrÀttigheter och en grupp vars medlemskap avgör möjligheten att ansluta.

Skapa en konfigurationsfil:

/etc/openvpn/ldap.conf

nÀsta innehÄll

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

Skötsel:

  • URL:en "ldap://ldap.abc.ru" Ă€r domĂ€nkontrollantens adress;
  • BindDN «CN=bindUsr,CN=Users,DC=abc,DC=ru» — kanoniskt namn för bindning till LDAP (Us — bindUsr i containern abc.ru/Users);
  • Lösenord b1ndP@SS — anvĂ€ndarlösenord för bindning;
  • BaseDN "OU=allUsr,DC=abc,DC=ru" Ă€r sökvĂ€gen frĂ„n vilken sökningen efter en anvĂ€ndare ska börja;
  • BaseDN "OU=myGrp,DC=abc,DC=ru" - behĂ„llare för tillstĂ„ndsgruppen (grupp myVPNUsr i behĂ„llaren abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" Ă€r namnet pĂ„ behörighetsgruppen.

Lansering och diagnostik

Nu kan vi försöka aktivera och starta vÄr server:

$ sudo systemctl enable openvpn@server.service
$ sudo systemctl start openvpn@server.service

Kontrollerar lanseringen:

systemctl status openvpn@server.service
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log

UtfÀrdande och Äterkallelse av ett certifikat

Eftersom nycklar och andra instÀllningar behövs utöver sjÀlva certifikaten Àr det mycket praktiskt att samla allt i en enda profilfil. Denna fil överförs sedan till anvÀndaren, och profilen importeras sedan till klienten. OpenVPNFör att göra detta skapar vi en instÀllningsmall och ett skript som genererar en profil.

Du mÄste lÀgga till innehÄllet i rotcertifikatfilerna (ca.crt) och TLS-nyckeln (ta.key) i profilen.

Innan anvÀndarcertifikat utfÀrdas Glöm inte att ange den obligatoriska giltighetstiden för certifikaten i parameterfilen. Du bör inte göra det för stort, jag rekommenderar att begrÀnsa det till maximalt 180 dagar.

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>

AnmÀrkningar:

  • tidsfrister SÄTT DINA
 Ă€ndra innehĂ„ll deras certifikat;
  • i fjĂ€rrdirektivet, ange namnet/adressen pĂ„ din gateway;
  • Direktivet auth-user-pass anvĂ€nds för ytterligare extern autentisering.

I hemkatalogen (eller annan lÀmplig plats), skapa ett skript för att begÀra ett certifikat och skapa en 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 ~

Gör filen körbar:

chmod a+x ~/make.profile.sh

Och vi kan utfÀrda vÄrt första certifikat.

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

Äterkallande

Vid kompromettering av certifikatet (förlust, stöld) Àr det nödvÀndigt att Äterkalla detta certifikat:

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

Visa utfÀrdade och Äterkallade certifikat

För att se utfÀrdade och Äterkallade certifikat, titta helt enkelt pÄ indexfilen:

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

Förklaring:

  • den första raden Ă€r servercertifikatet;
  • första tecknet
    • V (Giltig) — giltig;
    • R (Återkallad) — Ă„terkallad.

NĂ€tverkskonfiguration

De sista stegen Ă€r att konfigurera överföringsnĂ€tet – routing och brandvĂ€ggar.

TillÄta anslutningar i den lokala brandvÀggen:

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

NÀsta steg Àr att aktivera IP-trafikrouting:

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

I en företagsmiljö finns det sannolikt subnÀt och vi mÄste tala om för routern/routerarna hur de ska vidarebefordra paket som Àr avsedda för vÄra VPN-klienter. Kör kommandot pÄ följande sÀtt i kommandoraden (beroende pÄ vilken utrustning som anvÀnds):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

och spara konfigurationen.

Dessutom Àr det nödvÀndigt att tillÄta passage av udp/1194-paket pÄ grÀnssnittet för borderroutern dÀr den externa adressen gw.abc.ru serveras.

Om din organisation har strikta sÀkerhetsregler mÄste du Àven konfigurera en brandvÀgg pÄ vÄr VPN-server. Enligt min mening ges mest flexibilitet genom att konfigurera iptables FORWARD-kedjor, Àven om de Àr mindre praktiska att konfigurera. Lite mer detaljer om deras instÀllningar. För detta Àr det bekvÀmast att anvÀnda "direkta regler" som Àr lagrade i en fil. /etc/firewalld/direct.xml. Den nuvarande konfigurationen av regler kan erhÄllas enligt följande:

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

Innan du Àndrar en fil, gör en sÀkerhetskopia av den:

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

Filens ungefÀrliga innehÄll Àr följande:

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

förklaringar

Dessa Àr i huvudsak vanliga iptables-regler, paketerade annorlunda efter tillkomsten av firewalld.

DestinationsgrÀnssnittet med standardinstÀllningar Àr tun0, och det externa för tunneln kan vara annorlunda, t.ex. ens192, beroende pÄ vilken plattform som anvÀnds.

Den sista raden Àr för att logga tappade paket. För att loggning ska fungera mÄste du Àndra felsökningsnivÄn i firewalld-konfigurationen:

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

Att tillÀmpa instÀllningarna Àr ett vanligt firewalld-kommando för att lÀsa om instÀllningarna:

$ sudo firewall-cmd --reload

Tappade paket kan visas sÄ hÀr:

grep forward_fw /var/log/messages

Vad Àr nÀsta

Detta avslutar installationen!

Allt som ÄterstÄr pÄ klientsidan Àr att installera klientprogramvaran, importera profilen och ansluta. För operativsystemtyp Windows Distributionen Àr belÀgen pÄ utvecklarwebbplats.

Slutligen ansluter vi vÄr nya server till övervaknings- och arkiveringssystemen och glömmer inte att installera uppdateringar regelbundet.

Ha en stabil anslutning!

KĂ€lla: will.com

Köp pĂ„litlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster