Tere!
Iga ettevõte vajab varem või hiljem ootamatult kaugjuurdepääsu.
Peaaegu iga IT-spetsialist seisab silmitsi vajadusega korraldada ettevõttes kaugjuurdepääs oma võrkudele.
Minu jaoks, nagu paljude teiste jaoks, tabas see vajadus nagu "eile". Olles analüüsinud kõiki plusse ja miinuseid, samuti palju infot läbi sõelunud ja teoreetiliselt veidi tuhninud, otsustasin installimisega jätkata.
Turvalisuse kaalutlustel valiti see OpenVPN järgmises rakenduses: serveris, millel on operatsioonisüsteem Windows Server 2012. aastal paigaldati sellele virtuaalmasin, Windows Server 2012 ja sellel omakorda server OpenVPN, mis väljastas ja allkirjastas sertifikaate.
Mugavuse mõttes nimetame seda "sertifitseerimisserveriks". Seejärel võtsin serveri sertifikaadi, sisestasin selle Mikrotiku ja aktiveerisin selle Mikrotiku ruuteril endal. OpenVPN kontode ja profiilidega. Sertifitseerimisserverit kasutati ka kliendisertifikaatide väljastamiseks.
Teostus oli muidugi kohutav ja kuigi tollal minu kogemustest sellistes asjades, ütleme, ei piisanud, siis turvalisuse küsimustes polnud see kõige hullem otsus.
See ühendus töötas mõnda aega ja mulle anti uus sisend: teisaldage sertifitseerimisserver asukohta Linux, säilitades samal ajal ühenduse Mikrotikiga - kliendid ei tohiks kahju saada.
Minu teadmised Linux sel ajal lõppes kell Ubuntu 16.04LTS graafilise liidesega, mida kasutati terminalina RDP kaudu serveriga ühenduse loomiseks WindowsSee tähendab, et sudo apt-get -f install -y ja mitte sentimeetritki rohkem.
Olles uurinud küsimust, milline operatsioonisüsteem on Linux perekond on minu organisatsiooni jaoks stabiilsem ja paljulubavam, otsustasin selle kasuks CentOS 7 Minimaalne.
Alustuseks otsustasin süüvida veidi teooriasse, et mõista, kuidas see üldiselt töötab ja toimib. Vaatasin kanalil videotunde (Pole üldse reklaam, need olid lihtsalt esimesed, mis mulle ette sattusin). Meeldiva häälega tüdruk tutvustas mulle valitud OS-is töötamise põhitõdesid.
Esmalt käivitasin oma arvutis Hyper-V ja installisin selle sinna. CentOS 7 Minimaalne. Installimise ajal lõin administraatori kasutaja ja keelasin SSH root'i jaoks täielikult. Jätnud ilusa mitmevärvilise ekraaniga hüvasti, sukeldusin terminali mustvalgesse maailma.
Arvan, et tarkvara installimise protsessi pole mõtet kirjeldada, parem on keskenduda probleemidele, mis protsessi käigus tekkisid ja mille lahendamiseks tuli kirjutada väike skript (see on lõike all. Kirjeldus igast utiliidid leiate Internetist, kuid sel hetkel, kui ma seda tegin, ei olnud seda skripti veel olemas, kõik tehti esimest korda, puudutusega ja juhuslikult).
Skriptis proovisin automatiseerida serveri jaoks minimaalselt vajalike utiliitide installimist, keelata Selinuxi, ühendada Epeli hoidla ja installida OpenVPNjne. Allpool on skript ise; see on lihtne, aga kasutatav. Ma ei hakka detailidesse laskuma, aga kui keegi seda vajab, andke teada.
Pärast skripti kasutamist ilmub eelkonfigureeritud server. OpenVPN, pilgutades rohelist silma.
#!/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@serverPaigaldamine OpenVPN See ei läinud päris edukalt.
Õiguste poliitika üksikasju ei teata Linux süsteemides veetsin palju aega logide uurimise ja kõigile failidele vajalike õiguste määramisega.
Kui nupp OpenVPN roheliseks läks, olin väga õnnelik, aga nagu selgus, oli see alles algus. Oma naiivsuses lootsin juursertifikaatide ja crl.pem-faili asendamisele, lootes, et kõik toimib. Lõpuks oli mul vaja serverist üle kanda Windows järgmised failid:
Serv.crt — serveri sertifikaat
Serv.key — serveri võti
Ca.crt – juursertifikaat
Ca.key – juurklahv
Crl.pem – sertifikaadi tühistamise fail
Dh.pem – Diffie-Hellmani võti
Index.txt – fail, mis sisaldab teavet kehtivate sertifikaatide kohta
Serial - see vastutab ka sertifikaatide asjakohasuse eest
Teil on vaja ka kausta certs_by_serial, vars-faili ning kõiki kliendivõtmeid ja sertifikaate.
Mikrotikil jäid sertifikaadid paika, nii et kõik toimis.
Probleemid ilmnesid, kui proovisin sertifikaati tühistada, see ei töötanud üldse - fail index.txt tuli teisendada unix-vormingusse, kuid ma ei teinud seda kohe. Kasutasin dos2unixi utiliiti.
Nüüd tunnistati sertifikaadid kehtetuks, kuid töötasid probleemideta edasi, sest Mikrotik ei teadnud, et need tühistati ja oli vaja sellest kuidagi teada anda.
Pärast juhiste lugemist ja ka Alexander ERI-ga konsulteerimist (suur tänu!) installisin sertifitseerimisserverisse lihtsa Apache http-serveri ja avaldasin sellel tühistatud sertifikaatide faili. Juurdepääs sellele on täielikult blokeeritud, välja arvatud ühelt IP-lt avaldatud failile.
Mikrotik terminali vahekaardil /System/Certificates/CRL näitas avaldatud crl.pem tee. Siinkohal tuleks selgitada, et Mikrotik aktsepteerib CRL-i vahekaardi jaoks ainult http ja absoluutset aadressi, st. See oleks pidanud välja nägema umbes selline:
Kõik töötas, vähemalt RouterOS-i versioonide 6.4.2.x puhul, kuid kliendi konfiguratsioonid tuli käsitsi luua ja see oli minu jaoks kahetsusväärne ja põhjustas palju ebamugavusi. Kui nädal hiljem oli mul vaja luua konfiguratsioone umbes 50 kliendi jaoks, otsustasin seda protsessi kiirendada ja kasutasin selleks kellegi teise Internetist leitud skripti.
Skript töötab järgmiselt: pärast käivitamist näitame "kliendi nime", vastame küsimusele "kas määrata parool või mitte", pärast seda võtame valmis konfiguratsioonifaili "client.ovpn", mille sertifikaadid ja seaded on integreeritud sellesse. Selle kasutamiseks peate asuma kaustas /etc/openvpn. Kirjutan kommentaaridega alla read, milles rada tuleb enda omaga asendada. Samuti on vaja luua fail kliendi sätetega, et skript saaks neid konfiguratsiooni loomise protsessis asendada.
#!/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 kaugjuurdepääsu piirang hävitama nii selle serveri kui ka olemasoleva Mikrotiku ühenduse. Loodi uus server. OpenVPNIT-osakonna töötajatele, kes nüüd töötavad täielikult CentOSAga see on hoopis teine lugu.
Avaldan sügavat tänu Ivanile ja Pavelile abi eest artikli toimetamisel.
Allikas: www.habr.com
