Organisasi karya adoh saka organisasi SMB ing OpenVPN

Formulasi masalah

Artikel kasebut nggambarake organisasi akses remot kanggo karyawan ing produk open source lan bisa digunakake kanggo mbangun sistem otonom, lan bakal migunani kanggo ekspansi nalika ana kekurangan lisensi ing sistem komersial sing ana utawa kinerja ora cukup.

Tujuan artikel kasebut yaiku kanggo ngetrapake sistem lengkap kanggo nyedhiyakake akses remot menyang organisasi, sing luwih cilik tinimbang "nginstal OpenVPN ing 10 menit."

AkibatΓ©, kita bakal entuk sistem sing sertifikat lan (opsional) Direktori Aktif perusahaan bakal digunakake kanggo otentikasi pangguna. Iku. kita bakal entuk sistem karo rong faktor verifikasi - apa aku duwe (sertifikat) lan apa aku ngerti (sandi).

Tandha yen pangguna diijini nyambung yaiku keanggotaan ing grup myVPNUsr. Panguwasa sertifikat bakal digunakake offline.

Biaya implementasine solusi mung sumber daya hardware cilik lan 1 jam kerja administrator sistem.

Kita bakal nggunakake mesin virtual karo OpenVPN lan Easy-RSA versi 3 ing CetntOS 7, sing diparengake 100 vCPU lan 4 GiB RAM saben 4 sambungan.

Contone, jaringan organisasi kita yaiku 172.16.0.0/16, ing ngendi server VPN kanthi alamat 172.16.19.123 ana ing segmen 172.16.19.0/24, server DNS 172.16.16.16 lan 172.16.17.17, lan subnet 172.16.20.0. .23/XNUMX diparengake kanggo klien VPN.

Kanggo nyambung saka njaba, sambungan liwat port 1194/udp digunakake, lan A-record gw.abc.ru wis digawe ing DNS kanggo server kita.

Ora dianjurake kanggo mateni SELinux! OpenVPN bisa digunakake tanpa mateni kabijakan keamanan.

Isi

  1. Instalasi OS lan piranti lunak aplikasi
  2. Nyetel kriptografi
  3. Nggawe OpenVPN
  4. Authentication AD
  5. Startup lan diagnostik
  6. Masalah sertifikat lan pencabutan
  7. Konfigurasi jaringan
  8. Apa mbesuk

Instalasi OS lan piranti lunak aplikasi

Kita nggunakake distribusi CentOS 7.8.2003. Kita kudu nginstal OS ing konfigurasi minimal. Iku trep kanggo nindakake iki nggunakake kick wiwitan, kloning gambar OS sing wis diinstal sadurunge lan liya-liyane.

Sawise instalasi, menehi alamat menyang antarmuka jaringan (miturut syarat tugas 172.16.19.123), kita nganyari OS:

$ sudo yum update -y && reboot

Kita uga kudu mesthekake yen sinkronisasi wektu ditindakake ing mesin kita.
Kanggo nginstal piranti lunak aplikasi, sampeyan butuh paket openvpn, openvpn-auth-ldap, easy-rsa lan vim minangka editor utama (sampeyan mbutuhake repositori EPEL).

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

Iku migunani kanggo nginstal agen tamu kanggo mesin virtual:

$ sudo yum install open-vm-tools

kanggo host VMware ESXi, utawa kanggo oVirt

$ sudo yum install ovirt-guest-agent

Nyetel kriptografi

Pindhah menyang direktori easy-rsa:

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

Nggawe file variabel:

$ sudo vim vars

isi ing ngisor iki:

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

Parameter kanggo organisasi bersyarat ABC LLC diterangake ing kene; sampeyan bisa mbenerake sing asli utawa ninggalake saka conto kasebut. Sing paling penting ing paramèter yaiku baris pungkasan, sing nemtokake wektu validitas sertifikat ing dina. Conto nggunakake nilai 10 taun (365*10+2 taun kabisat). Nilai iki kudu diatur sadurunge sertifikat pangguna ditanggepi.

Sabanjure, kita ngatur wewenang sertifikasi otonom.

Setup kalebu ngekspor variabel, initializing CA, nerbitake CA root key lan certificate, tombol Diffie-Hellman, tombol TLS, lan tombol server lan sertifikat. Tombol CA kudu direksa kanthi ati-ati lan dirahasiakake! Kabeh parameter pitakon bisa ditinggalake minangka standar.

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

Iki ngrampungake bagean utama nyetel mekanisme kriptografi.

Nggawe OpenVPN

Bukak direktori OpenVPN, gawe direktori layanan lan tambahake link menyang 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/

Gawe file konfigurasi OpenVPN utama:

$ sudo vim server.conf

isi ing ngisor iki

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

Sawetara cathetan babagan paramèter:

  • yen jeneng liyane ditemtokake nalika nerbitake sertifikat, tandhani;
  • nemtokake blumbang alamat sing cocog karo tugas sampeyan*;
  • bisa uga ana siji utawa luwih rute lan server DNS;
  • 2 baris pungkasan dibutuhake kanggo ngleksanakake otentikasi ing AD **.

*Kisaran alamat sing dipilih ing conto bakal ngidini nganti 127 klien bisa nyambung bebarengan, amarga jaringan / 23 dipilih, lan OpenVPN nggawe subnet kanggo saben klien nggunakake topeng / 30.
Yen perlu, port lan protokol bisa diganti, nanging kudu eling yen ngganti nomer port port bakal mbutuhake konfigurasi SELinux, lan nggunakake protokol tcp bakal nambah overhead, amarga Kontrol pangiriman paket TCP wis dileksanakake ing tingkat paket encapsulated ing trowongan.

