Bla bla bla, boring and very long introduction that no ones cares about.
Install openfortivpn from Debian's repositories:
sudo apt install openfortivpn
Open a web browser and log in to your organization's fortinet SSL-VPN portal. Right click anywhere on the page, Inspect, and go to the Network tab in order to copy the SVPNCOOKIE= cookie.
Now open a terminal and run:
sudo openfortivpn --cookie SVPNCOOKIE=....
And voila!
Sometimes the connection may fail with the following error:
ERROR: Could not get VPN configuration (HTTP status code).
For some reason this often happens to me when I use Firefox to grab the cookie, however I have no problem with google-chrome. I haven't tested other browsers.
I need to backup my NAS to a remote and secured location, and because I am a Azure AZ-103 associate, I have decided to use an Azure storage account. I will use Duplicati, a free backup software written in C# with the following features:
Storage account offers 3 tier with different pricing: hot, cool, archive. If you choose a hot tier, access is less charged, but storage is more expensive. This is the opposite for cool and archive, storage is cheap but access is expensive. Archive is the most interesting tier for backups but it has many constraints, such as the need to pick every object inside the container and move them to the tier. So I will use cool.
Create a Resource group and a Storage account
First you need to create a Resource group. Go to the Resource groups blade then click +Add. Take a look at Ready: Recommended naming and tagging conventions if you don't know how to name it. Select a region (does not really matters now).
Now you need to create a Storage account. Go to the Storage accounts blade then click +Add.
Subscription: your subscription.
Resource group: the one you just created
Storage account name: must be unique accross Azure and as many limitations, so I recommend using a very short name + short random id.
Location: Select the location of your choice (choose a close one with an interesting pricing, see Azure Calculator)
Account kind:StorageV2
Replication:LRS
Access tier:cool
Now open you new Storage account and go to the Containers blade then click +Container. This time the name is private and does not need to be unique. Make sure the Public level access is set to Private (no anonymous access).
Go to the Access keys blade and retrieve the value of key1 or key2. These key are private and should not be shared with anyone because they basically give full access to the storage account and the data inside.
Configure Duplicati
Go into the Web UI then + Add backup > Configure a new backup.
Enter a name, a description and a very strong encryption passphrase (if you forget this passphrase, you wan't be able to decrypt your backups).
Select "Azure blob" for Storage type and set your credentials.
Click Test connection to make sure Duplicati can reach your Azure container.
Select the files you want to backup.
Schedule your backups. For me, monthly is enough.
Duplicati will not copy your files one by one but use "volumes". To select the size of each block, read this documentation. Smaller means more transactions but better de duplication. Bigger means less transactions but less optimized de duplication. If you have the bandwith, go for higher chunks. 1 Gbyte seems to be a good value for me. More is not good, takes too much resources.
You can also set a retention, for me it's 6 months.
Et voila, just run your backup now!
Pricing considerations
It is not easy to estimate monthly charges. It depends not only on used storage, but also on write and read operations. Here is how much I pay:
J'utilise depuis quelques années un routeur ASUS RT-AC66U branché sur la freebox en bridge, principalement pour avoir du WiFi en 5GHz (le 2,4 étant saturé chez moi) mais aussi pour des fonctionnalités qui n'existaient pas quand je me suis abonné, par exemple le pare-feu et les dns ipv6. Ce montage fonctionne plutôt bien mais le routeur arrive aujourd'hui à ses limites :
Problèmes de performances avec OpenVPN (client et serveur) probablement à cause du CPU faiblard (MIPS 600 MHz). Les débits ne dépassent pas 1 Mbps.
Le firmware alternatif ASUS Merlin que j'utilisais a abandonné le support du RT-AC66U. J'ai du rebasculer sur le firmware ASUS officiel, toujours maintenu mais avec beaucoup moins de fonctionnalités.
J'envisage donc de changer de routeur et de mettre à niveau ma stack réseau avec au passage un ou plusieurs switches supportant les VLANs. J'ai envisagé plusieurs pistes :
Partir sur un routeur Mikrotik, car j'ai déjà travaillé avec ce matériel et j'adore RouterOS. De plus les prix sont très raisonnables.
Acheter un Linksys WRT (les gros routeurs bleus) car ces modèles ont l'air d'avoir une grosse communauté et énormément de firmwares alternatifs toujours maintenus.
Miser sur un APU Alix + pfSense / OPNsense. L'intérêt du x86 est que quasiment tous les OS fonctionnent dessus en natif.
Le routeur Linksys WRT a été rapidement éliminé car je prends le risque de retomber dans la même situation qu'avec le RT-AC66U, à savoir les firmwares communautaires qui ne sont plus maintenus ou trop limités.
J'ai été très tenté par un routeur Mikrotik malheureusement le support d'OpenVPN est extrêmement sommaire et ne correspond pas à mon besoin. Il est possible d'utiliser de l'IPsec (en IKEv2) mais pour une raison que j'ignore le flux ne passe pas à travers ma Freebox.
L'achat d'un APU Alix en x86 s'impose donc. Pour rappel, il s'agit d'un des nombreux modèles de SBC (Single Board Computer) au format mini-ITX construit par PC Engines. Grands fans de CPU AMD à basse consommation et de multiples interfaces réseau, ils sont très prisés pour faire des routeurs. En prime l'architecture x86-64 permet de faire tourner quasiment n'importe quel OS: Windows, Linux, FreeBSD, OpenBSD... ce qui donne au final un petit serveur mieux qu'un Raspberry Pi, même si le prix est bien plus élevé. L'inconvénient des APU Alix est qu'ils ne sont pas vendus dans la plupart des boutiques françaises, il faut donc aller chercher sur Amazon, eBay, Varia Store, ou d'autres revendeurs.
Pas de Wifi sur ce modèle, je vais devoir brancher mon Asus RT-AC66U configuré en mode point d'accès. En fait il est possible d'avoir du wifi directement sur le routeur Alix, mais c'est plus compliqué quand on veut du double bande 2,4 et 5 GHz car il faut deux cartes.
Reste à choisir l'OS qui sera installé pour faire office de routeur. Pour cela j'ai testé dans des machines virtuelles pfSense, OPNsense et Endian. Voici les résultats de ce POC :
Endian a une interface web trop limitée qui n'a quasiment pas évolué au cours des dernières années et ne permet pas de gérer un serveur OpenVPN, il faut passer par la CLI. J'ai donc abandonné assez rapidement cette solution.
OPNsense n'a pas été facile à prendre en main, l'interface moderne n'est pas très intuitive mais au final j'ai pu faire tout ce que je voulais. Malheureusement ma première mise à jour s'est faite dans la douleur, et lors de la seconde j'ai perdu la fonctionnalité de serveur DHCP. J'ai aussi de gros problèmes de lenteurs de l'interface avec Linux + Firefox ESR alors qu'avec Chrome pas de problèmes. Je n'ai donc pas un bon retour d'expérience concernant la fiabilité du produit.
pfSense est donc le gagnant par élimination. L'interface est différente d'OPNsense mais les fonctionnalités et la logique sont les mêmes. Le système de mises à jour est différent puisqu'il ne fonctionne pas par parquets mais au niveau de l'image dans son ensemble.
Il faut maintenant que je prenne le temps de configurer tout ça.
Je me connecte régulièrement avec mon laptop à des partages Samba/CIFS de mon NAS. Pour cela j'utilise la commande suivante à chaque démarrage:
$ sudo mount -t cifs //192.168.1.1/partage /mnt/partage/ -o user=utux
J'aimerai que ce soit automatique. Le problème est que je ne peux pas utiliser le /etc/fstab car au moment où il est exécuté le réseau n'est pas prêt (wifi ou client openvpn). Il existe bien l'option _netdev mais elle n'a jamais fonctionné pour moi. Ce cas d'usage montre bien les limites des montages Linux qui ne sont pas adaptés à la mobilité et aux environnements dynamiques.
Bonne nouvelle, il existe une alternative: autofs qui s'appuie sur automount. Contrairement à mount, il connecte le partage lorsqu'on y accède (et pas au démarrage) et le déconnecte si on ne l'utilise pas. Il a aussi de nombreuses autres fonctionnalités:
Un système de templates utile quand on a de nombreux partages.
Support de plusieurs protocoles (cifs, nfs, raw...).
Auto-découverte des partages.
Consommation de ressources moindre (déconnecte les partages non utilisés)
Il y a deux ans j'affirmais aimer systemd dans l'article systemd, c'est bien. Aujourd'hui je parle de Firewalld, un service et ensemble d'outils permettant de gérer le pare-feu sous Linux.
La base du firewall sous Linux c'est iptables, et quand on a compris et beaucoup pratiqué, c'est pas si compliqué. Mais il y a toujours deux points qui me gênent:
Il n'y a pas de service officiel pour charger les règles au démarrage, il faut faire son propre script ou en emprunter à droite à gauche.
Les règles sont quand même indigestes et bas niveau, ce qui n'est pas toujours nécessaire.
Firewalld implémente un système de "zones" dans lesquelles vous allez définir des paramètres, autoriser des services: internet, public, dmz... elles peuvent être définies à partir de l'interface ou de la source, c'est assez souple. Le paramétrage se fait soit en cli (firewalld-cmd) soit graphiquement (firewall-config) ou encore au travers d'une api et introduit la notion de "permanent" pour savoir si il faut conserver les modifications au démarrage.
Bien entendu, firewalld est un service système donc il n'y a pas de script à écrire pour charger ses règles au boot, il suffit de l'activer dans sytemd.
Firewalld est présent sur Fedora, CentOS, RedHat mais peut être installé sur d'autres sytèmes comme Debian car il est proposé dans les dépôts. Et moi, je migre mes serveurs sur Firewalld avec prise en charge par Ansible, parce que je gagne un temps fou et je fais les choses proprement.
Merci Red Hat ces logiciels qui terminent en "d" et qui modernisent un peu Linux :)