Organisasi karya jauh hiji organisasi SMB on OpenVPN
Ngarumuskeun masalah
Tulisan éta ngajelaskeun organisasi aksés jauh pikeun karyawan dina produk open source sareng tiasa dianggo pikeun ngawangun sistem otonom lengkep, sareng bakal mangpaat pikeun ékspansi nalika aya kakurangan lisénsi dina sistem komérsial anu aya atanapi kinerjana henteu cekap.
Tujuan tina tulisan nyaéta pikeun nerapkeun sistem anu lengkep pikeun nyayogikeun aksés jauh ka organisasi, anu sakedik langkung ti "masang OpenVPN dina 10 menit."
Hasilna, urang bakal nampi sistem dimana sertipikat sareng (opsional) Active Directory perusahaan bakal dianggo pikeun nga-asténtikasi pangguna. Anu. kami bakal nampi sistem dua faktor verifikasi - naon anu kuring gaduh (sertipikat) sareng anu kuring terang (sandi).
Tanda yén pangguna diidinan nyambung nyaéta kaanggotaanna dina grup myVPNUsr. Otoritas sertipikat bakal dianggo offline.
Biaya ngalaksanakeun solusi ngan ukur sumber hardware leutik sareng 1 jam kerja administrator sistem.
Kami bakal ngagunakeun mesin virtual sareng OpenVPN sareng Easy-RSA versi 3 dina CetntOS 7, anu dialokasikeun 100 vCPU sareng 4 GiB RAM per 4 sambungan.
Dina conto, jaringan organisasi urang nyaéta 172.16.0.0/16, dimana server VPN sareng alamat 172.16.19.123 aya dina ruas 172.16.19.0/24, server DNS 172.16.16.16 sareng 172.16.17.17 sareng subnet 172.16.20.0. .23/XNUMX dialokasikeun pikeun klien VPN.
Pikeun nyambung ti luar, sambungan via port 1194/udp dipaké, sarta A-record gw.abc.ru geus dijieun dina DNS pikeun server urang.
Henteu disarankeun pikeun nganonaktipkeun SELinux! OpenVPN jalan tanpa nganonaktipkeun kawijakan kaamanan.
Kami nganggo distribusi CentOS 7.8.2003. Urang kedah masang OS dina konfigurasi minimal. Éta merenah pikeun ngalakukeun ieu ngagunakeun tajongan ngamimitian, kloning gambar OS anu dipasang sateuacana sareng cara anu sanés.
Saatos instalasi, assigning alamat ka panganteur jaringan (nurutkeun syarat tugas 172.16.19.123), urang ngamutahirkeun OS:
$ sudo yum update -y && reboot
Urang ogé kedah mastikeun yén sinkronisasi waktos dilaksanakeun dina mesin urang.
Pikeun masang parangkat lunak aplikasi, anjeun peryogi pakét openvpn, openvpn-auth-ldap, easy-rsa sareng vim salaku pangropéa utama (anjeun peryogi gudang EPEL).
Parameter pikeun organisasi kondisional ABC LLC dijelaskeun di dieu; anjeun tiasa ngabenerkeunana kana anu asli atanapi tinggalkeun tina conto. Hal pangpentingna dina parameter nyaéta garis panungtungan, nu nangtukeun periode validitas sertipikat dina poé. Contona ngagunakeun nilai 10 taun (365*10+2 taun kabisat). Nilai ieu kedah disaluyukeun sateuacan sertipikat pangguna dikaluarkeun.
Salajengna, urang ngonpigurasikeun otoritas sertifikasi otonom.
Setup ngawengku exporting variabel, initializing CA, ngaluarkeun CA root konci na sertipikat, konci Diffie-Hellman, konci TLS, sarta konci server na sertipikat. Konci CA kedah dijagi sacara saksama sareng dijaga rahasia! Kabéh parameter query bisa ditinggalkeun salaku standar.
Ieu ngalengkepan bagian utama pikeun nyetél mékanisme kriptografi.
Nyetél OpenVPN
Buka diréktori OpenVPN, jieun diréktori jasa sareng tambahkeun tautan ka 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/
Jieun file konfigurasi OpenVPN utama:
$ sudo vim server.conf
eusi handap
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
Sababaraha catetan ngeunaan parameter:
lamun ngaran béda ieu dieusian nalika ngaluarkeun sertipikat, nunjukkeun eta;
tangtukeun kumpulan alamat pikeun nyocogkeun tugas anjeun*;
tiasa aya hiji atanapi langkung rute sareng server DNS;
2 garis panungtungan diperlukeun pikeun nerapkeun auténtikasi dina AD **.
*Kisaran alamat anu dipilih dina conto bakal ngamungkinkeun nepi ka 127 klien pikeun nyambung sakaligus, sabab éta / 23 jaringan dipilih, sarta OpenVPN nyiptakeun subnet pikeun tiap klien ngagunakeun / 30 topeng.
Upami diperyogikeun, palabuhan sareng protokol tiasa dirobih, kumaha ogé, éta kedah émut yén ngarobih nomer port port bakal nyababkeun konfigurasi SELinux, sareng nganggo protokol tcp bakal ningkatkeun overhead, sabab Kontrol pangiriman pakét TCP parantos dilaksanakeun dina tingkat pakét anu dibungkus dina torowongan.
** Lamun auténtikasi dina AD henteu diperlukeun, mairan aranjeunna kaluar, skip bagian salajengna, sarta dina citakan miceun garis auth-user-pass.
Auténtikasi AD
Pikeun ngarojong faktor kadua, urang bakal ngagunakeun verifikasi akun di AD.
Urang kudu akun dina domain kalawan hak pamaké biasa jeung grup, kaanggotaan nu bakal nangtukeun kamampuhan pikeun nyambungkeun.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Isu sertipikat sareng panyabutan
Sabab Salian sertipikat sorangan, anjeun peryogi konci sareng setélan anu sanés, saé pisan pikeun mungkus sadayana ieu dina hiji file profil. Berkas ieu teras dialihkeun ka pangguna sareng profilna diimpor dina klien OpenVPN. Jang ngalampahkeun ieu, urang bakal nyieun témplat setelan sareng skrip anu ngahasilkeun profil.
Anjeun kedah nambihan eusi sertipikat akar (ca.crt) sareng file TLS (ta.key) kana profil.
Sateuacan ngaluarkeun sertipikat pangguna ulah poho pikeun ngeset periode validitas diperlukeun pikeun sertipikat dina file parameter. Anjeun teu kedah panjang teuing; Abdi nyarankeun ngawatesan diri ka maksimal 180 dinten.
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>
Katerangan:
senar PUNANGKEUN... ngarobah kana eusi tina aranjeunna sertipikat;
dina diréktif jauh, tangtukeun ngaran / alamat gateway anjeun;
diréktif auth-user-pass dipaké pikeun auténtikasi éksternal tambahan.
Dina diréktori bumi (atanapi tempat anu sanés) urang nyiptakeun skrip pikeun nyuhunkeun sertipikat sareng nyiptakeun 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 ~
Ngadamel file tiasa dieksekusi:
chmod a+x ~/make.profile.sh
Sareng urang tiasa ngaluarkeun sertipikat munggaran urang.
~/make.profile.sh my-first-user
Eupan Balik
Dina hal kompromi sertipikat (leungitna, maling), anjeun kedah nyabut sertipikat ieu:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Ningali sertipikat anu dikaluarkeun sareng dicabut
Pikeun ningali sertipikat anu dikaluarkeun sareng dicabut, kantun tingali file indéks:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Katerangan:
baris kahiji nyaéta sertipikat server;
karakter kahiji
V (Sah) - sah;
Urang Sunda (Dicabut) - recalled.
Konfigurasi jaringan
Léngkah terakhir nyaéta ngonpigurasikeun jaringan transmisi - routing sareng firewall.
Di lingkungan perusahaan, kamungkinan aya subnetting sareng urang kedah nyarioskeun ka router kumaha cara ngirim pakét anu ditujukeun pikeun klien VPN urang. Dina garis paréntah urang ngaéksekusi paréntah ku cara (gumantung kana alat anu dianggo):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
tur nyimpen konfigurasi.
Sajaba ti éta, dina panganteur router wates dimana alamat éksternal gw.abc.ru dilayanan, perlu pikeun ngidinan petikan udp/1194 pakét.
Upami organisasi gaduh aturan kaamanan anu ketat, firewall ogé kedah dikonpigurasi dina server VPN urang. Dina pamanggih kuring, kalenturan greatest disadiakeun ku nyetel iptables ranté FORWARD, najan nyetel aranjeunna kirang merenah. Sakedik langkung seueur ngeunaan netepkeunana. Jang ngalampahkeun ieu, paling merenah ngagunakeun "aturan langsung" - aturan langsung, disimpen dina file /etc/firewalld/direct.xml. Konfigurasi aturan ayeuna tiasa dipendakan sapertos kieu:
Ieu dasarna aturan iptables biasa, disebutkeun rangkep sanggeus mecenghulna firewalld.
Antarbeungeut tujuan sareng setélan standar nyaéta tun0, sareng antarbeungeut éksternal pikeun torowongan tiasa béda, contona, ens192, gumantung kana platform anu dianggo.
Baris panungtungan nyaéta pikeun logging pakét turun. Pikeun logging tiasa dianggo, anjeun kedah ngarobih tingkat debug dina konfigurasi firewalld:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Nerapkeun setélan nyaéta paréntah firewalld biasa pikeun maca deui setélan:
$ sudo firewall-cmd --reload
Anjeun tiasa ningali pakét anu turun sapertos kieu:
grep forward_fw /var/log/messages
Naon salajengna
Ieu ngalengkepan setelan!
Sadaya anu tetep nyaéta masang parangkat lunak klien di sisi klien, ngimpor profil sareng sambungkeun. Pikeun sistem operasi Windows, kit distribusi aya dina ramatloka pamekar.
Tungtungna, urang sambungkeun server anyar urang ka sistem monitoring sarta arsip, sarta ulah poho pikeun rutin install apdet.