[LINUX] Construction VPN simple de la passerelle IPsec avec CentOS 8 et openSUSE (Raspberry Pi) --1 Introduction de StrongSwan

Hypothèses et préparatifs

Article sur la construction du serveur Linux

Même un individu peut se connecter et installer en au moins 7 à 8 heures s'il peut gérer les commandes Linux ✩ °. ⋆⸜ (\ * ॑ ꒳ ॑ \ *) ⸝ Il en coûte 2000 yens par heure pour travailler seul Ensuite, le coût du travail est d'environ 16000 yens ... [Il semble plus efficace de travailler sur plusieurs unités en même temps ... J'ai l'impression qu'il semble qu'une personne puisse travailler sur deux ou trois unités en même temps]

La passerelle IPsec peut être effectuée avec un Raspberry Pi et un ordinateur portable utilisé tant que vous pouvez compiler la source de Strong Swan, donc si vous voulez vraiment garder le réseau dans une zone VPN sécurisée, cette méthode de construction peut être la meilleure, alors essayez-la. J'ai fait! (˶ ・ ᴗ ・) ੭⚐⚑

environnement

--Programme IPST: StrongSwan 5.9.0 (compilation des sources) --Récepteur de négociation IPST: Raspberry Pi 3B + / openSUSE 15.1 Leap (aarm64)

supposition

CentOS8.1


# vi /etc/selinux/config

/etc/selinux/config


SELINUX=disabled

CentOS8.1


# reboot

Conditions du serveur

Adresse IP et schéma de construction du réseau

--Passerelle d'origine de la négociation IPTI (à droite de la figure ci-dessous, CentOS 8.1):

Fonctions et versions pour télécharger et installer individuellement les packages (à partir de septembre 2020)

Les autres packages requis sont installés à l'aide des commandes de package standard de la distribution (dnf, apt, etc.) et n'ont pas besoin d'être téléchargés individuellement.

Pour le téléchargement, vous pouvez accéder au site officiel, le télécharger à partir de là et le transférer par FTP, ou vous pouvez l'obtenir avec wget si vous connaissez l'URL du fichier à télécharger, mais la méthode d'acquisition est omise.

Procédure de travail

Préparation

Installer les fonctions de décompression make, cmake et package

Installez chaque distribution avec la machine virtuelle Hyper-V et Raspeye (la compilation source est la même pour les deux)

CentOS8.1(Hyper-V/x64)


# dnf -y install make cmake tar bzip2

openSUSE15.1(RaspberryPi)


# zypper -n install make cmake tar bzip2

Installation du compilateur GCC et C ++

CentOS8.1(Hyper-V/x64)


# dnf -y install gcc gcc-c++

openSUSE15.1(RaspberryPi)


# zypper -n install gcc gcc-c++

installation de la source zlib

J'ai installé le zlib avec l'emplacement par défaut. La compilation source est la même pour les machines virtuelles Hyper-V et Raspeye

# cd [Répertoire où se trouvent les fichiers d'archive zlib]
# tar zxvf zlib-1.2.11.tar.gz
# cd zlib-1.2.11/
# ./configure
# make
# make install

Activer le transfert IP

Le transfert IP doit être activé pour fonctionner comme une passerelle IPsec, alors activez-le. Dans CentOS 8.1 de la machine virtuelle Hyper-V, activez le transfert en exécutant la commande suivante. Raspeye open SUSE peut être défini dans YaST.

CentOS8.1(Hyper-V/x64)


# cat /proc/sys/net/ipv4/ip_forward
0
# vi /etc/sysctl.d/01-ipv4fwd.conf

conf:/etc/sysctl.d/01-ipv4fwd.conf(CentOS)


# Controls IP packet forwarding
net.ipv4.ip_forward = 1

openSUSE15.1(RaspberryPi)


# yast
[Après cela, activez le transfert IPv4 à partir des paramètres réseau et de sécurité en fonction des paramètres YaST.]

Extension des adaptateurs réseau dans la zone VPN

Pour la machine virtuelle Hyper-V et le Raspberry Pi, ** Éteignez l'alimentation une fois ** pour activer le transfert IP + ajoutez un adaptateur réseau. Dans mon cas, Raspai a ajouté un adaptateur LAN filaire pour VPN via USB, et Hyper-V a ajouté un adaptateur réseau dans les paramètres.

Après l'expansion, vérifiez si "eth1" est ajouté, mais bien sûr, l'adresse IP n'a pas encore été attribuée.

# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether [Adresse MAC de l'adaptateur réseau depuis le début] brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.18/24 brd 192.168.1.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 [Adresse IPv6 de la carte réseau depuis le début] scope global dynamic noprefixroute
       valid_lft 14373sec preferred_lft 12573sec
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether [Adresse MAC de l'adaptateur réseau d'extension] brd ff:ff:ff:ff:ff:ff
    inet6 [Adresse IPv6 de l'adaptateur réseau d'extension] scope link noprefixroute
       valid_lft forever preferred_lft forever

# ip route

default via 192.168.1.1 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.18 metric 100

Dans le cas de CentOS, la commande est utilisée pour activer le transfert IP, vérifiez donc s'il est activé (ip_forward vaut 1).

CentOS8.1(Hyper-V/x64)


# cat /proc/sys/net/ipv4/ip_forward
1

# sysctl --system
…(Omission)
* Applying /etc/sysctl.d/01-ipv4fwd.conf ...
net.ipv4.ip_forward = 1
…(Omission)

Installez les packages requis pour compiler StrongSwan avec la commande de package standard de distribution

Remarque: Si vous ne l'exécutez pas même si c'est gênant, vous obtiendrez une erreur indiquant qu'il n'y a pas de paquet et la compilation sera arrêtée (´ • ω • ̥`)

CentOS8.1(Hyper-V/x64)


# dnf -y install gmp-devel openssl-devel

openSUSE15.1(RaspberryPi)


# zypper -n install gmp-devel libopenssl-devel

Installation de la compilation source StrongSwan 5.9.0

Commun aux machines virtuelles Hyper-V et à Raspeye. Ce processus a pris un certain temps (surtout avec le Raspberry Pi, cela a pris 20-30 minutes)

configurer et faire

# cd [strongswan-5.9.0.tar.Répertoire où se trouve gz]
# tar xvzf strongswan-5.9.0.tar.gz
# cd strongswan-5.9.0/
# ./configure --prefix=/usr --sysconfdir=/etc --enable-openssl
# make
# make install

Si vous pouvez compiler sans erreur, l'installation est terminée ♪ (\ * ˘︶˘ \ *) ...: \ * ♡

Préférences Strong Swan

Lorsque StrongSwan est installé par compilation source, le fichier de configuration est stocké dans /etc/ipsec.conf et les paramètres de connexion IPsec y sont définis.

[Paramètres de base d'Apache]
# vi /etc/ipsec.conf

Le côté qui établit IPsec (celui qui envoie l'établissement), oui, d'abord, configurez CentOS 8.1 d'Hyper-V. Comme décrit dans la section "Conditions du serveur", du côté machine Hyper-V, votre adresse IP sera 192.168.1.18 et le partenaire d'établissement Raspberry Pi sera 192.168.1.22, alors écrivez la paire dans le fichier de configuration.

"Left" écrit les informations de la personne qui négocie l'établissement, et "right" écrit les informations de la personne à établir (à partir du manuel officiel StrongSwan / ConnSection)))

CentOS8.1(Hyper-V/x64)


…
#Ajoutez ce qui suit
conn [Nom distinctif Exemple: linux-2-linux]
      authby=secret
      auto=start				#Envoyer des négociations IPsec
      closeaction=restart
      dpdaction=restart
      left=192.168.1.18			#à gauche se trouve votre propre passerelle IPsec
      leftid=192.168.1.18		#ID qui vous identifie pour négocier IPsec
      leftsubnet=192.168.5.0/24
      right=192.168.1.22		#à droite est la passerelle IPsec de l'autre partie
      rightid=192.168.1.22		#ID qui identifie le partenaire de négociation IPsec
      rightsubnet=192.168.2.0/24
…

Au fait, pour l'ID, j'ai utilisé l'adresse IP pour plus de simplicité dans mon cas, mais une chaîne de caractères est également OK. Et comme leftsubnet et rightsubnet sont les zones VPN dont vous et l'autre partie êtes responsables, leftsubnet est votre propre zone VPN, donc 192.168.5.0/24, et rightsubnet est la zone VPN Raspeye de l'autre partie, donc 192.168.2.0/ J'ai mis 24.

Ensuite, définissez le SUSE ouvert de Razpai. Comme décrit dans la section "Conditions du serveur", l'adresse IP à établir est 192.168.1.22 et Hyper-V CentOS 8 de l'autre côté à établir est 192.168.1.18, alors qu'est-ce que Hyper-V (CentOS 8)? Écrivez le contenu inverse dans le fichier de configuration.

openSUSE15.1(RaspberryPi)


#Ajoutez ce qui suit
conn [Nom distinctif Exemple: linux-2-linux]
      authby=secret
      auto=add				#Recevoir les négociations IPsec
      closeaction=clear
      dpdaction=clear
      left=192.168.1.22
      leftid=192.168.1.22
      leftsubnet=192.168.2.0/24
      right=192.168.1.18
      rightid=192.168.1.18
      rightsubnet=192.168.5.0/24

Le fait est qu'en définissant auto = add, il est défini du côté réception de la négociation d'établissement IPsec et le contenu de gauche et de droite est inversé. De cette façon, si les noms distinctifs (la chaîne après conn) correspondent, vous pouvez établir une connexion IPsec.

Par défaut, StrongSwan utilise la méthode PSK et utilise la méthode de chiffrement AES / SHA en standard. S'il est nécessaire de définir d'autres méthodes de cryptage, définissez-les séparément, mais omettez-les ici.

En passant, StrongSwan à ce stade prend en charge NAT-T, et IPsec peut être appliqué à NAT (dans le passé, IPsec ne pouvait pas être appliqué à NAT), donc NAT est utilisé sur Internet. Il semble que même l'espace utilisé peut communiquer sur Internet avec un VPN construit avec StrongSwan (même si je ne l'ai jamais expérimenté ...).

[Paramètres de clé Strong Swan]
# vi /etc/ipsec.secrets

/etc/ipsec.secrets


…
: PSK "[Chaîne appropriée: Exemple ... kazumi75kitty]"
…

Puisque nous utilisons la méthode PSK par défaut, nous la rendrons identique pour les machines virtuelles Hyper-V et Raspeye.

Lancez Strong Swan

Créer et activer le script de démarrage du service

Maintenant que nous avons les paramètres d'environnement nécessaires pour StrongSwan, nous aimerions pouvoir le démarrer. Puisque le script de démarrage est Systemd, créez-le dans / etc / systemd / system

# cd /etc/systemd/system
# vi strongswan.service

strongswan.service


[Unit]
Description=strongSwan

[Service]
Type=forking
ExecStart=/usr/sbin/ipsec start
ExecStop=/usr/sbin/ipsec stop

[Install]
WantedBy=multi-user.target

Je n'entrerai pas dans les détails sur les scripts Systemd ici, mais dans strongSwan, le type de service est forking car le démarrage et l'arrêt se font en arrière-plan à partir du processus parent.

paramètres firewalld

Ensuite, le paramètre firewalld accepte IPsec (les données chiffrées elles-mêmes échangées par IPsec et la négociation d'IPsec peuvent être acceptées). Cependant, avec les paramètres ici, la limitation interne de 192.168.1.0/24 n'est pas spécifiée, et si les paquets IPsec peuvent passer d'autres segments de réseau, ils peuvent être reçus. Cependant, si vous prenez des mesures jusque-là, ce sera compliqué, donc pour des raisons de simplicité, nous n'autoriserons qu'IPsec.

# firewall-cmd --permanent --add-service=ipsec
# firewall-cmd --reload

# firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ipsec
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="192.168.1.0/24" port port="12345" protocol="tcp" accept

Cette commande est commune aux machines virtuelles Hyper-V et à Raspeye.

Démarrer et vérifier le fonctionnement

Commençons. Commencez toujours par activer Activer et confirmez que l'état est «Actif» et «En cours d'exécution».

** Tout d'abord, StrongSwan est démarré du côté qui reçoit la négociation d'établissement IPsec, puis il est démarré dans l'ordre du côté qui envoie l'établissement IPsec **. Ici, après le démarrage de StrongSwan de Raspeye, StrongSwan de la machine virtuelle Hyper-V est démarré.

# systemctl start strongswan
# systemctl enable strongswan
# systemctl status strongswan

起動成功

Vérifiez que la machine virtuelle Hyper-V et Raspeye sont définies sur "Actif" et "En cours d'exécution", et enfin vérifiez si le tunneling IPsec est établi.

CentOS8.1(Hyper-V/x64)


# /usr/sbin/ipsec status
Security Associations (1 up, 0 connecting):
linux-2-linux[1]: ESTABLISHED 2 minutes ago, 192.168.1.18[192.168.1.18]...192.168.1.22[192.168.1.22]
linux-2-linux{1}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: ********_i ********_o
linux-2-linux{1}:   192.168.5.0/24 === 192.168.2.0/24

# ip xfrm policy
src 192.168.5.0/24 dst 192.168.2.0/24
        dir out priority 375423 ptype main
        tmpl src 192.168.1.18 dst 192.168.1.22
                proto esp spi 0x******** reqid 1 mode tunnel
src 192.168.2.0/24 dst 192.168.5.0/24
        dir fwd priority 375423 ptype main
        tmpl src 192.168.1.22 dst 192.168.1.18
                proto esp reqid 1 mode tunnel
src 192.168.2.0/24 dst 192.168.5.0/24
        dir in priority 375423 ptype main
        tmpl src 192.168.1.22 dst 192.168.1.18
                proto esp reqid 1 mode tunnel

openSUSE15.1(RaspberryPi)


# /usr/sbin/ipsec status
Security Associations (1 up, 0 connecting):
linux-2-linux[1]: ESTABLISHED 2 minutes ago, 192.168.1.22[192.168.1.22]...192.168.1.18[192.168.1.18]
linux-2-linux{1}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: ********_i ********_o
linux-2-linux{1}:   192.168.2.0/24 === 192.168.5.0/24

# ip xfrm policy
src 192.168.2.0/24 dst 192.168.5.0/24
        dir out priority 375423 ptype main
        tmpl src 192.168.1.22 dst 192.168.1.18
                proto esp spi 0x******** reqid 1 mode tunnel
src 192.168.5.0/24 dst 192.168.2.0/24
        dir fwd priority 375423 ptype main
        tmpl src 192.168.1.18 dst 192.168.1.22
                proto esp reqid 1 mode tunnel
src 192.168.5.0/24 dst 192.168.2.0/24
        dir in priority 375423 ptype main
        tmpl src 192.168.1.18 dst 192.168.1.22
                proto esp reqid 1 mode tunnel

Le tunnel IPsec a été établi avec succès avec les machines virtuelles Hyper-V et la tarte aux râpes (˶ ・ ᴗ ・) ੭⚐⚑

Bonus (spécifiez une chaîne de caractères telle que domaine pour l'ID de ipsec.conf)

Dans le fichier de configuration StrongSwan /etc/ipsec.conf, même si vous utilisez une chaîne de caractères au lieu d'une adresse IP avec leftid ou rightid, l'écran de capture sera affiché (\ * ´꒳` \ *)

