Përshëndetje!
Çdo biznes, më vonë apo më herët, papritur, ka nevojë për akses të largët.
Praktikisht çdo profesionist i IT përballet me nevojën për të organizuar aksesin e largët në rrjetet e tij në kompani.
Edhe mua, ashtu si shumë të tjerë, kjo nevojë më goditi me siglën 'dje'. Pasi analizuam të gjitha 'pro' dhe 'kundra', si dhe pas shumë informacioni dhe një pak teori, vendosa të filloja instalimin.
Për siguri, zgjodha OpenVPN në implementimin e mëposhtëm: në një server me sistemin operativ Windows Server 2012 u instalua një makinë virtuale, mbi të, gjithashtu Windows Server 2012, dhe mbi të, një server OpenVPN që lëshonte dhe nënshkruante certifikatat.
Për lehtësi, do ta quajmë 'serveri i certifikimit'. Më pas, mora certifikatën e serverit, e futa në Mikrotik, dhe mbi routerin Mikrotik ngrita OpenVPN me llogaritë, profilin. Po ashtu, për lëshimin e certifikatës së klientit, përdora gjithashtu serverin e certifikimit.
Implementimi, sigurisht, ishte i mjerueshëm dhe, ndonëse në atë kohë eksperienca ime në çështje të tilla ishte, le të themi, e pamjaftueshme, në çështjet e sigurisë, kjo ishte një zgjidhje e arsyeshme.
Ky kombinim punoi për një kohë dhe m’u dha një udhëzim i ri: të transferoja serverin e certifikimit në Linux, duke mbajtur lidhjen me Mikrotik — klientët nuk duhet të dëmtohen.
Njohuritë e mia për Linux në atë kohë ishin të kufizuara në Ubuntu 16.04LTS me ndërfaqe grafike, e cila përdorej si terminal për të u lidhur përmes RDP me serverin Windows. Pra, sudo apt-get -f install -y, dhe asnjë centimetër më shumë.
Pas studimit të çështjes se cila OS nga familja Linux është më e stabilizuar dhe perspektivë për organizatën time, u ndala te CentOS 7 Minimal.
Fillimisht vendosa të hedh pak në teori, të kuptoj si funksionon dhe si është ndërtuar. Pashë mësime video në kanal (Vërtet nuk është reklamë, thjesht ata më dolën të parët). Një vajzë me një zë të këndshëm më njohu me bazat e punës në OS-në e zgjedhur.
Fillimisht, e kam aktivizuar Hyper-V në kompjuterin tim, e instalova CentOS 7 Minimal, gjatë instalimit krijova përdoruesin Admin dhe e mbylla plotësisht SSH për root. Pas lamtumirës nga ekranin e bukur shumëngjyrësh, u zhyt në botën bardh e zi të terminalit.
Mendoj se nuk ka kuptim të përshkruaj procesin e instalimit të softuerit; më mirë të vë theksin në problemet që u shfaqën gjatë procesit dhe për zgjidhjen e të cilave më duhej të shkruaja një skritp të vogël (ai është nën lidhje. Përshkrimi i secilës nga utilitat mund të gjendet në internet, por në atë moment, kur bëja gjithçka, ky skript ende nuk ishte krijuar, gjithçka u bë për herë të parë, në tentativë dhe rastësisht).
Në skript përpiqem të automatizoj instalimin e utiliteteve minimale të nevojshme për serverin, të çaktivizoj Selinux-in, të lidh repo Epel, të instaloj OpenVPN, etj. Më poshtë është skripti vetë, është i thjeshtë, por mund të jetë i dobishëm. Nuk do e shpjegoj, por nëse dikush e ka nevojë, shkruani dhe do përgjigjem.
Pas përdorimit të skriptit do të shfaqet një server OpenVPN tashmë i konfiguruar, duke nxjerrë syze të gjelbërta.
#!/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@serverInstalimi i OpenVPN nuk kaloi plotësisht me sukses.
Pa nuk dija për veçoritë e politikës së të drejtave në sistemet Linux, kam shpenzuar shumë kohë duke studiuar log-et dhe duke caktuar të drejtat e nevojshme për të gjitha skedarët.
Kur butoni OpenVPN u bë i gjelbër, u gëzova shumë, por siç u tregua, kjo ishte vetëm fillimi. Me një shpirt të lehtë, prisja të zëvendësoja certifikatat rrënjësore dhe skedarin crl.pem, duke shpresuar se gjithçka do të funksiononte. Në përfundim, më duhej të transferoja nga serveri në Windows skedarët e mëposhtëm:
Serv.crt — Certifikata e serverit
Serv.key — Çelësi i serverit
Ca.crt — Certifikata rrënjësore
Ca.key — Çelësi rrënjësor
Crl.pem — Skedari i tërhequr i certifikatave
Dh.pem — Çelësi i Difi-Hellman
Index.txt — Skedari me informacionin për certifikatat aktuale
Serial — ai gjithashtu është përgjegjës për aktualitetin e certifikatave
Më nevojitej gjithashtu dosja certs_by_serial, skedari vars dhe të gjithë çelësat dhe certifikatat e klientëve.
Në Mikrotik, certifikatat mbetën në vend, prandaj gjithçka funksionoi.
Problemet filluan kur provova të tërheq certifikatën, kjo nuk funksionoi fare — skedari index.txt duhej të konvertohej në formatin unix, por unë nuk e bëra menjëherë. Përdorova utilitarin dos2unix.
Tani certifikatat ishin të revokuar, por vazhduan të funksiononin pa asnjë problem, sepse Mikrotik nuk e dinte që ishin revokuar dhe duhej të informohej si ndonjë mënyrë.
Pasi lexova udhëzimet dhe pas konsultimeve me Aleksandrin ERI (faleminderit shumë!), ngrita një server të thjeshtë http Apache në serverin e certifikimit dhe publikova atje skedarin e certifikatave të revokuara. E mbylla plotësisht qasjen, përveç skedarit të publikuar nga një IP.
Në terminalin e Mikrotik, në seksionin /System/Certificates/CRL, tregova rrugën për crl.pem të publikuar. Këtu duhet të sqaroj se Mikrotik pranon për seksionin CRL vetëm http dhe adresat absolute, pra duhej të dukej përafërsisht kështu:
Gjithçka funksionoi, të paktën për versionet 6.4.2.x të RouterOS, por konfigurimet për klientët duhej të krijoheshin manualisht, dhe kjo për mua ishte e dhimbshme dhe shkaktonte shumë pakënaqësi. Kur pas një jave më nevojitej të krijoja konfigurime për rreth 50 klientë, vendosa ta përshpejtoj këtë proces dhe për këtë përdorova një copë skripti të huaj, që e gjeta në internet.
Skripti funksionon si më poshtë: pasi ta nisni, jepni "emrin e klientit", përgjigjuni pyetjes "të vendosim fjalëkalim apo jo", pastaj merrni skedarin e gatshëm të konfigurimit "klient.ovpn", me certifikatat dhe konfigurimet e integruara brenda saj. Për ta përdorur, duhet të ndodheni në /etc/openvpn. Do ta shënjosh me komente rreshtat ku duhet të zëvendësoni rrugën me tuajën. Po ashtu, është e nevojshme të krijoni një skedar me konfigurimet e klientit, në mënyrë që skripti t'i përdorë ato gjatë krijimit të konfigurimit.
#!/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
Pas disa kohe, hyrja e re mbi ndalimin e hyrjes në distancë e detyroi të mbyllim edhe këtë server, si dhe lidhjen funksionale me Mikrotik. U krijua një server i ri OpenVPN për punonjësit e departamentit IT, i cili tani funksionon plotësisht në CentOS. Por kjo është një histori krejt tjetër.
Shpreh mirënjohjen time të madhe për Ivanin dhe Pavlin për ndihmën në redaktimin e artikullit.
Burimi: habr.com
