OpenVPN-də SMB təşkilatının uzaqdan işinin təşkili

Problem problemi

Məqalədə açıq mənbəli məhsullarda işçilər üçün uzaqdan girişin təşkili təsvir olunur və həm tam muxtar sistem qurmaq üçün istifadə oluna bilər, həm də mövcud kommersiya sistemində lisenziya çatışmazlığı olduqda və ya onun fəaliyyəti qeyri-kafi olduqda genişlənmə üçün faydalı olacaqdır.

Məqalənin məqsədi təşkilata uzaqdan girişi təmin etmək üçün tam sistem tətbiq etməkdir ki, bu da “10 dəqiqə ərzində OpenVPN quraşdırmaqdan” azdır.

Nəticədə, istifadəçilərin autentifikasiyası üçün sertifikatların və (istəyə görə) korporativ Active Directory-nin istifadə olunacağı bir sistem əldə edəcəyik. Bu. iki yoxlama faktoru olan bir sistem alacağıq - məndə olanlar (sertifikat) və bildiklərim (parol).

İstifadəçiyə qoşulmağa icazə verildiyinə işarə onun myVPNUsr qrupuna üzv olmasıdır. Sertifikat orqanı oflayn istifadə olunacaq.

Həllin həyata keçirilməsinin dəyəri yalnız kiçik aparat resursları və sistem administratorunun 1 saatlıq işidir.

CetntOS 3-də OpenVPN və Easy-RSA 7 versiyası olan virtual maşından istifadə edəcəyik, hansı ki, 100 əlaqə üçün 4 vCPU və 4 GiB RAM ayrılır.

Nümunədə təşkilatımızın şəbəkəsi 172.16.0.0/16-dır, burada 172.16.19.123 ünvanlı VPN server 172.16.19.0/24 seqmentində, DNS serverləri 172.16.16.16 və 172.16.17.17, 172.16.20.0 və 23.net şəbəkəsində yerləşir. .XNUMX/XNUMX VPN müştəriləri üçün ayrılmışdır.

Kənardan qoşulmaq üçün 1194/udp portu vasitəsilə əlaqə istifadə olunur və serverimiz üçün DNS-də gw.abc.ru A-rekord yaradılıb.

SELinux-u söndürmək qətiyyən tövsiyə edilmir! OpenVPN təhlükəsizlik siyasətlərini söndürmədən işləyir.

Məzmun

  1. ƏS və proqram təminatının quraşdırılması
  2. Kriptoqrafiyanın qurulması
  3. OpenVPN quraşdırma
  4. AD Doğrulaması
  5. Başlanğıc və diaqnostika
  6. Sertifikatın verilməsi və ləğvi
  7. Şəbəkə konfiqurasiyası
  8. Nədir?

ƏS və proqram təminatının quraşdırılması

Biz CentOS 7.8.2003 paylanmasından istifadə edirik. ƏS-ni minimal konfiqurasiyada quraşdırmalıyıq. Bunu istifadə edərək etmək rahatdır kikstart, əvvəllər quraşdırılmış OS şəklinin klonlanması və digər vasitələr.

Quraşdırıldıqdan sonra şəbəkə interfeysinə bir ünvan təyin etdikdən sonra (172.16.19.123 tapşırığının şərtlərinə uyğun olaraq) ƏS-ni yeniləyirik:

$ sudo yum update -y && reboot

Biz həmçinin vaxt sinxronizasiyasının maşınımızda həyata keçirildiyinə əmin olmalıyıq.
Tətbiqi proqram təminatını quraşdırmaq üçün sizə əsas redaktor kimi openvpn, openvpn-auth-ldap, easy-rsa və vim paketləri lazımdır (sizə EPEL repozitoriyası lazımdır).

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

Virtual maşın üçün qonaq agenti quraşdırmaq faydalıdır:

$ sudo yum install open-vm-tools

VMware ESXi hostları və ya oVirt üçün

$ sudo yum install ovirt-guest-agent

Kriptoqrafiyanın qurulması

Easy-rsa qovluğuna keçin:

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

Dəyişən fayl yaradın:

$ sudo vim vars

aşağıdakı məzmun:

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

ABC MMC-nin şərti təşkilatı üçün parametrlər burada təsvir edilmişdir, onları real olanlara düzəldə və ya nümunədən tərk edə bilərsiniz. Parametrlərdə ən vacib şey sertifikatın etibarlılıq müddətini günlərlə təyin edən son sətirdir. Nümunədə 10 il (365*10+2 sıçrayış ili) dəyərindən istifadə olunur. İstifadəçi sertifikatları verilməzdən əvvəl bu dəyərə düzəliş edilməlidir.

Sonra, avtonom sertifikatlaşdırma orqanını konfiqurasiya edirik.

Quraşdırmaya dəyişənlərin ixracı, CA-nın işə salınması, CA kök açarının və sertifikatının verilməsi, Diffie-Hellman açarı, TLS açarı, server açarı və sertifikatı daxildir. CA açarı diqqətlə qorunmalı və gizli saxlanılmalıdır! Bütün sorğu parametrləri standart olaraq buraxıla bilər.

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

Bu kriptoqrafik mexanizmin qurulmasının əsas hissəsini tamamlayır.

OpenVPN quraşdırma

OpenVPN qovluğuna gedin, xidmət kataloqları yaradın və easy-rsa-ya keçid əlavə edin:

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/

Əsas OpenVPN konfiqurasiya faylını yaradın:

$ sudo vim server.conf

aşağıdakı məzmun

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

Parametrlər haqqında bəzi qeydlər:

  • sertifikat verilərkən başqa ad göstərilibsə, onu göstərin;
  • tapşırıqlarınıza uyğun ünvanlar hovuzunu təyin edin*;
  • bir və ya bir neçə marşrut və DNS server ola bilər;
  • AD**-da autentifikasiyanı həyata keçirmək üçün son 2 sətir lazımdır.

*Nümunədə seçilmiş ünvanlar diapazonu 127 müştəriyə eyni vaxtda qoşulmağa imkan verəcək, çünki /23 şəbəkəsi seçilir və OpenVPN /30 maskasından istifadə edərək hər bir müştəri üçün alt şəbəkə yaradır.
Xüsusilə zəruri hallarda, port və protokol dəyişdirilə bilər, lakin nəzərə alınmalıdır ki, port nömrəsinin dəyişdirilməsi SELinux-un konfiqurasiyasına səbəb olacaq və tcp protokolundan istifadə xərcləri artıracaq, çünki TCP paketinin çatdırılmasına nəzarət artıq tuneldə kapsullaşdırılmış paketlər səviyyəsində həyata keçirilir.

**Əgər AD-də autentifikasiyaya ehtiyac yoxdursa, onları şərh edin, növbəti bölməni keçin və şablonda auth-user-pass xəttini silin.

AD Doğrulaması

İkinci amili dəstəkləmək üçün biz AD-də hesab doğrulamasından istifadə edəcəyik.

Domendə adi bir istifadəçinin və bir qrupun hüquqları olan bir hesaba ehtiyacımız var, üzvlük qoşulma qabiliyyətini müəyyən edəcək.

Konfiqurasiya faylı yaradın:

/etc/openvpn/ldap.conf

aşağıdakı məzmun

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

Əsas parametrlər:

  • URL “ldap://ldap.abc.ru” - domen nəzarətçisinin ünvanı;
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru” - LDAP-a bağlanmaq üçün kanonik ad (UZ - abc.ru/Users konteynerində bindUsr);
  • Şifrə b1ndP@SS — bağlama üçün istifadəçi parolu;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — istifadəçinin axtarışına başlamaq üçün yol;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – icazə verən qrupun konteyneri (abc.rumyGrp konteynerində myVPNUsr qrupu);
  • SearchFilter "(cn=myVPNUsr)" icazə verən qrupun adıdır.

Başlanğıc və diaqnostika

İndi serverimizi işə salıb işə salmağa cəhd edə bilərik:

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

Başlanğıc yoxlaması:

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

Sertifikatın verilməsi və ləğvi

Çünki Sertifikatların özlərinə əlavə olaraq, açarlara və digər parametrlərə ehtiyacınız var, bütün bunları bir profil faylına yığmaq çox rahatdır. Bu fayl daha sonra istifadəçiyə ötürülür və profil OpenVPN müştərisinə idxal olunur. Bunun üçün biz parametrlər şablonu və profili yaradan skript yaradacağıq.

Profilə kök sertifikatı (ca.crt) və TLS açarı (ta.key) fayllarının məzmununu əlavə etməlisiniz.

İstifadəçi sertifikatlarını verməzdən əvvəl sertifikatlar üçün tələb olunan etibarlılıq müddətini təyin etməyi unutmayın parametrlər faylında. Bunu çox uzatmamalısınız, özünüzü maksimum 180 günlə məhdudlaşdırmağı məsləhət görürə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>

Qeydlər:

  • simlər QOYUN... məzmuna dəyişdirin onların sertifikatlar;
  • uzaq direktivdə şlüzünüzün adını/ünvanını göstərin;
  • auth-user-pass direktivi əlavə xarici autentifikasiya üçün istifadə olunur.

Ev kataloqunda (və ya digər əlverişli yerdə) sertifikat tələb etmək və profil yaratmaq üçün skript yaradırıq:

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 ~

Faylın icra edilə bilən edilməsi:

chmod a+x ~/make.profile.sh

Və ilk sertifikatımızı verə bilərik.

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

Əlaqə

Sertifikatın pozulması (itirilməsi, oğurlanması) halında bu sertifikatı ləğv etmək lazımdır:

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

Verilmiş və ləğv edilmiş sertifikatlara baxın

Verilmiş və ləğv edilmiş sertifikatlara baxmaq üçün sadəcə indeks faylına baxmaq kifayətdir:

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

Şərhlər:

  • birinci sətir server sertifikatıdır;
  • ilk xarakter
    • V (Valid) - etibarlıdır;
    • R (Ləğv edildi) - geri çağırıldı.

Şəbəkə konfiqurasiyası

Son addımlar ötürmə şəbəkəsini konfiqurasiya etməkdir - marşrutlaşdırma və təhlükəsizlik duvarları.

Yerli firewallda bağlantılara icazə verilir:

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

Sonra, IP trafik marşrutunu aktivləşdirin:

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

Korporativ mühitdə, çox güman ki, alt şəbəkə ola bilər və biz marşrutlaşdırıcıya(lar) VPN müştərilərimiz üçün nəzərdə tutulmuş paketləri necə göndərəcəyimizi söyləməliyik. Komanda xəttində əmri aşağıdakı şəkildə yerinə yetiririk (istifadə olunan avadanlıqdan asılı olaraq):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

və konfiqurasiyanı yadda saxlayın.

Bundan əlavə, gw.abc.ru xarici ünvanının xidmət göstərdiyi sərhəd marşrutlaşdırıcı interfeysində udp/1194 paketlərinin keçməsinə icazə vermək lazımdır.

Təşkilatın ciddi təhlükəsizlik qaydaları olduğu halda, VPN serverimizdə firewall da konfiqurasiya edilməlidir. Fikrimcə, ən böyük çeviklik iptables FORWARD zəncirlərinin qurulması ilə təmin edilir, baxmayaraq ki, onları qurmaq daha az rahatdır. Onları qurmaq haqqında bir az daha. Bunu etmək üçün "birbaşa qaydalar" - faylda saxlanılan birbaşa qaydalardan istifadə etmək ən əlverişlidir /etc/firewalld/direct.xml. Qaydaların cari konfiqurasiyası aşağıdakı kimi tapıla bilər:

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

Faylı dəyişdirməzdən əvvəl onun ehtiyat nüsxəsini çıxarın:

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

Faylın təxmini məzmunu bunlardır:

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

Şərhlər

Bunlar əsasən adi iptables qaydalarıdır, əks halda firewalld-un gəlişindən sonra paketlənir.

Defolt parametrləri olan təyinat interfeysi tun0-dır və tunel üçün xarici interfeys istifadə olunan platformadan asılı olaraq fərqli ola bilər, məsələn, ens192.

Sonuncu sətir buraxılmış paketləri qeyd etmək üçündür. İşləmək üçün giriş üçün firewalld konfiqurasiyasında sazlama səviyyəsini dəyişdirməlisiniz:

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

Parametrlərin tətbiqi parametrləri yenidən oxumaq üçün adi firewalld əmridir:

$ sudo firewall-cmd --reload

Düşmüş paketlərə belə baxa bilərsiniz:

grep forward_fw /var/log/messages

Nədir?

Bu quraşdırmanı tamamlayır!

Qalan şey müştəri tərəfində müştəri proqramını quraşdırmaq, profili idxal etmək və qoşulmaqdır. Windows əməliyyat sistemləri üçün paylama dəsti üzərində yerləşir developer saytı.

Nəhayət, biz yeni serverimizi monitorinq və arxivləşdirmə sistemlərinə qoşuruq və mütəmadi olaraq yeniləmələri quraşdırmağı unutmayın.

Sabit əlaqə!

Mənbə: www.habr.com

Добавить комментарий