Peut-être que celui-ci est plus facile à comprendre. Dans l'exemple, "raspberry pi" et "test only @ kazumi-jam" sont distingués. ipsec.confのIDに文字列やドメインを指定する

Supplément (lorsque le tunnel IPsec passe par NAT)

Il n'y a pas encore d'image facile à comprendre, mais pour les adresses IP gauche et droite dans ipsec.conf, entrez votre propre adresse IP et l'adresse IP de l'autre partie après la conversion NAT telle que vue de vous. À ce moment-là, il est nécessaire que l'identifiant gauche et l'identifiant droit correspondent par paires.

Exemple: 192.168.1.0/24 → Lorsque 192.168.120.0/28 est partitionné par NAT

IPsecGW-1 (dans 192.168.1.0/24)  left=192.168.1.22  leftid="gw1"  right=192.168.1.18  rightid="gw2" IPsecGW-2 (dans 192.168.120.0/28)  left=192.168.120.1  leftid="gw2"  right=192.168.120.3  rightid="gw1"

De cette façon, IPsec peut être établi en entrant une adresse IP qui prend en compte NAT, mais je posterai plus de détails plus tard.

la prochaine fois

Avec l'introduction de Strong Swan, la construction de la passerelle IPsec s'est achevée avec CentOS 8.1 sur Raspberry Pi et Hyper-V. Ensuite, connectez le client et le serveur au VPN connecté à cette passerelle IPsec et essayez de vous connecter l'un à l'autre (˶˙ᵕ˙˶).