** Yen otentikasi ing AD ora dibutuhake, komentar, skip bagean sabanjure, lan ing cithakan mbusak baris auth-user-pass.

Authentication AD

Kanggo ndhukung faktor kapindho, kita bakal nggunakake verifikasi akun ing AD.

Kita butuh akun ing domain kanthi hak pangguna biasa lan klompok, keanggotaan sing bakal nemtokake kemampuan kanggo nyambung.

Nggawe file konfigurasi:

/etc/openvpn/ldap.conf

isi ing ngisor iki

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

Parameter utama:

  • URL "ldap://ldap.abc.ru" - alamat kontroler domain;
  • BindDN β€œCN=bindUsr,CN=Users,DC=abc,DC=ru” - jeneng kanonik kanggo ngiket LDAP (UZ - bindUsr ing wadhah abc.ru/Users);
  • Sandi b1ndP@SS β€” sandi pangguna kanggo naleni;
  • BaseDN β€œOU=allUsr,DC=abc,DC=ru” β€” path kanggo miwiti nggoleki pangguna;
  • BaseDN "OU = myGrp, DC = abc, DC = ru" - wadhah saka grup sing ngidini (grup myVPNUsr ing wadhah abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" yaiku jeneng grup sing ngidini.

Startup lan diagnostik

Saiki kita bisa nyoba ngaktifake lan miwiti server kita:

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

Priksa wiwitan:

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

Masalah sertifikat lan pencabutan

Amarga Saliyane sertifikat dhewe, sampeyan butuh tombol lan setelan liyane, trep banget kanggo mbungkus kabeh iki ing siji file profil. Berkas iki banjur ditransfer menyang pangguna lan profil diimpor ing klien OpenVPN. Kanggo nindakake iki, kita bakal nggawe cithakan setelan lan skrip sing ngasilake profil kasebut.

Sampeyan kudu nambah isi file sertifikat ROOT (ca.crt) lan tombol TLS (ta.key) menyang profil.

Sadurunge nerbitake sertifikat pangguna aja lali nyetel wektu validitas sing dibutuhake kanggo sertifikat ing file parameter. Sampeyan ora kudu suwe banget; Aku nyaranake mbatesi maksimal 180 dina.

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>

Cathetan:

  • senar SING... ngganti isi sing sertifikat;
  • ing arahan remot, nemtokake jeneng / alamat gateway sampeyan;
  • arahan auth-user-pass digunakake kanggo otentikasi eksternal tambahan.

Ing direktori ngarep (utawa papan liyane sing trep) kita nggawe skrip kanggo njaluk sertifikat lan nggawe 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 ~

Nggawe file bisa dieksekusi:

chmod a+x ~/make.profile.sh

Lan kita bisa ngetokake sertifikat pisanan kita.

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

Umpan Balik

Ing kasus kompromi sertifikat (rugi, maling), perlu kanggo mbatalake sertifikat iki:

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

Deleng sertifikat sing ditanggepi lan dicabut

Kanggo ndeleng sertifikat sing ditanggepi lan dicabut, cukup deleng file indeks:

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

Katrangan:

  • baris pisanan sertifikat server;
  • karakter pisanan
    • V (Sah) - sah;
    • R (Revoked) - kelingan.

Konfigurasi jaringan

Langkah pungkasan yaiku ngatur jaringan transmisi - nuntun lan firewall.

Ngidini sambungan ing firewall lokal:

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

Sabanjure, aktifake rute lalu lintas IP:

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

Ing lingkungan perusahaan, bisa uga ana subnetting lan kita kudu ngandhani router cara ngirim paket sing dituju kanggo klien VPN kita. Ing baris printah kita nglakokake printah kanthi cara (gumantung saka peralatan sing digunakake):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

lan nyimpen konfigurasi.

Kajaba iku, ing antarmuka router tapel wates ngendi alamat eksternal gw.abc.ru dilayani, perlu kanggo ngidini wacana udp/1194 paket.

Yen organisasi duwe aturan keamanan sing ketat, firewall uga kudu dikonfigurasi ing server VPN kita. Ing mratelakake panemume, keluwesan paling kasedhiya dening nyetel iptables chain FORWARD, sanajan nyetel iku kurang trep. A sethitik liyane babagan nyetel mau. Kanggo nindakake iki, paling trep nggunakake "aturan langsung" - aturan langsung, disimpen ing file /etc/firewalld/direct.xml. Konfigurasi aturan saiki bisa ditemokake kaya ing ngisor iki:

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

Sadurunge ngganti file, gawe salinan serep:

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

Kira-kira isi file kasebut yaiku:

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

Panjelasan

Iki minangka aturan iptables biasa, yen ora dirangkep sawise kedadeyan firewalld.

Antarmuka tujuan kanthi setelan gawan yaiku tun0, lan antarmuka eksternal kanggo trowongan bisa uga beda, contone, ens192, gumantung saka platform sing digunakake.

Baris pungkasan kanggo logging paket dropped. Supaya logging bisa digunakake, sampeyan kudu ngganti tingkat debug ing konfigurasi firewalld:

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

Nglamar setelan minangka perintah firewalld biasa kanggo maca maneh setelan kasebut:

$ sudo firewall-cmd --reload

Sampeyan bisa ndeleng paket dropped kaya iki:

grep forward_fw /var/log/messages

Apa mbesuk

Iki ngrampungake persiyapan!

Kabeh sing isih ana yaiku nginstal piranti lunak klien ing sisih klien, ngimpor profil lan nyambungake. Kanggo sistem operasi Windows, kit distribusi dumunung ing situs pangembang.

Pungkasan, kita nyambungake server anyar menyang sistem pemantauan lan pengarsipan, lan aja lali nginstal nganyari kanthi rutin.

Sambungan stabil!

Source: www.habr.com

Add a comment