Òganizasyon travay aleka nan yon òganizasyon SMB sou OpenVPN

Deklarasyon sou pwoblèm nan

Atik la dekri òganizasyon aksè aleka pou anplwaye yo sou pwodwi sous louvri epi yo ka itilize tou de pou konstwi yon sistèm konplètman otonòm, epi yo pral itil pou ekspansyon lè gen yon mank de lisans nan sistèm komèsyal ki egziste deja oswa pèfòmans li se ensifizan.

Objektif la nan atik la se aplike yon sistèm konplè pou bay aksè aleka nan yon òganizasyon, ki se yon ti kras plis pase "enstale OpenVPN nan 10 minit."

Kòm yon rezilta, nou pral jwenn yon sistèm nan ki sètifika ak (si ou vle) anyè aktif antrepriz yo pral itilize yo otantifye itilizatè yo. Sa. nou pral jwenn yon sistèm ki gen de faktè verifikasyon - sa mwen genyen (sètifika) ak sa mwen konnen (modpas).

Yon siy ke yon itilizatè gen dwa konekte se manm yo nan gwoup la myVPNUsr. Otorite sètifika a pral itilize offline.

Pri a nan aplikasyon solisyon an se sèlman ti resous pyès ki nan konpitè ak 1 èdtan nan travay administratè sistèm lan.

Nou pral sèvi ak yon machin vityèl ak OpenVPN ak Easy-RSA vèsyon 3 sou CetntOS 7, ki resevwa 100 vCPUs ak 4 GiB RAM pou chak 4 koneksyon.

Nan egzanp lan, rezo òganizasyon nou an se 172.16.0.0/16, kote sèvè VPN a ak adrès 172.16.19.123 sitiye nan segman 172.16.19.0/24, sèvè DNS 172.16.16.16 ak 172.16.17.17 ak 172.16.20.0. .23/XNUMX atribye ba pou kliyan VPN .

Pou konekte soti deyò, yo itilize yon koneksyon atravè pò 1194/udp, ak yon dosye A-gw.abc.ru te kreye nan dns la pou sèvè nou an.

Li entèdi pa rekòmande pou enfim SELinux! OpenVPN travay san yo pa enfimite règleman sekirite.

Content

  1. Enstalasyon OS ak lojisyèl aplikasyon
  2. Mete kanpe kriptografik
  3. Mete kanpe OpenVPN
  4. AD Otantifikasyon
  5. Demaraj ak dyagnostik
  6. Pwoblèm sètifika ak revokasyon
  7. Rezo konfigirasyon
  8. Ki sa ki nan pwochen an

Enstalasyon OS ak lojisyèl aplikasyon

Nou itilize distribisyon CentOS 7.8.2003. Nou bezwen enstale eksplwatasyon an nan yon konfigirasyon minim. Li se pratik fè sa lè l sèvi avèk choute kòmanse, klonaj yon imaj OS deja enstale ak lòt mwayen.

Apre enstalasyon, bay yon adrès nan koòdone rezo a (dapre kondisyon travay 172.16.19.123), nou mete ajou eksplwatasyon an:

$ sudo yum update -y && reboot

Nou bezwen tou asire w ke senkronizasyon tan fèt sou machin nou an.
Pou enstale lojisyèl aplikasyon an, ou bezwen pakè openvpn, openvpn-auth-ldap, easy-rsa ak vim kòm editè prensipal la (ou pral bezwen depo EPEL).

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

Li itil pou enstale yon ajan envite pou yon machin vityèl:

$ sudo yum install open-vm-tools

pou VMware ESXi hôtes, oswa pou oVirt

$ sudo yum install ovirt-guest-agent

Mete kanpe kriptografik

Ale nan anyè easy-rsa:

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

Kreye yon dosye varyab:

$ sudo vim vars

kontni sa a:

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

