ProHoster > Blog > Verwaltung > Einrichten der Authentifizierung im L2TP-Netzwerk mit Rutoken EDS 2.0 und Rutoken PKI
Einrichten der Authentifizierung im L2TP-Netzwerk mit Rutoken EDS 2.0 und Rutoken PKI
Probleme
Noch vor Kurzem wussten viele nicht, wie es ist, von zu Hause aus zu arbeiten. Die Pandemie hat die Situation auf der Welt dramatisch verändert; jeder hat begonnen, sich an die aktuellen Umstände anzupassen, nämlich daran, dass es einfach unsicher geworden ist, das Haus zu verlassen. Und viele mussten für ihre Mitarbeiter schnell die Arbeit von zu Hause aus organisieren.
Das Fehlen eines kompetenten Ansatzes bei der Auswahl von Lösungen für die Fernarbeit kann jedoch zu irreversiblen Verlusten führen. Benutzerkennwörter können gestohlen werden, was es einem Angreifer ermöglicht, sich unkontrolliert mit dem Netzwerk und den IT-Ressourcen des Unternehmens zu verbinden.
Aus diesem Grund ist der Bedarf an der Schaffung zuverlässiger Unternehmens-VPN-Netzwerke mittlerweile gestiegen. Ich erzähle dir davon zuverlässig, sicher и einfach bei der Nutzung eines VPN-Netzwerks.
Es funktioniert nach dem IPsec/L2TP-Schema, das zur Authentifizierung von Clients nicht abrufbare Schlüssel und auf Tokens gespeicherte Zertifikate verwendet und zudem Daten verschlüsselt über das Netzwerk überträgt.
Als Demonstrationsstände für die Konfiguration dienten ein Server mit CentOS 7 (Adresse: centos.vpn.server.ad) und ein Client mit Ubuntu 20.04, sowie ein Client mit Windows 10.
Systembeschreibung
Das VPN funktioniert nach dem IPSec + L2TP + PPP-Schema. Protokoll Punkt-zu-Punkt-Protokoll (PPP) arbeitet auf der Datenverbindungsschicht des OSI-Modells und bietet Benutzerauthentifizierung und Verschlüsselung der übertragenen Daten. Seine Daten sind in den Daten des L2TP-Protokolls gekapselt, das zwar den Verbindungsaufbau im VPN-Netzwerk sicherstellt, aber keine Authentifizierung und Verschlüsselung bietet.
L2TP-Daten werden in IPSec gekapselt, das auch Authentifizierung und Verschlüsselung bietet, aber im Gegensatz zu PPP erfolgt Authentifizierung und Verschlüsselung auf Geräteebene und nicht auf Benutzerebene.
Mit dieser Funktion können Sie Benutzer nur von bestimmten Geräten aus authentifizieren. Wir werden das IPSec-Protokoll unverändert verwenden und die Benutzerauthentifizierung von jedem Gerät aus ermöglichen.
Die Benutzerauthentifizierung mithilfe von Smartcards erfolgt auf PPP-Protokollebene mithilfe des EAP-TLS-Protokolls.
Ausführlichere Informationen zur Funktionsweise dieser Schaltung finden Sie in Dieser Artikel.
Warum erfüllt dieses Schema alle drei Anforderungen eines guten VPN-Netzwerks?
Die Zuverlässigkeit dieses Schemas wurde im Laufe der Zeit getestet. Es wird seit dem Jahr 2000 zur Bereitstellung von VPN-Netzwerken verwendet.
Eine sichere Benutzerauthentifizierung wird durch das PPP-Protokoll bereitgestellt. Standardimplementierung des von Paul Mackerras entwickelten PPP-Protokolls bietet kein ausreichendes Maß an Sicherheit, weil Zur Authentifizierung wird im besten Fall die Authentifizierung mittels Login und Passwort genutzt. Wir alle wissen, dass ein Login-Passwort ausspioniert, erraten oder gestohlen werden kann. Allerdings schon seit längerem der Entwickler Jan Just Keijser в seine Umsetzung Dieses Protokoll hat dieses Problem behoben und die Möglichkeit hinzugefügt, auf asymmetrischer Verschlüsselung basierende Protokolle wie EAP-TLS für die Authentifizierung zu verwenden. Darüber hinaus fügte er die Möglichkeit hinzu, Smartcards zur Authentifizierung zu verwenden, was das System sicherer machte.
Derzeit laufen aktive Verhandlungen zur Zusammenführung dieser beiden Projekte und Sie können sicher sein, dass dies früher oder später sowieso passieren wird. Beispielsweise befindet sich in den Fedora-Repositories seit langem eine gepatchte Version von PPP, die sichere Protokolle zur Authentifizierung verwendet.
Bis vor kurzem konnte dieses Netzwerk nur von Windows-Benutzern genutzt werden, wie unsere Kollegen von der Moskauer Staatsuniversität Wassili Schokow und Alexander Smirnow herausfanden altes L2TP-Client-Projekt für Linux und es modifiziert. Gemeinsam haben wir viele Fehler und Mängel in der Arbeit des Kunden behoben und die Installation und Konfiguration des Systems vereinfacht, auch beim Erstellen aus dem Quellcode. Die bedeutendsten davon sind:
Kompatibilitätsprobleme des alten Clients mit der Schnittstelle neuer Versionen von OpenSSL und QT behoben.
pppd wurde von der Weiterleitung der Token-PIN über eine temporäre Datei entfernt.
Der fehlerhafte Start des Passwortabfrageprogramms über die grafische Benutzeroberfläche wurde behoben. Dies wurde durch die Installation der richtigen Umgebung für den xl2tpd-Dienst erreicht.
Der Build des L2tpIpsecVpn-Daemons wird nun zusammen mit dem Build des Clients selbst durchgeführt, was den Build- und Konfigurationsprozess vereinfacht.
Um die Entwicklung zu vereinfachen, ist das Azure Pipelines-System angeschlossen, um die Richtigkeit des Builds zu testen.
Es wurde die Möglichkeit hinzugefügt, ein Downgrade zu erzwingen Sicherheitsstufe im Kontext von OpenSSL. Dies ist nützlich für die korrekte Unterstützung neuer Betriebssysteme, bei denen die Standardsicherheitsstufe auf 2 eingestellt ist, mit VPN-Netzwerken, die Zertifikate verwenden, die die Sicherheitsanforderungen dieser Stufe nicht erfüllen. Diese Option ist nützlich für die Arbeit mit bestehenden alten VPN-Netzwerken.
Dieser Client unterstützt die Verwendung von Smartcards zur Authentifizierung und verbirgt außerdem so weit wie möglich alle Schwierigkeiten und Schwierigkeiten bei der Einrichtung dieses Schemas unter Linux, wodurch die Client-Einrichtung so einfach und schnell wie möglich wird.
Für eine komfortable Verbindung zwischen PPP und der Client-GUI war es natürlich nicht ohne zusätzliche Bearbeitungen an jedem der Projekte möglich, dennoch wurden diese minimiert und auf ein Minimum reduziert:
Fest Fehler in der Reihenfolge des Ladens der Konfiguration und der Initialisierung des OpenSSL-Kontexts. Dieser Fehler erlaubte uns nicht, etwas aus der lokalen Konfigurationsdatei /etc/ppp/openssl.cnf zu laden, außer Informationen über OpenSSL-Engines für die Arbeit mit Smartcards, was eine große Unannehmlichkeit darstellte, wenn beispielsweise zusätzlich zu Informationen über Engines Wir wollten etwas anderes einstellen. Legen Sie beispielsweise die Sicherheitsstufe beim Verbindungsaufbau fest.
Jetzt können Sie mit der Einrichtung beginnen.
Server-Tuning
Lassen Sie uns alle notwendigen Pakete installieren.
Strongswan (IPsec) installieren
Lassen Sie uns zunächst die Firewall für den IPSec-Betrieb konfigurieren
Nach der Installation müssen Sie Strongswan (eine der IPSec-Implementierungen) konfigurieren. Bearbeiten Sie dazu die Datei /etc/strongswan/ipsec.conf :
Wir werden auch ein gemeinsames Login-Passwort festlegen. Das gemeinsame Passwort muss zur Authentifizierung allen Netzwerkteilnehmern bekannt sein. Diese Methode ist offensichtlich unzuverlässig, weil Dieses Passwort kann leicht Personen bekannt werden, denen wir keinen Zugang zum Netzwerk gewähren möchten.
Allerdings hat auch dieser Umstand keinen Einfluss auf die Sicherheit des Netzwerks, denn Die grundlegende Datenverschlüsselung und Benutzerauthentifizierung erfolgt über das PPP-Protokoll. Aber der Fairness halber ist es erwähnenswert, dass Strongswan sicherere Technologien zur Authentifizierung unterstützt, beispielsweise die Verwendung privater Schlüssel. Strongswan bietet auch die Möglichkeit, eine Authentifizierung mithilfe von Smartcards bereitzustellen. Bisher wird jedoch nur eine begrenzte Anzahl von Geräten unterstützt, sodass die Authentifizierung mithilfe von Rutoken-Tokens und Smartcards immer noch schwierig ist. Lassen Sie uns über die Datei ein allgemeines Passwort festlegen /etc/strongswan/ipsec.secrets:
Konfigurieren wir es per Datei /etc/xl2tpd/xl2tpd.conf:
[global]
force userspace = yes
listen-addr = 0.0.0.0
ipsec saref = yes
[lns default]
exclusive = no
; определяет статический адрес сервера в виртуальной сети
local ip = 100.10.10.1
; задает диапазон виртуальных адресов
ip range = 100.10.10.1-100.10.10.254
assign ip = yes
refuse pap = yes
require authentication = yes
; данную опцию можно отключить после успешной настройки сети
ppp debug = yes
length bit = yes
pppoptfile = /etc/ppp/options.xl2tpd
; указывает адрес сервера в сети
name = centos.vpn.server.ad
Wir stellen das Root-Zertifikat und das Server-Zertifikat aus:
#директория с сертификатами пользователей, УЦ и сервера
sudo mkdir /etc/ppp/certs
#директория с закрытыми ключами сервера и УЦ
sudo mkdir /etc/ppp/keys
#запрещаем любой доступ к этой дирректории кроме администатора
sudo chmod 0600 /etc/ppp/keys/
#генерируем ключ и выписываем сертификат УЦ
sudo openssl genrsa -out /etc/ppp/keys/ca.pem 2048
sudo openssl req -key /etc/ppp/keys/ca.pem -new -x509 -out /etc/ppp/certs/ca.pem -subj "/C=RU/CN=L2TP CA"
#генерируем ключ и выписываем сертификат сервера
sudo openssl genrsa -out /etc/ppp/keys/server.pem 2048
sudo openssl req -new -out server.req -key /etc/ppp/keys/server.pem -subj "/C=RU/CN=centos.vpn.server.ad"
sudo openssl x509 -req -in server.req -CAkey /etc/ppp/keys/ca.pem -CA /etc/ppp/certs/ca.pem -out /etc/ppp/certs/server.pem -CAcreateserial
Damit sind wir mit der grundlegenden Servereinrichtung fertig. Der Rest der Serverkonfiguration umfasst das Hinzufügen neuer Clients.
Einen neuen Kunden hinzufügen
Um einen neuen Client zum Netzwerk hinzuzufügen, müssen Sie dessen Zertifikat zur Liste der vertrauenswürdigen Zertifikate für diesen Client hinzufügen.
Möchte ein Benutzer Mitglied eines VPN-Netzwerks werden, erstellt er für diesen Client ein Schlüsselpaar und einen Zertifikatsantrag. Wenn der Benutzer vertrauenswürdig ist, kann diese Anwendung signiert und das resultierende Zertifikat in das Zertifikatsverzeichnis geschrieben werden:
HINWEIS
Um Verwirrung zu vermeiden, ist es besser, dass: Allgemeiner Name, Name der Zertifikatsdatei und Benutzername eindeutig sind.
Es lohnt sich auch zu überprüfen, dass der Name des Benutzers, den wir hinzufügen, nirgendwo in anderen Authentifizierungsdateien vorkommt, da es sonst zu Problemen bei der Authentifizierung des Benutzers kommt.
Das gleiche Zertifikat muss an den Benutzer zurückgesendet werden.
Generieren eines Schlüsselpaars und Zertifikats
Für eine erfolgreiche Authentifizierung muss der Client:
ein Schlüsselpaar generieren;
über ein CA-Stammzertifikat verfügen;
Lassen Sie ein von der Stammzertifizierungsstelle signiertes Zertifikat für Ihr Schlüsselpaar haben.
für Client unter Linux
Lassen Sie uns zunächst ein Schlüsselpaar auf dem Token generieren und eine Anwendung für das Zertifikat erstellen:
Senden Sie die angezeigte Anwendung „client.req“ an die Zertifizierungsstelle. Sobald Sie ein Zertifikat für Ihr Schlüsselpaar erhalten haben, schreiben Sie es auf einen Token mit derselben ID wie der Schlüssel:
für Windows- und Linux-Clients (universellere Methode)
Diese Methode ist universeller, weil ermöglicht es Ihnen, einen Schlüssel und ein Zertifikat zu generieren, die von Windows- und Linux-Benutzern erfolgreich erkannt werden. Für die Schlüsselgenerierung ist jedoch ein Windows-Computer erforderlich.
Bevor Sie Anfragen generieren und Zertifikate importieren, müssen Sie das Stammzertifikat des VPN-Netzwerks zur Liste der vertrauenswürdigen Zertifikate hinzufügen. Öffnen Sie dazu dieses und wählen Sie im sich öffnenden Fenster die Option „Zertifikat installieren“:
Wählen Sie im sich öffnenden Fenster die Installation eines Zertifikats für den lokalen Benutzer aus:
Lassen Sie uns das Zertifikat im vertrauenswürdigen Stammzertifikatspeicher der Zertifizierungsstelle installieren:
Nach all diesen Maßnahmen sind wir mit allen weiteren Punkten einverstanden. Das System ist nun konfiguriert.
Erstellen wir eine Datei cert.tmp mit folgendem Inhalt:
Anschließend generieren wir ein Schlüsselpaar und erstellen einen Antrag für das Zertifikat. Öffnen Sie dazu Powershell und geben Sie den folgenden Befehl ein:
certreq.exe -new -pin $PIN .cert.tmp .client.req
Senden Sie die erstellte Anwendung client.req an Ihre Zertifizierungsstelle und warten Sie auf den Empfang des client.pem-Zertifikats. Mit dem folgenden Befehl kann es auf ein Token geschrieben und zum Windows-Zertifikatspeicher hinzugefügt werden:
certreq.exe -accept .client.pem
Es ist erwähnenswert, dass ähnliche Aktionen über die grafische Oberfläche des MMC-Programms reproduziert werden können, diese Methode ist jedoch zeitaufwändiger und weniger programmierbar.
Einrichten des Ubuntu-Clients
HINWEIS
Das Einrichten eines Clients unter Linux ist derzeit recht zeitaufwändig, weil... erfordert die Erstellung separater Programme aus dem Quellcode. Wir werden versuchen sicherzustellen, dass alle Änderungen in naher Zukunft in die offiziellen Repositories übernommen werden.
Um die Verbindung auf IPSec-Ebene zum Server sicherzustellen, werden das Strongswan-Paket und der xl2tp-Daemon verwendet. Um die Verbindung zum Netzwerk mithilfe von Smartcards zu vereinfachen, verwenden wir das Paket l2tp-ipsec-vpn, das eine grafische Shell für den vereinfachten Verbindungsaufbau bereitstellt.
Beginnen wir Schritt für Schritt mit der Zusammenstellung der Elemente, aber vorher installieren wir alle notwendigen Pakete, damit das VPN direkt funktioniert:
sudo apt-get install xl2tpd strongswan libp11-3
Installieren von Software zum Arbeiten mit Token
Installieren Sie die neueste Bibliothek librtpkcs11ecp.so von Standort, außerdem Bibliotheken für die Arbeit mit Smartcards:
sudo apt-get -y install git make gcc libssl-dev
git clone "https://github.com/jjkeijser/ppp"
cd ppp
./configure --prefix /usr
make -j4
sudo make install
Installieren des L2tpIpsecVpn-Clients
Derzeit muss der Client auch aus dem Quellcode kompiliert werden. Dies geschieht mit der folgenden Befehlsfolge:
sudo apt-get -y install git qt5-qmake qt5-default build-essential libctemplate-dev libltdl-dev
git clone "https://github.com/Sander80/l2tp-ipsec-vpn"
cd l2tp-ipsec-vpn
make -j4
sudo make install
Einrichten des L2tpIpsecVpn-Clients
Starten Sie den installierten Client:
Nach dem Start sollte sich das L2tpIpsecVPN-Applet öffnen. Klicken Sie mit der rechten Maustaste darauf und konfigurieren Sie die Verbindung:
Um mit Tokens zu arbeiten, geben wir zunächst den Pfad zur OpenSC-Engine der OpenSSL-Engine und der PKCS#11-Bibliothek an. Öffnen Sie dazu die Registerkarte „Einstellungen“, um die OpenSSL-Parameter zu konfigurieren:
.
Schließen wir das OpenSSL-Einstellungsfenster und fahren mit der Einrichtung des Netzwerks fort. Fügen wir ein neues Netzwerk hinzu, indem wir im Einstellungsfeld auf die Schaltfläche „Hinzufügen...“ klicken und den Netzwerknamen eingeben:
Danach wird dieses Netzwerk im Einstellungsfeld verfügbar. Doppelklicken Sie mit der rechten Maustaste auf das neue Netzwerk, um es zu konfigurieren. Auf der ersten Registerkarte müssen Sie IPsec-Einstellungen vornehmen. Lassen Sie uns die Serveradresse und den öffentlichen Schlüssel festlegen:
Gehen Sie anschließend zur Registerkarte PPP-Einstellungen und geben Sie dort den Benutzernamen an, unter dem wir auf das Netzwerk zugreifen möchten:
Öffnen Sie anschließend die Registerkarte „Eigenschaften“ und geben Sie den Pfad zum Schlüssel, Client-Zertifikat und CA an:
Schließen wir diese Registerkarte und nehmen die letzten Einstellungen vor; öffnen Sie dazu die Registerkarte „IP-Einstellungen“ und aktivieren Sie das Kontrollkästchen neben der Option „DNS-Serveradresse automatisch beziehen“:
Diese Option ermöglicht es dem Client, vom Server eine persönliche IP-Adresse innerhalb des Netzwerks zu erhalten.
Schließen Sie nach allen Einstellungen alle Tabs und starten Sie den Client neu:
Verbindung mit dem Netzwerk herstellen
Nach den Einstellungen können Sie eine Verbindung zum Netzwerk herstellen. Öffnen Sie dazu den Applet-Tab und wählen Sie das Netzwerk aus, mit dem wir eine Verbindung herstellen möchten:
Während des Verbindungsaufbaus fordert uns der Kunde auf, den Rutoken-PIN-Code einzugeben:
Wenn in der Statusleiste eine Meldung erscheint, dass die Verbindung erfolgreich hergestellt wurde, bedeutet dies, dass die Einrichtung erfolgreich war:
Andernfalls lohnt es sich herauszufinden, warum die Verbindung nicht hergestellt wurde. Dazu sollten Sie sich das Programmprotokoll ansehen, indem Sie im Applet den Befehl „Verbindungsinformationen“ auswählen:
Einrichten des Windows-Clients
Das Einrichten eines Clients unter Windows ist viel einfacher als unter Linux, weil... Die gesamte erforderliche Software ist bereits im System integriert.
Systemkonfiguration
Wir installieren alle notwendigen Treiber für die Arbeit mit Rutokens, indem wir sie von herunterladen von. Website.
Importieren eines Stammzertifikats zur Authentifizierung
Laden Sie das Server-Root-Zertifikat herunter und installieren Sie es auf dem System. Öffnen Sie dazu dieses und wählen Sie im sich öffnenden Fenster die Option „Zertifikat installieren“:
Wählen Sie im sich öffnenden Fenster die Installation eines Zertifikats für den lokalen Benutzer aus. Wenn Sie möchten, dass das Zertifikat allen Benutzern auf dem Computer zur Verfügung steht, sollten Sie sich für die Installation des Zertifikats auf dem lokalen Computer entscheiden:
Lassen Sie uns das Zertifikat im vertrauenswürdigen Stammzertifikatspeicher der Zertifizierungsstelle installieren:
Nach all diesen Maßnahmen sind wir mit allen weiteren Punkten einverstanden. Das System ist nun konfiguriert.
Einrichten einer VPN-Verbindung
Um eine VPN-Verbindung einzurichten, gehen Sie zur Systemsteuerung und wählen Sie die Option zum Erstellen einer neuen Verbindung.
Wählen Sie im Popup-Fenster die Option zum Erstellen einer Verbindung aus, um eine Verbindung zu Ihrem Arbeitsplatz herzustellen:
Wählen Sie im nächsten Fenster eine VPN-Verbindung aus:
Geben Sie die VPN-Verbindungsdetails ein und geben Sie außerdem die Option zur Verwendung einer Smartcard an:
Die Einrichtung ist noch nicht abgeschlossen. Es bleibt nur noch die Angabe des gemeinsamen Schlüssels für das IPsec-Protokoll; gehen Sie dazu auf die Registerkarte „Netzwerkverbindungseinstellungen“ und dann auf die Registerkarte „Eigenschaften für diese Verbindung“:
Gehen Sie im sich öffnenden Fenster auf die Registerkarte „Sicherheit“, geben Sie als Netzwerktyp „L2TP/IPsec-Netzwerk“ an und wählen Sie „Erweiterte Einstellungen“:
Geben Sie im sich öffnenden Fenster den gemeinsamen IPsec-Schlüssel an:
Verbindung
Nach Abschluss der Einrichtung können Sie versuchen, eine Verbindung zum Netzwerk herzustellen:
Während des Verbindungsvorgangs müssen wir den Token-PIN-Code eingeben:
Wir haben ein sicheres VPN-Netzwerk eingerichtet und dafür gesorgt, dass es keine Schwierigkeiten bereitet.
Danksagung
Ich möchte unseren Kollegen Vasily Shokov und Alexander Smirnov noch einmal für die gemeinsame Arbeit danken, die die Erstellung von VPN-Verbindungen für Linux-Clients vereinfacht.