Vorwort:
Was sind die sogenannten ARP-Tabellen?
Wofür sind diese gut? Und was sind mögliche Gefahren, die man hierfür beachten und absichern sollte?
Ich erkläre Dir in diesem Tutorial, was ARP-Tabellen sind und welche Tricks man anwenden kann und wie man Netzwerke besser strukturiert und absichert.
Mein Name ist Jan und bin Technik begeistert, ich gebe mein Wissen zur Forschung und allgemeinen Zwecks kostenlos frei für die Internetgemeinschaft.
Für einen guten Zweck, zur Förderung von Vereinen und Communitys.
Seit vielen Jahren beschäftige ich mich mit den Themen Netzwerk, Server sowie deren Systemadministration.
1. Was sind ARP-Tabellen?
Die ARP-Tabellen lösen im Endeffekt die MAC zu IP-Adressen auf und oder andersrum.
Die ARP-Tabelle ist im Linux Systemen für IPv4: arp -n
einsehbar.
Da IPv4 und das neuere IPv6 Protokoll jeweils getrennt voneinander arbeiten, ist die Neighbour Tabelle für IPv6 unter Linux einsehbar mit folgendem Befehl:
ip -6 neighbour
Es gibt Möglichkeiten mittels statischen ARP-Einträgen, MAC und IP-Adresse manuell zu verknüpfen.
Sehen wir uns zunächst anhand ein paar Beispiele uns die ARP-Tabellen genauer an.
2. Proxy_ARP (IPv4) Tabelle
Blau → Die jeweiligen virtuellen Maschinen oder Rechner.
Rot → Die MAC-Adressen der jeweiligen im Lokalen Netzwerk betriebenen Maschinen.
Gelb → Das jeweilige Interface, wo der Traffic zu ARP gesendet wurde.
3. Neighbour (IPv6) – Proxy_NDP Tabelle
IPV6-Adresse dev Schnittstelle lladdr MAC-Adresse
Wie ich schon sagte, arbeiten IPV4 und IPv6 jeweils getrennt voneinander.
Deswegen gibt es hierfür im Linux Kernel für IPv4 Proxy_ARP und bei IPv6 Proxy_NDP.
4. Was ist der ARP-Cache?
Der ARP Cache ist das, was oben bereits steht, die zwischengespeicherten Einträge.
Die ARP-Tabellen haben auch einen sogenannten Cache, den man auch selbstverständlich wieder leeren kann.
Mit ip neigh flush all [dev INTERFACE] können wir bei IPv6 den gesamten Cache oder für die jeweilige Schnittstelle flushen.
Sobald die Maschine mit dem jeweiligen Gateway wieder Kontakt aufnimmt, so wird die MAC und IP-Adresse in der ARP-Tabelle wiederaufgenommen.
Bei IPv4 wäre für Proxy_ARP folgender Befehl notwendig, um den Cache einmal zu leeren: ip neigh flush proxy
5. Was ist ein MAC-Filter?
Ein MAC-Filter dient für die Unterbindung sogenanntem MAC-Spoofing.
Man kann durchaus sehr leicht MAC-Adressen fälschen, um somit bei Missbrauch auch die Sicherheit des Netzwerkes gefährden.
Zudem, wenn sehr viele gespoofte MAC-Adressen generiert werden, verliert man dort schnell den Überblick.
Es wäre umso besser einen MAC-Filter zu aktivieren, um selbst genaustens die MACs zu den jeweiligen IP-Adressen zuzuweisen.
Somit wäre das Netzwerk zwar streng von den Filtern her, aber es wäre am sichersten und man weiß, welchen Server man genau im Netzwerk bei sich hat.
Es gibt verschiedene Möglichkeiten, einen MAC-Filter zu aktivieren.
Zumeist passiert das schon ab dem Netzwerk-Switch, der die LAN Ports an die jeweiligen Rechner aufteilt.
Aber auch virtuell, wenn man gerade nicht einen Managed Switch bei sich Zuhause hat, ist das ganze möglich.
6. MAC-Filter (Virtuell) mittels UFW Firewall Linux
apt install ufw -y
Wir installieren zunächst das UFW Paket und danach geben wir alle Ports frei, die wir zunächst brauchen
apt install sudo -y
# INPUT, OUPUT sowie FORWARD alles bei Standard sperren
sudo ufw default deny incoming
sudo ufw default deny outgoing
sudo ufw default deny routed
# Für SSH
sudo ufw allow 22/tcp
# Und für Proxmox
sudo ufw allow 8006/tcp
# Für ICMP - OUTPUT
# Mit Nano folgene Datei öffnen und einfügen bei #ICMP ok
sudo nano /etc/ufw/before.rules
-A ufw-before-output -p icmp --icmp-type echo-request -j ACCEPT
# Für DNS - OUTPUT
sudo ufw allow out proto udp to any port 53
sudo ufw allow out proto tcp to any port 53
sudo ufw allow out proto tcp to any port 80
sudo ufw allow out proto tcp to any port 443
# Jetzt aktivieren wir die UFW
ufw enable
# Tipps
# Schaltet die UFW komplett aus
ufw disable
# Lädt einmal die Rules komplett neu durch siehe: /etc/ufw/before.rules
ufw reload
# Jetzt die Linux Brücke aktivieren mit
ifreload -a
# Jetzt müssen wir das IPv4 und optional IPv6 Forwarding im Linux Kernel aktivieren
nano /etc/sysctl.conf
# Jetzt einfach einfügen und abspeichern
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 1
# Im Anschluss die neuen Änderungen nun übernehmen
sysctl -p
Jetzt hat der jeweilige Container aufgrund der vorherigen Regeln keine Internetverbindung und ist auch nicht von außen erreichbar.
Um jetzt die jeweilige MAC-Adresse zu der jeweiligen z. B. IPv4 IP-Adresse zu binden, müssten wir einmal folgendes machen
sudo iptables -A INPUT -i vmbr1 -s 11.11.11.2 -m mac --mac-source BC:24:11:8A:51:1A -j ACCEPT
sudo iptables -A FORWARD -i vmbr1 -s 11.11.11.2 -m mac --mac-source BC:24:11:8A:51:1A -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 11.11.11.0/24 -o vmbr0 -j MASQUERADE
Hier nutzen wir einmal direkt iptables und dann wird alles im INPUT und FORWAD von Source IP für die eindeutige MAC-Adresse freigegeben.
Wenn IP oder MAC nicht übereinstimmt, geht logischerweise kein Traffic durch.
Der Aufbau meines Netzwerkes
- 11.11.11.0/24 ist mein Subnetz
- Erstellt auf vmbr1
- BC:24:11:8A:51:1A ist meine MAC-Adresse vom Container
- Diese muss übereinstimmend sein zu meiner 11.11.11.2 IP-Adresse
- MASQUERADE: Erlaubt die Verwendung meines kompletten vmbr0 Netzwerkes (NAT)
- Dabei muss hierfür die IP-Source 11.11.11.0/24 übereinstimmen
Was ist ARP-Spoofing?
Wenn man Proxy_ARP oder Proxy_NDP auf allen Schnittstellen aktiviert, z. B. für IP-Routing oder VPN-Gateways etc.
Müssen Sicherheitsvorkehrungen immer vorgenommen werden.
Wenn dies nicht geschieht, so wird man Opfer eines IP-Spoofing Angriffes.
Stellt Euch das so vor, dass der Angreifer manipulierte ARP Einträge erzeugt, um somit Eure IP-Adressen zu missbrauchen, zumeist für (D)DoS Attacken.
Ein MAC-Filter unterbindet dies zwar sowieso, aber bei Layer 2 Brücken über VPN oder IP-Protokollen ist es immer mit sehr viel Aufwand verbunden.
Es ist aber immer wichtig, das Netzwerk so gut wie möglich abzusichern.
Meine Konfigurationen
Von IPtables und UFW:
root@pve01:~# cat /etc/iptables/rules.v4
# Generated by iptables-save v1.8.9 on Sun Jan 5 01:30:16 2025
*raw
:PREROUTING ACCEPT [88447:23584120]
:OUTPUT ACCEPT [75574:19274070]
COMMIT
# Completed on Sun Jan 5 01:30:16 2025
# Generated by iptables-save v1.8.9 on Sun Jan 5 01:30:16 2025
*nat
:PREROUTING ACCEPT [3783:521782]
:INPUT ACCEPT [2669:142264]
:OUTPUT ACCEPT [4031:263967]
:POSTROUTING ACCEPT [2672:160715]
-A POSTROUTING -s 11.11.11.0/24 -o vmbr0 -j MASQUERADE
COMMIT
# Completed on Sun Jan 5 01:30:16 2025
# Generated by iptables-save v1.8.9 on Sun Jan 5 01:30:16 2025
*filter
:INPUT ACCEPT [329:43229]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [297:42815]
:ufw-after-forward - [0:0]
:ufw-after-input - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-after-logging-input - [0:0]
:ufw-after-logging-output - [0:0]
:ufw-after-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-before-input - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-before-logging-input - [0:0]
:ufw-before-logging-output - [0:0]
:ufw-before-output - [0:0]
:ufw-reject-forward - [0:0]
:ufw-reject-input - [0:0]
:ufw-reject-output - [0:0]
:ufw-track-forward - [0:0]
:ufw-track-input - [0:0]
:ufw-track-output - [0:0]
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A INPUT -s 11.11.11.2/32 -i vmbr1 -m mac --mac-source bc:24:11:8a:51:1a -j ACCEPT
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A FORWARD -s 11.11.11.2/32 -i vmbr1 -m mac --mac-source bc:24:11:8a:51:1a -j ACCEPT
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
COMMIT
# Completed on Sun Jan 5 01:30:16 2025
Danke!
Ich danke Dir für deine Interesse an meinen Inhalten 🙂
Ich würde mich über einen kurzen Kommentar freuen oder eine weiterempfehlung
Der Inhalt ist für die Forschung und Bildung freigegeben (Creative-Commons – Wiederverwendung erlaubt aber mit Namensnennung)
Schreibe einen Kommentar