Paramèt yo pou òganizasyon kondisyonèl ABC LLC yo dekri isit la; ou ka korije yo nan sa yo reyèl oswa kite yo nan egzanp lan. Bagay ki pi enpòtan nan paramèt yo se liy ki sot pase a, ki detèmine peryòd validite sètifika a nan jou. Egzanp lan sèvi ak valè 10 ane (365*10+2 ane kwasans). Valè sa a pral bezwen ajiste anvan sètifika itilizatè yo bay.

Apre sa, nou konfigure yon otorite sètifikasyon otonòm.

Enstalasyon gen ladan ekspòte varyab, inisyalize CA a, bay kle rasin CA ak sètifika, kle Diffie-Hellman, kle TLS, ak kle sèvè ak sètifika. Kle CA a dwe ak anpil atansyon pwoteje epi kenbe sekrè! Tout paramèt rechèch yo ka kite kòm 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

Sa a konplete pati prensipal la nan mete kanpe mekanis kriptografik la.

Mete kanpe OpenVPN

Ale nan anyè a OpenVPN, kreye anyè sèvis epi ajoute yon lyen nan 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/

Kreye dosye prensipal la konfigirasyon OpenVPN:

$ sudo vim server.conf

sa ki annapre yo

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

Kèk nòt sou paramèt yo:

  • si yo te espesifye yon lòt non lè yo bay sètifika a, endike li;
  • presize pisin nan adrès ki adapte travay ou yo*;
  • ka gen youn oswa plizyè wout ak sèvè dns;
  • 2 dènye liy yo nesesè pou aplike otantifikasyon nan AD**.

*Panje adrès yo chwazi nan egzanp lan pral pèmèt jiska 127 kliyan konekte ansanm, paske se rezo a / 23 chwazi, ak OpenVPN kreye yon sous-rezo pou chak kliyan lè l sèvi avèk mask la / 30.
Si patikilyèman nesesè, pò a ak pwotokòl ka chanje, sepandan, li ta dwe kenbe nan tèt ou ke chanje nimewo pò a pral mande konfigirasyon SELinux, ak lè l sèvi avèk pwotokòl la tcp ap ogmante anlè, paske Kontwòl livrezon pake TCP deja fèt nan nivo pake ki ankapsule nan tinèl la.

**Si otantifikasyon nan AD pa nesesè, kòmante yo soti, sote pwochen seksyon an, ak nan modèl la retire liy auth-user-pass la.

AD Otantifikasyon

Pou sipòte dezyèm faktè a, nou pral sèvi ak verifikasyon kont nan AD.

Nou bezwen yon kont nan domèn nan ak dwa yon itilizatè òdinè ak yon gwoup, manm nan ki pral detèmine kapasite nan konekte.

Kreye yon fichye konfigirasyon:

/etc/openvpn/ldap.conf

sa ki annapre yo

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

