@frankm Alles Klar!
Wie schon erwähnt, für meine Zwecke rechts! Die Jahre über hat gute Dienste geleistet (PCI-e und HDD) und wird hoffentlich auch noch ein paar Jahre bis zum nächsten Umbau tun!
Vielen Dank!
RockPro64 - Firewall mit zwei LAN Schnittstellen!
-
Ich benutze ja schon länger für verschiedene Einsatzzwecke USB3-to-LAN-Schnittstellen. Einen dieser Adapter, habe ich schon jahrelang an meiner IPFire (IntelNUC).
Nun wollte ich mal versuchen, wie das so aussieht am ROCKPro64. Wird sie erkannt, läuft sie, was für Probleme tauchen auf usw. Ich habe mich so ziemlich an folgenden Beitrag gehalten https://forum.frank-mankel.org/topic/120/ubuntu-bionic-ip-adresse-ändern
Also, was haben wir vor? Zwei Schnittstellen, eth0 holt sich per DHCP die Informationen aus meinem LAN. Die Schnittstelle enx000acd26e2c8 bildet ein LAN, das ganze soll durch iptables geschützt sein. Kein Zugriff von außen!
Hardware
- ROCKPro64 v2.1 2GB RAM
- USB-to-LAN DeLock 62121
Software
rock64@rockpro64v2_1:/etc$ uname -a Linux rockpro64v2_1 4.4.132-1077-rockchip-ayufan-gbaf35a9343cb #1 SMP Mon Jul 30 14:06:57 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux
Schnittstellen
eth0
- DHCP
- 192.168.3.x
enx000acd26e2c8
- 192.168.0.0/24
Ähm, kleine Anmerkung: Geht das nicht einheitlich, also eth0,eth1 usw. Ich glaube das ist veraltet, das neue ist dann dieses enx000acd26e2c8. Also, einheitlich wäre mir lieber!?!
Hier die Lösung.
Konfiguration netplan
/etc/netplan/eth0.yaml
network: version: 2 renderer: networkd ethernets: eth0: dhcp4: true enx000acd26e2c8: dhcp4: no addresses: [192.168.0.1/24]
Netzwerk neustarten
Direkt mit
netplan apply
oder mit
netplan try
netplan try ermöglicht, das man eine falsche Konfiguration automatisch wieder zurücksetzen lassen kann.
Nach dem Neustart sieht das dann so aus.
rock64@rockpro64v2_1:~$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether 1e:0e:99:52:8e:40 brd ff:ff:ff:ff:ff:ff inet 192.168.3.17/24 brd 192.168.3.255 scope global dynamic eth0 valid_lft 2224sec preferred_lft 2224sec inet6 fe80::1c0e:99ff:fe52:8e40/64 scope link valid_lft forever preferred_lft forever 3: enx000acd26e2c8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0a:cd:26:e2:c8 brd ff:ff:ff:ff:ff:ff inet 192.168.0.1/24 brd 192.168.0.255 scope global enx000acd26e2c8 valid_lft forever preferred_lft forever inet6 fe80::20a:cdff:fe26:e2c8/64 scope link valid_lft forever preferred_lft forever
Konfiguration iptables
Dazu erstellen wir ein Script /etc/firewall.sh
#!/bin/sh # This is a more complex setup, for a home firewall: # * One interface plug to the ISP conection (eth0). Using DHCP. # * One interface plug to the local LAN switch (eth1). Using 192.168.0.0/24. # * Traffic open from the LAN to the SSH in the firewall. # * Traffic open and translated, from the local LAN to internet. # * Traffic open from internet, to a local web server. # * Logging of dropped traffic, using a specific ''log level'' to configure a separate file in syslog/rsyslog. PATH='/sbin' ## INIT # Flush previous rules, delete chains and reset counters iptables -F iptables -X iptables -Z iptables -t nat -F # Default policies iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP echo -n '1' > /proc/sys/net/ipv4/ip_forward echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_source_route echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_redirects echo -n '1' > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo -n '1' > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Enable loopback traffic iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Enable statefull rules (after that, only need to allow NEW conections) iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Drop invalid state packets iptables -A INPUT -m conntrack --ctstate INVALID -j DROP iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP ## INPUT # Incoming ssh from the LAN iptables -A INPUT -i enx000acd26e2c8 -s 192.168.0.0/24 \ -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # Allow any connection from this host. iptables -A INPUT -i lo -j ACCEPT # Allow any connection from the local network. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT # Allow all broadcast traffic. iptables -A INPUT -m pkttype --pkt-type broadcast -j ACCEPT ## OUTPUT # Enable al outgoing traffic to internet iptables -A OUTPUT -o eth0 -d 192.16.3.0/0 -j ACCEPT # Enable access traffic, from the firewall to the LAN network iptables -A OUTPUT -o enx000acd26e2c8 -d 192.168.0.0/24 -j ACCEPT ## FORWARD # We have dynamic IP (DHCP), so we've to masquerade iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -o eth0 -i enx000acd26e2c8 -s 192.168.0.0/24 \ -m conntrack --ctstate NEW -j ACCEPT # Redirect HTTP (tcp/80) to the web server (192.168.0.2) #iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \ # -j DNAT --to-destination 192.168.0.2:80 # #iptables -A FORWARD -i eth0 -p tcp --dport 80 \ # -o eth1 -d 192.168.0.2 \ # -m conntrack --ctstate NEW -j ACCEPT ## LOGGING iptables -A INPUT -j LOG --log-level 4 --log-prefix '[FW INPUT]: ' iptables -A OUTPUT -j LOG --log-level 4 --log-prefix '[FW OUTPUT]: ' iptables -A FORWARD -j LOG --log-level 4 --log-prefix '[FW FORWARD ]: '
Das starten wir nun mal zum Testen.
sudo chmod +x firewall.sh sudo ./firewall.sh
Achtung! Die offene Konsole bleibt bestehen, aber einmal den ROCKPro64 neustarten und die Konsole ist weg. Dann hilft nur noch die serielle Schnittstelle, oder ein angeschlossenes Notebook am LAN. Wenn denn alles funktioniert Also Konsole nicht zumachen!!
Nun kann man testen ob alles so funktioniert, wie es soll. Sollte dies nun alles problemlos funktionieren schreiben wir ein Script, so das das Firewall-Script automatisch beim Starten des ROCKPro64 ausgeführt wird.
Unter /etc/rc.local folgendes Script erstellen.
#!/bin/sh # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. set -e # Launch my netfilter rules if [ -e '/etc/firewall.sh' ] then /bin/sh '/etc/firewall.sh' fi exit 0
Rechte entsprechend anpassen.
sudo chmod +x rc.local
Danach den Rechner neu starten. Macht dies bitte ganz zum Schluss, wenn alles klappt.
Sollen die Rechner im LAN (enx000acd26e2c8) automatisch eine IP-Adresse bekommen, so brauchen wir einen DHCP-Server, der diese an die entsprechenden Teilnehmer verteilt.
DHCP-Server
Nach einer kurzen Testphase, habe ich begriffen, das man DNSMASQ nur mit tiefgreifenden Änderungen am Grundsystem von Ubuntu 18.04.1 benutzen kann. Da scheint es doch viele Änderungen gegeben zu haben. Da ich zu viele Änderungen am Grundsystem nicht mag, muss ich mich wohl oder übel mit den neuen Sachen vertraut machen.
Nach Recherche im Netz habe ich den hoffentlich richtigen DHCP-Server gefunden.
Installation
sudo apt-get install isc-dhcp-server
Konfiguration /etc/dhcp/dhcpd.conf
Der DHCP-Server stellt auf der enx000acd26e2c8-Schnittstelle IP-Adressen zur Verfügung. Die 3.1 ist mein DNS-Server im lokalen Netz.(eth0)
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server) # Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf). #DHCPDv4_CONF=/etc/dhcp/dhcpd.conf #DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf # Path to dhcpd's PID file (default: /var/run/dhcpd.pid). #DHCPDv4_PID=/var/run/dhcpd.pid #DHCPDv6_PID=/var/run/dhcpd6.pid # Additional options to start dhcpd with. # Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead #OPTIONS="" # On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACESv4="enx000acd26e2c8"; INTERFACESv6=""; #authoritative; # Sample /etc/dhcpd.conf # (add your comments here) default-lease-time 600; max-lease-time 7200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option routers 192.168.0.1; option domain-name-servers 192.168.3.1, 1.1.1.1; option domain-name "mydomain.example"; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.10 192.168.0.100; #range 192.168.1.10 192.168.1.20; }
Ich hatte ein paar Probleme mit der Konfig, weil da ; fehlten. Mit folgendem Befehl kann man die Konfig testen.
dhcpd -t -cf /etc/dhcp/dhcpd.conf
Starten
sudo service isc-dhcp-server start
Status
sudo service isc-dhcp-server status
Am Ende klappt alles so, wie ich es mir vorgestellt habe.
Speedtest
Konsole
rock64@rockpro64v2_1:~$ iperf3 -c 192.168.3.213 Connecting to host 192.168.3.213, port 5201 [ 4] local 192.168.3.17 port 45344 connected to 192.168.3.213 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.01 sec 108 MBytes 890 Mbits/sec 0 5.65 MBytes [ 4] 1.01-2.00 sec 114 MBytes 964 Mbits/sec 0 5.65 MBytes [ 4] 2.00-3.00 sec 112 MBytes 942 Mbits/sec 0 5.65 MBytes [ 4] 3.00-4.00 sec 112 MBytes 940 Mbits/sec 11 2.82 MBytes [ 4] 4.00-5.01 sec 112 MBytes 943 Mbits/sec 0 2.82 MBytes [ 4] 5.01-6.00 sec 111 MBytes 937 Mbits/sec 11 1.41 MBytes [ 4] 6.00-7.00 sec 112 MBytes 941 Mbits/sec 11 723 KBytes [ 4] 7.00-8.00 sec 112 MBytes 943 Mbits/sec 11 363 KBytes [ 4] 8.00-9.01 sec 112 MBytes 943 Mbits/sec 0 416 KBytes [ 4] 9.01-10.00 sec 111 MBytes 936 Mbits/sec 11 300 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec 55 sender [ 4] 0.00-10.00 sec 1.09 GBytes 935 Mbits/sec receiver iperf Done. rock64@rockpro64v2_1:~$ iperf3 -c 192.168.3.213 -R Connecting to host 192.168.3.213, port 5201 Reverse mode, remote host 192.168.3.213 is sending [ 4] local 192.168.3.17 port 45348 connected to 192.168.3.213 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-1.00 sec 110 MBytes 922 Mbits/sec [ 4] 1.00-2.00 sec 112 MBytes 941 Mbits/sec [ 4] 2.00-3.00 sec 112 MBytes 939 Mbits/sec [ 4] 3.00-4.00 sec 111 MBytes 932 Mbits/sec [ 4] 4.00-5.00 sec 112 MBytes 941 Mbits/sec [ 4] 5.00-6.00 sec 112 MBytes 941 Mbits/sec [ 4] 6.00-7.00 sec 112 MBytes 941 Mbits/sec [ 4] 7.00-8.00 sec 112 MBytes 941 Mbits/sec [ 4] 8.00-9.00 sec 112 MBytes 942 Mbits/sec [ 4] 9.00-10.00 sec 112 MBytes 941 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1.09 GBytes 939 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec receiver iperf Done.
LAN Notebook
frank@thinkpad:~$ iperf3 -c 192.168.3.213 Connecting to host 192.168.3.213, port 5201 [ 4] local 192.168.0.10 port 38566 connected to 192.168.3.213 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 58.5 MBytes 491 Mbits/sec 91 1.19 MBytes [ 4] 1.00-2.00 sec 57.9 MBytes 485 Mbits/sec 0 1.32 MBytes [ 4] 2.00-3.00 sec 57.7 MBytes 484 Mbits/sec 0 1.42 MBytes [ 4] 3.00-4.00 sec 57.8 MBytes 485 Mbits/sec 1 1.05 MBytes [ 4] 4.00-5.00 sec 58.0 MBytes 487 Mbits/sec 0 1.13 MBytes [ 4] 5.00-6.00 sec 57.9 MBytes 485 Mbits/sec 0 1.18 MBytes [ 4] 6.00-7.00 sec 58.0 MBytes 486 Mbits/sec 0 1.22 MBytes [ 4] 7.00-8.00 sec 58.0 MBytes 486 Mbits/sec 0 1.24 MBytes [ 4] 8.00-9.00 sec 57.9 MBytes 485 Mbits/sec 0 1.25 MBytes [ 4] 9.00-10.00 sec 57.8 MBytes 485 Mbits/sec 0 1.26 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 579 MBytes 486 Mbits/sec 92 sender [ 4] 0.00-10.00 sec 577 MBytes 484 Mbits/sec receiver iperf Done. frank@thinkpad:~$ iperf3 -c 192.168.3.213 -R Connecting to host 192.168.3.213, port 5201 Reverse mode, remote host 192.168.3.213 is sending [ 4] local 192.168.0.10 port 38570 connected to 192.168.3.213 port 5201 [ ID] Interval Transfer Bandwidth [ 4] 0.00-1.00 sec 73.4 MBytes 615 Mbits/sec [ 4] 1.00-2.00 sec 91.9 MBytes 771 Mbits/sec [ 4] 2.00-3.00 sec 90.6 MBytes 760 Mbits/sec [ 4] 3.00-4.00 sec 91.5 MBytes 767 Mbits/sec [ 4] 4.00-5.00 sec 90.6 MBytes 760 Mbits/sec [ 4] 5.00-6.00 sec 91.5 MBytes 767 Mbits/sec [ 4] 6.00-7.00 sec 90.5 MBytes 759 Mbits/sec [ 4] 7.00-8.00 sec 91.7 MBytes 769 Mbits/sec [ 4] 8.00-9.00 sec 91.7 MBytes 769 Mbits/sec [ 4] 9.00-10.00 sec 91.2 MBytes 765 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 896 MBytes 752 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 895 MBytes 751 Mbits/sec receiver iperf Done.
Fazit
War mal wieder ein hartes Stück Arbeit. Und an alle Experten, die das hier lesen, wenn was falsch ist freue ich mich über konstruktive Kritik.
Und für Einsteiger, bitte nutzt das so nicht an einer Internetleitung. Damit der Server sicher ist benötigt es noch viel mehr Arbeit. Dazu gibt es viele Hilfeseiten im Netz.
Links
Ubuntu 18.04 LTS : Configure DHCP Server : Server World
Ubuntu 18.04 LTS Configure DHCP Server
(www.server-world.info)
https://linoxide.com/linux-how-to/install-configure-dhcp-ubuntu/
-
-
-
-
ROCKPro64 - Armbian nand-sata-install
Verschoben Armbian -
-
-
-