Organisasyon sa hilit nga trabaho sa usa ka organisasyon sa SMB sa OpenVPN

Pagbuot sa problema

Gihubit sa artikulo ang organisasyon sa hilit nga pag-access alang sa mga empleyado sa mga bukas nga gigikanan nga mga produkto ug mahimong magamit pareho sa pagtukod sa usa ka hingpit nga autonomous nga sistema, ug mahimong mapuslanon alang sa pagpalapad kung adunay kakulang sa mga lisensya sa naglungtad nga komersyal nga sistema o ang pasundayag niini dili igo.

Ang katuyoan sa artikulo mao ang pagpatuman sa usa ka kompleto nga sistema alang sa paghatag sa hilit nga pag-access sa usa ka organisasyon, nga labi pa sa "pag-install sa OpenVPN sa 10 minuto."

Ingon usa ka sangputanan, makakuha kami usa ka sistema diin ang mga sertipiko ug (opsyonal) ang corporate Active Directory gamiton aron mapamatud-an ang mga tiggamit. Nga. makakuha kami ug sistema nga adunay duha ka hinungdan sa pag-verify - kung unsa ang naa nako (sertipiko) ug kung unsa ang akong nahibal-an (password).

Usa ka timaan nga gitugotan ang usa ka tiggamit nga magkonektar mao ang ilang pagkamiyembro sa myVPNUsr nga grupo. Ang awtoridad sa sertipiko gamiton sa offline.

Ang gasto sa pagpatuman sa solusyon gamay ra nga mga kahinguhaan sa hardware ug 1 oras nga trabaho sa tagdumala sa sistema.

Maggamit kami og virtual machine nga adunay OpenVPN ug Easy-RSA version 3 sa CetntOS 7, nga gigahin og 100 vCPUs ug 4 GiB RAM kada 4 ka koneksyon.

Sa pananglitan, ang network sa among organisasyon mao ang 172.16.0.0/16, diin ang VPN server nga adunay address nga 172.16.19.123 nahimutang sa bahin nga 172.16.19.0/24, DNS servers 172.16.16.16 ug 172.16.17.17, ug ang subnet 172.16.20.0. Ang .23/XNUMX gigahin alang sa mga kliyente sa VPN.

Aron makonektar gikan sa gawas, usa ka koneksyon pinaagi sa port 1194/udp ang gigamit, ug usa ka A-record gw.abc.ru ang gihimo sa DNS para sa among server.

Dili gyud girekomenda nga i-disable ang SELinux! Ang OpenVPN naglihok nga wala’y pagpugong sa mga palisiya sa seguridad.

Mga sulod

  1. Pag-instalar sa OS ug software sa aplikasyon
  2. Pag-set up sa cryptography
  3. Pag-setup sa OpenVPN
  4. AD Authentication
  5. Pagsugod ug mga diagnostic
  6. Sertipiko nga isyu ug pagbawi
  7. Pag-ayo sa network
  8. Unsa ang sunod

Pag-instalar sa OS ug software sa aplikasyon

Gigamit namo ang CentOS 7.8.2003 distribution. Kinahanglan namon nga i-install ang OS sa gamay nga pagsumpo. Kombenyente sa pagbuhat niini gamit pagsugod, pag-clone sa na-install na nga OS image ug uban pang paagi.

Human sa pag-instalar, paghatag og address sa network interface (sumala sa mga termino sa buluhaton 172.16.19.123), among gi-update ang OS:

$ sudo yum update -y && reboot

Kinahanglan usab natong siguroon nga ang pag-synchronize sa oras gihimo sa atong makina.
Para ma-install ang application software, kinahanglan nimo ang openvpn, openvpn-auth-ldap, easy-rsa ug vim packages isip main editor (kinahanglan nimo ang EPEL repository).

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

Mapuslanon ang pag-instalar sa usa ka ahente sa bisita alang sa usa ka virtual nga makina:

$ sudo yum install open-vm-tools

para sa mga host sa VMware ESXi, o para sa oVirt

$ sudo yum install ovirt-guest-agent

Pag-set up sa cryptography

Lakaw ngadto sa sayon-rsa nga direktoryo:

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

Paghimo usa ka variable nga file:

$ sudo vim vars

ang mosunod nga sulod:

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

