web-dev-qa-db-fra.com

Ubuntu Server 18.04.1 Netplan et UFW

Ok, je veux donc faire un routeur en utilisant Ubuntu Server 18.04 (j'ai déjà le matériel et tout fonctionne, j’ai IPfire actuellement dessus). J'ai examiné toutes les distributions de routeur et elles semblent plutôt limitées.

Sources

L'article: https://arstechnica.com/gadgets/2016/04/the-ars-guide-to-building-a-linux-router-from-scratch/

Le guide de pare-feu: https://help.ubuntu.com/lts/serverguide/firewall.html

Ubuntu Server utilise maintenant netplan. J'ai consulté la documentation et il est clair que je ne suis pas très doué pour cette utilisation du système d'exploitation. J'espérais que quelqu'un pourrait peut-être m'aider à "traduire" la façon dont cet article le fait (comme je le connais mieux) dans la mise en œuvre plus moderne.

Comment pourrais-je en faire une version netplan?

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The WAN interface, marked Lan1 on the case
auto p4p1
iface p4p1 inet dhcp

# The LAN interface, marked Lan2 on the case
auto p1p1
iface p1p1 inet static
    address 192.168.99.1
    netmask 255.255.255.0

De plus, je préférerais utiliser UFW plutôt que directement avec iptables, car la plupart des règles dans UFW sont également celles énoncées dans la plupart des articles. Une différence clé de l'article est qu'il a ceci pour la section NAT.

De l'article

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# p4p1 is WAN interface, #p1p1 is LAN interface
-A POSTROUTING -o p4p1 -j MASQUERADE

COMMIT

Par le pare-feu guide

# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

# don’t delete the ‘COMMIT’ line or these nat table rules won’t be processed
COMMIT

Mais, après avoir compris ces deux sections. Je devrais être capable de gérer le reste. Toute aide est la bienvenue!

1
soundconjurer

Selon mes commentaires - je ne voudrais pas utiliser netplan ici. C'est parfait jusqu'à ce que vous essayiez de créer un pont et que je ne puisse pas le faire fonctionner de manière fiable. L'OMI n'est pas prêt. À partir de 18.04, il est judicieux de revenir au système classique ifup.

Je n'utilise pas ufw dans ma propre version mais cela ne peut pas être si difficile de les traduire (derniers mots célèbres).

firewalld utilise des commandes remarquablement similaires pour celles-ci et elles doivent être traduites directement en UFW. Les commandes sont littéralement des commandes "classiques" de pare-feu. Ils ne sont pas testés sur ufw et peuvent nécessiter un réglage de la part de quelqu'un qui utilise ufw.

Je n'aime pas vraiment comment les notes ufw donnent une plage d'adresses IP sur une interface (même si vous y êtes forcé), mais cela devrait se traduire par quelque chose comme ça. enp1s0 est mon interface 'externe', et br0 est essentiellement toutes mes autres interfaces pontées

Pour référence, ma configuration firewalld ressemble à ceci:

Sudo firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o  enp1s0 -j MASQUERADE
Sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i br0 -o  enp1s0 -j ACCEPT
Sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Sudo firewall-cmd --runtime-to-permanent

La seconde dernière commande est critique

Et cela devrait se traduire par quelque chose comme ça.

#masquerade traffic coming out from enp1s0 
-A POSTROUTING 0 -o  enp1s0 -j MASQUERADE
# Forward and accept any traffic from br0 to enp1s0  
-A FORWARD 0 -i br0 -o  enp1s0 -j ACCEPT
#accept traffic on existing connections
-A FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT

La configuration par défaut de netplan, comme je me souviens bien, donne all les adresses IP automatiques en sortie.

Cela posera éventuellement un problème lorsque vous exécuterez un serveur DHCP. Vous voulez une adresse IP statique sur cette interface.

Si vous devez , une configuration minimale de netplan ressemble à ceci - je pense que cela a fonctionné avant que j'essaye de rapprocher les choses.

  • enp1s0 est mon interface externe
  • enp1s0 est interne.

Je ne suis pas tout à fait sûr de savoir pourquoi dhcp est activé sur enp2s0 - vous pourrez peut-être supprimer cette strophe. Facultatif est utile car il est possible que quelque chose ne soit pas toujours branché sur le port.

network:
    ethernets:
        enp1s0:
            addresses: []
            dhcp4: true
        enp2s0:
            addresses: 
                - 192.168.2.1/24
            dhcp4: true
            optional: true
    version: 2
2
Journeyman Geek

Le crédit intégral va à: https://www.ascinc.com/blog/linux/how-to-build-a-simple-router-with-ubuntu-server- 18-04-1-lts-bionic-beaver /

Je supposerai pour le suivant que vous venez d’installer Ubuntu 18.04 et que vous n’avez encore rien fait.

0. Activez le pare-feu pour vous assurer que les règles de routage sont réellement appliquées

Sudo ufw enable

1. Configuration des interfaces réseau

Premièrement, nous devons configurer les interfaces réseau que nous utiliserons. WAN (enp0s7) - cette interface obtiendra une adresse IP du FAI, nous la laissons donc en utilisant DHCP.

LAN (enp3s0f0) - nous configurons l'interface avec une adresse IP statique dans le sous-réseau que nous allons utiliser pour le réseau local

Juste une petite remarque, Ubuntu 18.04 n’utilise pas le fichier de configuration réseau traditionnel/etc/network/interfaces. Il utilise NETPLAN. Dans mon cas, il existe un fichier de configuration appelé 50-cloud-init.yaml dans le dossier/etc/netplan /. Dans votre cas, le fichier peut avoir un nom différent, il suffit de chercher le fichier avec l'extension .yaml dans le dossier netplan.

Ouvrons-le avec nano:

Sudo nano /etc/netplan/50-cloud-init.yaml

Modifiez-le en fonction de vos besoins réseau. Dans mon exemple, j'ai configuré comme suit:

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s7:
            dhcp4: true
        enp3s0f0:
            addresses:
            - 192.168.1.1/24
            dhcp4: false
            nameservers:
                addresses:
                - 8.8.8.8
                - 8.8.4.4
                search: []
    version: 2

En résumé, enp0s7, qui est le réseau WAN, obtient l’IP du modem du fournisseur Internet. enp3s0f0 est une partie LAN du routeur. Nous en avons besoin pour avoir une IP statique et des serveurs DNS (dans mon exemple, j’utilisais Google). Nous n’avons pas non plus configuré de passerelle sur enp3s0f0.

Enregistrez la configuration avec les commandes suivantes:

Sudo netplan generate
Sudo netplan apply

2. CONFIGURATION D'UN SERVEUR DHCP

Ensuite, nous voulons configurer un serveur DHCP. Nous ne souhaitons vraiment pas configurer chaque client avec une adresse IP statique dans le réseau LAN. Pour cette tâche, nous devons installer le package suivant.

Sudo apt-get install isc-dhcp-server

Ensuite, nous devons éditer le fichier /etc/default/dhcpd.conf. Cela indique au serveur DHCP quelle interface réseau il doit écouter. Dans mon cas, bien sûr, enp3s0f0, l'interface LAN.

Nous entrons dans la commande:

Sudo nano /etc/default/isc-dhcp-server

Et éditez en conséquence, dans mon cas c'est:

INTERFACES="enp3s0f0"

La prochaine étape serait la configuration du serveur DHCP. Ceci est fait en éditant le fichier /etc/dhcp/dhcpd.conf

Sudo nano /etc/dhcp/dhcpd.conf

Voici un tas de paramètres différents, la plupart d'entre eux sont commentés avec # avant chaque ligne. Pour le raccourcir, je n'écrirai que les paramètres que j'ai utilisés et/ou les modifierai en fonction de mes besoins. Si vous le souhaitez, vous pouvez supprimer tout le contenu de ce fichier et simplement copier/coller le code ci-dessous. Bien sûr, vous modifiez les adresses IP, GATEWAYS, etc. en fonction de votre propre configuration de réseau.

option domain-name "whatever.you.want";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
     range 192.168.1.101 192.168.1.200;
     option subnet-mask 255.255.255.0;
     option routers 192.168.1.1;
     option broadcast-address 192.168.1.255;
}

