Организация на отдалечена работа на SMB организация на OpenVPN
Проблем изявление
Статията описва организацията на отдалечен достъп за служители до продукти с отворен код и може да се използва както за изграждане на напълно автономна система, така и ще бъде полезна за разширяване, когато има недостиг на лицензи в съществуващата търговска система или нейната производителност е недостатъчна.
Целта на статията е да внедри цялостна система за предоставяне на отдалечен достъп до организация, което е малко повече от „инсталиране на OpenVPN за 10 минути“.
В резултат на това ще получим система, в която сертификатите и (по избор) корпоративната Active Directory ще се използват за удостоверяване на потребителите. Че. ще получим система с два фактора за проверка - какво имам (сертификат) и какво знам (парола).
Знак, че даден потребител има право да се свързва, е членството му в групата myVPNUsr. Сертифициращият орган ще се използва офлайн.
Цената за внедряване на решението е само малък хардуерен ресурс и 1 час работа на системния администратор.
Ще използваме виртуална машина с OpenVPN и Easy-RSA версия 3 на CetntOS 7, на която са разпределени 100 vCPU и 4 GiB RAM на 4 връзки.
В примера мрежата на нашата организация е 172.16.0.0/16, в която VPN сървърът с адрес 172.16.19.123 се намира в сегмента 172.16.19.0/24, DNS сървърите 172.16.16.16 и 172.16.17.17, а подмрежата 172.16.20.0 .23/XNUMX е разпределен за VPN клиенти.
За връзка отвън се използва връзка през порт 1194/udp, а в DNS за нашия сървър е създаден A-запис gw.abc.ru.
Строго не се препоръчва да деактивирате SELinux! OpenVPN работи без деактивиране на политики за сигурност.
Използваме дистрибуцията CentOS 7.8.2003. Трябва да инсталираме операционната система в минимална конфигурация. Удобно е да направите това с помощта на създават със, клониране на предварително инсталиран образ на ОС и други средства.
След инсталиране, присвояване на адрес на мрежовия интерфейс (съгласно условията на задача 172.16.19.123), актуализираме операционната система:
$ sudo yum update -y && reboot
Също така трябва да се уверим, че синхронизирането на времето се извършва на нашата машина.
За да инсталирате приложен софтуер, имате нужда от пакетите openvpn, openvpn-auth-ldap, easy-rsa и vim като основен редактор (ще ви е необходимо хранилището на EPEL).
Параметрите за условната организация ABC LLC са описани тук, можете да ги коригирате към реалните или да ги оставите от примера. Най-важното в параметрите е последният ред, който определя срока на валидност на сертификата в дни. Примерът използва стойността 10 години (365*10+2 високосни години). Тази стойност ще трябва да се коригира преди издаването на потребителски сертификати.
След това конфигурираме автономен сертифициращ орган.
Настройката включва експортиране на променливи, инициализиране на CA, издаване на главния ключ и сертификат на CA, ключ Diffie-Hellman, TLS ключ и сървърен ключ и сертификат. CA ключът трябва да бъде внимателно защитен и пазен в тайна! Всички параметри на заявката могат да бъдат оставени по подразбиране.
Това завършва основната част от настройката на криптографския механизъм.
Настройка на OpenVPN
Отидете в директорията на OpenVPN, създайте директории на услуги и добавете връзка към 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/
Създайте основния конфигурационен файл на OpenVPN:
$ sudo vim server.conf
следното съдържание
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
Някои бележки относно параметрите:
ако при издаване на удостоверението е посочено друго име, посочете го;
посочете пул от адреси, за да отговарят на вашите задачи*;
може да има един или повече маршрути и DNS сървъри;
Последните 2 реда са необходими за прилагане на удостоверяване в AD**.
*Диапазонът от адреси, избран в примера, ще позволи на до 127 клиента да се свържат едновременно, т.к. избрана е мрежата /23 и OpenVPN създава подмрежа за всеки клиент, използвайки маската /30.
Ако е особено необходимо, портът и протоколът могат да бъдат променени, но трябва да се има предвид, че промяната на номера на порта на порта ще доведе до конфигуриране на SELinux и използването на tcp протокола ще увеличи режийните разходи, т.к. Контролът на доставката на TCP пакети вече се извършва на ниво пакети, капсулирани в тунела.
**Ако не е необходимо удостоверяване в AD, коментирайте ги, пропуснете следващия раздел и в шаблона премахнете реда auth-user-pass.
AD удостоверяване
За да подкрепим втория фактор, ще използваме проверка на акаунт в AD.
Имаме нужда от акаунт в домейна с правата на обикновен потребител и група, членството в която ще определи възможността за свързване.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Издаване и отнемане на сертификат
защото В допълнение към самите сертификати се нуждаете от ключове и други настройки; много е удобно да обвиете всичко това в един профилен файл. След това този файл се прехвърля на потребителя и профилът се импортира в OpenVPN клиента. За целта ще създадем шаблон за настройки и скрипт, който генерира профила.
Трябва да добавите съдържанието на главния сертификат (ca.crt) и TLS ключ (ta.key) файлове към профила.
Преди издаване на потребителски сертификати не забравяйте да зададете необходимия период на валидност на сертификатите във файла с параметри. Не трябва да го правите твърде дълго; препоръчвам да се ограничите до максимум 180 дни.
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>
Забележки:
линии ПОСТАВЕТЕ ВАШИЯ... промяна на съдържанието техен сертификати;
в отдалечената директива посочете името/адреса на вашия шлюз;
директивата auth-user-pass се използва за допълнително външно удостоверяване.
В домашната директория (или друго удобно място) създаваме скрипт за заявка на сертификат и създаване на профил:
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 ~
Направете файла изпълним:
chmod a+x ~/make.profile.sh
И ние можем да издадем първия си сертификат.
~/make.profile.sh my-first-user
Преглед
В случай на компрометиране на сертификат (загуба, кражба), е необходимо този сертификат да бъде отменен:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Преглед на издадени и отменени сертификати
За да видите издадени и отменени сертификати, просто вижте индексния файл:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Пояснение:
първият ред е сертификатът на сървъра;
първи знак
V (Valid) - валиден;
R (Revoked) - отзоват.
Конфигурация на мрежата
Последните стъпки са конфигуриране на преносната мрежа - маршрутизация и защитни стени.
В корпоративна среда е вероятно да има подмрежа и ние трябва да кажем на рутера(ите) как да изпраща пакети, предназначени за нашите VPN клиенти. На командния ред изпълняваме командата по следния начин (в зависимост от използваното оборудване):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
и запазете конфигурацията.
Освен това на интерфейса на граничния рутер, където се обслужва външният адрес gw.abc.ru, е необходимо да се разреши преминаването на udp/1194 пакети.
В случай, че организацията има строги правила за сигурност, на нашия VPN сървър трябва да бъде конфигурирана и защитна стена. По мое мнение, най-голямата гъвкавост се осигурява чрез настройка на iptables FORWARD вериги, въпреки че настройването им е по-малко удобно. Малко повече за настройката им. За да направите това, най-удобно е да използвате „директни правила“ - директни правила, съхранени във файл /etc/firewalld/direct.xml. Текущата конфигурация на правилата може да бъде намерена, както следва:
$ sudo firewall-cmd --direct --get-all-rule
Преди да промените файл, направете резервно копие от него:
По същество това са обикновени правила за iptables, различно опаковани след появата на firewalld.
Интерфейсът на дестинацията с настройки по подразбиране е tun0, а външният интерфейс за тунела може да е различен, например ens192, в зависимост от използваната платформа.
Последният ред е за регистриране на изпуснати пакети. За да работи регистрирането, трябва да промените нивото на отстраняване на грешки в конфигурацията на защитната стена:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Прилагането на настройки е обичайната команда на защитната стена за повторно четене на настройките:
$ sudo firewall-cmd --reload
Можете да видите изпуснатите пакети по следния начин:
grep forward_fw /var/log/messages
Какво следва?
Това завършва настройката!
Остава само да инсталирате клиентския софтуер от страната на клиента, да импортирате профила и да се свържете. За операционни системи Windows комплектът за разпространение се намира на сайт за разработчици.
Накрая свързваме нашия нов сървър със системите за мониторинг и архивиране и не забравяйте редовно да инсталирате актуализации.