Recommended Posts

Construction VPN simple de la passerelle IPsec avec CentOS 8 et openSUSE (Raspberry Pi) --1 Introduction de StrongSwan
Construction de VPN de passerelle IPsec avec CentOS 8 et openSUSE (Raspberry Pi) --2 Confirmation de connexion VPN StrongSwan
Construction VPN simple de la passerelle IPsec avec Ubuntu 20.04 et Raspberry Pi --2 Confirmation de connexion VPN StrongSwan
Construire un serveur VPN avec Raspberry Pie
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
Affichage graphique de la consommation électrique des ménages avec 3GPI et Raspeye
Créez un convertisseur Ethernet LAN sans fil et un routeur simple avec Raspberry Pi
Production d'un système de contrôle de température avec tarte aux framboises et ESP32 (2) Production d'un appareil de transmission
Surveillance des animaux avec Rekognition et Raspberry pi
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
MQTT Radicon Car avec Arduino et Raspberry
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Mesurer la température du processeur de Raspeye avec Python
Création d'un environnement distribué avec la série Raspberry PI (Partie 4: Création d'un serveur NFS et importation d'un système d'exploitation client)
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
IoT facile pour démarrer avec Raspeye et MESH
Détecter l'état de port du masque avec OpenCV et Raspberry Pi
Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Installation de Docker sur Raspberry Pi et L Chika
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture
Exploitons GPIO de Raspeye avec Python CGI
Créez facilement un TweetBot qui vous informe de la température et de l'humidité avec Raspberry Pi + DHT11.
Création d'un environnement distribué avec la série Raspberry PI (Partie 7: configuration de la route tftp et test de démarrage pour chaque tarte à la râpe)