OpenVPN боюнча SMB уюмунун аралыктан иштөөсүн уюштуруу

Тапшырманын коюлушу

Макалада кызматкерлердин ачык булак өнүмдөрүнө алыстан кирүү мүмкүнчүлүгүн уюштуруу сүрөттөлөт жана аны толугу менен автономдуу системаны куруу үчүн да колдонсо болот, ошондой эле учурдагы коммерциялык системада лицензиялардын жетишсиздиги же анын иштеши жетишсиз болгондо кеңейтүү үчүн пайдалуу болот.

Макаланын максаты - уюмга алыстан кирүү мүмкүнчүлүгүн камсыз кылуу үчүн толук системаны ишке ашыруу, бул "OpenVPNти 10 мүнөттүн ичинде орнотуудан" бир аз көбүрөөк.

Натыйжада, колдонуучулардын аутентификациясы үчүн сертификаттар жана (милдеттүү эмес) корпоративдик Active Directory колдонула турган системага ээ болобуз. Ошол. биз эки текшерүү фактору бар системаны алабыз - менде эмне бар (сертификат) жана мен эмне билем (пароль).

Колдонуучуга туташууга уруксат берилген белги алардын myVPNUsr тобуна мүчөлүгү болуп саналат. Тастыктоочу орган оффлайн режиминде колдонулат.

Чечимди ишке ашыруунун баасы - бул кичинекей аппараттык ресурстар жана системалык администратордун 1 сааттык иши.

Биз CetntOS 3де OpenVPN жана Easy-RSA 7 версиясы бар виртуалдык машинаны колдонобуз, ал 100 туташууга 4 vCPU жана 4 ГБ RAM бөлүнгөн.

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

Сырттан туташуу үчүн 1194/udp порту аркылуу туташуу колдонулат жана серверибиз үчүн DNSде gw.abc.ru A-жазуусу түзүлдү.

SELinuxти өчүрүү такыр сунушталбайт! OpenVPN коопсуздук саясаттарын өчүрбөстөн иштейт.

ыраазы

  1. OS жана колдонмо программалык камсыздоону орнотуу
  2. Криптографияны орнотуу
  3. OpenVPN конфигурацияланууда
  4. AD аутентификациясы
  5. Ишке киргизүү жана диагностика
  6. Сертификат берүү жана жокко чыгаруу
  7. тармак Тарам
  8. кийинкиси эмне

OS жана колдонмо программалык камсыздоону орнотуу

Биз CentOS 7.8.2003 бөлүштүрүүнү колдонобуз. Биз ОСти минималдуу конфигурацияда орнотуубуз керек. Бул колдонуу үчүн ыңгайлуу болуп саналат барат.Кипр, мурда орнотулган 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 түпкү ачкычын жана сертификатын, 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);
  • Сырсөз 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

Орнотууларды колдонуу - жөндөөлөрдү кайра окуу үчүн кадимки Firewalld буйругу:

$ sudo firewall-cmd --reload

Сиз ташталган пакеттерди төмөнкүдөй көрө аласыз:

grep forward_fw /var/log/messages

кийинкиси эмне

Бул орнотууну аяктайт!

Кардардын программасын кардар тарапка орнотуу, профилди импорттоо жана туташуу гана калды. Windows операциялык системалары үчүн бөлүштүрүү комплекти жайгашкан иштеп чыгуучунун веб-сайты.

Акырында, биз жаңы серверибизди мониторинг жана архивдөө тутумдарына туташтырабыз жана жаңыртууларды дайыма орнотууну унутпаңыз.

Туруктуу байланыш!

Source: www.habr.com

Комментарий кошуу