Shirika la kazi ya mbali ya shirika la SMB kwenye OpenVPN

Taarifa ya tatizo

Nakala hiyo inaelezea shirika la ufikiaji wa mbali kwa wafanyikazi kwenye bidhaa za chanzo wazi na inaweza kutumika kujenga mfumo wa uhuru kabisa, na itakuwa muhimu kwa upanuzi wakati kuna uhaba wa leseni katika mfumo uliopo wa kibiashara au utendaji wake hautoshi.

Lengo la kifungu hicho ni kutekeleza mfumo kamili wa kutoa ufikiaji wa mbali kwa shirika, ambao ni zaidi ya "kusakinisha OpenVPN katika dakika 10."

Kwa hivyo, tutapata mfumo ambao vyeti na (kwa hiari) Saraka Inayotumika ya shirika itatumika kuthibitisha watumiaji. Hiyo. tutapata mfumo wenye vipengele viwili vya uthibitishaji - nilichonacho (cheti) na ninachojua (nenosiri).

Ishara kwamba mtumiaji anaruhusiwa kuunganishwa ni uanachama wake katika kikundi cha myVPNUsr. Mamlaka ya cheti itatumika nje ya mtandao.

Gharama ya kutekeleza suluhisho ni rasilimali ndogo tu za vifaa na saa 1 ya kazi ya msimamizi wa mfumo.

Tutatumia mashine pepe yenye OpenVPN na Easy-RSA toleo la 3 kwenye CetntOS 7, ambayo imetengewa vCPU 100 na RAM ya GiB 4 kwa miunganisho 4.

Kwa mfano, mtandao wa shirika letu ni 172.16.0.0/16, ambapo seva ya VPN iliyo na anwani 172.16.19.123 iko katika sehemu ya 172.16.19.0/24, seva za DNS 172.16.16.16 na 172.16.17.17. .172.16.20.0/23 imetengwa kwa ajili ya wateja wa VPN .

Ili kuunganisha kutoka nje, muunganisho kupitia bandari 1194/udp hutumiwa, na gw.abc.ru ya A-rekodi imeundwa kwenye DNS kwa seva yetu.

Haipendekezi kabisa kuzima SELinux! OpenVPN hufanya kazi bila kuzima sera za usalama.

yaliyomo

  1. Ufungaji wa OS na programu ya programu
  2. Kuweka cryptography
  3. Kuanzisha OpenVPN
  4. Uthibitishaji wa AD
  5. Anza na utambuzi
  6. Suala la cheti na ubatilishaji
  7. Kuanzisha mtandao
  8. Nini kifuatacho

Ufungaji wa OS na programu ya programu

Tunatumia usambazaji wa CentOS 7.8.2003. Tunahitaji kusakinisha OS katika usanidi mdogo. Ni rahisi kufanya hivyo kwa kutumia kickstart, kuunda picha ya OS iliyosanikishwa hapo awali na njia zingine.

Baada ya usakinishaji, kupeana anwani kwenye kiolesura cha mtandao (kulingana na masharti ya kazi 172.16.19.123), tunasasisha OS:

$ sudo yum update -y && reboot

Tunahitaji pia kuhakikisha kuwa ulandanishi wa saa unafanywa kwenye mashine yetu.
Ili kusakinisha programu tumizi, unahitaji openvpn, openvpn-auth-ldap, rahisi-rsa na vim vifurushi kama kihariri kikuu (utahitaji hazina ya EPEL).

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

Ni muhimu kusanikisha wakala wa mgeni kwa mashine ya kawaida:

$ sudo yum install open-vm-tools

kwa wapangishi wa VMware ESXi, au kwa oVirt

$ sudo yum install ovirt-guest-agent

Kuweka cryptography

Nenda kwenye saraka rahisi-rsa:

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

Unda faili tofauti:

$ sudo vim vars

maudhui yafuatayo:

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

Vigezo vya shirika la masharti la ABC LLC vimefafanuliwa hapa; unaweza kusahihisha kwa zile halisi au kuziacha kutoka kwa mfano. Jambo muhimu zaidi katika vigezo ni mstari wa mwisho, ambao huamua muda wa uhalali wa cheti kwa siku. Mfano hutumia thamani ya miaka 10 (miaka mirefu 365*10+2). Thamani hii itahitaji kurekebishwa kabla ya cheti cha mtumiaji kutolewa.

Kisha, tunasanidi mamlaka ya uidhinishaji inayojiendesha.

Usanidi unajumuisha kusafirisha vigeu, kuanzisha CA, kutoa ufunguo wa mizizi ya CA na cheti, ufunguo wa Diffie-Hellman, ufunguo wa TLS, na ufunguo wa seva na cheti. Ufunguo wa CA lazima ulindwe kwa uangalifu na kuwekwa siri! Vigezo vyote vya hoja vinaweza kuachwa kama chaguo-msingi.

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

Hii inakamilisha sehemu kuu ya kusanidi utaratibu wa kriptografia.

Kuanzisha OpenVPN

Nenda kwenye saraka ya OpenVPN, unda saraka za huduma na uongeze kiunga cha rahisi-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/

Unda faili kuu ya usanidi ya OpenVPN:

$ sudo vim server.conf

zifuatazo yaliyomo

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

Vidokezo kadhaa juu ya vigezo:

  • ikiwa jina tofauti lilibainishwa wakati wa kutoa cheti, onyesha;
  • taja kundi la anwani ili kuendana na kazi zako*;
  • kunaweza kuwa na njia moja au zaidi na seva za DNS;
  • Laini 2 za mwisho zinahitajika ili kutekeleza uthibitishaji katika AD**.

*Anwani mbalimbali zilizochaguliwa katika mfano zitaruhusu hadi wateja 127 kuunganishwa kwa wakati mmoja, kwa sababu mtandao wa /23 umechaguliwa, na OpenVPN huunda subnet kwa kila mteja kwa kutumia mask /30.
Ikiwa ni lazima hasa, bandari na itifaki inaweza kubadilishwa, hata hivyo, inapaswa kukumbushwa katika akili kwamba kubadilisha nambari ya bandari itahusisha kusanidi SELinux, na kutumia itifaki ya tcp itaongeza juu, kwa sababu. Udhibiti wa utoaji wa pakiti za TCP tayari unafanywa kwa kiwango cha pakiti zilizowekwa kwenye handaki.

**Ikiwa uthibitishaji katika AD hauhitajiki, toa maoni yao, ruka sehemu inayofuata, na kwenye kiolezo. ondoa mstari wa kupita kwa mtumiaji.

Uthibitishaji wa AD

Ili kusaidia kipengele cha pili, tutatumia uthibitishaji wa akaunti katika AD.

Tunahitaji akaunti katika kikoa iliyo na haki za mtumiaji wa kawaida na kikundi, uanachama ambao utaamua uwezo wa kuunganisha.

Unda faili ya usanidi:

/etc/openvpn/ldap.conf

zifuatazo yaliyomo

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

Vigezo muhimu:

  • URL "ldap://ldap.abc.ru" - anwani ya mtawala wa kikoa;
  • BindDN β€œCN=bindUsr,CN=Users,DC=abc,DC=ru” - jina la kisheria la kuunganisha kwa LDAP (UZ - bindUsr katika chombo abc.ru/Users);
  • Nenosiri b1ndP@SS β€” nenosiri la mtumiaji la kumfunga;
  • BaseDN β€œOU=alUsr,DC=abc,DC=ru” β€” njia ya kuanzia kutafuta mtumiaji;
  • BaseDN β€œOU=myGrp,DC=abc,DC=ru” – chombo cha kikundi kinachoruhusu (kikundi myVPNUsr kwenye chombo abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" ni jina la kikundi kinachoruhusu.

Anza na utambuzi

Sasa tunaweza kujaribu kuwezesha na kuanza seva yetu:

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

Ukaguzi wa kuanza:

systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log

Suala la cheti na ubatilishaji

Kwa sababu Mbali na cheti zenyewe, unahitaji funguo na mipangilio mingine; ni rahisi sana kufunga haya yote kwenye faili moja ya wasifu. Faili hii kisha huhamishiwa kwa mtumiaji na wasifu huletwa kwenye mteja wa OpenVPN. Ili kufanya hivyo, tutaunda template ya mipangilio na hati inayozalisha wasifu.

Unahitaji kuongeza maudhui ya cheti cha mizizi (ca.crt) na faili za TLS (ta.key) kwenye wasifu.

Kabla ya kutoa vyeti vya mtumiaji usisahau kuweka muda wa uhalali unaohitajika kwa vyeti katika faili ya vigezo. Haupaswi kuifanya kuwa ndefu sana; ninapendekeza ujiwekee kikomo hadi siku 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>

Notes:

  • mistari WEKA YAKO... mabadiliko ya maudhui yao vyeti;
  • katika maagizo ya mbali, taja jina / anwani ya lango lako;
  • mwongozo wa auth-user-pass hutumiwa kwa uthibitishaji wa ziada wa nje.

Kwenye saraka ya nyumbani (au mahali pengine pazuri) tunaunda hati ya kuomba cheti na kuunda wasifu:

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 ~

Kufanya faili kutekelezwa:

chmod a+x ~/make.profile.sh

Na tunaweza kutoa cheti chetu cha kwanza.

~/make.profile.sh my-first-user

Tathmini

Katika kesi ya maelewano ya cheti (hasara, wizi), ni muhimu kubatilisha cheti hiki:

cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl

Tazama vyeti vilivyotolewa na kubatilishwa

Kuangalia vyeti vilivyotolewa na kubatilishwa, tazama tu faili ya faharisi:

cd /usr/share/easy-rsa/3/
cat pki/index.txt

Maelezo:

  • mstari wa kwanza ni cheti cha seva;
  • mhusika wa kwanza
    • V (Halali) - halali;
    • R (Imefutwa) - alikumbuka.

Kuanzisha mtandao

Hatua za mwisho ni kusanidi mtandao wa maambukizi - uelekezaji na ngome.

Kuruhusu miunganisho kwenye ngome ya ndani ya eneo:

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

Ifuatayo, wezesha uelekezaji wa trafiki wa IP:

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

Katika mazingira ya shirika, kuna uwezekano wa kuwa na mtandao mdogo na tunahitaji kuwaambia vipanga njia jinsi ya kutuma pakiti zinazolengwa kwa wateja wetu wa VPN. Kwenye mstari wa amri tunatoa amri kwa namna (kulingana na vifaa vinavyotumiwa):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

na uhifadhi usanidi.

Kwa kuongeza, kwenye interface ya mpaka wa router ambapo anwani ya nje ya gw.abc.ru inatumiwa, ni muhimu kuruhusu kifungu cha pakiti za udp/1194.

Iwapo shirika lina sheria kali za usalama, ngome-mtandao lazima pia isanidiwe kwenye seva yetu ya VPN. Kwa maoni yangu, kubadilika zaidi hutolewa kwa kusanidi minyororo ya iptables FORWARD, ingawa kuziweka sio rahisi sana. Zaidi kidogo kuhusu kuziweka. Ili kufanya hivyo, ni rahisi zaidi kutumia "sheria za moja kwa moja" - sheria za moja kwa moja, zilizohifadhiwa kwenye faili /etc/firewalld/direct.xml. Mpangilio wa sasa wa sheria unaweza kupatikana kama ifuatavyo:

$ sudo firewall-cmd --direct --get-all-rule

Kabla ya kubadilisha faili, fanya nakala yake ya nakala:

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

Yaliyomo takriban ya faili ni:

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

Maelezo

Hizi kimsingi ni sheria za kawaida za iptables, vinginevyo zimefungwa baada ya ujio wa firewalld.

Kiolesura lengwa chenye mipangilio chaguomsingi ni tun0, na kiolesura cha nje cha handaki kinaweza kuwa tofauti, kwa mfano, en192, kulingana na jukwaa linalotumika.

Mstari wa mwisho ni wa kuweka pakiti zilizoanguka. Ili ukataji miti ufanye kazi, unahitaji kubadilisha kiwango cha utatuzi katika usanidi wa firewalld:

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

Kutumia mipangilio ni amri ya kawaida ya firewalld kusoma tena mipangilio:

$ sudo firewall-cmd --reload

Unaweza kutazama pakiti zilizoanguka kama hii:

grep forward_fw /var/log/messages

Nini kifuatacho

Hii inakamilisha usanidi!

Yote iliyobaki ni kufunga programu ya mteja kwenye upande wa mteja, kuagiza wasifu na kuunganisha. Kwa mifumo ya uendeshaji ya Windows, kifaa cha usambazaji kinapatikana tovuti ya msanidi.

Hatimaye, tunaunganisha seva yetu mpya kwenye mifumo ya ufuatiliaji na uhifadhi wa kumbukumbu, na usisahau kusakinisha masasisho mara kwa mara.

Uunganisho thabiti!

Chanzo: mapenzi.com

Kuongeza maoni