Gomila OpenVPN na Windows Server i Mikrotik sa migracijom ovih stvari u Linux

Zdravo!

Svakom preduzeću prije ili kasnije iznenada je potreban daljinski pristup.
Gotovo svaki IT stručnjak suočava se s potrebom da organizira daljinski pristup svojim mrežama u poduzeću.

Za mene, kao i za mnoge druge, ova potreba me pogodila kao „jučer“. Nakon što sam analizirao sve prednosti i nedostatke, kao i pregledao tone informacija i malo pobrkao po teoriji, odlučio sam nastaviti s instalacijom.

Iz sigurnosnih razloga, odabran je OpenVPN u sljedećoj implementaciji: na serveru sa operativnim sistemom Windows Server 2012. godine je na njemu instalirana virtuelna mašina, Windows Server 2012, a na njemu, zauzvrat, server OpenVPN, koji je izdavao i potpisivao certifikate.

Radi lakšeg snalaženja, nazovimo ga "server za certifikaciju". Zatim sam uzeo certifikat servera, ubacio ga u Mikrotik, a zatim ga aktivirao na samom Mikrotik ruteru. OpenVPN s računima i profilima. Za izdavanje klijentskih certifikata korišten je i certifikacijski server.

Implementacija je, naravno, bila užasna, i iako je tada moje iskustvo u takvim stvarima bilo, recimo, nedovoljno, po pitanju sigurnosti to nije bila najgora odluka.

Ova veza je neko vrijeme radila i dobio sam novi unos: premjestiti certifikacijski server na Linux, uz održavanje veze s Mikrotikom - kupci ne bi trebali biti oštećeni.

Moje znanje o Linux u to vrijeme završilo se u Ubuntu 16.04LTS sa grafičkim interfejsom, koji je korišten kao terminal za povezivanje putem RDP-a sa serverom WindowsTo jest, sudo apt-get -f install -y, i ni centimetar više.

Nakon što sam proučio pitanje koji je operativni sistem Linux porodica je stabilnija i obećavajuća za moju organizaciju, odlučio sam se za CentOS 7 Minimalno.

Za početak, odlučio sam da se malo udubim u teoriju, da shvatim kako ona općenito funkcionira i funkcionira. Gledali video lekcije na kanalu www.youtube.com/channel/UCKdRgZWgy42YxoFcTJ30LTA (Uopšte nije reklama, oni su bili samo prvi na koje sam naišao). Devojka prijatnog glasa upoznala me je sa osnovama rada u odabranom OS.

Prvo sam pokrenuo Hyper-V na svom računaru i tamo ga instalirao. CentOS 7 Minimal. Tokom instalacije, kreirao sam Admin korisnika i potpuno onemogućio SSH za root. Nakon što sam se oprostio od prekrasnog višebojnog ekrana, uronio sam u crno-bijeli svijet terminala.

Mislim da nema smisla opisivati ​​proces instaliranja softvera, bolje je da se fokusiram na probleme koji su se pojavili tokom procesa i za rješavanje kojih sam morao napisati malu skriptu (nalazi se ispod. Opisi svakog od uslužni programi se mogu naći na internetu, ali u trenutku kada sam ovo uradio, ova skripta još nije postojala, sve je urađeno po prvi put, dodirom i nasumično).

U skripti sam pokušao automatizirati instalaciju minimalno potrebnih uslužnih programa za server, onemogućiti Selinux, povezati Epel repozitorij, instalirati OpenVPNitd. Ispod je sam skript; jednostavan je, ali upotrebljiv. Neću ulaziti u detalje, ali ako nekome zatreba, neka mi javi.

Nakon korištenja skripte, pojavit će se unaprijed konfigurirani server. OpenVPN, namigujući zelenim okom.

#!/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

postavljanje OpenVPN Nije prošlo u potpunosti uspješno.

Nepoznavanje specifičnosti politike prava Linux sisteme, proveo sam mnogo vremena proučavajući logove i dodjeljujući potrebna dopuštenja svim datotekama.

Kada dugme OpenVPN pozelenio, bio sam jako sretan, ali kako se ispostavilo, ovo je bio samo početak. U svojoj naivnosti, računao sam na zamjenu root certifikata i crl.pem datoteke, nadajući se da će sve raditi. Na kraju sam trebao prebaciti sa servera na Windows sljedeće fajlove:

Serv.crt — Sertifikat servera
Serv.ključ — Serverski ključ
Ca.crt - Root certifikat
Ca.key — Osnovni ključ
Crl.pem — Datoteka za opoziv certifikata
Dh.pem - Diffie-Hellman ključ
Index.txt - Datoteka sa informacijama o trenutnim certifikatima
Serijski - također je odgovoran za relevantnost certifikata

Također vam je potreban folder certs_by_serial, datoteka vars i svi klijentski ključevi i certifikati.
Na Mikrotiku su certifikati ostali na mjestu, tako da je sve funkcioniralo.

Problemi su se pojavili kada sam pokušao opozvati certifikat, uopće nije išlo - datoteka index.txt je morala biti konvertirana u unix format, ali nisam to odmah učinio. Koristio sam dos2unix uslužni program.

Sada su sertifikati ukinuti, ali su nastavili da rade bez ikakvih problema, jer Mikrotik nije znao da su ukinuti i o tome je trebalo nekako da se obavesti.

Nakon što sam pročitao uputstva i konsultovao se sa Alexanderom ERI (veliko hvala!), instalirao sam jednostavan Apache http server na server za sertifikaciju i na njemu objavio fajl opozvanih sertifikata. Potpuno blokiran pristup njemu, osim objavljenoj datoteci sa jedne IP adrese.

U Mikrotik terminalu, na kartici /System/Certificates/CRL, naznačena je putanja do objavljenog crl.pem-a. Ovdje treba pojasniti da Mikrotik prihvata samo http i apsolutnu adresu za karticu CRL, tj. Trebalo je izgledati otprilike ovako: 127.0.0.1/crl/1.crl
Sve je funkcionisalo, barem za verzije 6.4.2.x RouterOS-a, ali su konfiguracije klijenta morale biti kreirane ručno, što je za mene bilo na žalost i izazvalo je mnogo neugodnosti. Kada sam nedelju dana kasnije trebalo da kreiram konfiguracije za oko 50 klijenata, odlučio sam da ubrzam ovaj proces i za to sam koristio deo tuđe skripte pronađene na internetu.

Skripta radi ovako: nakon pokretanja, naznačimo "ime klijenta", odgovorimo na pitanje "da postavimo lozinku ili ne", nakon toga uzimamo gotovu konfiguracijsku datoteku "client.ovpn", s integriranim certifikatima i postavkama u to. Da biste ga koristili, morate biti u /etc/openvpn. Komentarima ću potpisati redove u kojima put treba zamijeniti vašim. Također je potrebno kreirati datoteku sa postavkama klijenta kako bi ih skripta mogla zamijeniti tokom procesa kreiranja konfiguracije.

#!/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

Nakon nekog vremena, novo ograničenje udaljenog pristupa prisililo je uništavanje i ovog servera i postojeće Mikrotik veze. Kreiran je novi server. OpenVPN, za zaposlenike IT odjela, koji sada u potpunosti rade na CentOS. Ali to je sasvim druga priča.

Izražavam duboku zahvalnost Ivanu i Pavlu na pomoći u uređivanju članka.

izvor: www.habr.com

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster