Bwndel OpenVPN ar Windows Server a Mikrotik gyda mudo'r pethau hyn i mewn Linux

Helo!

Mae pob busnes yn hwyr neu'n hwyrach yn sydyn angen mynediad o bell.
Mae bron pob arbenigwr TG yn wynebu'r angen i drefnu mynediad o bell i'w rhwydweithiau mewn menter.

I mi, fel llawer o rai eraill, mae angen hwn yn fy nharo fel “ddoe.” Ar ôl dadansoddi'r holl fanteision ac anfanteision, yn ogystal â hidlo trwy dunelli o wybodaeth a phori o gwmpas ychydig mewn theori, penderfynais fwrw ymlaen â'r gosodiad.

Am resymau diogelwch, fe'i dewiswyd OpenVPN yn y gweithrediad nesaf: ar weinydd gyda system weithredu Windows Server 2012 gosodwyd peiriant rhithwir arno, Windows Server 2012, ac arno, yn ei dro, y gweinydd OpenVPN, a gyhoeddodd ac a lofnodwyd tystysgrifau.

Er hwylustod, gadewch i ni ei alw'n "weinydd ardystio." Nesaf, cymerais y dystysgrif gweinydd, ei gwthio i mewn i Mikrotik, ac yna ei actifadu ar y llwybrydd Mikrotik ei hun. OpenVPN gyda chyfrifon a phroffiliau. Defnyddiwyd gweinydd ardystio hefyd i gyhoeddi tystysgrifau cleientiaid.

Roedd y gweithredu, wrth gwrs, yn ofnadwy, ac er nad oedd fy mhrofiad yn y fath bethau ar yr adeg honno yn ddigon, dyweder, mewn materion diogelwch, nid dyna oedd y penderfyniad gwaethaf.

Gweithiodd y cysylltiad hwn am beth amser a chefais fewnbwn newydd: symudwch y gweinydd ardystio i Linux, gan gynnal y cysylltiad â Mikrotik - ni ddylid niweidio cwsmeriaid.

Fy ngwybodaeth am Linux ar y pryd hwnnw daeth i ben am Ubuntu 16.04LTS gyda rhyngwyneb graffigol, a ddefnyddiwyd fel terfynell ar gyfer cysylltu trwy RDP â'r gweinydd WindowsHynny yw, sudo apt-get -f install -y, a dim centimetr yn fwy.

Ar ôl astudio'r cwestiwn o ba OS yw Linux mae teulu'n fwy sefydlog ac addawol i'm sefydliad, setlais ar CentOS 7 Minimalaidd.

I ddechrau, penderfynais ymchwilio ychydig i'r ddamcaniaeth, er mwyn deall sut mae'n gweithio'n gyffredinol ac yn gweithio. Gwylio gwersi fideo ar y sianel www.youtube.com/channel/UCKdRgZWgy42YxoFcTJ30LTA (Ddim yn hysbyseb o gwbl, dim ond y rhai cyntaf i mi ddod ar eu traws oedden nhw). Cyflwynodd merch gyda llais dymunol fi i hanfodion gweithio yn yr OS a ddewiswyd.

Yn gyntaf, lansiais Hyper-V ar fy nghyfrifiadur a'i osod yno. CentOS 7 Minimal. Yn ystod y gosodiad, creais y defnyddiwr Gweinyddol ac analluogais SSH yn llwyr ar gyfer y gwreiddyn. Ar ôl ffarwelio â'r sgrin aml-liw hardd, plymiais i fyd du a gwyn y derfynfa.

Dwi'n meddwl nad oes pwrpas disgrifio'r broses o osod y meddalwedd; mae'n well canolbwyntio ar y problemau a gododd yn ystod y broses a datrys pa rai roedd yn rhaid i mi ysgrifennu sgript fach (mae o dan y toriad. Disgrifiadau o bob un o'r rhain gellir dod o hyd i'r cyfleustodau ar y Rhyngrwyd, ond ar hyn o bryd pan wnes i hyn, nid oedd y sgript hon yn bodoli eto, gwnaed popeth am y tro cyntaf, trwy gyffwrdd ac ar hap).

Yn y sgript, ceisiais awtomeiddio gosod y cyfleustodau gofynnol lleiaf ar gyfer y gweinydd, analluogi Selinux, cysylltu'r storfa Epel, gosod OpenVPN, ac ati. Isod mae'r sgript ei hun; mae'n syml, ond yn ddefnyddiadwy. Wna i ddim mynd i fanylion, ond os oes ei angen ar unrhyw un, rhowch wybod i mi.

Ar ôl defnyddio'r sgript, bydd gweinydd wedi'i ffurfweddu ymlaen llaw yn ymddangos. OpenVPN, yn wincio llygad gwyrdd.

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

Gosod OpenVPN Ni aeth yn gwbl lwyddiannus.

Ddim yn gwybod am fanylion y polisi hawliau Linux systemau, treuliais lawer o amser yn astudio'r logiau ac yn aseinio'r caniatâd angenrheidiol i'r holl ffeiliau.

Pan fydd y botwm OpenVPN wedi troi'n wyrdd, roeddwn i'n hapus iawn, ond fel y digwyddodd, dim ond y dechrau oedd hyn. Yn fy naïfrwydd, roeddwn i'n cyfrif ar ddisodli'r tystysgrifau gwraidd a'r ffeil crl.pem, gan obeithio y byddai popeth yn gweithio. Yn y diwedd, roedd angen i mi drosglwyddo o'r gweinydd i Windows y ffeiliau canlynol:

Serv.crt — Tystysgrif gweinydd
Serv.key — Allwedd gweinydd
Ca.crt - Tystysgrif gwraidd
Ca.key—Allwedd gwraidd
Crl.pem — Ffeil dirymu tystysgrif
Dh.pem - allwedd Diffie-Hellman
Index.txt - Ffeil gyda gwybodaeth am dystysgrifau cyfredol
Cyfresol - mae hefyd yn gyfrifol am berthnasedd tystysgrifau

Mae angen y ffolder certs_by_serial, y ffeil vars, a holl allweddi a thystysgrifau cleient arnoch hefyd.
Ar Mikrotik, arhosodd y tystysgrifau yn eu lle, felly gweithiodd popeth.

Ymddangosodd problemau pan geisiais ddirymu'r dystysgrif, ni weithiodd o gwbl - bu'n rhaid trosi'r ffeil index.txt i fformat unix, ond ni wnes i hynny ar unwaith. Defnyddiais y cyfleustodau dos2unix.

Nawr diddymwyd y tystysgrifau, ond parhaodd i weithio heb unrhyw broblemau, oherwydd nid oedd Mikrotik yn gwybod eu bod wedi'u dirymu ac roedd angen eu hysbysu am y peth rywsut.

Ar ôl darllen y cyfarwyddiadau, a hefyd ymgynghori ag Alexander ERI (diolch yn fawr!), Gosodais weinydd Apache http syml ar y gweinydd ardystio a chyhoeddais ffeil o dystysgrifau wedi'u dirymu arno. Mynediad wedi'i rwystro'n llwyr iddo, ac eithrio i'r ffeil gyhoeddedig o un IP.

Yn nherfynell Mikrotik, yn y tab /System/Certificates/CRL, nodir y llwybr i'r crl.pem cyhoeddedig. Yma dylid egluro bod Mikrotik ond yn derbyn http a chyfeiriad absoliwt ar gyfer y tab CRL, h.y. Dylai fod wedi edrych yn rhywbeth fel hyn: 127.0.0.1/crl/1.crl
Gweithiodd popeth, o leiaf ar gyfer fersiynau 6.4.2.x o RouterOS, ond roedd yn rhaid creu ffurfweddiadau cleient â llaw, ac roedd hyn yn anffodus i mi ac yn achosi llawer o anghyfleustra. Pan oedd angen i mi greu ffurfweddiadau ar gyfer tua 50 o gleientiaid wythnos yn ddiweddarach, penderfynais gyflymu'r broses hon ac ar gyfer hyn defnyddiais ddarn o sgript rhywun arall a ddarganfuwyd ar y Rhyngrwyd.

Mae'r sgript yn gweithio fel hyn: ar ôl ei lansio, rydym yn nodi "enw'r cleient", atebwch y cwestiwn "i osod cyfrinair ai peidio", ar ôl hynny rydym yn cymryd y ffeil ffurfweddu parod "client.ovpn", gyda thystysgrifau a gosodiadau wedi'u hintegreiddio. i mewn iddo. Er mwyn ei ddefnyddio, mae angen i chi fod yn /etc/openvpn. Byddaf yn llofnodi gyda sylwadau y llinellau y mae angen disodli'r llwybr â'ch un chi. Mae hefyd angen creu ffeil gyda gosodiadau cleient fel y gall y sgript eu disodli yn ystod y broses creu cyfluniad.

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

Ar ôl peth amser, gorfododd cyfyngiad newydd ar fynediad o bell ddinistrio'r gweinydd hwn a'r cysylltiad Mikrotik presennol. Crëwyd gweinydd newydd. OpenVPN, ar gyfer gweithwyr yr adran TG, sydd bellach yn gweithio'n gyfan gwbl ar CentOSOnd mae honno'n stori hollol wahanol.

Mynegaf fy niolch dwfn i Ivan a Pavel am eu cymorth wrth olygu'r erthygl.

Ffynhonnell: hab.com

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd â diogelwch DDoS, gweinyddwyr VPS VDS 🔥 Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster