it-swarm.com.de

Ubuntu Server 18.04.1 Netplan und UFW

Ok, also ich möchte einen Router mit Ubuntu Server 18.04 erstellen (habe bereits die Hardware und alles funktioniert, ich habe derzeit IPfire drauf). Ich habe mir alle Router-Distributionen angesehen und sie scheinen in ihrem Umfang eher begrenzt zu sein.

Quellen

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

Die Firewall-Anleitung: https://help.ubuntu.com/lts/serverguide/firewall.html

Ubuntu Server verwendet jetzt netplan. Ich habe mir die Dokumentation angesehen und es ist ziemlich klar, dass ich nicht genau mit dieser Verwendung des Betriebssystems vertraut bin. Ich hatte gehofft, jemand könnte mir helfen, die Art und Weise, wie dieser Artikel es macht (wie ich es besser kenne), in die modernere Implementierung zu „übersetzen“.

Wie würde ich eine Netplan-Version davon machen?

# 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

Außerdem würde ich es vorziehen, UFW direkt mit iptables zu verwenden, da die meisten Regeln in UFW auch dem entsprechen, was die meisten Artikel besagen. Ein wesentlicher Unterschied zum Artikel ist, dass er dies für den Abschnitt NAT hat.

Aus dem Artikel

*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

Aus der Firewall-Anleitung

# 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

Aber nachdem ich diese beiden Abschnitte herausgefunden habe. Ich sollte in der Lage sein, den Rest zu erledigen. Jede Hilfe wäre toll!

1
soundconjurer

Gemäß meinen Kommentaren würde ich netplan hier nicht verwenden. Es ist vollkommen in Ordnung, bis Sie versuchen zu überbrücken, und ich konnte es nicht zuverlässig zum Arbeiten bringen. IMO ist noch nicht fertig. Ab dem 18.04 ist die Umstellung auf das klassische ifup Netzwerkmanagement die kluge Sache.

Ich benutze ufw nicht in meinem eigenen Build , aber es kann nicht so schwer sein, sie zu übersetzen (berühmte letzte Worte).

firewalld verwendet bemerkenswert ähnliche Befehle für diese und sie sollten direkt in UFW übersetzt werden. Die Befehle sind buchstäblich "klassische" Firewall-Befehle. Sie sind bei ufw nicht getestet und müssen möglicherweise von jemandem optimiert werden, der ufw verwendet.

Ich mag es nicht wirklich, wie die ufw -Notizen eine Reihe von IP-Adressen über eine Schnittstelle angeben (obwohl Sie dazu gezwungen sein könnten), aber sie sollten sich in so etwas wie diese übersetzen lassen. enp1s0 ist meine 'externe' Schnittstelle, und br0 ist im Grunde alle meine anderen Schnittstellen, die miteinander verbunden sind

Als Referenz sieht mein firewalld Setup folgendermaßen aus:

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

Der vorletzte Befehl ist kritisch

Und das sollte so etwas bedeuten.

#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

Die voreingestellte netplan Konfiguration, wie ich mich erinnere, gibt alle die automatischen IP-Adressen aus.

Dies wird möglicherweise ein Problem sein, wenn Sie einen DHCP-Server ausführen. Sie möchten eine statische IP-Adresse für diese Schnittstelle.

Wenn Sie müssen , sieht eine minimale Netplan-Konfiguration so aus - ich denke, es hat funktioniert, bevor ich versucht habe, Dinge zu überbrücken.

  • enp1s0 ist meine externe Schnittstelle
  • enp1s0 ist intern.

Ich bin nicht ganz sicher, warum in enp2s0 DHCP aktiviert ist - möglicherweise können Sie diese Zeilengruppe entfernen. Optional ist nützlich, da möglicherweise nicht immer etwas an den Port angeschlossen ist

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

Das volle Guthaben geht an: https://www.ascinc.com/blog/linux/how-to-build-a-simple-router-with-ubuntu-server- 18-04-1-lts-bionic-beaver /

Ich gehe im Folgenden davon aus, dass Sie Ubuntu 18.04 gerade installiert haben und noch nichts damit gemacht haben.

0. Schalten Sie die Firewall ein, um sicherzustellen, dass die Routing-Regeln tatsächlich angewendet werden

Sudo ufw enable

1. Richten Sie die Netzwerkschnittstellen ein

Zuerst müssen wir die Netzwerkschnittstellen konfigurieren, die wir verwenden werden. WAN (enp0s7) - Diese Schnittstelle erhält eine IP-Adresse vom ISP, daher verlassen wir sie über DHCP.

LAN (enp3s0f0) - Wir konfigurieren die Schnittstelle mit einer statischen IP innerhalb des Subnetzes, das wir für das lokale Netzwerk verwenden werden

Nur ein kleiner Hinweis, Ubuntu 18.04 verwendet nicht die traditionelle Netzwerkkonfigurationsdatei/etc/network/interfaces. Es verwendet NETPLAN. In meinem Fall gibt es eine Konfigurationsdatei namens 50-cloud-init.yaml im Ordner/etc/netplan /. In Ihrem Fall hat die Datei möglicherweise einen anderen Namen. Suchen Sie einfach nach der Datei mit der Erweiterung .yaml im Ordner netplan.

Öffnen wir es mit nano:

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

Bearbeiten Sie es entsprechend Ihren Netzwerkanforderungen. In meinem Beispiel habe ich Folgendes konfiguriert:

# 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

Zusammenfassend lässt sich sagen, dass das WAN enp0s7 die IP-Adresse vom Modem des Internetproviders erhält. enp3s0f0 ist ein LAN-Teil des Routers. Wir benötigen eine statische IP-Adresse und DNS-Server (in meinem Beispiel habe ich die von Google verwendet). Außerdem haben wir auf enp3s0f0 kein Gateway konfiguriert.

Speichern Sie die Konfiguration mit folgenden Befehlen:

Sudo netplan generate
Sudo netplan apply

2. EINRICHTEN EINES DHCP-SERVER

Als Nächstes möchten wir einen DHCP-Server einrichten. Wir möchten wirklich nicht jeden Client mit statischer IP innerhalb des LAN-Netzwerks konfigurieren. Für diese Aufgabe müssen wir das folgende Paket installieren.

Sudo apt-get install isc-dhcp-server

Als nächstes müssen wir die Datei /etc/default/dhcpd.conf bearbeiten. Dies teilt dem DHCP-Server mit, auf welcher Netzwerkschnittstelle er empfangsbereit sein soll. In meinem Fall ist es natürlich enp3s0f0, die LAN-Schnittstelle.

Wir geben den Befehl ein:

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

Und entsprechend bearbeiten, in meinem Fall ist es:

INTERFACES="enp3s0f0"

Der nächste Schritt wäre die Konfiguration des DHCP-Servers. Dies erfolgt durch Bearbeiten der Datei /etc/dhcp/dhcpd.conf

Sudo nano /etc/dhcp/dhcpd.conf

Hier finden Sie eine Reihe verschiedener Parameter, von denen die meisten vor jeder Zeile mit # kommentiert sind. Um es kürzer zu halten, schreibe ich nur die von mir verwendeten Parameter auf und/oder bearbeite sie entsprechend meinen Bedürfnissen. Wenn Sie möchten, können Sie den gesamten Inhalt dieser Datei löschen und einfach den folgenden Code kopieren/einfügen. Natürlich ändern Sie die IPs, GATEWAYS usw. entsprechend Ihrer eigenen Netzwerkkonfiguration.

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;
}

Übernehmen Sie nun die Einstellungen und aktivieren Sie den DHCP-Server beim Start mit den folgenden Befehlen:

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

Mit dem folgenden Befehl überprüfen wir den Status.

Sudo systemctl status isc-dhcp-server

Wenn alles korrekt eingerichtet ist, muss eine Zeile mit der Aufschrift „ACTIVE“ stehen. Andernfalls haben Sie etwas in der Datei /etc/dhcp/dhcpd.conf durcheinander gebracht. Möglicherweise fehlt ein Semikolon oder eine Klammer.

3. FIREWALL KONFIGURIEREN

Um einen funktionierenden Router zu haben, müssen wir die Firewall richtig konfigurieren. Dies geschieht durch Aufschreiben einiger iptables-Regeln. Um die Regeln beim Neustart des Servers beizubehalten, habe ich ein Skript erstellt, das beim Booten ausgeführt wird.

In Ubuntu 18.04 existiert die Datei /etc/rc.local nicht mehr. Aber wir können es trotzdem schaffen mit:

Sudo nano /etc/rc.local

Kopieren Sie anschließend das folgende Skript, und fügen Sie es ein. Es gibt Kommentare, die jede iptables-Regel erläutern. Sie können sie löschen, wenn Sie möchten, aber Sie dürfen NICHT #!/Bin/bash löschen. Ändern Sie auch enp0s7 und enp3s0f0, wenn Ihre Netzwerkschnittstellen unterschiedliche Namen haben.

#!/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

Dieses Skript muss beim Booten ausgeführt werden, daher müssen wir die Datei mit dem folgenden Befehl ausführbar machen:

Sudo chmod 755 /etc/rc.local

Die Standardeinstellungen der UFW-Firewall wirken sich auf unsere Konfiguration aus. Damit unser Router ordnungsgemäß funktioniert (um Pakete von WAN an LAN weiterzuleiten), müssen Sie den folgenden Parameter in/etc/ufw/sysctl aktivieren CONF-Datei. Wir führen den Befehl aus:

Sudo nano /etc/ufw/sysctl.conf

Jetzt entfernen wir einfach # vor der folgenden Zeile:

net/ipv4/ip_forward=1 

Na, bitte! Wir haben einen funktionierenden Router. Führen Sie einfach einen Sudo-Neustartbefehl aus, um den Server neu zu starten.

2
Vince Pike