Gut
Jedes Unternehmen benötigt früher oder später plötzlich Fernzugriff.
Fast jeder IT-Spezialist steht vor der Notwendigkeit, den Fernzugriff auf seine Netzwerke im Unternehmen zu organisieren.
Ich habe, wie viele andere auch, dieses Bedürfnis mit der Überschrift „gestern“ abgedeckt. Nachdem ich alle Vor- und Nachteile analysiert, jede Menge Informationen gesammelt und mich ein wenig mit der Theorie beschäftigt hatte, beschloss ich, mit der Installation fortzufahren.
Aus Sicherheitsgründen wurde es ausgewählt OpenVPN in der nächsten Implementierung: auf einem Server mit einem Betriebssystem Windows Server Im Jahr 2012 wurde darauf eine virtuelle Maschine installiert. Windows Server 2012, und darauf wiederum der Server OpenVPN, die Zertifikate ausstellten und unterzeichneten.
Der Einfachheit halber nennen wir ihn den „Zertifizierungsserver“. Anschließend habe ich das Serverzertifikat genommen, es in Mikrotik übertragen und es dann auf dem Mikrotik-Router selbst aktiviert. OpenVPN mit Konten und Profilen. Ein Zertifizierungsserver wurde auch verwendet, um Clientzertifikate auszustellen.
Die Umsetzung ist natürlich schrecklich, und obwohl meine Erfahrung in solchen Dingen zu diesem Zeitpunkt beispielsweise in Sicherheitsfragen nicht ausreichte, war es nicht die schlechteste Entscheidung.
Diese Verbindung funktionierte eine Zeit lang, dann erhielt ich eine neue Anweisung: den Zertifizierungsserver verschieben nach Linux, während die Verbindung zu Mikrotik aufrechterhalten wird - den Kunden sollte kein Schaden entstehen.
Meine Kenntnisse über Linux zu dieser Zeit endete bei Ubuntu 16.04LTS mit grafischer Benutzeroberfläche, die als Terminal für die Verbindung zum Server via RDP verwendet wurde. WindowsDas heißt, sudo apt-get -f install -y, und keinen Zentimeter mehr.
Nachdem wir die Frage untersucht hatten, welches Betriebssystem Linux Da die Familie für meine Organisation stabiler und vielversprechender ist, habe ich mich dafür entschieden. CentOS 7 Minimal.
Zunächst beschloss ich, mich ein wenig mit der Theorie zu befassen, um zu verstehen, wie sie im Allgemeinen funktioniert und funktioniert. Habe mir die Video-Tutorials auf dem Kanal angesehen (Überhaupt keine Werbung, sie haben mich nur zuerst erwischt). Ein Mädchen mit angenehmer Stimme führte mich in die Grundlagen der Arbeit im gewählten Betriebssystem ein.
Zuerst habe ich Hyper-V auf meinem Computer gestartet und es dort installiert. CentOS 7. Minimal. Während der Installation erstellte ich den Administratorbenutzer und deaktivierte SSH für Root vollständig. Nachdem ich mich vom schönen, mehrfarbigen Bildschirm verabschiedet hatte, tauchte ich in die Schwarz-Weiß-Welt des Terminals ein.
Ich denke, es macht keinen Sinn, den Softwareinstallationsprozess zu beschreiben. Es ist besser, sich auf die Probleme zu konzentrieren, die dabei aufgetreten sind und für die ich ein kleines Skript schreiben musste (es ist unter dem Strich). Eine Beschreibung der einzelnen Dienstprogramme kann sein im Internet gefunden, aber zu dem Zeitpunkt, als ich es tat, existierte dieses Skript noch nicht, alles wurde zum ersten Mal gemacht, per Berührung und zufällig).
Im Skript habe ich versucht, die Installation der minimal notwendigen Hilfsprogramme für den Server zu automatisieren, SELinux zu deaktivieren, das EPEL-Repository zu verbinden und Folgendes zu installieren: OpenVPNUnten findet ihr das Skript selbst; es ist einfach, aber brauchbar. Ich gehe nicht ins Detail, aber falls es jemand braucht, sagt Bescheid.
Nach Ausführung des Skripts wird ein vorkonfigurierter Server angezeigt. OpenVPN, und zwinkerte mit einem grünen Auge.
#!/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@serverEinstellung OpenVPN Es verlief nicht ganz erfolgreich.
Unkenntnis der Einzelheiten der Rechtepolitik Linux Bei den Systemen habe ich viel Zeit damit verbracht, die Protokolle zu studieren und allen Dateien die erforderlichen Berechtigungen zuzuweisen.
Wenn der Knopf OpenVPN Als die Anzeige grün wurde, freute ich mich sehr, doch wie sich herausstellte, war das erst der Anfang. Naiv wie ich war, rechnete ich damit, die Root-Zertifikate und die crl.pem-Datei einfach ersetzen zu können und hoffte, dass alles funktionieren würde. Letztendlich musste ich die Daten vom Server auf den Server übertragen. Windows die folgenden Dateien:
Serv.crt – Serverzertifikat
Serv.key – Serverschlüssel
Ca.crt – Stammzertifikat
Ca.key – Root-Schlüssel
Crl.pem – Widerrufene Zertifikatsdatei
Dh.pem – Diffie-Hellman-Schlüssel
Index.txt – Datei mit Informationen zu aktuellen Zertifikaten
Seriell – es ist auch für die Relevanz von Zertifikaten verantwortlich
Außerdem waren der Ordner certs_by_serial, die vars-Datei sowie alle Client-Schlüssel und -Zertifikate erforderlich.
Auf Mikrotik blieben die Zertifikate bestehen, sodass alles funktionierte.
Als ich versuchte, das Zertifikat zu widerrufen, traten Probleme auf, es funktionierte überhaupt nicht – die Datei index.txt musste in das Unix-Format konvertiert werden, aber ich habe es nicht sofort getan. Habe das Dienstprogramm dos2unix verwendet.
Nun wurden die Zertifikate widerrufen, funktionierten aber problemlos weiter, da Mikrotik nicht wusste, dass sie widerrufen wurden und er irgendwie darüber informiert werden musste.
Nach dem Lesen der Anleitung und der Rücksprache mit Alexander ERI (vielen Dank!) habe ich auf dem Zertifizierungsserver einen einfachen Apache-HTTP-Server eingerichtet und die Datei der widerrufenen Zertifikate darauf veröffentlicht. Vollständig geschlossener Zugriff darauf, mit Ausnahme der veröffentlichten Datei von einer IP.
Im Mikrotik-Terminal habe ich auf der Registerkarte /System/Certificates/CRL den Pfad zur veröffentlichten crl.pem angegeben. Hier sollte klargestellt werden, dass Mikrotik nur http und eine absolute Adresse für den CRL-Tab akzeptiert, d.h. es hätte ungefähr so aussehen sollen:
Alles funktionierte, zumindest für die Versionen 6.4.2.x von RouterOS, aber ich musste Client-Konfigurationen manuell erstellen, was für mich unglücklich war und viele Unannehmlichkeiten verursachte. Als ich eine Woche später Konfigurationen für etwa 50 Clients erstellen musste, beschloss ich, diesen Prozess zu beschleunigen, und verwendete dafür einen Ausschnitt aus dem Skript einer anderen Person, den ich im Internet gefunden hatte.
Das Skript funktioniert folgendermaßen: Nach dem Start geben wir den „Clientnamen“ an, beantworten die Frage „Passwort festlegen oder nicht“ und holen uns anschließend die vorgefertigte Konfigurationsdatei „client.ovpn“ mit integrierten Zertifikaten und Einstellungen hinein. Um es zu verwenden, müssen Sie sich in /etc/openvpn befinden. Ich werde die Zeilen, in denen der Pfad durch meinen eigenen ersetzt werden muss, mit Kommentaren signieren. Es ist außerdem erforderlich, eine Datei mit Client-Einstellungen zu erstellen, damit das Skript diese während des Konfigurationserstellungsprozesses ersetzt.
#!/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
Nach einiger Zeit erzwang eine neue Einschränkung des Fernzugriffs die Zerstörung sowohl dieses Servers als auch der bestehenden Mikrotik-Verbindung. Ein neuer Server wurde eingerichtet. OpenVPNfür die Mitarbeiter der IT-Abteilung, die jetzt ausschließlich an CentOSAber das ist eine ganz andere Geschichte.
Ich spreche Ivan und Pavel meinen tiefen Dank für ihre Hilfe bei der Bearbeitung des Artikels aus.
Source: habr.com
