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.
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).
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.
Ĉ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.
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.
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:
Ĉ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.