Flink!
Enhver virksomhet trenger før eller siden plutselig ekstern tilgang.
Nesten alle IT-spesialister står overfor behovet for å organisere ekstern tilgang til nettverkene sine i en bedrift.
For meg, som mange andre, slo dette behovet meg som «i går». Etter å ha analysert alle fordeler og ulemper, samt silt gjennom tonnevis av informasjon og kikket litt rundt i teorien, bestemte jeg meg for å fortsette med installasjonen.
Av sikkerhetsmessige årsaker ble det valgt OpenVPN i neste implementering: på en server med et operativsystem Windows Server I 2012 ble det installert en virtuell maskin på den, Windows Server 2012, og på den, i sin tur, serveren OpenVPN, som utstedte og signerte sertifikater.
For enkelhets skyld, la oss kalle det «sertifiseringsserveren». Deretter tok jeg serversertifikatet, sendte det til Mikrotik og aktiverte det deretter på selve Mikrotik-ruteren. OpenVPN med kontoer og profiler. En sertifiseringsserver ble også brukt til å utstede klientsertifikater.
Gjennomføringen var selvfølgelig forferdelig, og selv om min erfaring med slike ting på det tidspunktet for eksempel ikke var nok, i sikkerhetsspørsmål, var det ikke den verste avgjørelsen.
Denne forbindelsen fungerte en stund, og jeg fikk et nytt input: flytt sertifiseringsserveren til Linux, samtidig som forbindelsen med Mikrotik opprettholdes – kundene skal ikke bli skadelidende.
Min kunnskap om Linux den gang sluttet kl. Ubuntu 16.04LTS med et grafisk grensesnitt, som ble brukt som en terminal for tilkobling via RDP til serveren WindowsDet vil si, sudo apt-get -f install -y, og ikke en centimeter mer.
Etter å ha studert spørsmålet om hvilket operativsystem som er Linux familien er mer stabil og lovende for organisasjonen min, bestemte jeg meg for CentOS 7 Minimal.
Til å begynne med bestemte jeg meg for å fordype meg litt i teorien, for å forstå hvordan den generelt fungerer og fungerer. Så videotimer på kanalen (Ikke en reklame i det hele tatt, de var bare de første jeg kom over). En jente med en behagelig stemme introduserte meg for det grunnleggende om å jobbe i det valgte operativsystemet.
Først startet jeg Hyper-V på datamaskinen min og installerte det der. CentOS 7 Minimal. Under installasjonen opprettet jeg administratorbrukeren og deaktiverte SSH fullstendig for root. Etter å ha sagt farvel til den vakre flerfargede skjermen, kastet jeg meg ut i terminalens svart-hvite verden.
Jeg tror det ikke er noen vits i å beskrive prosessen med å installere programvaren, det er bedre å fokusere på problemene som oppsto under prosessen og løse som jeg måtte skrive et lite skript (det er under snittet. Beskrivelser av hver av verktøyene kan bli funnet på Internett, men i det øyeblikket jeg gjorde dette, eksisterte ikke dette skriptet ennå, alt ble gjort for første gang, ved berøring og tilfeldig).
I skriptet prøvde jeg å automatisere installasjonen av de nødvendige verktøyene for serveren, deaktivere Selinux, koble til Epel-depotet, installere OpenVPNosv. Nedenfor er selve skriptet; det er enkelt, men brukbart. Jeg vil ikke gå inn på detaljer, men hvis noen trenger det, gi meg beskjed.
Etter at du har brukt skriptet, vil en forhåndskonfigurert server vises. OpenVPN, blunker med et grønt øye.
#!/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@serverInstallasjon OpenVPN Det gikk ikke helt vellykket.
Ukjent med detaljene i rettighetspolitikken Linux systemer, brukte jeg mye tid på å studere loggene og tildele de nødvendige tillatelsene til alle filene.
Når knappen OpenVPN ble grønn, var jeg veldig glad, men det viste seg at dette bare var begynnelsen. I min naivitet regnet jeg med å erstatte rotsertifikatene og crl.pem-filen, i håp om at alt ville fungere. Til slutt måtte jeg overføre fra serveren til Windows følgende filer:
Serv.crt — Serversertifikat
Serv.nøkkel — Servernøkkel
Ca.crt - Rotsertifikat
Ca.key — Rottast
Crl.pem — Fil for tilbakekall av sertifikat
Dh.pem - Diffie-Hellman nøkkel
Index.txt - Fil med informasjon om gjeldende sertifikater
Seriell - det er også ansvarlig for relevansen av sertifikater
Du trenger også mappen certs_by_serial, vars-filen og alle klientnøkler og sertifikater.
På Mikrotik forble sertifikatene på plass, så alt fungerte.
Problemer dukket opp da jeg prøvde å tilbakekalle sertifikatet, det fungerte ikke i det hele tatt - index.txt-filen måtte konverteres til unix-format, men jeg gjorde det ikke med en gang. Jeg brukte dos2unix-verktøyet.
Nå ble sertifikatene tilbakekalt, men fortsatte å fungere uten problemer, fordi Mikrotik ikke visste at de var tilbakekalt og måtte informeres om det på en eller annen måte.
Etter å ha lest instruksjonene, og også rådført meg med Alexander ERI (mange takk!), installerte jeg en enkel Apache http-server på sertifiseringsserveren og publiserte en fil med tilbakekalte sertifikater på den. Fullstendig blokkert tilgang til den, bortsett fra til den publiserte filen fra én IP.
I Mikrotik-terminalen, i kategorien /System/Certificates/CRL, indikerte banen til den publiserte crl.pem. Her bør det presiseres at Mikrotik kun aksepterer http og en absolutt adresse for CRL-fanen, dvs. Det burde sett noe slikt ut:
Alt fungerte, i alle fall for versjoner 6.4.2.x av RouterOS, men klientkonfigurasjoner måtte opprettes manuelt, og dette var uheldig for meg og forårsaket mye ulempe. Da jeg en uke senere trengte å lage konfigurasjoner for rundt 50 klienter, bestemte jeg meg for å fremskynde denne prosessen, og for dette brukte jeg en del av andres skript funnet på Internett.
Skriptet fungerer slik: etter lansering angir vi "klientnavnet", svarer på spørsmålet "å angi et passord eller ikke", etter det tar vi den ferdige konfigurasjonsfilen "client.ovpn", med integrerte sertifikater og innstillinger i det. For å bruke det, må du være i /etc/openvpn. Jeg vil signere med kommentarer på linjene der stien må erstattes med din egen. Det er også nødvendig å opprette en fil med klientinnstillinger slik at skriptet kan erstatte dem under konfigurasjonsopprettingsprosessen.
#!/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
Etter en tid tvang en ny begrensning på fjerntilgang til å ødelegge både denne serveren og den eksisterende Mikrotik-tilkoblingen. En ny server ble opprettet. OpenVPN, for de ansatte i IT-avdelingen, som nå jobber utelukkende med CentOSMen det er en helt annen historie.
Jeg uttrykker min dype takknemlighet til Ivan og Pavel for deres hjelp med å redigere artikkelen.
Kilde: www.habr.com
