Linux

Documentations liées à Linux, applications linux, serveurs...

Change color prompt

Procédure pour personaliser le prompt Bash

$ export PS1="[\\u@\\h \\W \\@]\\$"
[linodadmin@centos-01 ~ 01:50 PM]$

Pour le rendre Permanent copier-coler PS1 Value dans le .bashrc à la fin du fichier

Exemple (config srv)

$ export PS1="[[\033[01;33m]\u@\h[\033[00m] ~ [\033[01;30m]\w[\033[00m]] $"

Docs:

How to Change Bash Shell Prompt Colorful and Attractive in Linux

Change command line color in centos

Redimensionner disque lvm d'une VM

Sur une VM, si on redimensionne le disque virtuel et qu'on veut agrandir une partition LVM sur le disque

On demande au système de scanner les disques, pour qu'il prenne en compte l'agrandissement du disque dur:

rescan-scsi-bus.sh

Il faut d'abord agrandir la partition sur laquelle le PV est créé (ici sda2) :

cfdisk /dev/sda2

Dans cfdisk, il doit afficher l'espace libre en faire, ajouté sur le disque.

Ensuite sélectionner /dev/sda2 et redimensionner la partition
Enfin, ecrire les données et fermer cfdisk.

Via fdisk - l, on doit voir la partion sda2 agrandie.

Ensuite on agrandi le volume physique:

pveresize /dev/sda2

Ensuite on agrandit le volume logique, en ajoutant 10Giga
Pour voir le nom du LV, taper la commande lvs

lvresize -L +10G -r /dev/cl/root

Ou si on veut tout allouer l'espace du PV à notre LV:

lvresize -l +100%FREE /dev/cl/root

Il reste à redimensionner le système de fichier, pour que tout soit pris en compte:

resize2fs /chemin/disque/lvm # Dans le cas d'un système ext4

Agrandir le disque en recréant la table de partition

Il se peut qu'on ne puisse pas agrandir directement la partition contenant les données LVM: la partition étendue étant avant la LVM, et cfdisk ne peut pas agrandir le disque.

Dans ce cas, il faut utiliser fdisk, on va supprimer notre partition LVM et la recréer. L'idée étant de ne pas supprimer les donnée, mais de juste modifier la table de partition, il faudra que nos partitions commencent sur le même secteur et finissent sur un secteur plus loin. La partition sera la même e mais agrandie, donc nos données seront toujours présentes.

! Bien faire une backup au préalable, c'est toujours délicat de toucher aux tables de partitions

Configuration fdisk

Lancer fdisk sur le disque à modifier (ici /dev/sda):

fdisk /dev/sda

Détail des commandes fdisk (les détail de sont en commentaire):

Bienvenue dans fdisk (util-linux 2.38.1).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.

Le disque est actuellement utilisé — le repartitionner est
probablement une mauvaise idée.
Il est recommandé de démonter tous les systèmes de fichiers et désactiver (avec
swapoff) toutes les partitions d'échange de ce disque.