Paramèt kle:

  • URL "ldap://ldap.abc.ru" - adrès kontwolè domèn;
  • BindDN "CN = bindUsr, CN = Itilizatè, DC = abc, DC = ru" - non kanonik pou obligatwa LDAP (UZ - bindUsr nan veso abc.ru/Itilizatè yo);
  • Modpas b1ndP@SS — modpas itilizatè pou obligatwa;
  • BaseDN "OU=allUsr,DC=abc,DC=ru" - chemen pou kòmanse chèche itilizatè a;
  • BaseDN "OU=myGrp,DC=abc,DC=ru" - veso nan gwoup la pèmèt (gwoup myVPNUsr nan veso a abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" se non gwoup ki pèmèt yo.

Demaraj ak dyagnostik

Koulye a, nou ka eseye aktive epi kòmanse sèvè nou an:

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

Tcheke demaraj:

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

Pwoblèm sètifika ak revokasyon

Paske Anplis sètifika yo tèt yo, ou bezwen kle ak lòt anviwònman; li trè pratik pou vlope tout bagay sa yo nan yon sèl dosye pwofil. Apre sa, dosye sa a transfere bay itilizatè a epi pwofil la enpòte sou kliyan OpenVPN la. Pou fè sa, nou pral kreye yon modèl anviwònman ak yon script ki jenere pwofil la.

Ou bezwen ajoute sa ki nan sètifika rasin (ca.crt) ak dosye kle TLS (ta.key) nan pwofil la.

Anvan yo bay sètifika itilizatè yo pa bliye mete peryòd validite obligatwa pou sètifika yo nan dosye paramèt yo. Ou pa ta dwe fè li twò lontan; mwen rekòmande limite tèt ou a yon maksimòm de 180 jou.

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>

Nòt:

  • liy yo METE OU... chanje nan kontni yo sètifika;
  • nan direktiv aleka a, presize non/adrès pòtay ou a;
  • se direktiv otant-itilizatè-pas yo itilize pou otantifikasyon ekstèn adisyonèl.

Nan anyè kay la (oswa lòt kote ki pratik) nou kreye yon script pou mande yon sètifika ak kreye yon pwofil:

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 ~

Fè dosye a ègzekutabl:

chmod a+x ~/make.profile.sh

Epi nou ka bay premye sètifika nou an.

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

Feedback

Nan ka konpwomi nan yon sètifika (pèt, vòl), li nesesè yo revoke sètifika sa a:

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

Gade sètifika emèt ak revoke

Pou wè sètifika yo bay ak revoke, tou senpleman gade fichye endèks la:

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

Eksplikasyon:

  • premye liy lan se sètifika sèvè a;
  • premye karaktè
    • V (Valid) - valab;
    • R (Anile) - raple.

Rezo konfigirasyon

Dènye etap yo se konfigirasyon rezo transmisyon an - routage ak firewall.

Pèmèt koneksyon nan firewall lokal la:

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

Apre sa, pèmèt IP trafik routage:

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

Nan yon anviwònman antrepriz, gen anpil chans pou gen subnetting epi nou bezwen di routeur la (yo) ki jan yo voye pake ki destine pou kliyan VPN nou yo. Sou liy lòd nou egzekite kòmandman an nan fason sa a (ki depann de ekipman yo itilize a):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

epi sove konfigirasyon an.

Anplis de sa, sou koòdone nan routeur fwontyè kote adrès la ekstèn gw.abc.ru yo sèvi, li nesesè yo pèmèt pasaj la nan udp/1194 pake.

Nan ka òganizasyon an gen règ sekirite strik, yon firewall dwe tou configuré sou sèvè VPN nou an. Nan opinyon mwen, se pi gwo fleksibilite ki bay nan mete kanpe iptables FORWARD chenn, byenke mete yo kanpe se mwens pratik. Yon ti kras plis sou mete kanpe yo. Pou fè sa, li pi bon pou itilize "règleman dirèk" - règ dirèk, ki estoke nan yon dosye /etc/firewalld/direct.xml. Ou ka jwenn konfigirasyon aktyèl la nan règ yo jan sa a:

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

Anvan w chanje yon dosye, fè yon kopi backup nan li:

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

Sa ki apwoksimatif nan dosye a se:

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

Eksplikasyon

Sa yo se esansyèlman règ regilye iptables, otreman pake apre avènement firewalld.

Koòdone destinasyon an ak anviwònman default se tun0, ak koòdone ekstèn pou tinèl la ka diferan, pou egzanp, ens192, tou depann de platfòm la itilize.

Dènye liy lan se pou antre pakè yo tonbe. Pou antre nan travay, ou bezwen chanje nivo debug nan konfigirasyon firewalld la:

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

Aplike paramèt se kòmandman firewalld abityèl pou re-li paramèt yo:

$ sudo firewall-cmd --reload

Ou ka wè pake ki tonbe tankou sa a:

grep forward_fw /var/log/messages

Ki sa ki nan pwochen an

Sa a konplete konfigirasyon an!

Tout sa ki rete se enstale lojisyèl kliyan an sou bò kliyan an, enpòte pwofil la epi konekte. Pou sistèm operasyon Windows, twous distribisyon an sitiye sou sit pwomotè.

Finalman, nou konekte nouvo sèvè nou an ak sistèm siveyans ak achiv, epi pa bliye enstale mizajou regilyèman.

Koneksyon ki estab!

Sous: www.habr.com

Add nouvo kòmantè