OpenVPN'i ja Mikrotiku seos Windows Serveris ning selle tõstmine Linuxisse

Tere!

Iga ettevõte jõuab varem või hiljem olukorda, kus on vajalik kaugjuurdepääs.
Peaaegu iga IT-spetsialist peab silmitsi seisma vajadusega korraldada kaugjuurdepääs oma ettevõtte võrkudele.

Mind, nagu paljusid teisi, tabas see vajadus hädaolukorras. Pärast kõigi plusside ja miinuside analüüsimist ning hulga teabe leidmist ja teooriaga tegelemist otsustasin installimisega alustada.

Turvalisuse tagamiseks valisin OpenVPN järgmises rakenduses: Windows Server 2012 operatsioonisüsteemiga serverisse installiti virtuaalmasin, millel samuti Windows Server 2012, ja selle peal OpenVPN server, mis väljastas ja allkirjastas sertifikaadid.

Mugavuse huvides kutsume seda „sertifitseerimisserveriks“. Edasi võtsin serveri sertifikaadi, laadisin selle Mikrotiki, ning Mikrotik’i marsruuteris tõstsin üles OpenVPN koos kontode ja profiilidega. Kliendi sertifikaadi väljastamiseks kasutasin samuti sertifitseerimisserverit.

Reaaliseerimine oli loomulikult masendav ning kuigi minu eelnev kogemus sarnastes asjades ei olnud piisav, ei olnud see siiski kõige halvem lahendus turvalisuse tagamisel.

See kombinatsioon töötas mingil ajal ning sain uue suunise: viia sertifitseerimiserver Linuxile, säilitades samal ajal ühenduse Mikrotikiga — kliendid ei tohi kannatada.

Minu teadmised Linuxist piirdusid tol hetkel Ubuntu 16.04 LTS-ga, mida kasutati RDP-ga Windowsi serverisse ühendamiseks. Seega, sudo apt-get -f install -y, ja mitte sentimeetrit rohkem.

Uurides, milline Linuxi perekonna operatsioonisüsteem on minu organisatsioonile stabiilseim ja perspektiivitu, valisin CentOS 7 Minimal.

Alguses otsustasin natuke teooriaga tegeleda, et mõista, kuidas see kõik toimib. Vaatasin õpetusvideoid kanalil www.youtube.com/channel/UCKdRgZWgy42YxoFcTJ30LTA (Ei reklaam, nad sattusid lihtsalt esimesena ette). Tüdruk meeldiva häälega tutvustas mulle valitud operatsioonisüsteemi töö põhialuseid.

Alustuseks käivitasin oma arvutis Hyper-V, installisin sinna CentOS 7 Minimal, installimise ajal lõin kasutaja Admin ja sulgesin täielikult ssh root'i jaoks. Hüvasti öeldes kaunile mitmevärvilisele ekraanile, sukeldusin mustvalgesse terminali maailma.

Ma arvan, et pole mõtet tarkvara installimise protsessi kirjeldada, parem on keskendada probleemidele, mis tekkisid protsessi käigus, ja mille lahendamiseks pidin kirjutama väikese skripti (see on allpool. Iga utiliidi kirjeldust võib leida internetist, kuid sel hetkel, kui ma seda kõike tegin, seda skripti veel ei olnud, kõik toimus esmakordselt, selle üleselt ja juhuslikult).

Skripti koostamisel püüdsin automatiseerida minimaalsete vajalike utiliitide installimise serverile, keelata Selinuxi, ühendada Epel-repositooriumi, installida OpenVPN-i jne. Allpool on ise skript, see on lihtne, kuid seda saab kasutada. Ma ei hakka seda lahti seletama, aga kui kellelegi on seda vaja, kirjutage, vastan.

Pärast skripti kasutamist ilmub 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@server

OpenVPN installimine ei läinud päris edukalt.

Linux süsteemide õiguste poliitika eripära teadmata kulutasin ma palju aega logide uurimisele ja kõigi failide nõutavate õiguste määramisele.

Kui OpenVPN nupp muutus roheliseks, olin ma väga õnnelik, aga selgus, et see oli vaid algus. Lihtsate lootuste najal plaanisin asendada juurikertiifid ja faili crl.pem, lootes, et kõik toimib. Lõpuks pidin ma serverist Windowsile üle viima järgmised failid:

Serv.crt — Serveri sertifikaat
Serv.key — Serveri võti
Ca.crt — Juuri sertifikaat
Ca.key — Juuri võti
Crl.pem — Sertifikaatide tühistamise fail
Dh.pem — Diffie-Hellmani võti
Index.txt — Fail, kus on teave kehtivate sertifikaatide kohta
Serial — see vastutab samuti sertifikaatide kehtivuse eest

Vaja läks ka kausta certs_by_serial, faili vars ja kõiki kliendi võtit ja sertifikaate.
Mikrotik’is sertifikaadid jäid oma kohtadele, seega kõik toimis.

Probleemid tekkisid, kui proovisin sertifikaati tühistada, see ei töötanud üldse — fail index.txt pidi olema konverteeritud unix vormingusse ja ma ei teinud seda kohe. Kasutasin tööriista dos2unix.

Nüüd olid sertifikaadid tagasi tõmmatud, kuid jätkasid probleemideta tööd, kuna Mikrotik ei teadnud, et need on tühistatud, ja tal polnud mingit teavet selle kohta.

Pärast juhiste lugemist ja Aleksandriga konsulteerimist (suur tänu!) lõin sertifitseerimisse serverisse lihtsa http Apache serveri ja avaldasin seal tühistatud sertifikaatide faili. Taotlesin täielikku juurdepääsu, välja arvatud avaldatud failile ühelt ip-lt.

Mikrotiku terminalis, vahekaardil /System/Certificates/CRL määrasin tee avaldatud crl.pem failile. Siinkohal tuleks täpsustada, et Mikrotik aktsepteerib CRLi vahekaardil ainult http ja absoluutset aadressi, st see peaks välja nägema umbes nii: 127.0.0.1/crl/1.crl
Kõik töötas, vähemalt RouterOS versioonide 6.4.2.x puhul, kuid kliendikonfiguratsioonid tuli käsitsi luua, mis oli minu jaoks loobumatu ja põhjustas palju ebamugavusi. Kui nädal hiljem oli mul vaja luua konfiguratsioonid umbes 50 kliendile, otsustasin protsessi kiirendada ja kasutasin selleks tükki välismaist skripti, mille leidsin internetist.

Skript töötab nii: pärast käivitamist määrame „klientide nime“, vastame küsimusele „kas seada parool või mitte“, seejärel saame valmis konfigureerimisfaili „client.ovpn“, mis sisaldab integreeritud sertifikaate ja seadeid. Selle kasutamiseks tuleb viibida /etc/openvpn. Märgin kommentaarides seosed, kus teed tuleb asendada oma omaga. Samuti tuleb luua klientide seadete fail, et skript neid konfigureerimise käigus kasutaks.

#!/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 säte kaugjuhtimise keeldumise tõttu hävitama nii selle serveri kui Mikrotikiga töötava sideme. Loodi uus OpenVPN server, IT-osakonna töötajatele, mis töötab nüüd täielikult CentOSil. Kuid see on juba hoopis teine ​​lugu.

Avaldan suurt tänu Ivanile ja Pavelile artikli redigeerimise eest abi eest.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster