Tere!
Igale ettevõttele on varem või hiljem üllatavalt vajalik kaugjuurdepääs.
Praktiliselt igal IT-spetsialistil on vajadus korraldada kaugjuurdepääs oma võrkudele.
Nagu paljusid teisi, tabas mind see vajadus nagu “eile”. Pärast kõigi plusside ja miinuste analüüsimist ning hulga teabe läbi töötamist otsustasin installimisega alustada.
Turvalisuse huvides valisin OpenVPN järgmises teostuses: Windows Server 2012 operatsioonisüsteemiga serverisse installeerisin virtuaalmasina, millele samuti installisin Windows Server 2012, mille peal töötas OpenVPN server, mis väljastas ja allkirjastas sertifikaate.
Mugavuse huvides nimetame seda "sertifitseerimisserveriks". Edasi võtsin serveri sertifikaadi, tõstsin selle Mikrotik'isse ja Mikrotik'i ruuteri peal seadistasin OpenVPN koos kontode ja profiilidega. Klientide sertifikaadi väljastamiseks kasutasin samuti sertifitseerimisserverit.
Teostus oli muidugi keeruline ja kuigi toona polnud mul sellistes küsimustes piisavalt kogemusi, polnud see turvalisuse tagamise osas sugugi halvim lahendus.
See ühendus töötaski mingi aja, ning mulle anti uus suunis: kanda sertifitseerimisserver Linuxile, säilitades samal ajal ühenduse Mikrotik'iga — kliendid ei tohi kannatada.
Minu teadmised Linuxist piirdusid toona Ubuntu 16.04LTS-ga graafilise liidese kaudu, mida kasutasin RDP kaudu Windows serverisse ühendamiseks. Teisisõnu, sudo apt-get -f install -y, ja ei sentimeetrit rohkem.
Pärast uurimist, milline Linuxi perekonna operatsioonisüsteem on minu organisatsioonile kõige stabiilsem ja perspektiivikam, otsustasin CentOS 7 Minimal'i kasuks.
Alustuseks otsustasin natuke teooriaga tutvuda, et mõista, kuidas see kõik töötab. Vaatasin videoõpetusi kanalilt (Ei, see ei ole reklaam, nad lihtsalt sattusid mulle esimesena). Tütarlaps meeldiva häälega tutvustas mind valitud operatsioonisüsteemi põhialustega.
Alustuseks käivitasin oma arvutis Hyper-V, installeerisin sinna CentOS 7 Minimal'i, paigaldamise ajal lõin kasutaja Admin ja sulgesin täielikult ssh juurkontole. Pärast ilusate värviliste ekraanide hüvastijätmist sukeldusin mustvalgesse terminali maailma.
Ma arvan, et pole mõtet tarkvarainstallatsiooni protsessi kirjeldada; parem on keskenduda probleemidele, mis tekkisid ja mille lahendamiseks pidin kirjutama väikese skripti (see on allpool. Iga tööriista kirjeldust saab leida internetist, kuid tol hetkel, kui ma seda kõike tegin, sellist skripti veel ei olnud, kõik tehti esmakordselt, katsudes ja oletades).
Skriptis püüdsin automatiseerida serveri minimaalselt vajalike tööriistade installi, keelata Selinuxi, ühendada Epeli hoidla, installida OpenVPN-i jne. Allpool on skript ise, see on lihtne, kuid seda saab kasutada. Ma ei hakka seda lahti seletama, aga kui keegi vajab, kirjutage, vastan.
Skripti kasutamise järel peaks teil olema juba seadistatud OpenVPN server, mis vilgub rohelise silmaga.
#!/bin/bash
cd /etc/sysconfig/
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' selinux
sudo setenforce 0
cd /home/Admin
sudo yum update -y
sudo yum install epel-release -y
sudo yum install mc -y
sudo yum install nano -y
sudo cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax
sudo yum install chrony -y
sudo systemctl start chronyd
sudo systemctl enable chronyd
sudo yum install net-tools -y
sudo yum install iftop -y
sudo yum install htop -y
sudo yum install lsof -y
sudo yum install dos2unix -y
sudo yum install wget -y
sudo yum install tcpdump -y
sudo yum install openvpn -y
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.3/EasyRSA-3.0.3.tgz
sudo tar -xvzf EasyRSA-3.0.3.tgz
sudo chown -R Admin:Admin /var/log
sudo chmod 755 /var/log
mkdir /var/log/openvpn
mkdir /etc/openvpn/ccd
sudo chown -R Admin:Admin /etc/openvpn/ccd
sudo chown -R Admin:Admin /var/log/openvpn
chmod 755 /etc/openvpn/ccd
chmod 755 /var/log/openvpn
echo >/var/log/openvpn/openvpn-status.log
echo >/var/log/openvpn/openvpn.log
sudo chown -R Admin:Admin /etc/resolv.conf
chmod 755 /etc/resolv.conf
echo nameserver 8.8.8.8 >>/etc/resolv.conf
cd /etc/openvpn/
sudo /home/Admin/EasyRSA-3.0.3/easyrsa init-pki
sudo chown -R Admin:Admin /etc/openvpn
chmod 755 /etc/openvpn
echo set_var EASYRSA_DN "org" >/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_COUNTRY "RU" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_KEY_SIZE 4096 >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_PROVINCE "LIP" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_CITY "Lipetsk" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_ORG "Cool-Admin" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_EMAIL "xxx.ru" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_OU "Our_ORG" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_REQ_CN "changeme" >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_CERT_EXPIRE 3650 >>/home/Admin/EasyRSA-3.0.3/test
echo set_var EASYRSA_DH_KEY_SIZE=2048 >>/home/Admin/EasyRSA-3.0.3/test
sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-ca nopass
sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-server-full Serv nopass
sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-client-full Client1 nopass
sudo /home/Admin/EasyRSA-3.0.3/easyrsa --vars=vars gen-dh
sudo /home/Admin/EasyRSA-3.0.3/easyrsa --vars=vars gen-crl
mkdir keys
sudo chown -R Admin:Admin /etc/openvpn/keys
chmod 755 /etc/openvpn/keys
sudo cp /etc/openvpn/pki/ca.crt /etc/openvpn/keys
sudo cp /etc/openvpn/pki/dh.pem /etc/openvpn/keys
sudo cp /etc/openvpn/pki/crl.pem /etc/openvpn/keys
sudo cp /etc/openvpn/pki/issued/Serv.crt /etc/openvpn/keys
sudo cp /etc/openvpn/pki/private/Serv.key /etc/openvpn/keys
echo port 443 >/etc/openvpn/server.conf
echo proto udp >>/etc/openvpn/server.conf
echo dev tun >>/etc/openvpn/server.conf
echo ca /etc/openvpn/keys/ca.crt >>/etc/openvpn/server.conf
echo cert /etc/openvpn/keys/Serv.crt >>/etc/openvpn/server.conf
echo key /etc/openvpn/keys/Serv.key >>/etc/openvpn/server.conf
echo dh /etc/openvpn/keys/dh.pem >>/etc/openvpn/server.conf
echo crl-verify /etc/openvpn/keys/crl.pem >>/etc/openvpn/server.conf
echo client-config-dir /etc/openvpn/ccd >>/etc/openvpn/server.conf
echo topology subnet >>/etc/openvpn/server.conf
echo server 172.21.0.0 255.255.255.0 >>/etc/openvpn/server.conf
echo route 172.21.0.0 255.255.255.0 >>/etc/openvpn/server.conf
echo push "dhcp-option DNS 8.8.8.8" >>/etc/openvpn/server.conf
echo push "dhcp-option DNS 8.8.4.4" >>/etc/openvpn/server.conf
echo keepalive 10 120 >>/etc/openvpn/server.conf
echo persist-key >>/etc/openvpn/server.conf
echo persist-tun >>/etc/openvpn/server.conf
echo status /var/log/openvpn/openvpn-status.log >>/etc/openvpn/server.conf
echo log-append /var/log/openvpn/openvpn.log >>/etc/openvpn/server.conf
echo verb 2 >>/etc/openvpn/server.conf
echo mute 20 >>/etc/openvpn/server.conf
echo daemon >>/etc/openvpn/server.conf
echo mode server >>/etc/openvpn/server.conf
echo user nobody >>/etc/openvpn/server.conf
echo group nobody >>/etc/openvpn/server.conf
sudo chown -R Admin:Admin /etc/sysctl.conf
chmod 755 /etc/sysctl.conf
echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
sudo systemctl enable openvpn@server
sudo systemctl start openvpn@server
sudo systemctl status openvpn@serverOpenVPN installimine ei läinud päris sujuvalt.
Linuxi süsteemide õiguspoliitika eripära teadmata kulutasin ma tohutult aega logide uurimisele ja kõiki faile vajalike õigustega varustamisele.
Kui OpenVPN nupp kaheks roheliseks muutus, olin väga rõõmus, kuid nagu selgub, oli see alles algus. Lihtsalt oletades arvasin, et vahetan välja juursertifikaadid ja fail crl.pem, lootes, et kõik töötab. Lõpuks pidin ma serverilt Windowsi järgmistel failidel edasi viima:
Serv.crt — Serveri sertifikaat
Serv.key — Serveri võti
Ca.crt — Juurssertifikaat
Ca.key — Juursõna
Crl.pem — Tagasi võetud sertifikaatide fail
Dh.pem — Diffie-Hellmani võti
Index.txt — Aktiivsete sertifikaatide teavet sisaldav fail
Serial — see vastutab samuti sertifikaatide kehtivuse eest
Vajalikuks osutus ka kaust certs_by_serial, fail vars ja kõik kliendi võtmed ja sertifikaadid.
Mikrotik'is jäid sertifikaadid oma kohale, seega kõik töötas.
Probleemid tekkisid, kui proovisin sertifikaati tagasi kutsuda, see ei töötanud üldse — fail index.txt tuli konverteerida unix formaati, aga ma ei teinud seda kohe. Kasutasin tööriista dos2unix.
Nüüd tõmmati sertifikaate tagasi, kuid need jätkasid tööle ilma igasuguste probleemideta, sest Mikrotik ei teadnud, et nad on tagasi võetud ja tal oli kuidagi sellest teada andma.
Pärast juhiste läbilugemist ja konsultatsiooni Alexander ERI-ga (suur aitäh!), seadsin sertifitseerimiserverisse üles lihtsa http-serveri Apache ja avaldasin sellel tagasi kutsutud sertifikaatide faili. Sulgesin täielikult sellele ligipääsu, välja arvatud avaldatud failist ühelt ip-lt.
Mikrotiku terminalis, vahekaardil /System/Certificates/CRL määrasin avaldatud crl.pem faili tee. Siinkohal on oluline märkida, et Mikrotik aktsepteerib CRL vahekaardile ainult http ja absoluutset aadressi, st see peaks välja nägema umbes nii:
Kõik töötas, vähemalt RouterOS versioonide 6.4.2.x puhul, kuid kliendi konfigureerimisi tuli luua käsitsi, mis oli mulle kurvastav ja tekitas palju ebamugavusi. Kui nädal hiljem pidi ma looma konfigureerimisi umbes 50 kliendile, otsustasin selle protsessi kiirendada ja kasutasin selleks internetist leitud teise inimese skripti.
Skript töötab nii: pärast käivitamist määrame "kliendi nime", vastame küsimusele "kas paigaldada parool või mitte", seejärel saame valmis konfigureerimisfaili "client.ovpn", millega on integreeritud sertifikaadid ja seaded. Selle kasutamiseks tuleb asuda /etc/openvpn. Kommenteerin ridadele, kus teed tuleb oma omaga asendada. Samuti tuleb luua klientseadete fail, et skript saaks need konfigureerimise loomise protsessi integreerida.
#!/bin/bash
function newClient () {
echo ""
echo "Tell me a name for the client."
echo "Use one word only, no special characters."
until [[ "$CLIENT" =~ ^[a-zA-Z0-9_]+$ ]]; do
read -rp "Client name: " -e CLIENT
done
echo ""
echo "Do you want to protect the configuration file with a password?"
echo "(e.g. encrypt the private key with a password)"
echo " 1) Add a passwordless client"
echo " 2) Use a password for the client"
until [[ "$PASS" =~ ^[1-2]$ ]]; do
read -rp "Select an option [1-2]: " -e -i 1 PASS
done
#cd /etc/openvpn/easy-rsa/ || return
case $PASS in
1)
sudo /home/admin/EasyRSA-3.0.3/easyrsa build-client-full "$CLIENT" nopass
;;
2)
echo "You will be asked for the client password below"
./easyrsa build-client-full "$CLIENT"
;;
esac
# Generates the custom client.ovpn
cp /etc/openvpn/client-template.txt "$home/home/admin/IT/Temp/$CLIENT.ovpn"
#Директория в которой хранится файл с настройками клиента.
#Директория, в которой сформируется файл конфигурации
{
echo "<ca>"
cat "/etc/openvpn/pki/ca.crt" #Директория хранения корневого сертификата
echo "</ca>"
echo "<cert>"
awk '/BEGIN/,/END/' "/etc/openvpn/pki/issued/$CLIENT.crt" #Директория с созданным #сертификатом клиента
echo "</cert>"
echo "<key>"
cat "/etc/openvpn/pki/private/$CLIENT.key" #Директория с созданным ключом клиента
echo "</key>"
} >> "$home/home/admin/IT/Temp/$CLIENT.ovpn" #Директория, в которой сформируется файл #конфигурации
echo ""
echo "Client $CLIENT added, the configuration file is available at $home/admin/IT/OVPN/Temp/$CLIENT.ovpn."
echo "Download the .ovpn file and import it in your OpenVPN client."
exit 0;
}
newClient
Mõne aja pärast sundis uus juhtnöör kaugjuurdepääsu keelu tõttu tapma ka selle serveri ja Mikrotikiga töötava ühenduse. Loomiseks loodi uus OpenVPN server IT-osakonna töötajatele, mis nüüd töötab täielikult CentOS-il. Kuid see on juba hoopis teine lugu.
Avaldan suurt tänu Ivanile ja Pavelile abi eest artikli toimetamisel.
Allikas: habr.com
