OpenVPN жүйесінде ШОБ ұйымының қашықтан жұмысын ұйымдастыру

Мәселенің тұжырымы

Мақалада ашық бастапқы өнімдерде қызметкерлерге қашықтан қол жеткізуді ұйымдастыру сипатталған және оны толығымен автономды жүйені құру үшін де пайдалануға болады, сондай-ақ қолданыстағы коммерциялық жүйеде лицензиялардың жетіспеушілігі немесе оның өнімділігі жеткіліксіз болған кезде кеңейту үшін пайдалы болады.

Мақаланың мақсаты – ұйымға қашықтан қол жеткізуді қамтамасыз ететін толық жүйені енгізу, бұл «OpenVPN-ді 10 минут ішінде орнатудан» көп емес.

Нәтижесінде біз пайдаланушыларды аутентификациялау үшін сертификаттар және (міндетті емес) корпоративтік Active Directory пайдаланылатын жүйені аламыз. Бұл. біз екі тексеру факторы бар жүйені аламыз - менде бар (сертификат) және мен білетін (пароль).

Пайдаланушыға қосылуға рұқсат етілген белгі оның myVPNUsr тобына мүшелігі болып табылады. Сертификаттау орталығы офлайн режимде пайдаланылады.

Шешімді енгізу құны тек шағын аппараттық ресурстар мен жүйелік әкімшінің 1 сағаттық жұмысы болып табылады.

Біз CetntOS 3 жүйесінде OpenVPN және Easy-RSA 7 нұсқасы бар виртуалды машинаны қолданамыз, ол 100 қосылымға 4 vCPU және 4 ГБ жедел жады бөлінген.

Мысалда біздің ұйымның желісі 172.16.0.0/16 болып табылады, онда 172.16.19.123 мекенжайы бар VPN сервері 172.16.19.0/24 сегментінде, DNS серверлері 172.16.16.16 және 172.16.17.17, және 172.16.20.0.net. .23/XNUMX VPN клиенттері үшін бөлінген.

Сырттан қосылу үшін 1194/udp порты арқылы қосылым пайдаланылады және серверіміз үшін DNS жүйесінде gw.abc.ru A жазбасы жасалды.

SELinux-ты өшіру қатаң ұсынылмайды! OpenVPN қауіпсіздік саясаттарын өшірмей жұмыс істейді.

Мазмұны

  1. ОЖ және қолданбалы бағдарламалық қамтамасыз етуді орнату
  2. Криптографияны орнату
  3. OpenVPN конфигурациялануда
  4. AD аутентификациясы
  5. Іске қосу және диагностика
  6. Сертификат беру және қайтарып алу
  7. Желіні орнату
  8. Ары қарай не

ОЖ және қолданбалы бағдарламалық қамтамасыз етуді орнату

Біз CentOS 7.8.2003 дистрибутивін қолданамыз. Операциялық жүйені минималды конфигурацияда орнатуымыз керек. Мұны қолдану арқылы жасау ыңғайлы кикстарт, бұрын орнатылған ОЖ кескінін және басқа құралдарды клондау.

Орнатқаннан кейін желі интерфейсіне мекенжай тағайындау (172.16.19.123 тапсырмасының шарттарына сәйкес) біз ОЖ-ны жаңартамыз:

$ sudo yum update -y && reboot

Сондай-ақ, уақыт синхрондау біздің құрылғыда орындалатынына көз жеткізуіміз керек.
Қолданбалы бағдарламалық құралды орнату үшін сізге негізгі редактор ретінде openvpn, openvpn-auth-ldap, easy-rsa және vim пакеттері қажет (сізге EPEL репозиторийі қажет болады).

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

Виртуалды машина үшін қонақ агентін орнату пайдалы:

$ sudo yum install open-vm-tools

VMware ESXi хосттары үшін немесе oVirt үшін

$ sudo yum install ovirt-guest-agent

Криптографияны орнату

Easy-rsa каталогына өтіңіз:

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

Айнымалы файлды жасаңыз:

$ sudo vim vars

