Организација даљинског рада СМБ организације на ОпенВПН-у

Проблем статемент

Чланак описује организацију удаљеног приступа за запослене на производима отвореног кода и може се користити и за изградњу потпуно аутономног система, а биће користан и за проширење када постоји недостатак лиценци у постојећем комерцијалном систему или је његов учинак недовољан.

Циљ чланка је имплементација комплетног система за пружање удаљеног приступа организацији, што је нешто више од „инсталирања ОпенВПН-а за 10 минута“.

Као резултат, добићемо систем у коме ће се сертификати и (опционо) корпоративни Ацтиве Дирецтори користити за аутентификацију корисника. То. добићемо систем са два фактора верификације – шта имам (сертификат) и шта знам (лозинка).

Знак да је кориснику дозвољено да се повеже је његово чланство у групи миВПНУср. Сертификациони ауторитет ће се користити ван мреже.

Трошкови имплементације решења су само мали хардверски ресурси и 1 сат рада систем администратора.

Користићемо виртуелну машину са ОпенВПН и Еаси-РСА верзијом 3 на ЦетнтОС 7, којој је додељено 100 вЦПУ-а и 4 ГиБ РАМ-а на 4 веза.

У примеру, мрежа наше организације је 172.16.0.0/16, у којој се ВПН сервер са адресом 172.16.19.123 налази у сегменту 172.16.19.0/24, ДНС сервери 172.16.16.16 и 172.16.17.17 и 172.16.20.0 поднет. .23/XNUMX је додељен за ВПН клијенте.

За повезивање споља користи се веза преко порта 1194/удп, а А-запис гв.абц.ру је креиран у ДНС-у за наш сервер.

Строго се не препоручује да онемогућите СЕЛинук! ОпенВПН ради без онемогућавања безбедносних политика.

Садржина

  1. Инсталација ОС и апликативног софтвера
  2. Постављање криптографије
  3. Подешавање ОпенВПН-а
  4. АД Аутхентицатион
  5. Покретање и дијагностика
  6. Издавање и опозив сертификата
  7. Подешавање мреже
  8. Шта је следеће

Инсталација ОС и апликативног софтвера

Користимо дистрибуцију ЦентОС 7.8.2003. Морамо да инсталирамо ОС у минималној конфигурацији. Погодно је то учинити користећи кицкстарт, клонирање претходно инсталиране слике ОС-а и друга средства.

Након инсталације, додељивање адресе мрежном интерфејсу (према условима задатка 172.16.19.123), ажурирамо ОС:

$ sudo yum update -y && reboot

Такође морамо да се уверимо да наша машина ради синхронизацију времена.
Да бисте инсталирали апликативни софтвер, потребни су вам пакети опенвпн, опенвпн-аутх-лдап, еаси-рса и вим као главни уређивач (требаће вам ЕПЕЛ спремиште).

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

За виртуелну машину, корисно је инсталирати агента за госте:

$ sudo yum install open-vm-tools

за ВМваре ЕСКСи хостове или за оВирт

$ sudo yum install ovirt-guest-agent

Постављање криптографије

Идите у еаси-рса директоријум:

$ 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

Овде су описани параметри за условну организацију АБЦ ЛЛЦ; можете их исправити на стварне или их оставити из примера. Најважнија ствар у параметрима је последњи ред, који одређује период важења сертификата у данима. Пример користи вредност 10 година (365*10+2 преступне године). Ова вредност ће морати да се прилагоди пре издавања корисничких сертификата.

Затим конфигуришемо аутономни ауторитет за сертификацију.

Подешавање укључује извоз променљивих, иницијализацију ЦА, издавање ЦА коренског кључа и сертификата, Диффие-Хеллман кључа, ТЛС кључа и серверског кључа и сертификата. ЦА кључ мора бити пажљиво заштићен и чуван у тајности! Сви параметри упита могу се оставити као подразумевани.

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

Овим је завршен главни део подешавања криптографског механизма.

Подешавање ОпенВПН-а

Идите у ОпенВПН директоријум, креирајте директоријуме услуга и додајте везу до еаси-рса:

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/

Креирајте главну ОпенВПН конфигурациону датотеку:

$ 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

Неке напомене о параметрима:

  • ако је приликом издавања сертификата наведено другачије име, навести га;
  • одредите групу адреса која одговара вашим задацима*;
  • може постојати једна или више рута и ДНС сервера;
  • Последња 2 реда су потребна за имплементацију аутентификације у АД**.

*Опсег адреса изабраних у примеру ће омогућити до 127 клијената да се истовремено повежу, јер мрежа /23 је изабрана, а ОпенВПН креира подмрежу за сваког клијента користећи /30 маску.
Ако је посебно потребно, порт и протокол се могу променити, међутим, треба имати на уму да ће промена броја порта порта подразумевати конфигурисање СЕЛинук-а, а коришћење тцп протокола ће повећати трошкове, јер Контрола испоруке ТЦП пакета се већ врши на нивоу пакета инкапсулираних у тунелу.

**Ако аутентификација у АД није потребна, коментаришите их, прескочите следећи одељак и у шаблону уклоните линију аутх-усер-пасс.

АД Аутхентицатион

Да бисмо подржали други фактор, користићемо верификацију налога у АД.

Потребан нам је налог у домену са правима обичног корисника и група, чланство у којој ће одредити могућност повезивања.

Направите конфигурациону датотеку:

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

Кључни параметри:

  • УРЛ “лдап://лдап.абц.ру” - адреса контролера домена;
  • БиндДН “ЦН=биндУср,ЦН=Усерс,ДЦ=абц,ДЦ=ру” - канонско име за везивање за ЛДАП (УЗ - биндУср у контејнеру абц.ру/Усерс);
  • Лозинка б1ндП@СС — корисничка лозинка за везивање;
  • БасеДН “ОУ=аллУср,ДЦ=абц,ДЦ=ру” — путања са које треба започети претрагу корисника;
  • БасеДН “ОУ=миГрп,ДЦ=абц,ДЦ=ру” – контејнер групе која дозвољава (група миВПНУср у контејнеру абц.румиГрп);
  • СеарцхФилтер "(цн=миВПНУср)" је назив групе која дозвољава.

Покретање и дијагностика

Сада можемо покушати да омогућимо и покренемо наш сервер:

$ 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

Издавање и опозив сертификата

Јер Поред самих сертификата, потребни су вам кључеви и друга подешавања, веома је згодно све ово умотати у једну датотеку профила. Ова датотека се затим преноси кориснику и профил се увози на ОпенВПН клијент. Да бисмо то урадили, креираћемо шаблон подешавања и скрипту која генерише профил.

Морате да додате садржај роот сертификата (ца.црт) и ТЛС кључ (та.кеи) датотека у профил.

Пре издавања корисничких сертификата не заборавите да подесите потребан период важења сертификата у датотеци параметара. Не би требало да буде предуго; препоручујем да се ограничите на највише 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>

Напомене:

  • жице СТАВИТЕ СВОЈ... променити садржај од њихових сертификати;
  • у удаљеној директиви наведите име/адресу вашег мрежног пролаза;
  • директива аутх-усер-пасс се користи за додатну екстерну аутентификацију.

У почетном директоријуму (или другом погодном месту) креирамо скрипту за тражење сертификата и креирање профила:

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

Објашњење:

  • први ред је сертификат сервера;
  • први лик
    • В (Важи) - важи;
    • Р (Опозвано) - опозвано.

Подешавање мреже

Последњи кораци су конфигурисање мреже преноса - рутирања и заштитних зидова.

Омогућавање веза у локалном заштитном зиду:

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

Затим омогућите рутирање ИП саобраћаја:

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

У корпоративном окружењу вероватно ће постојати подмреже и морамо да кажемо рутерима како да шаљу пакете намењене нашим ВПН клијентима. На командној линији извршавамо команду на начин (у зависности од опреме која се користи):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

и сачувајте конфигурацију.

Поред тога, на интерфејсу граничног рутера где се сервира екстерна адреса гв.абц.ру, потребно је дозволити пролаз удп/1194 пакета.

У случају да организација има строга безбедносна правила, заштитни зид такође мора бити конфигурисан на нашем ВПН серверу. По мом мишљењу, највећу флексибилност пружа постављање иптаблес ФОРВАРД ланаца, иако је њихово постављање мање згодно. Још мало о њиховом постављању. Да бисте то урадили, најпогодније је користити „директна правила“ - директна правила, ускладиштена у датотеци /етц/фиреваллд/дирецт.кмл. Тренутна конфигурација правила се може наћи на следећи начин:

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

Објашњења

Ово су у суштини редовна правила за иптаблес, иначе упакована након појаве фиреваллд-а.

Одредишни интерфејс са подразумеваним подешавањима је тун0, а спољни интерфејс за тунел може бити другачији, на пример, енс192, у зависности од платформе која се користи.

Последњи ред је за евидентирање испуштених пакета. Да би евидентирање функционисало, потребно је да промените ниво отклањања грешака у конфигурацији фиреваллд-а:

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

Примена подешавања је уобичајена команда фиреваллд-а за поновно читање подешавања:

$ sudo firewall-cmd --reload

Отпуштене пакете можете видети овако:

grep forward_fw /var/log/messages

Шта је следеће

Овим је подешавање завршено!

Остаје само да инсталирате клијентски софтвер на страни клијента, увезете профил и повежете се. За Виндовс оперативне системе, дистрибутивни комплет се налази на веб-сајт програмера.

Коначно, повезујемо наш нови сервер са системима за праћење и архивирање и не заборавите да редовно инсталирате ажурирања.

Стабилна веза!

Извор: ввв.хабр.цом

Додај коментар