# Paramétrage réseau

# Obtenir des informations sur le réseau de la machine

Pour afficher les adresses IP et MAC des cartes réseaux :

```
ip a
```

Pour afficher les IP plus clairement et avec de la couleur :

```bash
ip -br -c a
```

Pour afficher les serveurs DNS utilisé :

```
cat /run/systemd/resolve/resolv.conf
```

Pour obtenir des informations avancé sur les cartes réseaux :

```
sudo lshw -class network
```

# Configuration IP et interfaces sur Ubuntu (⩾20.04)

Ubuntu à partir de Ubuntu 20.04 (environ) utilise Netplan pour la configuration IP. Netplan s'appuie sur des fichiers YAML situé dans **`/etc/netplan/`.**

Pour appliquer les modification du fichier, exécuter :

```bash
sudo netplan apply
```

## Usage courant

Exemple de fichier pour une configuration via DHCPv4 :

```yaml
network:
  ethernets:
    enp3s0:
      dhcp4: true
  version: 2
```

Exemple de fichier pour une configuration IPv4 statique :

```yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 10.10.10.2/24
      routes:
        - to: default
          via: 10.10.10.1
      nameservers:
        search: [mydomain, otherdomain]
        addresses: [10.10.10.1, 1.1.1.1]
```

Exemple de fichier pour une configuration IPv4 via DHCP et IPv6 statique :

```yaml
network:
  ethernets:
    ens18:
      dhcp4: true
      dhcp6: false
      addresses:
        - 2a01:9093:fd2e:5a0e:7714:59ce:0f8a:4/64
      #gateway6: fe80::7e2b:1302:814a:ea68    # Obsolete
      routes:
        - to: "::/0"    # defaut ipv6
          via: "fe80::7e2b:1302:814a:ea68"
          on-link: true

  version: 2
```

**`on-link: true`** indique que la passerelle spécifiée (**`via`**) est directement accessible sur le lien local (le réseau local). Cela signifie que l'interface réseau n'a pas besoin de savoir exactement où se trouve la passerelle par l'intermédiaire d'une autre route.

## Usage avancé  


### LACP

Exemple de fichier pour lier deux interfaces via LACP :

```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: no
    eno2:
      dhcp4: no
  bonds:
    bond0:
      interfaces: [eno1, eno2]
      addresses: [192.168.2.2/24]
      # gateway4: 192.186.2.1    # Obsolete
      routes:
        - to: "0.0.0.0/0"  # Route par défaut pour tout le trafic IPv4
          via: 192.168.2.1
      parameters:
        mode: 802.3ad
        transmit-hash-policy: layer3+4
        mii-monitor-interval: 1
      nameservers:
        addresses:
          - "8.8.8.8"
          - "9.9.9.9"
```

#### Paramètres du bond :

- `<strong>mode: 802.3ad</strong>` : Il s'agit du mode d'agrégation **LACP (Link Aggregation Control Protocol)**, conforme à la norme IEEE 802.3ad. Ce mode est utilisé pour équilibrer la charge et offrir la tolérance aux pannes si le commutateur réseau supporte LACP.
- `<strong>transmit-hash-policy: layer3+4</strong>` : Cette politique d'agrégation hash sur la base des informations des couches 3 (IP) et 4 (port TCP/UDP), ce qui permet un équilibrage de charge plus efficace.
- `<strong>mii-monitor-interval: 1</strong>` : Cela configure la fréquence de surveillance de l'état des interfaces membres du bond, ici toutes les 1 ms. Si une interface tombe, elle sera retirée du bond et le trafic sera redirigé via les autres interfaces.

### VLAN

#### Prérequis

Pour pouvoir utiliser les tags vlan et configurer nos cartes réseau pour les utiliser avec Netplan, il faut d’abord s'assurer que le module VLAN (`8021q`) est chargé dans le noyau Linux.

Pour vérifier si le module VLAN (8021q) est chargé sur un système Linux, utilisez la commande `lsmod` pour lister les modules du noyau chargés. Ouvrez un terminal et exécutez :

