Rêxistinkirina xebata dûr a rêxistinek SMB li ser OpenVPN

Formulkirina pirsgirêkê

Gotar rêxistina gihandina dûr a karmendan li ser hilberên çavkaniya vekirî vedibêje û dikare hem ji bo avakirina pergalek bi tevahî xweser were bikar anîn, hem jî dê ji bo berfirehkirinê kêrhatî be dema ku di pergala bazirganî ya heyî de kêmasiyek lîsans hebe an performansa wê têrê neke.

Armanca gotarê pêkanîna pergalek bêkêmasî ye ji bo peydakirina gihandina dûr a rêxistinek, ku ji "sazkirina OpenVPN di 10 hûrdeman de hindiktir e."

Wekî encamek, em ê pergalek werbigirin ku tê de sertîfîka û (bi vebijarkî) Pelrêça Active ya pargîdanî dê ji bo rastkirina bikarhêneran were bikar anîn. Va. em ê pergalek bi du faktorên verastkirinê bistînin - ya ku min heye (belgeya) û ya ku ez dizanim (şîfre).

Nîşanek ku destûr dide bikarhênerek ku pê ve girêbide endamtiya wan di koma myVPNUsr de ye. Desthilata sertîfîkayê dê offline were bikar anîn.

Mesrefa pêkanîna çareseriyê tenê çavkaniyên hardware yên piçûk û 1 saet xebata rêveberê pergalê ye.

Em ê makîneyek virtual bi OpenVPN û Easy-RSA guhertoya 3-ê li ser CetntOS 7-ê bikar bînin, ku ji 100 pêwendiyan 4 vCPU û 4 GiB RAM tê veqetandin.

Di nimûneyê de, tora rêxistina me 172.16.0.0/16 e, ku tê de servera VPN ya bi navnîşana 172.16.19.123 di beşa 172.16.19.0/24 de ye, serverên DNS 172.16.16.16 û 172.16.17.17, û 172.16.20.0, û 23 bin. .XNUMX/XNUMX ji bo xerîdarên VPN ve hatî veqetandin.

Ji bo girêdana ji derve ve, pêwendiyek bi porta 1194/udp ve tê bikar anîn, û ji bo servera me di DNS-ê de gw.abc.ru-yek tomar hatî çêkirin.

Bi tundî nayê pêşniyar kirin ku SELinux neçalak bike! OpenVPN bêyî astengkirina polîtîkayên ewlehiyê dixebite.

Contains

  1. Sazkirina OS û nermalava serîlêdanê
  2. Sazkirina krîptografî
  3. Sazkirina OpenVPN
  4. Authentication AD
  5. Destpêk û tespîtkirin
  6. Pirsgirêka sertîfîkayê û betalkirin
  7. Veavakirina torê
  8. Çi ye?

Sazkirina OS û nermalava serîlêdanê

Em belavkirina CentOS 7.8.2003 bikar tînin. Pêdivî ye ku em OS-ê di mîhengek hindiktirîn de saz bikin. Bi karanîna vê yekê hêsan e dest pê kirin, klonkirina wêneyek OS-ya ku berê hatî saz kirin û rêyên din.

Piştî sazkirinê, danasîna navnîşanek ji navgîniya torê (li gorî şertên peywirê 172.16.19.123), em OS-ê nûve dikin:

$ sudo yum update -y && reboot

Di heman demê de pêdivî ye ku em pê ewle bin ku hevdemkirina demê li ser makîneya me tête kirin.
Ji bo sazkirina nermalava serîlêdanê, hûn hewceyê pakêtên openvpn, openvpn-auth-ldap, easy-rsa û vim wekî edîtorê sereke (hûn ê depoya EPEL hewce bikin).

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

Kêrhatî ye ku meriv nûnerek mêvan ji bo makîneyek virtual saz bike:

$ sudo yum install open-vm-tools

ji bo mêvandarên VMware ESXi, an ji bo oVirt

$ sudo yum install ovirt-guest-agent

Sazkirina krîptografî

Biçe pelrêça easy-rsa:

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

Pelê guhêrbar biafirîne:

$ sudo vim vars

naveroka jêrîn:

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

Parametreyên ji bo rêxistina şertî ABC LLC li vir têne diyar kirin; hûn dikarin wan li yên rastîn rast bikin an wan ji nimûneyê bihêlin. Di parameteran de ya herî girîng rêza paşîn e, ku dema derbasbûna sertîfîkayê bi rojan diyar dike. Nimûne nirxa 10 salan (365*10+2 salên paşîn) bikar tîne. Berî ku sertîfîkayên bikarhêner werin derxistin, pêdivî ye ku ev nirx were sererast kirin.

