OpenVPN-da SMB tashkilotining masofaviy ishini tashkil etish

Muammoni shakllantirish

Maqolada ochiq kodli mahsulotlarga xodimlar uchun masofaviy kirishni tashkil etish tasvirlangan va u ham butunlay avtonom tizimni qurish uchun ishlatilishi mumkin va mavjud tijorat tizimida litsenziyalar etishmasligi yoki uning ishlashi etarli bo'lmaganda kengaytirish uchun foydali bo'ladi.

Maqolaning maqsadi tashkilotga masofaviy kirishni ta'minlash uchun to'liq tizimni joriy qilishdir, bu "OpenVPN-ni 10 daqiqada o'rnatish" dan ko'proq narsa.

Natijada, foydalanuvchilarni autentifikatsiya qilish uchun sertifikatlar va (ixtiyoriy) korporativ Active Directory qo'llaniladigan tizimga ega bo'lamiz. Bu. Biz ikkita tekshirish omiliga ega tizimni olamiz - menda bor (sertifikat) va men bilgan narsa (parol).

Foydalanuvchiga ulanishga ruxsat berilganining belgisi uning myVPNUsr guruhiga a'zoligidir. Sertifikat organi oflayn rejimda ishlatiladi.

Yechimni amalga oshirish narxi faqat kichik apparat resurslari va tizim ma'murining 1 soatlik ishi.

Biz CetntOS 3 da OpenVPN va Easy-RSA 7-versiyasiga ega virtual mashinadan foydalanamiz, u 100 ta ulanish uchun 4 vCPU va 4 GiB RAM ajratilgan.

Misolda, tashkilotimiz tarmog'i 172.16.0.0/16 bo'lib, unda 172.16.19.123 manzilli VPN serveri 172.16.19.0/24 segmentida, DNS serverlari 172.16.16.16 va 172.16.17.17, 172.16.20.0 va 23.net tarmoqlarida joylashgan. .XNUMX/XNUMX VPN mijozlari uchun ajratilgan.

Tashqaridan ulanish uchun 1194/udp port orqali ulanishdan foydalaniladi va serverimiz uchun DNS-da gw.abc.ru A-rekord yaratilgan.

SELinux-ni o'chirib qo'yish qat'iyan tavsiya etilmaydi! OpenVPN xavfsizlik siyosatini o'chirmasdan ishlaydi.

Mundarija

  1. OS va amaliy dasturlarni o'rnatish
  2. Kriptografiyani sozlash
  3. OpenVPN o'rnatilmoqda
  4. AD autentifikatsiyasi
  5. Ishga tushirish va diagnostika
  6. Sertifikat berish va bekor qilish
  7. Tarmoqni sozlash
  8. Keyin nima

OS va amaliy dasturlarni o'rnatish

Biz CentOS 7.8.2003 tarqatishdan foydalanamiz. Biz operatsion tizimni minimal konfiguratsiyada o'rnatishimiz kerak. Buni ishlatish qulay boshlash, ilgari o'rnatilgan OS tasvirini klonlash va boshqa vositalar.

O'rnatishdan so'ng, tarmoq interfeysiga manzilni belgilash (172.16.19.123 topshiriq shartlariga muvofiq) biz OTni yangilaymiz:

$ sudo yum update -y && reboot

Shuningdek, bizning mashinamizda vaqt sinxronizatsiyasi amalga oshirilganligiga ishonch hosil qilishimiz kerak.
Ilova dasturlarini o'rnatish uchun sizga asosiy muharrir sifatida openvpn, openvpn-auth-ldap, easy-rsa va vim paketlari kerak bo'ladi (sizga EPEL ombori kerak bo'ladi).

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

Virtual mashina uchun mehmon agentini o'rnatish foydalidir:

$ sudo yum install open-vm-tools

VMware ESXi xostlari uchun yoki oVirt uchun

$ sudo yum install ovirt-guest-agent

Kriptografiyani sozlash

Easy-rsa katalogiga o'ting:

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

O'zgaruvchi fayl yarating:

$ sudo vim vars

quyidagi tarkib:

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 MChJ shartli tashkilotining parametrlari bu erda tasvirlangan, siz ularni haqiqiylarga to'g'rilashingiz yoki ularni misoldan qoldirishingiz mumkin. Parametrlardagi eng muhim narsa sertifikatning amal qilish muddatini kunlarda belgilaydigan oxirgi qatordir. Misol 10 yil qiymatidan foydalanadi (365*10+2 kabisa yillar). Bu qiymat foydalanuvchi sertifikatlari berilishidan oldin sozlanishi kerak.

Keyinchalik, avtonom sertifikatlashtirish organini sozlaymiz.

O'rnatish o'zgaruvchilarni eksport qilish, CAni ishga tushirish, CA ildiz kaliti va sertifikatini, Diffie-Hellman kalitini, TLS kalitini va server kaliti va sertifikatini berishni o'z ichiga oladi. CA kaliti ehtiyotkorlik bilan himoyalangan va sir saqlanishi kerak! Barcha so'rov parametrlari sukut bo'yicha qoldirilishi mumkin.

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 kriptografik mexanizmni o'rnatishning asosiy qismini yakunlaydi.

OpenVPN o'rnatilmoqda

OpenVPN katalogiga o'ting, xizmat kataloglarini yarating va easy-rsa havolasini qo'shing:

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/

Asosiy OpenVPN konfiguratsiya faylini yarating:

$ sudo vim server.conf

quyidagi tarkib

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

Parametrlar bo'yicha ba'zi eslatmalar:

  • agar sertifikat berishda boshqa nom ko'rsatilgan bo'lsa, uni ko'rsating;
  • vazifalaringizga mos keladigan manzillar pulini belgilang*;
  • bir yoki bir nechta marshrut va DNS serverlari bo'lishi mumkin;
  • AD** da autentifikatsiyani amalga oshirish uchun oxirgi 2 qator kerak.

*Misolda tanlangan manzillar diapazoni 127 tagacha mijozga bir vaqtning o'zida ulanish imkonini beradi, chunki /23 tarmog'i tanlanadi va OpenVPN har bir mijoz uchun /30 niqobidan foydalangan holda quyi tarmoq yaratadi.
Agar ayniqsa kerak bo'lsa, port va protokolni o'zgartirish mumkin, ammo shuni yodda tutish kerakki, port port raqamini o'zgartirish SELinux-ni sozlashni talab qiladi va tcp protokolidan foydalanish qo'shimcha xarajatlarni oshiradi, chunki TCP paketlarini yetkazib berish nazorati allaqachon tunnelda inkapsullangan paketlar darajasida amalga oshirilgan.

**Agar ADda autentifikatsiya zarur bo'lmasa, ularni sharhlang, keyingi bo'limni o'tkazib yuboring va shablonda auth-user-pass liniyasini olib tashlang.

AD autentifikatsiyasi

Ikkinchi omilni qo'llab-quvvatlash uchun biz ADda hisobni tekshirishdan foydalanamiz.

Bizga domenda oddiy foydalanuvchi va guruhning huquqlariga ega hisob qaydnomasi kerak, unga a'zolik ulanish qobiliyatini aniqlaydi.

Konfiguratsiya faylini yarating:

/etc/openvpn/ldap.conf

quyidagi tarkib

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

Osnovnye parametrlari:

  • URL "ldap://ldap.abc.ru" - domen tekshiruvi manzili;
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru” - LDAP ga ulanish uchun kanonik nom (UZ - abc.ru/Users konteyneridagi bindUsr);
  • Parol b1ndP@SS — ulash uchun foydalanuvchi paroli;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — foydalanuvchini qidirishni boshlash yoʻli;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – ruxsat beruvchi guruhning konteyneri (abc.rumyGrp konteyneridagi myVPNUsr guruhi);
  • SearchFilter "(cn=myVPNUsr)" ruxsat beruvchi guruhning nomi.

Ishga tushirish va diagnostika

Endi biz serverimizni yoqish va ishga tushirishga harakat qilishimiz mumkin:

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

Ishga tushirishni tekshirish:

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

Sertifikat berish va bekor qilish

Chunki Sertifikatlarning o'ziga qo'shimcha ravishda sizga kalitlar va boshqa sozlamalar kerak, bularning barchasini bitta profil fayliga o'rash juda qulay. Keyin ushbu fayl foydalanuvchiga uzatiladi va profil OpenVPN mijoziga import qilinadi. Buning uchun biz sozlamalar shablonini va profilni yaratadigan skriptni yaratamiz.

Profilga ildiz sertifikati (ca.crt) va TLS kaliti (ta.key) fayllari tarkibini qo'shishingiz kerak.

Foydalanuvchi sertifikatlarini berishdan oldin sertifikatlar uchun talab qilinadigan amal qilish muddatini belgilashni unutmang parametrlar faylida. Buni juda uzoq qilmaslik kerak, men o'zingizni maksimal 180 kun bilan cheklashni maslahat beraman.

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>

Remarks:

  • torlar O'ZINGIZNI QO'YING... tarkibga o'zgartirish xususiy sertifikatlar;
  • masofaviy direktivada shlyuzingiz nomini/manzilini belgilang;
  • auth-user-pass direktivasi qo'shimcha tashqi autentifikatsiya qilish uchun ishlatiladi.

Uy katalogida (yoki boshqa qulay joyda) biz sertifikat so'rash va profil yaratish uchun skript yaratamiz:

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 ~

Faylni bajariladigan qilish:

chmod a+x ~/make.profile.sh

Va biz birinchi sertifikatimizni berishimiz mumkin.

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

Fikr-mulohaza

Sertifikat buzilgan taqdirda (yo'qolishi, o'g'irlanishi) ushbu sertifikatni bekor qilish kerak:

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

Berilgan va bekor qilingan sertifikatlarni ko'rish

Berilgan va bekor qilingan sertifikatlarni ko'rish uchun indeks faylini ko'rish kifoya:

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

Izohlar:

  • birinchi qator - server sertifikati;
  • birinchi belgi
    • V (Valid) - amal qiladi;
    • R (bekor qilingan) - esga olindi.

Tarmoqni sozlash

Oxirgi qadamlar uzatish tarmog'ini - marshrutlash va xavfsizlik devorlarini sozlashdir.

Mahalliy xavfsizlik devorida ulanishga ruxsat berish:

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

Keyin, IP-trafik marshrutini yoqing:

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

Korporativ muhitda subnetting bo'lishi mumkin va biz yo'riqnoma(lar)ga VPN mijozlarimiz uchun mo'ljallangan paketlarni qanday yuborishni aytishimiz kerak. Buyruqlar satrida biz buyruqni quyidagi tarzda bajaramiz (ishlatilgan uskunaga qarab):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

va konfiguratsiyani saqlang.

Bundan tashqari, gw.abc.ru tashqi manzili xizmat ko'rsatadigan chegara router interfeysida udp/1194 paketlarining o'tishiga ruxsat berish kerak.

Agar tashkilot qat'iy xavfsizlik qoidalariga ega bo'lsa, bizning VPN serverimizda xavfsizlik devori ham sozlanishi kerak. Menimcha, eng katta moslashuvchanlik iptables FORWARD zanjirlarini o'rnatish orqali ta'minlanadi, garchi ularni o'rnatish unchalik qulay emas. Ularni o'rnatish haqida bir oz ko'proq. Buning uchun "to'g'ridan-to'g'ri qoidalar" dan foydalanish eng qulaydir - faylda saqlanadigan to'g'ridan-to'g'ri qoidalar /etc/firewalld/direct.xml. Qoidalarning joriy konfiguratsiyasini quyidagicha topish mumkin:

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

Faylni o'zgartirishdan oldin uning zaxira nusxasini yarating:

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

Faylning taxminiy mazmuni:

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

Izohlar

Bu oddiy iptables qoidalari, aks holda xavfsizlik devori paydo bo'lgandan keyin paketlanadi.

Standart sozlamalarga ega maqsad interfeysi tun0 va tunnel uchun tashqi interfeys ishlatiladigan platformaga qarab farq qilishi mumkin, masalan, ens192.

Oxirgi qator tushirilgan paketlarni ro'yxatga olish uchun. Ishlash uchun tizimga kirish uchun xavfsizlik devori konfiguratsiyasida disk raskadrovka darajasini o'zgartirishingiz kerak:

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

Sozlamalarni qo'llash sozlamalarni qayta o'qish uchun odatiy xavfsizlik devori buyrug'idir:

$ sudo firewall-cmd --reload

Siz tashlab yuborilgan paketlarni quyidagicha ko'rishingiz mumkin:

grep forward_fw /var/log/messages

Keyin nima

Bu sozlashni yakunlaydi!

Qolgan narsa mijoz tomonidan mijoz dasturini o'rnatish, profilni import qilish va ulanishdir. Windows operatsion tizimlari uchun tarqatish to'plami joylashgan ishlab chiquvchi sayti.

Va nihoyat, biz yangi serverimizni monitoring va arxivlash tizimlariga ulaymiz va muntazam ravishda yangilanishlarni o'rnatishni unutmang.

Barqaror ulanish!

Manba: www.habr.com

a Izoh qo'shish