келесі мазмұн:

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 LLC шартты ұйымының параметрлері мұнда сипатталған, оларды нақтыға түзетуге немесе мысалдан қалдыруға болады. Параметрлердегі ең маңыздысы - сертификаттың жарамдылық мерзімін күндермен анықтайтын соңғы жол. Мысал 10 жыл (365*10+2 кібісе жылдар) мәнін пайдаланады. Бұл мән пайдаланушы сертификаттары шығарылмай тұрып реттелуі керек.

Әрі қарай, біз автономды сертификаттау орталығын конфигурациялаймыз.

Орнату айнымалы мәндерді экспорттауды, CA инициализациясын, CA түбірлік кілтін және сертификатын, Diffie-Hellman кілтін, TLS кілтін және сервер кілтін және сертификатын шығаруды қамтиды. CA кілті мұқият қорғалуы және құпия сақталуы керек! Барлық сұрау параметрлерін әдепкі ретінде қалдыруға болады.

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

Бұл криптографиялық механизмді орнатудың негізгі бөлігін аяқтайды.

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 жүйесінде есептік жазбаны тексеруді қолданамыз.

Бізге доменде қарапайым пайдаланушының және топтың құқықтары бар тіркелгі қажет, оның мүшелігі қосылу мүмкіндігін анықтайды.

Конфигурация файлын жасаңыз:

/etc/openvpn/ldap.conf

келесі мазмұн

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

Негізгі параметрлері:

  • URL «ldap://ldap.abc.ru» - домен контроллерінің мекенжайы;
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru” - LDAP-қа байланыстырудың канондық атауы (UZ - abc.ru/Users контейнеріндегі bindUsr);
  • Password b1ndP@SS — байлау үшін пайдаланушы құпия сөзі;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — пайдаланушыны іздеуді бастайтын жол;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – рұқсат беретін топтың контейнері (abc.rumyGrp контейнеріндегі myVPNUsr тобы);
  • SearchFilter "(cn=myVPNUsr)" рұқсат беретін топтың атауы.

Іске қосу және диагностика

Енді біз серверімізді қосып, іске қосуға тырысамыз:

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

Іске қосуды тексеру:

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 (кері қайтарылған) - кері қайтарылды.

Желіні орнату

Соңғы қадамдар жіберу желісін конфигурациялау болып табылады - маршруттау және желіаралық қалқандар.

Жергілікті желіаралық қалқандағы қосылымдарға рұқсат беру:

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

Әрі қарай, IP трафикті бағыттауды қосыңыз:

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

Корпоративтік ортада ішкі желі болуы мүмкін және біз маршрутизатор(лар)ға 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

Файлды өзгертпес бұрын оның сақтық көшірмесін жасаңыз:

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

Файлдың шамамен мазмұны:

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

Түсіндірмелер

Бұл негізінен iptables ережелері, әйтпесе брандмауэр пайда болғаннан кейін пакеттелген.

Әдепкі параметрлері бар тағайындалған интерфейс tun0 болып табылады және туннельге арналған сыртқы интерфейс пайдаланылатын платформаға байланысты әртүрлі болуы мүмкін, мысалы, ens192.

Соңғы жол түсірілген пакеттерді тіркеуге арналған. Жұмысқа кіру үшін брандмауэр конфигурациясында жөндеу деңгейін өзгерту қажет:

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

Параметрлерді қолдану - параметрлерді қайта оқу үшін әдеттегі брандмауэр пәрмені:

$ sudo firewall-cmd --reload

Түсірілген пакеттерді келесідей көруге болады:

grep forward_fw /var/log/messages

Ары қарай не

Бұл орнатуды аяқтайды!

Клиенттік бағдарламалық құралды клиент жағында орнату, профильді импорттау және қосылу ғана қалады. Windows операциялық жүйелері үшін тарату жинағы мына жерде орналасқан әзірлеуші ​​сайты.

Соңында, біз жаңа серверімізді бақылау және мұрағаттау жүйелеріне қосамыз және жаңартуларды жүйелі түрде орнатуды ұмытпаңыз.

Тұрақты байланыс!

Ақпарат көзі: www.habr.com

пікір қалдыру