SMB organizācijas attālinātā darba organizÄ“Å”ana OpenVPN

Problēmas paziņojums

Rakstā ir aprakstÄ«ta attālinātās piekļuves organizācija darbiniekiem uz atvērtā pirmkoda produktiem un to var izmantot gan pilnÄ«gi autonomas sistēmas izveidoÅ”anai, gan noderēs paplaÅ”ināŔanai, kad esoÅ”ajā komercsistēmā pietrÅ«ks licenču vai tās veiktspēja ir nepietiekama.

Raksta mērÄ·is ir ieviest pilnÄ«gu sistēmu attālās piekļuves nodroÅ”ināŔanai organizācijai, kas ir nedaudz vairāk kā ā€œOpenVPN instalÄ“Å”ana 10 minÅ«tēsā€.

Rezultātā mēs iegÅ«sim sistēmu, kurā lietotāju autentificÄ“Å”anai tiks izmantoti sertifikāti un (pēc izvēles) uzņēmuma Active Directory. Tas. mēs iegÅ«sim sistēmu ar diviem verifikācijas faktoriem - kas man ir (sertifikāts) un ko es zinu (parole).

Pazīme, ka lietotājam ir atļauts izveidot savienojumu, ir viņa dalība myVPNUsr grupā. Sertifikāta iestāde tiks izmantota bezsaistē.

Risinājuma ievieÅ”anas izmaksas ir tikai nelieli aparatÅ«ras resursi un 1 stunda sistēmas administratora darba.

Mēs izmantosim virtuālo maŔīnu ar OpenVPN un Easy-RSA 3. versiju operētājsistēmā CetntOS 7, kurai ir pieŔķirti 100 vCPU un 4 GiB RAM uz 4 savienojumiem.

Piemērā mÅ«su organizācijas tÄ«kls ir 172.16.0.0/16, kurā VPN serveris ar adresi 172.16.19.123 atrodas segmentā 172.16.19.0/24, DNS serveri 172.16.16.16 un 172.16.17.17, apakÅ”tÄ«kls 172.16.20.0. .23/XNUMX ir pieŔķirts VPN klientiem .

Lai izveidotu savienojumu no ārpuses, tiek izmantots savienojums caur portu 1194/udp, un mūsu servera DNS ir izveidots A-ieraksts gw.abc.ru.

SELinux nav stingri ieteicams atspējot! OpenVPN darbojas, neatspējojot droŔības politikas.

saturs

  1. OS un lietojumprogrammatūras uzstādīŔana
  2. Kriptogrāfijas iestatīŔana
  3. OpenVPN iestatīŔana
  4. AD autentifikācija
  5. StartēŔana un diagnostika
  6. Sertifikāta izsniegŔana un atsaukŔana
  7. Tīkla iestatīŔana
  8. Kas ir nākamais

OS un lietojumprogrammatūras uzstādīŔana

Mēs izmantojam CentOS 7.8.2003 izplatÄ«Å”anu. Mums ir jāinstalē OS minimālā konfigurācijā. To ir ērti izdarÄ«t, izmantojot ātrs sākums, iepriekÅ” instalēta OS attēla klonÄ“Å”ana un citi lÄ«dzekļi.

Pēc instalÄ“Å”anas, pieŔķirot tÄ«kla interfeisam adresi (saskaņā ar uzdevuma 172.16.19.123 noteikumiem), mēs atjauninām OS:

$ sudo yum update -y && reboot

Mums arī jāpārliecinās, ka mūsu maŔīnā tiek veikta laika sinhronizācija.
Lai instalētu lietojumprogrammatÅ«ru, jums ir nepiecieÅ”amas openvpn, openvpn-auth-ldap, easy-rsa un vim pakotnes kā galvenais redaktors (jums bÅ«s nepiecieÅ”ama EPEL repozitorijs).

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

Ir lietderÄ«gi instalēt viesaÄ£entu virtuālajai maŔīnai:

$ sudo yum install open-vm-tools

VMware ESXi saimniekiem vai oVirt

$ sudo yum install ovirt-guest-agent

Kriptogrāfijas iestatīŔana

Dodieties uz easy-rsa direktoriju:

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

Izveidojiet mainīgo failu:

$ sudo vim vars

Ŕādu saturu:

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

Å eit ir aprakstÄ«ti nosacÄ«juma organizācijas ABC LLC parametri, tos varat labot uz reālajiem vai atstāt no piemēra. Pats svarÄ«gākais parametros ir pēdējā rinda, kas nosaka sertifikāta derÄ«guma termiņu dienās. Piemērā izmantota vērtÄ«ba 10 gadi (365*10+2 garie gadi). Pirms lietotāja sertifikātu izsniegÅ”anas Ŕī vērtÄ«ba bÅ«s jākoriģē.