```bash
$ lsmod | grep 8021q
```

Si le module VLAN est chargé, vous verrez "8021q" dans le résultat. Sinon, cela signifie que le module n'est pas chargé.

Si le module n'est pas chargé, vous pouvez le faire manuellement avec la commande `modprobe` :

```bash
$ sudo modprobe 8021q
```

Après cela, vérifiez à nouveau son statut avec `lsmod | grep 8021q`. Si le module est chargé, il apparaîtra dans la liste.

Pour que le module VLAN (8021q) soit chargé automatiquement au démarrage, ajoutez-le au fichier `/etc/modules` :

```bash
$ echo '8021q' | sudo tee -a /etc/modules
```

Cela garantira que le module est chargé à chaque démarrage du système.

#### Exemples de configurations

Exemple de fichier pour configurer une interface physique et une interface VLAN :

```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      dhcp4: no
      addresses:
        - 192.168.1.40/24
      routes:
        - to: default
          via: 192.168.1.101
      nameservers:
          addresses: [8.8.8.8, 8.8.4.4]

  vlans:
    vlan10:
      id: 10
      link: ens18
      addresses: [192.168.10.2/24]
```

# DNS

### Sous Linux Mint

Pour vider le cache DNS

```bash
resolvectl flush-caches
```

Pour consulter l'état du cache :

```bash
resolvectl statistics
```

# Pare-Feu

Configuration d'un pare-feu sous Linux.

<p class="callout warning">Configurer un Pare Feu à distance (via SSH par exemple) peut empêcher la connexion. Il est important de configurer les règles afin de ne pas se bloquer soi même.</p>

## UFW

UFW pour Uncomplicated Firewall est préinstallé sur Ubuntu mais peut être installé avec APT si besoin et sur d'autres distros.

### Commandes utiles

Activer ou désactiver UFW :

```bash
sudo ufw enable
```

Vérifier l'état et les règles de UFW :

```bash
sudo ufw status
sudo ufw status verbose
```

Vérifier les règles existantes quand le pare feu n'est pas actif (pratique pour vérifier si on pourra encore accéder au serveur en SSH après activation) :

```bash
sudo ufw show added
```

### Ajouter des règles

UFW permet d'ajouter des règles efficacement via une syntaxe simplifié. Par exemple, UFW admet par défaut qu'on créer une règle pour le trafique entrant.

#### Règles simples

Ajouter une règle simple :

```bash
sudo ufw allow [port/protocole]
sudo ufw allow 22/tcp

sudo ufw deny 56/tcp
```

Sans précision du protocole, la règle s'appliquera à TCP et UDP.

#### Règles plus complexes

Ajouter une règle sur une plage de ports :

```bash
sudo ufw allow/deny [Port_début:Port_fin]/protocole
```

Ajouter une règle associé à une adresse IP de machine ou de réseau :

```bash
sudo ufw deny from 192.168.1.2
sudo ufw deny from 192.168.1.0/24
```

Ajouter une règle liée à une adresse IP et un port :

```bash
sudo ufw allow from [ADRESSE_IP] to any port [PORT]
sudo ufw allow from [ADRESSE_IP] to any port [PORT] proto tcp
```

Ici, "any" fait référence à "n'importe quelle adresse IP de CETTE machine"

Ajouter une règle à une position précise :

```bash
sudo ufw insert 2 deny proto udp to any port 514 from 1.2.3.4
```

### Supprimer des règles

Pour supprimer des règles il faut d'abord les afficher avec une numérotation puis supprimer la règle via son numéro :

```bash
sudo ufw status numbered

sudo ufw delete 4
```

### Sources

- [https://www.hostinger.com/fr/tutoriels/comment-configurer-pare-feu-ufw](https://www.hostinger.com/fr/tutoriels/comment-configurer-pare-feu-ufw)
- [https://doc.ubuntu-fr.org/ufw](https://doc.ubuntu-fr.org/ufw)