Hyvä!
Jokainen yritys tarvitsee ennemmin tai myöhemmin yhtäkkiä etäkäytön.
Lähes jokaisella IT-asiantuntijalla on tarve järjestää etäkäyttö verkkoihinsa yrityksessä.
Minulle, kuten monille muille, tämä tarve osui minuun kuin "eilen". Analysoituani kaikki edut ja haitat sekä seulottuani tonnia tietoa ja pohdittuani vähän teoriassa, päätin jatkaa asennusta.
Turvallisuussyistä se valittiin OpenVPN seuraavassa toteutuksessa: palvelimella, jossa on käyttöjärjestelmä Windows Server Vuonna 2012 sille asennettiin virtuaalikone, Windows Server 2012, ja sillä puolestaan palvelin OpenVPN, joka myönsi ja allekirjoitti sertifikaatteja.
Kutsutaan sitä mukavuuden vuoksi "sertifiointipalvelimeksi". Seuraavaksi otin palvelinsertifikaatin, laitoin sen Mikrotikiin ja aktivoin sen sitten itse Mikrotik-reitittimessä. OpenVPN tileillä ja profiileilla. Sertifiointipalvelinta käytettiin myös asiakassertifikaattien myöntämiseen.
Toteutus oli tietysti kauheaa, ja vaikka tuolloin kokemukseni sellaisista ei ollut vielä tarpeeksi, niin turvallisuusasioissa se ei ollut huonoin päätös.
Tämä yhteys toimi jonkin aikaa ja sain uuden syötteen: siirrä sertifiointipalvelin kohteeseen Linux, samalla kun ylläpidetään yhteyttä Mikrotikiin - asiakkaille ei pitäisi aiheutua haittaa.
Minun tietoni Linux tuolloin päättyi klo. Ubuntu 16.04LTS graafisella käyttöliittymällä, jota käytettiin päätelaitteena yhteyden muodostamiseen RDP:n kautta palvelimeen WindowsEli sudo apt-get -f install -y, eikä senttimetriäkään enempää.
Tutkittuaan kysymystä siitä, mikä käyttöjärjestelmä on Linux perhe on vakaampi ja lupaavampi organisaatiolleni, päädyin CentOS 7 Minimaalinen.
Aluksi päätin syventyä hieman teoriaan ymmärtääkseni, miten se yleensä toimii ja toimii. Katsoin videotunteja kanavalla (Ei ollenkaan mainos, ne olivat vain ensimmäisiä, joihin törmäsin). Tyttö, jolla on miellyttävä ääni, tutustutti minut valitussa käyttöjärjestelmässä työskentelyn perusteisiin.
Ensin käynnistin Hyper-V:n tietokoneellani ja asensin sen sinne. CentOS 7 Minimalistinen. Asennuksen aikana loin järjestelmänvalvojan käyttäjätunnuksen ja poistin SSH:n kokonaan käytöstä root-käyttäjille. Jätettyäni hyvästit kauniille moniväriselle näytölle, sukelsin terminaalin mustavalkoiseen maailmaan.
Mielestäni on turha kuvailla ohjelmiston asennusprosessia, on parempi keskittyä ongelmiin, jotka syntyivät prosessin aikana ja joiden ratkaisemiseksi minun piti kirjoittaa pieni käsikirjoitus (se on leikkauksen alla. Kuvaukset jokaisesta apuohjelmat löytyvät Internetistä, mutta sillä hetkellä, kun tein tämän, tätä skriptiä ei vielä ollut olemassa, kaikki tehtiin ensimmäistä kertaa, koskettamalla ja satunnaisesti).
Skriptissä yritin automatisoida palvelimelle tarvittavien vähimmäisapuohjelmien asennuksen, poistaa Selinuxin käytöstä, yhdistää Epel-arkiston ja asentaa OpenVPN, jne. Alla on itse skripti; se on yksinkertainen, mutta käyttökelpoinen. En mene yksityiskohtiin, mutta jos joku tarvitsee sitä, ilmoittakaa minulle.
Skriptin käytön jälkeen näkyviin tulee esimääritetty palvelin. OpenVPN, iskien vihreää silmää.
#!/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@serverAsennus OpenVPN Ei se ihan täysin onnistunut.
En tiedä oikeuskäytännön yksityiskohdista Linux järjestelmissä käytin paljon aikaa lokien tutkimiseen ja tarvittavien käyttöoikeuksien määrittämiseen kaikille tiedostoille.
Kun painike OpenVPN muuttui vihreäksi, olin erittäin iloinen, mutta kuten kävi ilmi, tämä oli vasta alkua. Naiiviuteni laskin korvaavani juurisertifikaatit ja crl.pem-tiedoston toivoen, että kaikki toimisi. Lopulta minun piti siirtää palvelimelta Windows seuraavat tiedostot:
Serv.crt — Palvelimen varmenne
Palveluavain — Palvelinavain
Ca.crt - juurisertifikaatti
Ca.key — Pääavain
Crl.pem — Varmenteen peruutustiedosto
Dh.pem - Diffie-Hellman-avain
Index.txt - Tiedosto, joka sisältää tiedot nykyisistä varmenteista
Sarja - se vastaa myös varmenteiden merkityksestä
Tarvitset myös certs_by_serial-kansion, vars-tiedoston ja kaikki asiakasavaimet ja varmenteet.
Mikrotikissa sertifikaatit pysyivät paikoillaan, joten kaikki toimi.
Ongelmat ilmenivät, kun yritin peruuttaa varmenteen, se ei toiminut ollenkaan - index.txt-tiedosto piti muuntaa unix-muotoon, mutta en tehnyt sitä heti. Käytin dos2unix-apuohjelmaa.
Nyt varmenteet peruttiin, mutta jatkoivat toimintaansa ilman ongelmia, koska Mikrotik ei tiennyt niiden peruuttamisesta ja siitä piti jotenkin tiedottaa.
Luettuani ohjeet ja neuvoteltuani myös Alexander ERI:n kanssa (kiitos paljon!) asensin varmennepalvelimelle yksinkertaisen Apache http -palvelimen ja julkaisin siinä tiedoston peruutetuista varmenteista. Täysin estetty pääsy siihen, paitsi julkaistuun tiedostoon yhdeltä IP:ltä.
Mikrotik-päätteen /System/Certificates/CRL-välilehdellä osoitti polun julkaistuun crl.pem-tiedostoon. Tässä on syytä selventää, että Mikrotik hyväksyy vain http ja absoluuttisen osoitteen CRL-välilehdelle, ts. Sen olisi pitänyt näyttää jotakuinkin tältä:
Kaikki toimi, ainakin RouterOS:n versioissa 6.4.2.x, mutta asiakaskokoonpanot piti luoda manuaalisesti, mikä oli minulle valitettavaa ja aiheutti paljon vaivaa. Kun viikkoa myöhemmin minun piti luoda konfiguraatioita noin 50 asiakkaalle, päätin nopeuttaa tätä prosessia ja käytin tähän pätkää jonkun muun Internetistä löytyneestä skriptistä.
Skripti toimii näin: käynnistämisen jälkeen ilmoitamme "asiakkaan nimen", vastaa kysymykseen "asetetaanko salasana vai ei", sen jälkeen otamme valmiin konfigurointitiedoston "client.ovpn", jossa on sertifikaatit ja asetukset integroitu siihen. Jotta voit käyttää sitä, sinun on oltava hakemistossa /etc/openvpn. Allekirjoitan kommenteilla rivit, joissa polku on korvattava omallasi. On myös tarpeen luoda tiedosto asiakasasetuksista, jotta komentosarja voi korvata ne kokoonpanon luontiprosessin aikana.
#!/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
Jonkin ajan kuluttua uusi etäkäyttörajoitus pakotti sekä tämän palvelimen että olemassa olevan Mikrotik-yhteyden tuhoamaan. Uusi palvelin luotiin. OpenVPNIT-osaston työntekijöille, jotka työskentelevät nyt kokonaan CentOSMutta se on täysin eri tarina.
Olen syvästi kiitollinen Ivanille ja Pavelille heidän avustaan artikkelin muokkaamisessa.
Lähde: will.com