Tālāk mēs konfigurējam autonomu sertifikācijas iestādi.

IestatÄ«Å”anā ietilpst mainÄ«go eksportÄ“Å”ana, CA inicializācija, CA saknes atslēgas un sertifikāta, Difija-Helmana atslēgas, TLS atslēgas un servera atslēgas un sertifikāta izsniegÅ”ana. CA atslēga ir rÅ«pÄ«gi jāaizsargā un jāglabā slepenÄ«bā! Visus vaicājuma parametrus var atstāt kā noklusējuma parametrus.

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ādējādi tiek pabeigta galvenā kriptogrāfijas mehānisma iestatÄ«Å”anas daļa.

OpenVPN iestatīŔana

Dodieties uz OpenVPN direktoriju, izveidojiet pakalpojumu direktorijus un pievienojiet saiti uz 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/

Izveidojiet galveno OpenVPN konfigurācijas failu:

$ sudo vim server.conf

sekojoŔo saturu

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

Dažas piezīmes par parametriem:

  • ja, izsniedzot sertifikātu, norādÄ«ts cits nosaukums, norāda to;
  • norādiet adreÅ”u kopu atbilstoÅ”i jÅ«su uzdevumiem*;
  • var bÅ«t viens vai vairāki marÅ”ruti un DNS serveri;
  • Pēdējās 2 rindiņas ir nepiecieÅ”amas, lai ieviestu autentifikāciju AD**.

*Piemērā atlasÄ«tais adreÅ”u diapazons ļaus vienlaikus izveidot savienojumu lÄ«dz 127 klientiem, jo ir atlasÄ«ts /23 tÄ«kls, un OpenVPN izveido apakÅ”tÄ«klu katram klientam, izmantojot /30 masku.
Ja Ä«paÅ”i nepiecieÅ”ams, portu un protokolu var mainÄ«t, tomēr jāpatur prātā, ka, mainot porta porta numuru, bÅ«s jākonfigurē SELinux, un tcp protokola izmantoÅ”ana palielinās papildu izmaksas, jo TCP pakeÅ”u piegādes kontrole jau tiek veikta tunelÄ« iekapsulēto pakeÅ”u lÄ«menÄ«.

**Ja autentifikācija AD nav nepiecieÅ”ama, komentējiet tos, izlaidiet nākamo sadaļu un veidnē noņemiet rindu auth-user-pass.

AD autentifikācija

Lai atbalstītu otro faktoru, AD izmantosim konta verifikāciju.

Mums ir nepiecieÅ”ams konts domēnā ar parasta lietotāja tiesÄ«bām un grupa, kuras dalÄ«ba noteiks iespēju izveidot savienojumu.

Izveidojiet konfigurācijas failu:

/etc/openvpn/ldap.conf

sekojoŔo saturu

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

Galvenie parametri:

  • URL ā€œldap://ldap.abc.ruā€ - domēna kontrollera adrese;
  • BindDN ā€œCN=bindUsr,CN=Users,DC=abc,DC=ruā€ ā€” kanoniskais nosaukums saistÄ«Å”anai ar LDAP (UZ ā€” bindUsr konteinerā abc.ru/Users);
  • Parole b1ndP@SS ā€” lietotāja parole saistÄ«Å”anai;
  • BaseDN ā€œOU=allUsr,DC=abc,DC=ruā€ ā€” ceļŔ, no kura jāsāk lietotāja meklÄ“Å”ana;
  • BaseDN ā€œOU=myGrp,DC=abc,DC=ruā€ ā€“ atļaujas grupas konteiners (grupa myVPNUsr konteinerā abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" ir atļaujas grupas nosaukums.

StartēŔana un diagnostika

Tagad mēs varam mēģināt iespējot un palaist mūsu serveri:

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

StartÄ“Å”anas pārbaude:

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

Sertifikāta izsniegŔana un atsaukŔana

Jo Papildus paÅ”iem sertifikātiem ir nepiecieÅ”amas atslēgas un citi iestatÄ«jumi, to visu ir ļoti ērti ietÄ«t vienā profila failā. Pēc tam Å”is fails tiek pārsÅ«tÄ«ts lietotājam un profils tiek importēts OpenVPN klientā. Lai to izdarÄ«tu, mēs izveidosim iestatÄ«jumu veidni un skriptu, kas Ä£enerē profilu.

Profilam jāpievieno saknes sertifikāta (ca.crt) un TLS atslēgas (ta.key) failu saturs.

Pirms lietotāja sertifikātu izsniegÅ”anas neaizmirstiet iestatÄ«t nepiecieÅ”amo sertifikātu derÄ«guma termiņu parametru failā. Nevajadzētu to padarÄ«t pārāk ilgu; es iesaku ierobežot sevi lÄ«dz 180 dienām.

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>

Piezīmes:

  • lÄ«nijas NOLIEC SAVU... mainÄ«t uz saturu paÅ”a sertifikāti;
  • attālajā direktÄ«vā norādiet vārtejas nosaukumu/adresi;
  • Papildu ārējai autentifikācijai tiek izmantota direktÄ«va auth-user-pass.

Mājas direktorijā (vai citā ērtā vietā) izveidojam skriptu sertifikāta pieprasÄ«Å”anai un profila izveidei:

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 ~

Faila padarīŔana par izpildāmu:

chmod a+x ~/make.profile.sh

Un mēs varam izsniegt savu pirmo sertifikātu.

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

Pārskatīt

Sertifikāta apdraudējuma (nozaudÄ“Å”anas, zādzÄ«bas) gadÄ«jumā ir nepiecieÅ”ams Å”o sertifikātu anulēt:

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

Skatīt izsniegtos un atsauktos sertifikātus

Lai skatītu izsniegtos un atsauktos sertifikātus, vienkārŔi skatiet indeksa failu:

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

Paskaidrojums:

  • pirmā rinda ir servera sertifikāts;
  • pirmais varonis
    • V (DerÄ«gs) - derÄ«gs;
    • R (Atsaukts) - atsaukts.

Tīkla iestatīŔana

Pēdējās darbÄ«bas ir pārvades tÄ«kla konfigurÄ“Å”ana - marÅ”rutÄ“Å”ana un ugunsmÅ«ri.

Savienojumu atļauÅ”ana vietējā ugunsmÅ«rÄ«:

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

Pēc tam iespējojiet IP trafika marÅ”rutÄ“Å”anu:

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

KorporatÄ«vajā vidē, iespējams, ir apakÅ”tÄ«kls, un mums ir jāpaziņo marÅ”rutētājam(-iem), kā nosÅ«tÄ«t paketes, kas paredzētas mÅ«su VPN klientiem. Komandrindā mēs izpildām komandu Ŕādā veidā (atkarÄ«bā no izmantotā aprÄ«kojuma):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

un saglabājiet konfigurāciju.

Turklāt robežmarÅ”rutētāja saskarnē, kur tiek apkalpota ārējā adrese gw.abc.ru, ir jāatļauj udp/1194 pakeÅ”u pāreja.

Ja organizācijai ir stingri droŔības noteikumi, mÅ«su VPN serverÄ« ir jākonfigurē arÄ« ugunsmÅ«ris. Manuprāt, vislielāko elastÄ«bu nodroÅ”ina iptables FORWARD ķēžu iestatÄ«Å”ana, lai gan to iestatÄ«Å”ana ir mazāk ērta. Nedaudz vairāk par to iestatÄ«Å”anu. Lai to izdarÄ«tu, visērtāk ir izmantot ā€œtieÅ”os noteikumusā€ - tieÅ”os noteikumus, kas saglabāti failā /etc/firewalld/direct.xml. PaÅ”reizējo noteikumu konfigurāciju var atrast Ŕādi:

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

Pirms faila maiņas izveidojiet tā dublējumkopiju:

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

Aptuvenais faila saturs ir:

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

Paskaidrojumi

Tie bÅ«tÄ«bā ir parastie iptables noteikumi, kas citādi tiek iesaiņoti pēc ugunsmÅ«ra parādÄ«Å”anās.

MērÄ·a saskarne ar noklusējuma iestatÄ«jumiem ir tun0, un tuneļa ārējais interfeiss var atŔķirties, piemēram, ens192, atkarÄ«bā no izmantotās platformas.

Pēdējā rinda ir paredzēta nomesto pakeÅ”u reÄ£istrÄ“Å”anai. Lai pieteikÅ”anās darbotos, ugunsmÅ«ra konfigurācijā ir jāmaina atkļūdoÅ”anas lÄ«menis:

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

IestatÄ«jumu piemēroÅ”ana ir parastā ugunsmÅ«ra komanda, lai atkārtoti izlasÄ«tu iestatÄ«jumus:

$ sudo firewall-cmd --reload

Jūs varat apskatīt nomestās paketes Ŕādi:

grep forward_fw /var/log/messages

Kas ir nākamais

Tas pabeidz iestatīŔanu!

Atliek tikai instalēt klienta programmatÅ«ru klienta pusē, importēt profilu un izveidot savienojumu. Operētājsistēmām Windows izplatÄ«Å”anas komplekts atrodas uz izstrādātāja vietne.

Visbeidzot, mēs savienojam savu jauno serveri ar uzraudzÄ«bas un arhivÄ“Å”anas sistēmām un neaizmirstam regulāri instalēt atjauninājumus.

Stabils savienojums!

Avots: www.habr.com

Pievieno komentāru