Përshendetje!
Çdo biznes herët a vonë, papritur, ka nevojë për akses të largët.
Praktikisht çdo IT-ist përballet me nevojën për të organizuar akses të largët në rrjetet e tij.
Unë, ashtu si shumë të tjerë, e ndjeva këtë nevojë me urgjencë. Pas një analize të të gjitha "për" dhe "kundër", si dhe pas studimit të tonelatave të informacionit dhe hulumtimit pak në teori, vendosa të filloj instalimin.
Për arsye sigurie, u zgjodh OpenVPN në zbatimin e mëposhtëm: në një server me sistemin operativ Windows Server 2012 u instalua një makinë virtuale, gjithashtu Windows Server 2012, dhe në të, në radhë, u vendos serveri OpenVPN, i cili lëshonte dhe nënshkruante certifikatat.
Për lehtësi, do ta quajmë atë "server certifikimi". Më pas, mora certifikatën e serverit, e futa në Mikrotik, dhe në vetë routerin Mikrotik ngrita OpenVPN me llogaritë dhe profilin. Për lëshimin e certifikatës së klientit përdora gjithashtu serverin e certifikimit.
Zbatimi, natyrisht, është i vështirë, dhe megjithëse në atë kohë përvoja ime në gjëra të tilla ishte, të themi, ndoshta e pamjaftueshme, në çështjet e sigurimit, kjo ishte një zgjidhje mjaft e mirë.
Kjo lidhje punoi për njëfarë kohe dhe më u dha një udhëzim i ri: të transferoj serverin e certifikimit në Linux, duke ruajtur lidhjen me Mikrotik — klientët nuk duhet të dëmtohen.
Dituritë e mia për Linux në atë kohë përfundonin 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 hulumtimit të pyetjes se cila OS nga familja Linux është më e qëndrueshme dhe e përshtatshme për organizatën time, vendosa për CentOS 7 Minimal.
Fillimisht vendosa të hulumtoj pak në teori, për të kuptuar si funksionon e gjithë kjo. Shikova mësime video në kanalin (Nuk është reklamë, thjesht erdhën tek unë të parat). Një vajzë me një zë të këndshëm më njohu me bazat e punës në sistemin operativ të zgjedhur.
Fillimisht aktivizova Hyper-V në kompjuterin tim, instalova CentOS 7 Minimal, gjatë instalimit krijova përdoruesin Admin dhe e mbylla plotësisht ssh për root. Pas ndarjes nga ekranin e bukur me ngjyra, u zhgënjeva në botën bardhë e zi të terminalit.
Mendoj se nuk ka kuptim të përshkruaj procesin e instalimit të softuerit, është më mirë të theksoj problemet që u shfaqën gjatë procesit dhe për zgjidhjen e të cilave më duhej të shkruaja një skenar të vogël (ai ndodhet më poshtë. Përshkrimi i çdo utilitari mund të gjendet në internet, por në momentin kur unë e bëja këtë, ky skenar nuk ekzistonte akoma, gjithçka bëhej për herë të parë, me ndjenja dhe ndjesi).
Në skenar, përpiqesha të automatizoja instalimin e utilitarëve minimalisht të nevojshëm për serverin, të çaktivizoja Selinux, të aktivizoja depozitin Epel, të instalonim OpenVPN, etj. Më poshtë është skenari, është i thjeshtë, por mund të përdoret. Nuk do ta analizoj, por nëse dikujt i nevojitet, shkruani dhe do t'ju përgjigjem.
Pas përdorimit të skenarit do krijohet një server OpenVPN i konfiguruar, që tregon një sy të gjelbër.
#!/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 shkoi krejtësisht siç duhet.
Pa ditur për veçoritë e politikave të drejtave në sistemet Linux, kam humbur një kohë të madhe duke studiuar log-ët dhe duke dhënë të gjitha skedarëve të drejtat e nevojshme.
Kur butoni OpenVPN u bë i gjelbër, u gëzova shumë, por siç u duk, kjo ishte vetëm fillimi. Me përgjithshmëri, mendoja të zëvendësoja certifikatat rrënjësore dhe skedarin crl.pem, duke shpresuar se gjithçka do funksiononte. Në përfundim, më duhej të transferoja nga serveri në Windows këta skedarë:
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 certifikatave të revokuara
Dh.pem — Çelësi i Diffie-Hellman
Index.txt — Skedari me informacionet mbi certifikatat aktuale
Serial — ai gjithashtu është përgjegjës për aktualitetin e certifikatave
Po ashtu nevojitej folderi certs_by_serial, skedari vars, dhe të gjitha çelësat dhe certifikatët e klientëve.
Në Mikrotik, certifikatët mbetën në vend, kështu që gjithçka funksionoi.
Problemet filluan kur përpiqesha të revokoja certifikatën, kjo nuk funksiononte fare — skedari index.txt duhej të kalohej në formatin unix, dhe unë nuk e bëra këtë menjëherë. Përdora utilitarin dos2unix.
Tani certifikatët u revokuan, por vazhdonin të funksiononin pa ndonjë problem, sepse Mikrotik nuk e dinte se ata ishin revokuar dhe kishte nevojë për ta njoftuar siç duhej.
Pasë lexuar udhëzimet dhe konsultuar me Aleksandrin ERI (faleminderit shumë!), ngrita në serverin e certifikimit një server të thjeshtë http Apache dhe publikova atje skedarin e certifikatave të tërhequra. E mbylla plotësisht aksesin përveç skedarit të publikuar nga një IP.
Në terminalin Mikrotik, në seksionin /System/Certificates/CRL vendosa rrugën për crl.pem të publikuar. Këtu duhet saktësuar se Mikrotik pranon për seksionin CRL vetëm http dhe adresë absolute, pra duhet të dukej pak si më poshtë:
Gjithçka funksionoi, të paktën për versionet 6.4.2.x të RouterOS, por konfigurimet për klientët duhej t'i krijoja me dorë, dhe kjo ishte plotësisht e dhimbshme për mua dhe shkaktonte shumë inconvenienca. Kur pas një jave mu desh të krijoja konfigurimet për rreth 50 klientë, vendosa të përshpejtoj këtë proces dhe për këtë përdora një copë skripti të huaj, të gjetur në internet.
Skripti funksionon kështu: pas fillimit, specifikojmë "emrin e klientit", përgjigjemi në pyetjen "të vendosim fjalëkalim apo jo", pas kësaj marrim skedarin e gatshëm të konfigurimit "klient.ovpn", me certifikatat dhe konfigurimet e integruara brenda tij. Për ta përdorur, duhet të jemi në /etc/openvpn. Unë do të nënshkruaj me komente rreshtat, ku rruga duhet të zëvendësohet me të tuajën. Gjithashtu është e nevojshme të krijohet një skedar me konfigurimet e klientit, në mënyrë që skripti t'i fusë 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
Pasi kaloi pak kohë, një kërkesë e re për ndalimin e aksesit të largët më detyroi të mbyll edhe këtë server, si dhe lidhjen e funksionueshme 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