Ang mga parameter alang sa conditional nga organisasyon ABC LLC gihulagway dinhi; mahimo nimo kini matul-id sa tinuod o ibilin kini gikan sa panig-ingnan. Ang labing hinungdanon nga butang sa mga parameter mao ang katapusan nga linya, nga nagtino sa panahon sa balido sa sertipiko sa mga adlaw. Ang pananglitan naggamit sa bili nga 10 ka tuig (365*10+2 ka tuig nga paglukso). Kinahanglang i-adjust ang kini nga kantidad sa dili pa ma-isyu ang mga sertipiko sa tiggamit.

Sunod, gi-configure namon ang usa ka awtonomous nga awtoridad sa sertipikasyon.

Ang pag-setup naglakip sa pag-eksport sa mga variable, pagsugod sa CA, pag-isyu sa CA root key ug certificate, Diffie-Hellman key, TLS key, ug server key ug certificate. Ang yawe sa CA kinahanglan nga maampingong panalipdan ug itago! Ang tanan nga mga parameter sa pangutana mahimong ibilin ingon nga default.

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

Nakompleto niini ang nag-unang bahin sa pag-set up sa mekanismo sa cryptographic.

Pag-setup sa OpenVPN

Adto sa OpenVPN nga direktoryo, paghimo og mga direktoryo sa serbisyo ug pagdugang og link sa sayon-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/

Paghimo sa nag-unang OpenVPN configuration file:

$ sudo vim server.conf

mosunod nga mga sulod

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

Pipila ka mga nota sa mga parameter:

  • kung lain nga ngalan ang gipiho sa pag-isyu sa sertipiko, ipahibalo kini;
  • ipiho ang hugpong sa mga adres nga mohaum sa imong mga buluhaton*;
  • mahimo nga adunay usa o daghang mga ruta ug DNS server;
  • Ang kataposang 2 ka linya gikinahanglan aron mapatuman ang authentication sa AD**.

*Ang sakup sa mga adres nga gipili sa pananglitan magtugot hangtod sa 127 nga mga kliyente nga magkonektar nga dungan, tungod kay gipili ang /23 network, ug ang OpenVPN nagmugna og subnet para sa matag kliyente gamit ang /30 mask.
Kung gikinahanglan, ang pantalan ug protocol mahimong mausab, bisan pa, kinahanglan nga hinumdoman nga ang pagbag-o sa numero sa port port maglakip sa pag-configure sa SELinux, ug ang paggamit sa tcp protocol makadugang sa overhead, tungod kay Ang kontrol sa pagpadala sa packet sa TCP gihimo na sa lebel sa mga pakete nga gisulod sa tunel.

** Kung dili kinahanglan ang authentication sa AD, i-comment kini, laktawan ang sunod nga seksyon, ug sa template kuhaa ang auth-user-pass nga linya.

AD Authentication

Aron masuportahan ang ikaduhang hinungdan, gamiton namon ang pag-verify sa account sa AD.

Kinahanglan namon ang usa ka account sa domain nga adunay mga katungod sa usa ka ordinaryo nga tiggamit ug usa ka grupo, ang pagkamiyembro diin mahibal-an ang katakus sa pagkonektar.

Paghimo og configuration file:

/etc/openvpn/ldap.conf

mosunod nga mga sulod

<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" - adres sa tigdumala sa domain;
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru” - canonical name para sa paggapos sa LDAP (UZ - bindUsr sa abc.ru/Users container);
  • Password b1ndP@SS — user password alang sa pagbugkos;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — ang dalan diin magsugod sa pagpangita sa user;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – sudlanan sa gitugotan nga grupo (grupo myVPNUsr sa sudlanan abc.rumyGrp);
  • Ang SearchFilter "(cn=myVPNUsr)" mao ang ngalan sa gitugotan nga grupo.

Pagsugod ug mga diagnostic

Karon mahimo namong sulayan nga mahimo ug masugdan ang among server:

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

Pagsusi sa pagsugod:

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

Sertipiko nga isyu ug pagbawi

Kay Gawas pa sa mga sertipiko sa ilang kaugalingon, kinahanglan nimo ang mga yawe ug uban pang mga setting; dali kaayo nga ibalot kining tanan sa usa ka file sa profile. Ang kini nga file dayon ibalhin sa tiggamit ug ang profile gi-import sa kliyente sa OpenVPN. Aron mahimo kini, maghimo kami usa ka template sa mga setting ug usa ka script nga nagmugna sa profile.

Kinahanglan nimong idugang ang mga sulod sa root certificate (ca.crt) ug TLS key (ta.key) nga mga file ngadto sa profile.