Dûv re, em desthilatdariyek pejirandinê ya xweser mîheng dikin.

Sazkirin hinardekirina guherbaran, destpêkirina CA-yê, derxistina mifteya root û sertîfîkayê ya CA, mifteya Diffie-Hellman, mifteya TLS, û mifteya serverê û sertîfîkayê vedihewîne. Divê mifteya CA bi baldarî were parastin û veşartî! Hemî parametreyên pirsnameyê dikarin wekî xwerû bêne hiştin.

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

Ev beşa sereke ya sazkirina mekanîzmaya krîptografî temam dike.

Sazkirina OpenVPN

Herin pelrêça OpenVPN, pelrêça karûbarê biafirînin û girêdanek bi easy-rsa zêde bikin:

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/

Pelê veavakirina OpenVPN-ya sereke biafirînin:

$ sudo vim server.conf

naverokên jêrîn

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

Hin notên li ser parametreyan:

  • heke di dema danasîna sertîfîkayê de navek cûda hate diyar kirin, wê destnîşan bikin;
  • berhevoka navnîşanan diyar bikin ku li gorî peywirên we bin*;
  • dikare yek an bêtir rê û pêşkêşkerên DNS hebin;
  • 2 rêzikên paşîn hewce ne ku ji bo erêkirinê di AD ** de bicîh bikin.

* Rêjeya navnîşanên ku di nimûneyê de hatine hilbijartin dê bihêle ku heya 127 xerîdar bi hevdemî ve girêdayî bin, ji ber ku tora /23 tê hilbijartin, û OpenVPN ji bo her xerîdar bi karanîna maska ​​/30-ê subnetek diafirîne.
Ger bi taybetî hewce be, port û protokol dikare were guheztin, di heman demê de, divê were bîra we ku guheztina jimareya portê dê mîhengkirina SELinux-ê pêk bîne, û karanîna protokola tcp dê sermayê zêde bike, ji ber ku Kontrola radestkirina pakêtê ya TCP jixwe di asta pakêtên ku di tunelê de hatine vegirtin tê kirin.

**Heke di AD-ê de verastkirin ne hewce ye, wan şîrove bikin, beşa pêş de derbas bikin, û di şablonê de xeta auth-user-pass jêbirin.

Authentication AD

Ji bo piştgirîkirina faktora duyemîn, em ê di AD-ê de verastkirina hesabê bikar bînin.

Ji me re hesabek di domainê de bi mafên bikarhênerek asayî û grûpek hewce ye, endametiya ku tê de dê şiyana girêdanê diyar bike.

Pelê veavakirinê biafirîne:

/etc/openvpn/ldap.conf

naverokên jêrîn

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

