Ташкили кори фосилавии ташкилоти SMB дар OpenVPN

Тартиб додани масъала

Мақола ташкили дастрасии фосилавии кормандонро ба маҳсулоти кушодаасос тавсиф мекунад ва метавонад ҳам барои сохтани як системаи комилан мустақил истифода шавад ва ҳам барои тавсеа ҳангоми мавҷуд набудани иҷозатномаҳо дар системаи мавҷудаи тиҷоратӣ ё нокифоя будани иҷрои он муфид хоҳад буд.

Ҳадафи мақола татбиқи як системаи мукаммали дастрасии дурдаст ба созмон мебошад, ки ин аз "насб кардани OpenVPN дар 10 дақиқа" каме бештар аст.

Дар натиҷа, мо системаеро ба даст меорем, ки дар он сертификатҳо ва (ихтиёрӣ) директорияи корпоративӣ барои тасдиқи корбарон истифода мешаванд. ки. мо системаеро бо ду омили санҷишӣ мегирем - он чизе ки ман дорам (шаҳодатнома) ва он чизе ки ман медонам (парол).

Аломате, ки ба корбар иҷозати пайвастшавӣ дорад, узвияти онҳо дар гурӯҳи myVPNUsr мебошад. Мақоми сертификатсия офлайн истифода мешавад.

Арзиши татбиқи ҳалли он танҳо захираҳои хурди сахтафзор ва 1 соати кори маъмури система мебошад.

Мо як мошини маҷозӣ бо OpenVPN ва версияи Easy-RSA 3 дар CetntOS 7 истифода хоҳем кард, ки 100 vCPU ва 4 ГБ 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, subnet 23. .XNUMX/XNUMX барои муштариёни VPN ҷудо карда шудааст.

Барои пайвастшавӣ аз берун, пайвастшавӣ тавассути порти 1194/udp истифода мешавад ва дар DNS барои сервери мо сабти A-gw.abc.ru сохта шудааст.

Хомӯш кардани SELinux қатъиян тавсия дода намешавад! OpenVPN бидуни хомӯш кардани сиёсати амният кор мекунад.

Мундариҷа

  1. Насби ОС ва нармафзори барномавӣ
  2. Танзими криптография
  3. Танзими OpenVPN
  4. Аутентификатсияи AD
  5. Оғози кор ва ташхис
  6. Додани сертификат ва бозхонди он
  7. Танзимоти шабака
  8. Ин чӣ аст?

Насби ОС ва нармафзори барномавӣ

Мо тақсимоти CentOS 7.8.2003-ро истифода мебарем. Мо бояд ОС-ро дар конфигуратсияи минималӣ насб кунем. Бо истифода аз ин кор қулай аст kickstart, клон кардани тасвири қаблан насбшудаи OS ва дигар воситаҳо.

Пас аз насб, таъин кардани суроға ба интерфейси шабака (мувофиқи шартҳои вазифаи 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 бошад;
  • Барои амалисозии аутентификатсия дар AD** 2 сатри охир лозим аст.

*Дипазони суроғаҳои дар мисол интихобшуда имкон медиҳад, ки то 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 - bindUsr дар контейнери abc.ru/Users);
  • Рамз b1ndP@SS — пароли корбар барои ҳатмӣ;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — роҳе, ки аз он ба ҷустуҷӯи корбар оғоз мекунад;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – контейнери гурӯҳи иҷозатдодашуда (гурӯҳи myVPNUsr дар контейнери abc.rumyGrp);
  • 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

Feedback

Дар сурати вайрон кардани шаҳодатнома (гум шудан, дуздӣ) ин шаҳодатномаро бекор кардан лозим аст:

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 мебошанд, вагарна пас аз пайдоиши Firewalld бастабандӣ карда мешаванд.

Интерфейси таъинот бо танзимоти пешфарз tun0 аст ва интерфейси беруна барои нақб метавонад гуногун бошад, масалан, ens192, вобаста ба платформаи истифодашуда.

Сатри охирин барои сабти бастаҳои партофташуда мебошад. Барои сабти ном ба кор, шумо бояд сатҳи дебагро дар конфигуратсияи девори девор тағир диҳед:

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

Татбиқи танзимот фармони муқаррарии брандмауэр барои аз нав хондани танзимот аст:

$ sudo firewall-cmd --reload

Шумо метавонед бастаҳои партофташударо чунин дидан кунед:

grep forward_fw /var/log/messages

Ин чӣ аст?

Ин танзимотро анҷом медиҳад!

Танҳо насб кардани нармафзори муштарӣ дар тарафи муштарӣ, ворид кардани профил ва пайвастшавӣ боқӣ мемонад. Барои системаҳои оператсионии Windows, маҷмӯаи тақсимот дар рӯи он ҷойгир аст вебсайти таҳиякунанда.

Ниҳоят, мо сервери нави худро ба системаҳои мониторинг ва бойгонӣ пайваст мекунем ва насб кардани навсозиҳои мунтазамро фаромӯш накунед.

Пайвасти устувор!

Манбаъ: will.com

Илова Эзоҳ