Commande (m pour l'aide) : p # afficher les partitions et copier les valeurs dans un bloc-note

Disque /dev/sda : 40 GiB, 42949672960 octets, 83886080 secteurs
Modèle de disque : Virtual Disk    
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x248fe134

Périphérique Amorçage   Début      Fin Secteurs Taille Id Type
/dev/sda1    *           2048  1953791  1951744   953M 83 Linux
/dev/sda2             1953792  2148351   194560    95M 83 Linux
/dev/sda3             2150398 41209855 39059458  18,6G  5 Étendue
/dev/sda5             2150400 41209855 39059456  18,6G 8e LVM Linux

La partition 3 ne commence pas sur une frontière de cylindre physique.

Commande (m pour l'aide) : d # Suppression partition 
Numéro de partition (1-3,5, 5 par défaut) : 3 # la n°3 (/dev/sda3)

La partition 3 a été supprimée.

Commande (m pour l'aide) : n  # Créer un nouvelle partition
Type de partition
   p   primaire (2 primaire, 0 étendue, 2 libre)
   e   étendue (conteneur pour partitions logiques)
Sélectionnez (p par défaut) : e # Créer un nouvelle partition de type étendue
Numéro de partition (3,4, 3 par défaut) : 3
Premier secteur (2148352-83886079, 2148352 par défaut) : 2150398 # La nouvelle partition commence exactement au même endroit que celle qu'on vient de supprimer
Dernier secteur, +/-secteurs ou +/-taille{K,M,G,T,P} (2150398-83886079, 83886079 par défaut) : # on laisse par défaut, ce qui correspond à la fin du disque.

Commande (m pour l'aide) : p # On réaffiche la table de partition
Disque /dev/sda : 40 GiB, 42949672960 octets, 83886080 secteurs
Modèle de disque : Virtual Disk    
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x248fe134

Périphérique Amorçage   Début      Fin Secteurs Taille Id Type
/dev/sda1    *           2048  1953791  1951744   953M 83 Linux
/dev/sda2             1953792  2148351   194560    95M 83 Linux
/dev/sda3             2150398 83886079 81735682    39G  5 Étendue

La partition 3 ne commence pas sur une frontière de cylindre physique.

Commande (m pour l'aide) : n # on créé une nouvelle partition n°5

Tout l’espace des partitions primaires est utilisé.
Ajout de la partition logique 5
Premier secteur (2152446-83886079, 2152448 par défaut) : 
Dernier secteur, +/-secteurs ou +/-taille{K,M,G,T,P} (2152448-83886079, 83886079 par défaut) : 

Une nouvelle partition 5 de type « Linux » et de taille 39 GiB a été créée.
La partition #5 contient une signature ext4.

Voulez-vous supprimer la signature ? [O]ui/[N]on : o # Suppression signature

La signature sera supprimée par une commande d'écriture.

Commande (m pour l'aide) : x # passage en mode "avancé" de fdisk

Commande pour spécialistes (m pour l'aide) : b # on souhaite déplacer le début des données dans une partition
Numéro de partition (1-3,5, 5 par défaut) : 5 # pour la n°5
Nouveau début de données (2150399-83886079, 2152448 par défaut) : 2150400  # Début qu'on repositionne exactement au même endroit que l'initiale.

Commande pour spécialistes (m pour l'aide) : r # il reste juste à modifier le type, retour en mode normal.

Commande (m pour l'aide) : t # modifier le type d'une partition
Numéro de partition (1-3,5, 5 par défaut) : 5 # la n°5
Code Hexa ou synonyme (taper L pour afficher tous les codes) :L # on liste les types existan

...

   lvm            - 8E
   linuxex        - 85
...
Code Hexa ou synonyme (taper L pour afficher tous les codes) :8E # on veut une partition LVM linux comme initialement.

Type de partition « Linux » modifié en « Linux LVM ».
Commande (m pour l'aide) : p # On affiche l'état de nos partitions

Disque /dev/sda : 40 GiB, 42949672960 octets, 83886080 secteurs
Modèle de disque : Virtual Disk    
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x248fe134

Périphérique Amorçage   Début      Fin Secteurs Taille Id Type
/dev/sda1    *           2048  1953791  1951744   953M 83 Linux
/dev/sda2             1953792  2148351   194560    95M 83 Linux
/dev/sda3             2150398 83886079 81735682    39G  5 Étendue
/dev/sda5             2150400 83886079 81735680    39G 8e LVM Linux


Commande (m pour l'aide) : w # Tout est bon On écrit les modifications sur le disque
La table de partitions a été altérée.
Impossible de mettre à jour les informations du système à propos de la partition 3: Périphérique ou ressource occupé

Le noyau continue à utiliser les anciennes partitions. La nouvelle table sera utilisée lors du prochain démarrage. 
Synchronisation des disques.

Il reste à redémarrer le système pour que ça soit pris en compte

reboot
Prise en compte dans LVM

Enfin, comme précédemment il faudra agrandir la partition LVM avec pvs et lvresize

pvresize /dev/sda5
lvextend -l +100%FREE /chemin/disque/lvm
File system

Il va rester à redimensionner le système de fichier posé sur la partition  pour que lui aussi occupe tout l’espace :

resize2fs /chemin/disque/lvm

Liens

→ Vidéo linuxtricks

→ Augmenter la tailler d'un disque LVM (pour l'agrandissement avec fdisk)

SELINUX

SELINUX

Selinux manage port

Sur une machine avec SELinux d'installé et d'activé, on ne peut associer un port réseau à un service, que s'il est autorisé par SELinux.

Par exemple, par défaut SELinux n'autorise que le port 22 à être utilisé par le serveur OpenSSH. Si jamais ce port est modifié (par exemple 2222), il ne sera plus possible de faire fonctionner SSHD.

Cette sécurité assure qu'un service n'utilise que le port autorisé par SELinux. Donc si jamais une personne malveillante ou un programme, venait à changer le port associé à SSH, HTTP... il ne pourrait pas le faire.

Pour ajouter un port associé à un service enregistré dans SELinux, par exemple SSH, il faut utiliser la commande suivante:

semanage port -a -t ssh_port_t -p tcp 2222

Cette modification est persistente après un redémarrage du système.

Ainsi, SSH pourra utiliser le port 2222, bien évidemment il faut penser à autoriser ce port dans le pare-feu.

Pour en savoir plus et aller plus loin:

Use SELinux Port Labeling To Allow Services To Use Non-Standard Ports

MSMTP

MSMTP est un client d'envoi de mail SMTP, simple à configurer et à installer Compatible avec sendmail, donc très utile pour l'envoi de mail en ligne de commande ou pour des scripts

Installation

sudo apt install msmtp msmtp-mta

Configuration

Soit on configure les parametres d'envoi SMTP (serveur, login, port...) dans /etc/msmtprc (accessible a tous les monde), sont on créer le fichier .msmtpr dans le home de chaque Utilisateur

Vi ~/.msmtprc
account default
# Serveur SMTP
host smtp.monfai.fr
# Adresse mail expediteur
from prenom.nom@monfai.fr
# Si pas de MDP
auth off
# SI MDP SMTP:
#auth on
#Nom Utilisateur
user prenom.nom
#si votre fai vous identifie plus clairement si vous reprécisez le domaine, alors plutôt cela :
#user prenom.nom@fai.fr
password monmotdepasse

→ Ex config avec connexion SSL + MDP:

account default
host smtp.nomsrv.fr
port 465
auth login
tls on
tls_starttls off
tls_certcheck on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
from lpognant@inforoutes.fr
user username
password cobian

→ Pour que seul l'utilisateur accéde au fichier, et seul lui voie le mot de passe SMTP:

chmod 600 ~/.msmtprc`

→ Tester en ligne de commande l'envoi d'un mail:

printf "Subject:DeQuoiOnParle\nLeCorpsDuMessage" | msmtp johnny@liday.ch

Rediriger sendmail vers msmtp via un lien symbolique:

sudo ln -s /usr/bin/msmtp /usr/lib/sendmail

Liens

Doc Ubuntu avec des exmples de configurations

Doc Officielle de msmtp

DHCPD

Docs Serveur DHCP sous linux

DHCPD

Debian - Installation DHCP Serveur

Installation et configuration serveur DHCP sous debian

Installation

Installation package:

sudo apt-get install isc-dhcp-server

Configuration

Dans /etc/dhcp/dhcpd.conf

option domain-name "spices.org"; # Suffixe Dans
option domain-name-servers 213.191.92.86, 213.191.74.18; # Serveur DNS à distribuer

# Configuration de Base

subnet 192.168.1.0 netmask 255.255.255.0 { # Rsx et netmask
 range 192.168.1.1 192.168.1.10; # Plage DHCP
 option routers pepper.spices.org; # gateway
}

Appliquer la conf:

/etc/init.d/isc-dhcp-server restart # version nouvelle
/etc/init.d/dhcp3-server restart # version ancienne

Démarrer le serveur DHCP

sudo service isc-dhcp-server stop
sudo service isc-dhcp-server start
sudo ifdown eth0
sudo ifup eth0

Exemple d'un serveur DHCP simple

option domain-name "mydebian";
→ Utilisation du serveur DNS public de Google (ou bien utilisez l'adresse du serveur DNS fournie par votre fournisseur d'accès):
option domain-name-servers 8.8.8.8, 8.8.4.4;
→  Configuration de votre sous-réseau (subnet) souhaité :
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.101 192.168.1.254;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.1.255;
    option routers 192.168.1.100;
    option domain-name-servers home;
}
default-lease-time 600;
max-lease-time 7200;
→ Indique que nous voulons être le seul serveur DHCP de ce réseau :
authoritative;

Administration

→ Logs DHCP serveur:

more /var/log/syslog | grep dhcp

→DHCP Leases

more /var/lib/dhcpd/dhcpd.leases

Liens

Doc WIKI Debian

Backuppc

Backuppc

BackupPC Configuration

Docs Expliquant en detail la mise en place d'un serveur BackuPPC et la configuration de la svg d'un poste/serveur sur ce dernier:

Sauvegardes à distance avec BackupPC
Serveur de sauvegarde automatique : BackupPC

Installation

sudo aptitude install backuppc libfile-rsyncp-perl

Copier config apache backuppc:

cp /etc/backuppc/apache.conf /etc/apache2/sites-available/backuppc.conf

Appliquer la configuration apache:

a2ensite backuppc
systemctl restart apache2

Configuration

Serveur

htpasswd /etc/backuppc/htpasswd backuppc
Ajouter une machine

backuppc_add_machine.png

Client

Autoriser l'utilisateur backup à se connecter en ssh, en ajoutant le shell dans le fichier passwd:

backup:x:34:34:backup:/var/backups:/bin/sh

Il faut lui créer un dossier .ssh dans /home/backup, afin d'ajouter la clé ssh publique du serveur backuppc:

sudo vi /home/backup/.ssh/authorized_keys

Dans ce fichier, il faut copier-coller le contenu du fichier id_rsda.pub, dans /home/backuppc.ssh, du serveur backuppc.

Autoriser l’utilisateur backup à utiliser rsync, sans mdp avec sudo:

backup ALL=NOPASSWD: /usr/bin/rsync
su -s /bin/sh backuppc -c '/usr/share/backuppc/bin/BackupPC_sendEmail -u user@domain.org'

 

Iptables

Iptables

Memo Configuration

Memo commandes iptables


Accepter tout provenant d'une IP:

iptables -A INPUT -s 185.149.218.50 -j ACCEPT 
iptables -A OUTPUT -d 185.149.218.50 -j ACCEPT

Accepter ICMP:

iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT -> Tout accepter
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT -> Juste ICMP déjà établit par la machine	

Refuser tout sauf ce qui est déjà autorisé (dernière règle ) entrer:

iptables -P INPUT DROP

Accepter tout venant du réseau local:

iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -d 192.168.0.0/24 -j ACCEPT

Lister règles actives dans iptable:

iptables -L

Avec numéro de ligne (pratique quand on veut modifier ou supprimer une règle)

iptables -L --line-numbers

Supprimer une règle:

iptables -D INPUT/OUTPUT x (x= num ligne) ex: iptables -D INPUT 5

Ajouter une règle à la Xènieme position:

iptable -I INPUT/OUTPUT x règleaAppliquer ACCEPT -> ex iptables -I INPUT 3 -s 77.146.24.106 -p tcp -i etho0 --dport 80 -j ACCEPT

Remplacer une règle:

iptable -R INPUT/OUTPUT x règleaAppliquer ACCEPT -> ex iptables -R INPUT 3 -s 77.146.24.106 -p tcp -i etho0 --dport 80 -j ACCEPT

Sauvegarder configuration:

iptables-save -c
netfilter-persistent save -> Pour prise en compte au redémarrage (installer iptables-persistent avant, apt-get install iptables-persistent)

ou

iptables-save -c >> /etc/iptables/rules.v4 (Pareil qui netfilter-persistent save)
netfilter-persistent reload (Permet de tester si la config est bien sauvegardée)

Liens Utiles:

Doc Ubuntu
Developpez Forum - Iptables
ubuntu Forum

SSH

SSH

Permissions for .ssh folder

Memo droits à appliquer aux différents fichiers dans le dossier .ssh

chmod 700 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
chmod 644 ~/.ssh/config
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

Page github

Desktop

Desktop

Mojave Theme pour gnome

Installer Gnome TweakTool, l'outil permettant de personaliser Gnome et modifier theme avec le theme et icons de son choix

MacOS Theme → A mettre dans home/.themes (a créer si besoin)

MacOS Theme

Curseur souris version mojave → A mettre dans home/.icons (à créer si besoin)

drawing

Icones MacOS → A mettre dans home/.icons (à créer si besoin)


Pour avoir le dock version MacOS, installer plank → apt-get install plank

MacOs icons pour plank → A mettre dans home/.local/share/plank/themes

25 fonds d'écrans pour MacOS Mojave

Vidéo tutoriel pour aide installation

Dash To Dock


Pour mettre d'autres themes et icons, la procédure est le même, il suffit d'aller sur le site de Gnome Look pour DL des themes et icones

Desktop

Chromium - color emojis

Pour avoir les emojis colorés sur les naviagteurs chromium sur Linux

sudo dnf install google-noto-emoji-color-fonts
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> 
<fontconfig> 
  <alias> 
    <family>serif</family> 
    <prefer> 
      <family>Noto Color Emoji</family> 
    </prefer> 
  </alias> 
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Color Emoji</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Noto Color Emoji</family>
    </prefer>
  </alias>
</fontconfig>
fc-cache -f

Doc

Adding color emojis to Chrome on Fedora

Memo commandes

Description Commande Exemple
Set DNS with systemd (cmd) systemd-resolve --set-dns="DNS_IP" --interface=NET_INTERFACE systemd-resolve --set-dns="1.1.1.1" --interface=wlp2s0
Changer Disposition clavier stxkbmap langue stxkbmap fr → Pour mettre en français

Memo VI

memo commandes sur l'éditeur de texte vi

Remplacer texte:

Remplacer que la prochaine occurrence après le curseur:

:s/text_a_remplacer/texte_de_remplacement/g

Remplacer tout les occurrences:

:%s/text_a_remplacer/texte_de_remplacement/g


nftables memo

Memo sur la gestion du pare-feu netfilter, via l'outil nftables. 
Les commandes essentielles sont présentées, avec des exemples.

Gestion des tables

Création d'une table:

nft add table add inet example_filter

Ici notre table se nomme "example_filter".

Pour la liste des tables: Wiki nftable

Suppression d'une table :

nft delete table inet example_filter

Lister le contenu d'une table:

nft list inet example_filter

Gestion des chaines

Ensuite il va falloir ajouter des chaines à notre table et les lier à des "hooks". Ces derniers vont définir à quel type de hook de netfilter ils sont rattachés.

Ces chaines peuvent avoir n'importe quel nom, du moment qu'elles sont rattachées au bon hook (input, output...).

Ici on va créer une chaine "INPUT" et "OUPUT" pour que ça soit clair, mais on aurait pu les appeler autrement, du moment qu'ils bien rattachés aux hook:

nft add chain inet filter input '{type filter hook input priority 0;}'

nft add chain inet filter output '{type filter hook output priority 0;}'

Ici le "priority 0" faut référence à la priorité de la table, c'est à dire l'ordre de prise en compte des chaines. Par défaut c'est 0, mais on aurait pu créer plusieurs type de chaines, liées au hook 'input', mais avec des priorité déférentes.

On a donc la table suivante, avec ce contenu (commande nft list table inet filter):

table inet filter {
        chain input {
                type filter hook input priority filter; policy accept;
        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}

Gestion des règles

Ajout de règles

Ajout d'une règle:

nft add rule filter input regle_a_appliquer

Par exemple pour ouvrir le port 80:

nft add rule filter input dport 80 accept

Et pour bloquer tout ce qui n'est pas explicitement écrit, on place cette règle à la fin, donc après avoir dénifie toutes nos règles:

nft add rule filter input drop

Pareil, si on veut bloquer tout le traffic sortant:

nft add rule filter output drop

Insertion de règles

Si on veut ajouter des règles, il va falloir les insèrer. En effet, l'ajout du drop, aura pour conséquence la non prise en compte des règles ajoutée après.
il faut donc passer par une intsertion de règles par rapport à celles déjà présentes.

Pour cela, il faut d'abor lister nos règles avec l'option -a:

root@debian:~# nft -a list table ip mon_filtreIPv4
table ip mon_filtreIPv4 { # handle 4
        chain input { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport 80 accept # handle 4
        drop # handle 5
    }

    chain output { # handle 3
        type filter hook output priority filter; policy accept;
        tcp sport 80 accept # handle 7
        drop # handle 8
    }
}

le "handle" correspond à l'identifant de la règle.

Donc si on veut ajouter une règle autorisant l'accès au port ssh:

nft add rule inet filter input position 4 tcp dport 22 accept
nft add rule inet filter output position 7 tcp sport 22 accept

La règle sera donc ajouter après position ciblée (ici 4 et 7).

Si on veut ajouter la règle avant la position ciblé, il faut juste faire un insert:

nft insert rule inet filter input position 4 tcp dport 22 accept
nft insert rule inet filter output position 7 tcp sport 22 accept

Suppression d'une règle

Pour supprimer une règle, il faudra utiliser le même principe que l'ajout, c'est à dire utiliser les handle (avec la command nft -a list).

Par exemple pour supprimer la règle en position 7:

nft delete rule inet filter input handle 7

Sauvegarde des règles

La sauvegarde des règles de nftable est assez similaire à iptables.

On sauvegarde les règles existantes dans un fichier:

nft list table inet filter > nft_rules.rules

 Les règles seront donc sauvegardées dans le fichier nft_rules.rules.

Pour restaurer les règles:

nft -f nft_rules.rules

 Comme iptables, si on redémarre la machine, les règles ne sont pas persistantes.

Il faut soit faire un script qui se lance au démarrage et qui restaure nos règles avec "nft -f", soit ajouter la ligne suivante au fichier /etc/network/interface:

allow-hotplug ens192
iface ens192 inet static
        address 192.168.5.2/24
        gateway 192.168.5.254
        pre-up nft -f /etc/nftables/nft.fw

Ici nos règles sont dans le fichier /etc/nftables/nft.fw.

Cela ne marche que sur les systèmes sous debian.

Ressources:

→ Cours nftables IT-Connect

→ Get Started with nftables

→ Wiki nftables

Wireguard - Mise en place

Configuration serveur Wireguard

Documentation de mise en place et configuration du VPN wireguard

Installation

Sous debian 12, wireguard est déjà installé dans les packages de base. S’il n’est pas installé :

apt update && apt install wireguard

Configuration Serveur

Génération de fichier contenant la clé publique du serveur, ainsi que la clé privée :

root@wireguard:~# wg genkey |sudo tee /etc/wireguard/wg-srv-private.key | wg pubkey | sudo tee /etc/wireguard/wg-srv-public.key

Cela va générer 2 fichiers :

 

Ensuite, on va créer le fichier de configuration, contenant les paramètres du serveur, ainsi que la configuration des clients autorisés à se connecter dessus.

On va donc créer le fichier /etc/wireguard/wg0.conf :

root@wireguard:~# vi /etc/wireguard/wg0.conf
[Interface]

Address = X.X.X./24
SaveConfig = true
ListenPort = 51820
PrivateKey = CléPrivéeServeurWg

Détail des options :

Ensuite on démarre notre tunnel wireguard :

sudo wg-quick up wg0

Après ça, on devrait voir apparaître notre tunnel, via la commande « ip -a » :

root@wireguard:~# ip a show dev wg0

13: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.8.8.254/24 scope global wg0
       valid_lft forever preferred_lft forever

Et aussi avec la commande « wg show », pour voir les interfaces de wireguard actives :

root@wireguard:~# wg show 

interface: wg0
  public key: snWqZfuc54sEVrWBghBkxi1LkO1X4W1t0sjtJD5S9n8=
  private key: (hidden)
  listening port: 41820

Pour que notre configuration soit persistante et active après redémarrage du serveur, on créer un service associé :

sudo systemctl enable wg-quick@wg0.service

Pour que les paquets soient routées d’une interface à une autre, il faut activer l’IP Forwarding :

Dans le fichier /etc/sysctl.conf, décommenter la ligne suivante et modifier la valeur :

net.ipv4.ip_forward=1

Il faut aussi activer l’IP masquerade, pour mettre en place le NAT sur la machine.

Configuration du parefeu nftable :

table inet filter {

        chain input {
                type filter hook input priority filter; policy accept;
                ip saddr 10.8.8.0/24 accept
                udp dport 41820 accept
                ct state vmap { invalid : drop, established : accept, related : accept }
                drop
        }

        chain output {
                type filter hook output priority filter; policy accept;
                ct state invalid drop
        }

        chain prerouting {
                type nat hook prerouting priority filter; policy accept;
        }

        chain postrouting {
                type nat hook postrouting priority filter; policy accept;
                ip saddr 10.8.8.0/24 oif "ens256" snat ip to 192.168.1.1
                ip saddr 10.8.8.0/24 masquerade
        }
}

Ajout d'un client

Après avoir créer un couple de clé privée / publique sur le client, via wireguard sous windows, il faut ajouter le client sur le serveur.

Arret du service wgà:

systemctl stop wg-quick@wg0.service

Ajout du client dans le fichier /etc/wireguard.wg0.conf:

# Config VPN Exemple
[Peer]
PublicKey = 4eLau52rcERa1CTCbISUs3ysCnkpjqb1j0K2fhuKBTE=
AllowedIPs = 10.8.8.1/32

On relance le service de wireguard:

systemctl start wg-quick@wg0.service

On peut aussi utiliser la commande suivante sur le serveur, pour ajouter le client (évitant de redémarrer le service):

sudo wg set wg0 peer 4eLau52rcERa1CTCbISUs3ysCnkpjqb1j0K2fhuKBTE= allowed-ips 10.8.8.1/32

la configuration côté client, doit être la suivante:

[Interface]
PrivateKey = client_priv_key
Address = 10.8.8.1/24

[Peer]
PublicKey = server_pub_key
AllowedIPs = 10.8.8.0/24
Endpoint = ip_publique_serverur_wg:41820

Si tout est fonctionnel, notre client doit pouvoir pinguer le serveur.

Docs supplémentaires

→ Digital Ocean: wireguard

→ IT-Connect: Mise en place wireguard debian 11

Création VLANS - Debian

Commandes pour mettre en place des VLANS sous LINUX. Debian est utilisé mais les commandes marche sur la plupart des distributions linux.

Installation package

Installation du package pour activer la prise en charge des VLANS:

apt update
apt install vlan

Activation du module:

echo 8021q >> /etc/modules
modprobe 8021q

Maintenant que le module est activé, il faut passer à la mie en place de nos VLANS. 

Création de l'interface virtuelle VLAN

On va créer un vlan 10, rattaché à l'interface eth0 dans notre exemple, à adapter en fonction des VLANS à créer et du nom des interfaces réseaux. L'interface eth0.10, correspond au nom de notre interface VLAN.
Ce nom permet de voir l'id du vlan, ainsi que l'interface rattachée.

# Création de l'interface
ip link add link eth0 name eth0.10 type vlan id 10
# Activation de l'interface
ip link set dev eth0.10 up

Si on veut rattacher une IP à notre interface:

ip addr add 192.168.10.1/24 dev eth0.10

Ces commandes ne sont par persistante, au prochain redémarrage, notre interface VLAN sera perdue.
Pour la rendre persistante, il faut éditer le fichier /etc/network/interfaces, et ajouter les lignes suivantes:

auto eth0.10
  address 192.168.10.1
  netmask 255.255.255.0
  vlan-raw-device eth0

La ligne "vlan-raw-device" est optionnelle si le nom de l'interface est du type nomEth.idVLAN.

Source: => Vlan : sur Debian ou Ubuntu

Création service systemd

Sur les distributions utilisant systemd, voici comment créer un fichier service, par exemple pour lancer un script au démarrage.

En effet, si on veut qu'un script se lance au démarrage, l'option la plus adapté est de créer un service systemd, plutot que de passer par rc.local, qui est obsolète.

Exemple de structure d'un fichier "service":

[Unit]
Description=
After=
ConditionPathExists=
 
[Service]
Type= 
ExecStartPre=
ExecStart=
ExecStop=
ExecStopPost=
RemainAfterExit=
Restart=
 
[Install]
WantedBy=
 

Ce fichier se décompose en 3 sections:

Pour le détail des options supplémentaire, la doc de redhat est assez fournie. 

Exemple pour lancer un script au lancement du système:

[Unit]
Description="nom du service"
After=network.target

[Service]
ExecStart=/chemin/du/script
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Il faut créer ce fichier dans /etc/systemd/system, et le nom doit être de type "nom_du_service.service".

Ensuite pour activer ce service au lancement du système:

systemctl enable mon_service.service

Liens supplémentaires

Liens doc pour plus d'exemples et de précisions:

linuxtricks - systemd : Créer des services, timers (unités)

Article nextinpact

Doc redhat

Bash Memo

Raccourcis Clavier

Liste des raccourcis clavier de bash qui peuvent être utile et faire gagner du temps:

Suppression mot courant du curseur jusqu’à la fin ctrl + d
Suppression mot courant du curseur jusqu’au début ctrl + w
Déplacement début du mot courant alt + b
Déplacement fin du mot courant alt + f
Déplacement début ligne ctrl + a
Déplacement fin ligne ctrl +e
Suppression texte curseur => Fin ligne ctrl +k 
Suppression texte début ligne => Curseur ctrl +u
Clean le terminal ctrl + l