Paket OpenVPN na Windows Server i Mikrotik s migracijom ovih stvari u Linux

Zdravo!

Svaki posao prije ili kasnije iznenada zatreba udaljeni pristup.
Gotovo svaki IT stručnjak suočava se s potrebom organiziranja daljinskog pristupa svojim mrežama u poduzeću.

Mene, kao i mnoge druge, ova me potreba pogodila kao "jučer". Nakon što sam analizirao sve prednosti i nedostatke, kao i pretražio tone informacija i malo čačkao po teoriji, odlučio sam nastaviti s instalacijom.

Iz sigurnosnih razloga odabran je OpenVPN u sljedećoj implementaciji: na poslužitelju s operativnim sustavom Windows Server Virtualni stroj je instaliran na njemu 2012. godine, Windows Server 2012., a na njemu, pak, poslužitelj OpenVPN, koji je izdavao i potpisivao certifikate.

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

Provedba je, naravno, bila grozna, i iako je moje iskustvo u takvim stvarima tada, recimo, bilo nedovoljno, u pitanjima sigurnosti to nije bila najgora odluka.

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

Moje znanje Linux u to vrijeme završilo je u Ubuntu 16.04LTS s grafičkim sučeljem, 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 OS Linux obitelj je stabilnija i obećavajuća za moju organizaciju, odlučio sam se za CentOS 7 Minimalno.

Za početak, odlučio sam se malo udubiti u teoriju, da shvatim kako to općenito funkcionira i funkcionira. Gledao video lekcije na kanalu www.youtube.com/channel/UCKdRgZWgy42YxoFcTJ30LTA (Nije nikakva reklama, bili su samo prvi na koje sam naišao). Djevojka ugodnog glasa uvela me u osnove rada u odabranom OS-u.

Prvo sam pokrenuo Hyper-V na svom računalu i tamo ga instalirao. CentOS 7 Minimal. Tijekom instalacije kreirao sam administratorskog 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 usredotočiti se na probleme koji su se pojavili tijekom procesa i za čije rješavanje sam morao napisati malu skriptu (ona je u rubrici. Opisi svakog od pomoćni programi se mogu naći na internetu, ali u trenutku kada sam to radio, ova skripta još nije postojala, sve se radilo prvi put, dodirom i nasumično).

U skripti sam pokušao automatizirati instalaciju minimalnih potrebnih uslužnih programa za poslužitelj, onemogućiti Selinux, spojiti Epel repozitorij, instalirati OpenVPNitd. Ispod je sam scenarij; jednostavan je, ali upotrebljiv. Neću ulaziti u detalje, ali ako nekome treba, neka mi se javi.

Nakon korištenja skripte, pojavit će se unaprijed konfigurirani poslužitelj. 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

Instalacija OpenVPN Nije prošlo sasvim uspješno.

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

Kada gumb 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 datoteke:

Serv.crt — Certifikat poslužitelja
Serv.key — Ključ poslužitelja
Ca.crt - Korijenski certifikat
Ca.key — Glavni ključ
Crl.pem — Datoteka opoziva certifikata
Dh.pem - Diffie-Hellmanov ključ
Index.txt - Datoteka s informacijama o trenutnim certifikatima
Serijski - također je odgovoran za relevantnost certifikata

Također vam je potrebna mapa certs_by_serial, datoteka vars i svi klijentski ključevi i certifikati.
Na Mikrotiku su certifikati ostali na mjestu pa je sve radilo.

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

Sada su certifikati ukinuti, ali su nastavili raditi bez ikakvih problema, jer Mikrotik nije znao da su ukinuti i trebao ga je o tome nekako obavijestiti.

Nakon čitanja uputa i savjetovanja s Alexanderom ERI-jem (puno hvala!), instalirao sam jednostavan Apache http poslužitelj na certifikacijski poslužitelj i na njemu objavio datoteku opozvanih certifikata. Potpuno blokiran pristup njoj, osim objavljenoj datoteci s jedne IP adrese.

U Mikrotik terminalu u kartici /System/Certificates/CRL naznačen put do objavljenog crl.pem. Ovdje treba pojasniti da Mikrotik prihvaća samo http i apsolutnu adresu za CRL karticu, tj. Trebalo je izgledati otprilike ovako: 127.0.0.1/crl/1.crl
Sve je radilo, barem za verzije 6.4.2.x RouterOS-a, ali klijentske konfiguracije morale su se kreirati ručno, a to je za mene bila nesreća i izazvalo je mnogo neugodnosti. Kada sam tjedan dana kasnije trebao napraviti konfiguracije za 50-ak klijenata, odlučio sam ubrzati taj proces i za to sam upotrijebio dio tuđe skripte pronađen na internetu.

Skripta radi ovako: nakon pokretanja naznačimo "ime klijenta", odgovorimo na pitanje "postaviti lozinku ili ne", nakon toga uzmemo gotovu konfiguracijsku datoteku "client.ovpn", s integriranim certifikatima i postavkama u njega. Da biste ga koristili, morate biti u /etc/openvpn. Potpisat ću komentarima retke u kojima put treba zamijeniti svojim. Također je potrebno kreirati datoteku s postavkama klijenta kako bi ih skripta mogla zamijeniti tijekom 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štenje i ovog poslužitelja i postojeće Mikrotik veze. Stvoren je novi poslužitelj. OpenVPN, za zaposlenike IT odjela, koji sada u potpunosti rade na CentOSAli 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 stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster