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
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 , 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-toolsfö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 varsfö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.confnÀ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.confnÀ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.ovpnclient
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.shOch 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.123och 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-ruleInnan du Àndrar en fil, gör en sÀkerhetskopia av den:
cp /etc/firewalld/direct.xml /etc/firewalld/direct.xml.`date +%F.%T`.bakFilens 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 --reloadTappade 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Ä .
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