Maintenant, appliquons les paramètres et activons le serveur DHCP au démarrage avec les commandes suivantes:

Sudo systemctl restart isc-dhcp-server
Sudo systemctl enable isc-dhcp-server

Avec la commande suivante, nous vérifions le statut.

Sudo systemctl status isc-dhcp-server

Si tout est correctement configuré, il doit y avoir une ligne disant "ACTIVE". Sinon, vous avez gaché quelque chose dans le fichier /etc/dhcp/dhcpd.conf. Il manque peut-être un point-virgule ou un support.

3. CONFIGURATION DU PARE-FEU

Pour avoir un routeur fonctionnel, nous devons configurer le pare-feu correctement. Ceci est fait en écrivant quelques règles iptables. Afin de préserver les règles si le serveur est redémarré, j'ai créé un script à exécuter au moment du démarrage.

Dans Ubuntu 18.04, le fichier /etc/rc.local n’existe plus. Mais on peut toujours le créer avec:

Sudo nano /etc/rc.local

Ensuite, copiez/collez le script suivant. Il y a des commentaires expliquant chaque règle iptables. Vous pouvez les supprimer si vous le souhaitez, mais vous ne devez PAS supprimer #!/Bin/bash. Changez également enp0s7 et enp3s0f0 si vos interfaces réseau ont des noms différents.

#!/bin/bash

# /etc/rc.local

# Default policy to drop all incoming packets.
iptables -P INPUT DROP
iptables -P FORWARD DROP

# Accept incoming packets from localhost and the LAN interface.
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i enp3s0f0 -j ACCEPT

# Accept incoming packets from the WAN if the router initiated the
#  connection.
iptables -A INPUT -i enp0s7 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT

# Forward LAN packets to the WAN.
iptables -A FORWARD -i enp3s0f0 -o enp0s7 -j ACCEPT

# Forward WAN packets to the LAN if the LAN initiated the connection.
iptables -A FORWARD -i enp0s7 -o enp3s0f0 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT

# NAT traffic going out the WAN interface.
iptables -t nat -A POSTROUTING -o enp0s7 -j MASQUERADE

# rc.local needs to exit with 0
exit 0

Ce script doit être exécuté au démarrage, nous devons donc rendre le fichier exécutable avec la commande suivante:

Sudo chmod 755 /etc/rc.local

Les paramètres par défaut du pare-feu UFW gâchent notre configuration et, pour que notre routeur fonctionne correctement (pour transférer les paquets de WAN à un réseau local), vous devez activer le paramètre suivant dans/etc/ufw/sysctl. fichier .conf. Nous lançons la commande:

Sudo nano /etc/ufw/sysctl.conf

Maintenant, nous supprimons simplement # devant la ligne suivante:

net/ipv4/ip_forward=1 

Nous y voilà! Nous avons un routeur qui fonctionne, il suffit de faire une commande de redémarrage Sudo pour redémarrer le serveur.

2
Vince Pike