:::: MENU ::::

Monthly Archives / February 2015

  • Feb 27 / 2015
  • 0
Linux

How to setup an IPSec tunnel with Strongswan with high-availability on LinuxComment configurer un tunnel IPSec avec Strongswan en haute disponibilité sous Linux

It is possible to secure your communication between several sites (datacenters for example) by using an open-source VPN IPSec on your Linux System. We will see here how to:

  1. Set-up a VPN IPSec on Linux with Strongswan (https://www.strongswan.org)
  2. Set-up a high availability mechanism on top of this VPN connection to ensure the link will always be up with KeepAlived (http://www.keepalived.org/)

Architecture

Here is the architecture example I will use in this post.

  • – – – represents a local link
  • === represents a VPN link

VPN Installation

First of all, install the package strongswan using the package manager you used to, or by compiling it from sources. In the same time, install the keepalived package to be able to set it highly available at the end of this post.

This will install the packages and the libraries needed to make them work.

Certificates

First thing to do will be to generate certificates used for the encryption of communication within the VPN. This can be done in two ways:

CA Certificate

Once the packages are properly installed, we will have to create the different certificates that we will use to encrypt our connection between peers. For the example we will be using self-signed certificate here. The first certificate to generate wil be the CA certificate with which one we will sign any certificate we want to use in the VPN network.

Generate a 2048 bit RSA private key (caKey.der) for the CA certificate (caCert.der) and self-sign it with this key:

End Entity Certificate

For each peer (i.e. each gateway), a private key (peerKey.der) and a certificate (peerCert.der) will have to be generated using the CA previously created:

Install certificates

On each peer, store the following certficates and private keys in /etc/ipsec.d/ subdirectory as:

  • /etc/ipsec.d/private/peerKey.der for the private key of the peer
  • /etc/ipsec.d/certs/peerCert.der for the certificate of the peer
  • /etc/ipsec.d/cacerts/caCert.der for the CA certificate that signed the certificates

The CA private key (caKey.der) should never be stored on a server directly reachable from the Internet and be kept safe.

IPSec configuration

To configure IPSec, you will have to configure two files:

  • /etc/ipsec.conf for the configuration of your tunnels
  • /etc/ipsec.secrets for the configuration of your keys and/or PSK (pre-shared keys)

If you use certificate for your connection, here is what your configuration should look like:

If instead of using certificates you prefered to use Pre-Shared Key (as you will have to if you want to connect to AWS VPN Services), here are how should be configured both files:

IPsec commands and monitoring

First of all, each time you are changing part of the configuration, it’s strongly advised to reload configuration by doing:

Once this done, you can easily up/down a configuration by using:

A last command very useful is “statusall” that allows you to check and monitor VPN links:

High availability configuration

So that your VPN can be highly available, you will need to configure keepalived that you just installed at the beginning. You will have to configure it on both sides by using a virtual IP and a script to automate the restart on both nodes depending on the state of the cluster (option “notify”).

Here is the configuration for the master server:

The configuration for the slave (backup) server is almost similar but state and priority are changing:

And here is the script notifyipsec.sh for the “notify” option:

Now you can restart both services and your IPSec VPN inter-site is ready with a high-availability mechanism enabled!!

Obviously, you will have to do the same on the other node if you want your VPN to work properly, by reversing configuration.Il est possible de sécuriser vos communications entre plusieurs sites (datacenters par exemple) en utilisant une solution open-source de VPN IPSec sur votre système Linux. Nous allons voir ici comment :

  1. Configurer un VPN IPsec sur Linux avec Strongswan (https://www.strongswan.org)
  2. Configurer un mécanisme de haute disponibilité au-dessus de cette connexion VPN pour s’assurer que le lien sera toujours connecté avec KeepAlived (http://www.keepalived.org/)

Architecture

Voici l’exemple d’architecture simple que nous allons utiliser dans ce tutoriel :

  • – – – représente un lien local
  • === représente un lien VPN

Installation du VPN

Avant tout, installez le paquet strongswan en utilisant le gestionnaire de paquets que vous avez l’habitude d’utiliser, ou en le compilant depuis les sources. Par la même occasion, installez le paquet keepalived pour pouvoir configurer la haute disponibilité du service plus tard (à la fin du post).

Ceci va installer les paquets nécessaires ainsi que les librairies associées.

Certificats

La première chose à faire est de générer les certificats utilisés pour le chiffrement de la communication au sein du VPN. Ceci peut être fait de deux façons :

Certificat CA

Une fois que les paquets sont correctement installés, nous allons devoir créer les différents certificats que nous utiliserons pour chiffrer la connexion entre les noeuds. Pour l’exemple, nous utiliserons ici un certificat auto-signé. Le premier certificat à générer va être le certificat CA avec lequel nous signerons tout certificat que nous voulons utiliser dans le VPN.

Générez une clé privée RSA de 2048bits (caKey.der) pour le certificat CA (caCert.der) et auto-signez le avec cette clé :

End Entity Certificate

Pour chaque entité, (i.e. chaque passerelle), une clé privée (peerKey.der) et un certificat (peerCert.der) devront être générés en utilisant le CA que nous avons créé précédemment :

Installation des certificats

Sur chaque entité, stockez les certificats et les clés privées suivants dans les sous-répertoires correspondants /etc/ipsec.d/ selon :

  • /etc/ipsec.d/private/peerKey.der pour la clé privée de l’entité
  • /etc/ipsec.d/certs/peerCert.der pour le certificat de l’entité
  • /etc/ipsec.d/cacerts/caCert.der pour le certificat CA qui a signé les certificats

La clé privée CA (caKey.der) ne devrait jamais être stockée sur un serveur directement exposé sur Internet et être conservée en sécurité.

Configuration IPSec

Pour configurer IPSec, vous devrez configurer deux fichiers :

  • /etc/ipsec.conf pour la configuration de vos tunnels
  • /etc/ipsec.secrets pour la configuration de vos clés et/ou PSK (Pre-Shared Key)

Si vous avez utilisé une connexion par certificat, voici la configuration que vous devriez avoir :

Si au lieu d’utiliser les certificats, vous avez préféré utiliser des Pre-Shared Keys (comme vous pourriez le faire si vous souhaitez connecter votre VPN aux services VPN AWS), voici comment les fichiers devraient être configurés :

Commandes et monitoring IPsec

Tout d’abord, chaque fois que vous modifiez une partie de la configuration, il est fortement conseillé de recharger la configuration en effectuant :

Une fois cela fait, vous pouvez facilement activer/désactiver une configuration en utilisant :

Une dernière commande très utile est “statusall” qui permet de vérifier et de monitorer les liens VPN :

Configuration en haute disponibilité

Afin que votre VPN puisse être hautement disponible, vous allez avoir besoin de configurer keepalived que vous avez installé au début. Vous allez devoir le configurer des deux côtés en utilisant une IP virtuelle et un script pour automatiser le redémarrage sur les deux noeuds selon l’état du cluster (option “notify”).

Voici la configuration serveur maître :

La configuration pour le serveur esclave (backup) est très similaire, juste state et priority changent :

Et voici le script notifyipsec.sh pour l’option “notify” :

Vous pouvez maintenant redémarrer les deux services et votre VPN IPSec inter-site est prêt avec un mécanisme de haute disponibilité activé !

Evidemment, vous devrez effectuer la même configuration sur l’autre entité si vous souhaitez que votre VPN fonctionne correctement, en inversant la configuration.

  • Feb 19 / 2015
  • 0
Linux

How to capture results of a watch in a fileComment capturer les résultats d’un watch dans un fichier

For debugging purposes, it can sometimes be useful to write the results of a command executed at a given time lapse. You can easily monitor a command by using the watch command.

By default a watch command is only displaying result, and you have to be in front of to see the results. If you want to write them in a file with a timestamp, you can easily do it by using this command that combines  a watch command with tee:

You can now open your file /tmp/logfilewatch and see the results you just got!
For example, here is what you could get with my previous command, checking all the connections on port TCP 443:

Pour des raisons de debugging, il peut parfois être utile d’écrire les résultats d’une commande exécutée à un intervalle de temps donné dans un fichier. Vous pouvez facilement monitorer une commande en utilisant la commande watch.

Par défaut une commande watch ne fait qu’afficher le résultat, et vous devez donc être devant si vous souhaitez surveiller les résultats qui apparaissent. Si vous voulez les écrire dans un fichier avec un timestamp, vous pouvez facilement le faire en utilisant cette commande combinée à une commande tee:

Vous pouvez maintenant ouvrir votre fichier /tmp/logfilewatch et voir les résultats que vous venez d’obtenir !
Voici, par exemple, ce que vous pourriez obtenir avec la commande donnée précédemment, vérifiant toutes les connexions sur le port TCP 443 :

  • Feb 11 / 2015
  • 0
Linux

Find which process is using a specific portTrouver quel processus utilise un port spécifique

If you need to know/find which process is using a specific port on your system, you can use some default tools for troubleshooting:

  • netstat
  • lsof

WARNING: For the use of these tools, you will need root rights (or sudo rights will be efficient)

First, with netstat you can use options tnlpu to display much informations on connections:

Then, with lsof you can easily find which connections are opened on a specified port with the option -i on your command-line:

Si vous avez besoin de connaître/trouver quel processus utilise un port spécifique sur votre système, vous pouvez utiliser certains outils par défaut pour effectuer le troubleshooting:

  • netstat
  • lsof

ATTENTION: Pour l’utilisation de ces outils, vous aurez besoin des accès root (ou tout au moins les droits sudo seront suffisants)

Tout d’abord, avec netstat vous pouvez utiliser les options tnlpu pour afficher plus d’informations sur les connexions :

Ensuite, avec lsof vous pouvez facilement trouver quelles connexions sont ouvertes sur un port spécifié avec l’option -i sur la ligne de commande:

Question ? Contact