Parametreyên sereke:

  • URL "ldap://ldap.abc.ru" - navnîşana kontrola domainê;
  • BindDN "CN=bindUsr,CN=Bikarhêner,DC=abc,DC=ru" - navê kanonîkî ji bo girêdana bi LDAP-ê (UZ - bindUsr di konteynera abc.ru/Users de);
  • Şîfre b1ndP@SS - şîfreya bikarhêner ji bo girêdanê;
  • BaseDN "OU=allUsr,DC=abc,DC=ru" - riya ku meriv jê dest bi lêgerîna bikarhêner dike;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – konteynera koma destûr (koma myVPNUsr di konteynerê de abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" navê koma destûr e.

Destpêk û tespîtkirin

Naha em dikarin hewl bidin ku servera xwe çalak bikin û dest pê bikin:

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

Kontrola destpêkê:

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

Pirsgirêka sertîfîkayê û betalkirin

Bo Ji bilî sertîfîkayan bixwe, hûn hewceyê mift û mîhengên din in; pir hêsan e ku hûn van hemîyan di yek pelê profîlê de bipêçin. Dûv re ev pel ji bikarhênerê re tê veguheztin û profîl li ser xerîdar OpenVPN tê şandin. Ji bo vê yekê, em ê şablonek mîhengan û skrîptek ku profîlê çêdike biafirînin.

Pêdivî ye ku hûn naveroka pelên sertîfîkaya root (ca.crt) û mifteya TLS (ta.key) li profîlê zêde bikin.

Berî weşandina sertîfîkayên bikarhêner ji bîr nekin ku ji bo sertîfîkayan heyama derbasdariya pêwîst destnîşan bikin di pelê parametreyan de. Pêdivî ye ku hûn wê pir dirêj nekin; Ez pêşniyar dikim ku xwe herî zêde 180 rojan sînordar bikin.

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:

  • rêz XWE BIDIN... guhertina naverokê yê wê sertîfîkayên;
  • di dîrektîfa dûr de, nav / navnîşana dergehê xwe diyar bikin;
  • dîrektîfa oto-bikarhêner-derbasbûnê ji bo piştrastkirina derveyî ya zêde tê bikar anîn.

Di pelrêça malê de (an cîhek din ê rehet) em ji bo daxwaza sertîfîkayê û afirandina profîlek nivîsek diafirînin:

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 ~

Çêkirina pelê pêkan:

chmod a+x ~/make.profile.sh

Û em dikarin sertîfîkaya xwe ya yekem derxînin.

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

Bikin

Di rewşa lihevhatina sertîfîkayekê de (wendabûn, dizî), pêdivî ye ku ev sertîfîka were betal kirin:

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

Sertîfîkayên derketin û betalkirî bibînin

Ji bo dîtina sertîfîkayên hatine derxistin û betal kirin, tenê pelê navnîşê bibînin:

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

Ravekirin:

  • rêza yekem belgeya serverê ye;
  • karaktera yekem
    • V (Derbasdar) - derbasdar;
    • R (Revoked) - bi bîr xist.

Veavakirina torê

Gavên paşîn mîhengkirina tora veguheztinê - rêvekirin û dîwarên agir.

Destûrkirina girêdanan di dîwarê agir de:

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

Piştre, rêvekirina seyrûsefera IP-ê çalak bike:

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

Di hawîrdorek pargîdanî de, îhtîmal e ku subnetkirin hebe û pêdivî ye ku em ji router(an) re vebêjin ka meriv çawa pakêtên ku ji bo xerîdarên me yên VPN têne şandin bişînin. Li ser rêzika fermanê em bi vî rengî fermanê dimeşînin (li gorî alavên ku têne bikar anîn):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

û veavakirinê xilas bike.

Digel vê yekê, li ser navbeynkariya routerê sînor ku navnîşana derveyî gw.abc.ru tê servîs kirin, pêdivî ye ku destûr bide derbasbûna pakêtên udp/1194.

Ger rêxistin xwedan rêzikên ewlehiyê yên hişk be, divê dîwarek agir jî li ser servera meya VPN-ê were mîheng kirin. Bi dîtina min, nermbûna herî mezin bi sazkirina zincîreyên iptables FORWARD ve tê peyda kirin, her çend sazkirina wan kêmtir hêsan e. Li ser sazkirina wan hinekî din. Ji bo vê yekê, herî hêsan e ku meriv "qanûnên rasterast" bikar bîne - qaîdeyên rasterast, ku di pelê de têne hilanîn /etc/firewalld/direct.xml. Veavakirina heyî ya qaîdeyan dikare bi vî rengî were dîtin:

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

Berî ku pelek biguhezîne, kopiyek hilanînê jê çêbike:

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

Nêzîkî naveroka dosyayê ev in:

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

Explanations

Vana bi bingehîn qaîdeyên iptables bi rêkûpêk in, wekî din piştî hatina firewalld têne pak kirin.

Navbera mebestê ya bi mîhengên xwerû tun0 e, û pêwendiya derveyî ya tunelê dikare cûda be, mînakî ens192, li gorî platforma hatî bikar anîn.

Rêza paşîn ji bo têketina pakêtên daketî ye. Ji bo ku têketin bixebite, hûn hewce ne ku asta debugê di veavakirina firewalld de biguhezînin:

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

Serlêdana mîhengan fermana firewalld-a adetî ye ku ji nû ve xwendina mîhengan e:

$ sudo firewall-cmd --reload

Hûn dikarin pakêtên daketî bi vî rengî bibînin:

grep forward_fw /var/log/messages

Çi ye?

Ev sazkirinê temam dike!

Tiştê ku dimîne ev e ku meriv nermalava xerîdar li milê xerîdar saz bike, profîlê import bike û pê ve girêbide. Ji bo pergalên xebitandinê yên Windows-ê, kîta belavkirinê li ser cîh e malpera pêşdebiran.

Di dawiyê de, em servera xweya nû bi pergalên şopandin û arşîvkirinê ve girêdidin, û ji bîr nekin ku bi rêkûpêk nûvekirinan saz bikin.

Têkiliya stabîl!

Source: www.habr.com

Add a comment