Sa wala pa mag-isyu sa mga sertipiko sa tiggamit ayaw kalimot sa pagtakda sa gikinahanglan nga validity period para sa mga sertipiko sa mga parameter file. Kinahanglan nga dili nimo kini himuon nga taas kaayo; Girekomenda ko nga limitahan ang imong kaugalingon sa labing taas nga 180 ka adlaw.

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>

Mahinumduman:

  • mga kuldas IBUTANG ANG IMONG... pagbag-o sa sulod kaugalingon mga sertipiko;
  • sa hilit nga direktiba, ipiho ang ngalan/adres sa imong ganghaan;
  • ang auth-user-pass nga direktiba gigamit alang sa dugang nga external authentication.

Sa direktoryo sa balay (o uban pang kombenyente nga lugar) naghimo kami usa ka script alang sa paghangyo usa ka sertipiko ug paghimo usa ka profile:

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 ~

Paghimo sa file executable:

chmod a+x ~/make.profile.sh

Ug mahimo namong i-isyu ang among unang sertipiko.

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

Feedback

Sa kaso sa pagkompromiso sa usa ka sertipiko (pagkawala, pagpangawat), kinahanglan nga bawion kini nga sertipiko:

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

Tan-awa ang gi-isyu ug gibawi nga mga sertipiko

Aron matan-aw ang gi-isyu ug gibawi nga mga sertipiko, tan-awa lang ang index file:

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

Mga pagpasabut:

  • ang unang linya mao ang server certificate;
  • unang karakter
    • V (Bado) - balido;
    • R (Gibawi) - nahinumdom.

Pag-ayo sa network

Ang katapusang mga lakang mao ang pag-configure sa transmission network - routing ug firewalls.

Gitugotan ang mga koneksyon sa lokal nga firewall:

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

Sunod, i-enable ang IP traffic routing:

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

Sa usa ka palibot sa korporasyon, lagmit adunay subnetting ug kinahanglan namon isulti sa (mga) router kung giunsa ipadala ang mga pakete nga gitakda alang sa among mga kliyente sa VPN. Sa command line atong ipatuman ang command sa paagi (depende sa kagamitan nga gigamit):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

ug i-save ang configuration.

Dugang pa, sa interface sa utlanan sa router diin ang eksternal nga adres gw.abc.ru gisilbi, gikinahanglan nga tugutan ang pagpasa sa udp/1194 nga mga pakete.

Kung ang organisasyon adunay estrikto nga mga lagda sa seguridad, ang usa ka firewall kinahanglan usab nga ma-configure sa among VPN server. Sa akong opinyon, ang labing dako nga pagka-flexible gihatag pinaagi sa pag-set up sa mga iptables FORWARD chain, bisan kung ang pag-set up niini dili kaayo kombenyente. Usa ka gamay pa bahin sa pagpahimutang kanila. Aron mahimo kini, labing sayon ​​​​nga gamiton ang "direkta nga mga lagda" - direkta nga mga lagda, nga gitipigan sa usa ka file /etc/firewalld/direct.xml. Ang kasamtangan nga configuration sa mga lagda makita sama sa mosunod:

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

Sa dili pa mag-ilis og file, paghimo og backup nga kopya niini:

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

Ang gibanabana nga sulod sa file mao ang:

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

Mga pagpasabut

Kini ang hinungdanon nga regular nga mga lagda sa iptables, kung dili giputos pagkahuman sa pag-abut sa firewalld.

Ang destinasyon nga interface nga adunay default nga mga setting mao ang tun0, ug ang eksternal nga interface alang sa tunel mahimong lahi, pananglitan, ens192, depende sa gigamit nga plataporma.

Ang katapusan nga linya alang sa pag-log sa nahulog nga mga pakete. Aron molihok ang pag-log, kinahanglan nimo nga usbon ang lebel sa debug sa configuration sa firewalld:

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

Ang pagpadapat sa mga setting mao ang naandan nga firewalld nga sugo aron basahon pag-usab ang mga setting:

$ sudo firewall-cmd --reload

Mahimo nimong tan-awon ang nahulog nga mga pakete sama niini:

grep forward_fw /var/log/messages

Unsa ang sunod

Nakompleto niini ang setup!

Ang nahabilin mao ang pag-instalar sa software sa kliyente sa kilid sa kliyente, pag-import sa profile ug pagkonektar. Alang sa Windows operating system, ang distribution kit nahimutang sa site sa developer.

Sa katapusan, among gikonektar ang among bag-ong server sa mga sistema sa pag-monitor ug pag-archive, ug ayaw kalimti ang kanunay nga pag-install sa mga update.

Stable nga koneksyon!

Source: www.habr.com

Idugang sa usa ka comment