Ò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.
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).
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.
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.
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.
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:
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.