ఆర్టికల్ ఓపెన్ సోర్స్ ఉత్పత్తులపై ఉద్యోగుల కోసం రిమోట్ యాక్సెస్ యొక్క సంస్థను వివరిస్తుంది మరియు పూర్తిగా స్వయంప్రతిపత్త వ్యవస్థను నిర్మించడానికి రెండింటినీ ఉపయోగించవచ్చు మరియు ఇప్పటికే ఉన్న వాణిజ్య వ్యవస్థలో లైసెన్స్ల కొరత లేదా దాని పనితీరు సరిపోనప్పుడు విస్తరణకు ఉపయోగపడుతుంది.
ఆర్టికల్ యొక్క లక్ష్యం ఒక సంస్థకు రిమోట్ యాక్సెస్ని అందించడానికి పూర్తి సిస్టమ్ను అమలు చేయడం, ఇది “10 నిమిషాల్లో OpenVPNని ఇన్స్టాల్ చేయడం” కంటే కొంచెం ఎక్కువ.
ఫలితంగా, వినియోగదారులను ప్రామాణీకరించడానికి ధృవపత్రాలు మరియు (ఐచ్ఛికంగా) కార్పొరేట్ యాక్టివ్ డైరెక్టరీ ఉపయోగించబడే సిస్టమ్ను మేము పొందుతాము. ఆ. మేము రెండు ధృవీకరణ కారకాలతో సిస్టమ్ను పొందుతాము - నా దగ్గర ఉన్నది (సర్టిఫికేట్) మరియు నాకు తెలిసినవి (పాస్వర్డ్).
myVPNUsr సమూహంలో వారి సభ్యత్వం ఒక వినియోగదారుని కనెక్ట్ చేయడానికి అనుమతించబడుతుందనడానికి సంకేతం. సర్టిఫికేట్ అధికారం ఆఫ్లైన్లో ఉపయోగించబడుతుంది.
పరిష్కారాన్ని అమలు చేసే ఖర్చు చిన్న హార్డ్వేర్ వనరులు మరియు సిస్టమ్ అడ్మినిస్ట్రేటర్ యొక్క 1 గంట పని మాత్రమే.
మేము CetntOS 3లో OpenVPN మరియు Easy-RSA వెర్షన్ 7తో కూడిన వర్చువల్ మెషీన్ని ఉపయోగిస్తాము, దీనికి 100 కనెక్షన్లకు 4 vCPUలు మరియు 4 GiB RAM కేటాయించబడుతుంది.
ఉదాహరణలో, మా సంస్థ యొక్క నెట్వర్క్ 172.16.0.0/16, దీనిలో 172.16.19.123 చిరునామాతో VPN సర్వర్ సెగ్మెంట్ 172.16.19.0/24, DNS సర్వర్లు 172.16.16.16 మరియు 172.16.17.17.net172.16.20.0, 23, XNUMX. సెగ్మెంట్లో ఉంది. .XNUMX/XNUMX VPN క్లయింట్ల కోసం కేటాయించబడింది.
బయటి నుండి కనెక్ట్ చేయడానికి, పోర్ట్ 1194/udp ద్వారా కనెక్షన్ ఉపయోగించబడుతుంది మరియు మా సర్వర్ కోసం DNSలో A-record gw.abc.ru సృష్టించబడింది.
SELinuxని డిసేబుల్ చేయమని ఖచ్చితంగా సిఫార్సు చేయబడలేదు! భద్రతా విధానాలను నిలిపివేయకుండా OpenVPN పనిచేస్తుంది.
OS మరియు అప్లికేషన్ సాఫ్ట్వేర్ యొక్క ఇన్స్టాలేషన్
మేము CentOS 7.8.2003 పంపిణీని ఉపయోగిస్తాము. మేము OS ని కనీస కాన్ఫిగరేషన్లో ఇన్స్టాల్ చేయాలి. దీన్ని ఉపయోగించి దీన్ని చేయడం సౌకర్యంగా ఉంటుంది వెంటనే ప్రారంభించు, గతంలో ఇన్స్టాల్ చేసిన OS ఇమేజ్ మరియు ఇతర మార్గాలను క్లోనింగ్ చేయడం.
ఇన్స్టాలేషన్ తర్వాత, నెట్వర్క్ ఇంటర్ఫేస్కు చిరునామాను కేటాయించడం (టాస్క్ 172.16.19.123 నిబంధనల ప్రకారం), మేము OSని నవీకరిస్తాము:
$ sudo yum update -y && reboot
మా మెషీన్లో టైమ్ సింక్రొనైజేషన్ నిర్వహించబడిందని కూడా మేము నిర్ధారించుకోవాలి.
అప్లికేషన్ సాఫ్ట్వేర్ను ఇన్స్టాల్ చేయడానికి, మీకు openvpn, openvpn-auth-ldap, easy-rsa మరియు vim ప్యాకేజీలు ప్రధాన ఎడిటర్గా అవసరం (మీకు EPEL రిపోజిటరీ అవసరం).
షరతులతో కూడిన సంస్థ ABC LLC కోసం పారామితులు ఇక్కడ వివరించబడ్డాయి; మీరు వాటిని నిజమైన వాటికి సరిచేయవచ్చు లేదా ఉదాహరణ నుండి వదిలివేయవచ్చు. పారామితులలో అత్యంత ముఖ్యమైన విషయం చివరి పంక్తి, ఇది రోజులలో సర్టిఫికేట్ యొక్క చెల్లుబాటు వ్యవధిని నిర్ణయిస్తుంది. ఉదాహరణ 10 సంవత్సరాలు (365*10+2 లీపు సంవత్సరాలు) విలువను ఉపయోగిస్తుంది. వినియోగదారు ధృవపత్రాలు జారీ చేయడానికి ముందు ఈ విలువను సర్దుబాటు చేయాలి.
తరువాత, మేము స్వయంప్రతిపత్త ధృవీకరణ అధికారాన్ని కాన్ఫిగర్ చేస్తాము.
సెటప్లో వేరియబుల్లను ఎగుమతి చేయడం, CA ప్రారంభించడం, CA రూట్ కీ మరియు సర్టిఫికేట్ జారీ చేయడం, Diffie-Hellman కీ, TLS కీ మరియు సర్వర్ కీ మరియు సర్టిఫికేట్ ఉన్నాయి. CA కీని జాగ్రత్తగా రక్షించాలి మరియు రహస్యంగా ఉంచాలి! అన్ని ప్రశ్న పారామీటర్లను డిఫాల్ట్గా వదిలివేయవచ్చు.
ఇది క్రిప్టోగ్రాఫిక్ మెకానిజంను సెటప్ చేయడంలో ప్రధాన భాగాన్ని పూర్తి చేస్తుంది.
OpenVPNని సెటప్ చేస్తోంది
OpenVPN డైరెక్టరీకి వెళ్లి, సేవా డైరెక్టరీలను సృష్టించండి మరియు ఈజీ-ఆర్ఎస్ఏకి లింక్ను జోడించండి:
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 సర్వర్లు ఉండవచ్చు;
AD**లో ప్రమాణీకరణను అమలు చేయడానికి చివరి 2 పంక్తులు అవసరం.
*ఉదాహరణలో ఎంచుకున్న చిరునామాల పరిధి గరిష్టంగా 127 క్లయింట్లను ఏకకాలంలో కనెక్ట్ చేయడానికి అనుమతిస్తుంది, ఎందుకంటే /23 నెట్వర్క్ ఎంచుకోబడింది మరియు OpenVPN /30 మాస్క్ని ఉపయోగించి ప్రతి క్లయింట్ కోసం సబ్నెట్ను సృష్టిస్తుంది.
ప్రత్యేకించి అవసరమైతే, పోర్ట్ మరియు ప్రోటోకాల్ను మార్చవచ్చు, అయినప్పటికీ, పోర్ట్ పోర్ట్ నంబర్ను మార్చడం వలన SELinuxని కాన్ఫిగర్ చేయవలసి ఉంటుందని గుర్తుంచుకోవాలి మరియు tcp ప్రోటోకాల్ని ఉపయోగించడం వలన ఓవర్హెడ్ పెరుగుతుంది, ఎందుకంటే TCP ప్యాకెట్ డెలివరీ నియంత్రణ ఇప్పటికే సొరంగంలో కప్పబడిన ప్యాకెట్ల స్థాయిలో నిర్వహించబడుతుంది.
** ADలో ప్రమాణీకరణ అవసరం లేకపోతే, వాటిని వ్యాఖ్యానించండి, తదుపరి విభాగాన్ని దాటవేయండి మరియు టెంప్లేట్లో auth-user-pass లైన్ను తీసివేయండి.
AD ప్రమాణీకరణ
రెండవ అంశానికి మద్దతు ఇవ్వడానికి, మేము ADలో ఖాతా ధృవీకరణను ఉపయోగిస్తాము.
మాకు డొమైన్లో సాధారణ వినియోగదారు మరియు సమూహం యొక్క హక్కులతో కూడిన ఖాతా అవసరం, దీనిలో కనెక్ట్ చేసే సామర్థ్యాన్ని నిర్ధారిస్తుంది.
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 (చెల్లుబాటు అయ్యేది) - చెల్లుబాటు అయ్యేది;
R (రద్దు చేయబడింది) - గుర్తుచేసుకున్నారు.
నెట్వర్క్ కాన్ఫిగరేషన్
చివరి దశలు ట్రాన్స్మిషన్ నెట్వర్క్ను కాన్ఫిగర్ చేయడం - రూటింగ్ మరియు ఫైర్వాల్లు.
కార్పొరేట్ వాతావరణంలో, సబ్నెట్టింగ్ జరిగే అవకాశం ఉంది మరియు మా 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
ఫైల్ను మార్చడానికి ముందు, దాని బ్యాకప్ కాపీని చేయండి:
ఇవి తప్పనిసరిగా సాధారణ iptables నియమాలు, లేకపోతే ఫైర్వాల్డ్ వచ్చిన తర్వాత ప్యాక్ చేయబడతాయి.
డిఫాల్ట్ సెట్టింగ్లతో డెస్టినేషన్ ఇంటర్ఫేస్ tun0, మరియు టన్నెల్ కోసం బాహ్య ఇంటర్ఫేస్ భిన్నంగా ఉండవచ్చు, ఉదాహరణకు, ens192, ఉపయోగించిన ప్లాట్ఫారమ్పై ఆధారపడి ఉంటుంది.
పడిపోయిన ప్యాకెట్లను లాగింగ్ చేయడం కోసం చివరి పంక్తి. లాగింగ్ పని చేయడానికి, మీరు ఫైర్వాల్డ్ కాన్ఫిగరేషన్లో డీబగ్ స్థాయిని మార్చాలి:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
సెట్టింగ్లను వర్తింపజేయడం అనేది సెట్టింగ్లను మళ్లీ చదవడానికి సాధారణ ఫైర్వాల్డ్ ఆదేశం:
$ sudo firewall-cmd --reload
మీరు ఇలా పడిపోయిన ప్యాకెట్లను చూడవచ్చు:
grep forward_fw /var/log/messages
తదుపరి ఏమిటి
ఇది సెటప్ను పూర్తి చేస్తుంది!
క్లయింట్ వైపు క్లయింట్ సాఫ్ట్వేర్ను ఇన్స్టాల్ చేయడం, ప్రొఫైల్ను దిగుమతి చేయడం మరియు కనెక్ట్ చేయడం మాత్రమే మిగిలి ఉంది. Windows ఆపరేటింగ్ సిస్టమ్ల కోసం, పంపిణీ కిట్ ఆన్లో ఉంది డెవలపర్ వెబ్సైట్.
చివరగా, మేము మా కొత్త సర్వర్ని మానిటరింగ్ మరియు ఆర్కైవింగ్ సిస్టమ్లకు కనెక్ట్ చేస్తాము మరియు అప్డేట్లను క్రమం తప్పకుండా ఇన్స్టాల్ చేయడం మర్చిపోవద్దు.