Artikel itu menerangkan organisasi capaian jauh untuk pekerja pada produk sumber terbuka dan boleh digunakan kedua-duanya untuk membina sistem autonomi sepenuhnya, dan akan berguna untuk pengembangan apabila terdapat kekurangan lesen dalam sistem komersial sedia ada atau prestasinya tidak mencukupi.
Matlamat artikel adalah untuk melaksanakan sistem lengkap untuk menyediakan akses jauh kepada organisasi, yang lebih kecil daripada "memasang OpenVPN dalam 10 minit."
Akibatnya, kami akan mendapat sistem di mana sijil dan (sebagai pilihan) Direktori Aktif korporat akan digunakan untuk mengesahkan pengguna. Itu. kita akan mendapat sistem dengan dua faktor pengesahan - apa yang saya ada (sijil) dan apa yang saya tahu (kata laluan).
Tanda bahawa pengguna dibenarkan untuk menyambung ialah keahlian mereka dalam kumpulan myVPNUsr. Pihak berkuasa sijil akan digunakan di luar talian.
Kos untuk melaksanakan penyelesaian hanyalah sumber perkakasan kecil dan 1 jam kerja pentadbir sistem.
Kami akan menggunakan mesin maya dengan OpenVPN dan Easy-RSA versi 3 pada CetntOS 7, yang diperuntukkan 100 vCPU dan 4 GiB RAM bagi setiap 4 sambungan.
Dalam contoh, rangkaian organisasi kami ialah 172.16.0.0/16, di mana pelayan VPN dengan alamat 172.16.19.123 terletak dalam segmen 172.16.19.0/24, pelayan DNS 172.16.16.16 dan 172.16.17.17, dan subnet 172.16.20.0. .23/XNUMX diperuntukkan untuk klien VPN .
Untuk menyambung dari luar, sambungan melalui port 1194/udp digunakan, dan A-record gw.abc.ru telah dibuat dalam DNS untuk pelayan kami.
Ia sama sekali tidak disyorkan untuk melumpuhkan SELinux! OpenVPN berfungsi tanpa melumpuhkan dasar keselamatan.
Kami menggunakan pengedaran CentOS 7.8.2003. Kita perlu memasang OS dalam konfigurasi minimum. Ia adalah mudah untuk melakukan ini menggunakan sepakan permulaan, mengklonkan imej OS yang dipasang sebelum ini dan cara lain.
Selepas pemasangan, memberikan alamat kepada antara muka rangkaian (mengikut syarat tugas 172.16.19.123), kami mengemas kini OS:
$ sudo yum update -y && reboot
Kami juga perlu memastikan bahawa penyegerakan masa dilakukan pada mesin kami.
Untuk memasang perisian aplikasi, anda memerlukan pakej openvpn, openvpn-auth-ldap, easy-rsa dan vim sebagai editor utama (anda memerlukan repositori EPEL).
Parameter untuk organisasi bersyarat ABC LLC diterangkan di sini; anda boleh membetulkannya kepada yang sebenar atau meninggalkannya daripada contoh. Perkara yang paling penting dalam parameter ialah baris terakhir, yang menentukan tempoh sah sijil dalam beberapa hari. Contoh menggunakan nilai 10 tahun (365*10+2 tahun lompat). Nilai ini perlu dilaraskan sebelum sijil pengguna dikeluarkan.
Seterusnya, kami mengkonfigurasi pihak berkuasa pensijilan autonomi.
Persediaan termasuk mengeksport pembolehubah, memulakan CA, mengeluarkan kunci akar CA dan sijil, kunci Diffie-Hellman, kunci TLS dan kunci dan sijil pelayan. Kunci CA mesti dilindungi dengan teliti dan dirahsiakan! Semua parameter pertanyaan boleh dibiarkan sebagai lalai.
Ini melengkapkan bahagian utama penyediaan mekanisme kriptografi.
Menyediakan OpenVPN
Pergi ke direktori OpenVPN, buat direktori perkhidmatan dan tambahkan pautan ke 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/
Buat fail konfigurasi OpenVPN utama:
$ sudo vim server.conf
kandungan berikut
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
Beberapa nota mengenai parameter:
jika nama lain dinyatakan semasa mengeluarkan sijil, nyatakan;
tentukan kumpulan alamat yang sesuai dengan tugas anda*;
boleh ada satu atau lebih laluan dan pelayan DNS;
2 baris terakhir diperlukan untuk melaksanakan pengesahan dalam AD**.
*Julat alamat yang dipilih dalam contoh akan membenarkan sehingga 127 pelanggan untuk menyambung secara serentak, kerana rangkaian /23 dipilih dan OpenVPN mencipta subnet untuk setiap pelanggan menggunakan topeng /30.
Jika perlu, port dan protokol boleh ditukar, bagaimanapun, perlu diingat bahawa menukar nombor port port akan memerlukan konfigurasi SELinux, dan menggunakan protokol tcp akan meningkatkan overhed, kerana Kawalan penghantaran paket TCP sudah dilakukan pada tahap paket yang terkandung dalam terowong.
**Jika pengesahan dalam AD tidak diperlukan, ulasnya, langkau bahagian seterusnya dan dalam templat alih keluar baris auth-user-pass.
Pengesahan AD
Untuk menyokong faktor kedua, kami akan menggunakan pengesahan akaun dalam AD.
Kami memerlukan akaun dalam domain dengan hak pengguna biasa dan kumpulan, keahlian yang akan menentukan keupayaan untuk menyambung.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Pengeluaran sijil dan pembatalan
Kerana Sebagai tambahan kepada sijil itu sendiri, anda memerlukan kunci dan tetapan lain; sangat mudah untuk membungkus semua ini dalam satu fail profil. Fail ini kemudiannya dipindahkan kepada pengguna dan profil diimport pada klien OpenVPN. Untuk melakukan ini, kami akan mencipta templat tetapan dan skrip yang menjana profil.
Anda perlu menambah kandungan fail sijil akar (ca.crt) dan kunci TLS (ta.key) pada profil.
Sebelum mengeluarkan sijil pengguna jangan lupa tetapkan tempoh sah laku yang diperlukan untuk sijil dalam fail parameter. Anda tidak sepatutnya membuatnya terlalu lama; Saya mengesyorkan anda mengehadkan diri anda kepada maksimum 180 hari.
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>
Nota:
tali LETAKKAN ANDA PUNYA... tukar kepada kandungan mereka sijil;
dalam arahan jauh, nyatakan nama/alamat pintu masuk anda;
arahan pengesahan-pengguna-laluan digunakan untuk pengesahan luaran tambahan.
Dalam direktori rumah (atau tempat lain yang mudah) kami mencipta skrip untuk meminta sijil dan membuat 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 ~
Menjadikan fail boleh laku:
chmod a+x ~/make.profile.sh
Dan kami boleh mengeluarkan sijil pertama kami.
~/make.profile.sh my-first-user
Kajian
Sekiranya berlaku kompromi terhadap sijil (kehilangan, kecurian), sijil ini perlu dibatalkan:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Lihat sijil yang dikeluarkan dan dibatalkan
Untuk melihat sijil yang dikeluarkan dan dibatalkan, cuma lihat fail indeks:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Penjelasan:
baris pertama ialah sijil pelayan;
watak pertama
V (Sah) - sah;
R (Dibatalkan) - dipanggil semula.
Konfigurasi rangkaian
Langkah terakhir adalah untuk mengkonfigurasi rangkaian penghantaran - penghalaan dan tembok api.
Dalam persekitaran korporat, kemungkinan terdapat subnetting dan kami perlu memberitahu penghala cara menghantar paket yang ditujukan untuk pelanggan VPN kami. Pada baris arahan kami melaksanakan arahan dengan cara (bergantung pada peralatan yang digunakan):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
dan simpan konfigurasi.
Di samping itu, pada antara muka penghala sempadan di mana alamat luaran gw.abc.ru dihidangkan, adalah perlu untuk membenarkan laluan paket udp/1194.
Sekiranya organisasi mempunyai peraturan keselamatan yang ketat, tembok api juga mesti dikonfigurasikan pada pelayan VPN kami. Pada pendapat saya, fleksibiliti terbesar disediakan dengan menyediakan rantaian FORWARD iptables, walaupun menetapkannya kurang mudah. Sedikit lagi tentang menyediakannya. Untuk melakukan ini, adalah paling mudah untuk menggunakan "peraturan langsung" - peraturan langsung, disimpan dalam fail /etc/firewalld/direct.xml. Konfigurasi semasa peraturan boleh didapati seperti berikut:
Ini pada dasarnya adalah peraturan iptables biasa, jika tidak dibungkus selepas kemunculan firewalld.
Antara muka destinasi dengan tetapan lalai ialah tun0, dan antara muka luaran untuk terowong mungkin berbeza, contohnya, ens192, bergantung pada platform yang digunakan.
Baris terakhir adalah untuk mengelog paket yang digugurkan. Untuk pengelogan berfungsi, anda perlu menukar tahap nyahpepijat dalam konfigurasi firewall:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Menggunakan tetapan ialah perintah firewalld biasa untuk membaca semula tetapan:
$ sudo firewall-cmd --reload
Anda boleh melihat paket yang dijatuhkan seperti ini:
grep forward_fw /var/log/messages
Apa yang Seterusnya
Ini melengkapkan persediaan!
Apa yang tinggal ialah memasang perisian klien pada bahagian klien, mengimport profil dan menyambung. Untuk sistem pengendalian Windows, kit pengedaran terletak pada laman web pembangun.
Akhir sekali, kami menyambungkan pelayan baharu kami kepada sistem pemantauan dan pengarkiban, dan jangan lupa memasang kemas kini secara kerap.