Raspberry Pi Firewall?
Hallo zusammen,
für ein Projekt benötige ich eure Unterstützung:
In meinem LAN (echtes Dual-Stack mit DynDNS) hängt ein Raspberry. Von der FritzBox aus wird dem Raspberry die IP 10.7.7.49/24 zugewiesen. Diese Adresse liegt an eth0 an. Der Raspberry dient aber auch als WLAN Client für andere Geräte. Über hostapd stellt er das Interface wlan0 zur verfügung. Hier gibt es folgende Adressen für die Clients: 10.8.8.0/24. Als AP ist er über die 10.8.8.1 erreichbar.
Für das Projekt ist es nötig, dass ich von extern auf einen Client des Raspberries (10.8.8.10) komme. Dieser stellt einen Webserver auf Port 8080 zur Verfügung. Sprich: Ich möchte mit meiner Domain (http://meine.domain:8080) auf den Port 8080 des Clients kommen.
Das mit der FritzFox, dem DynDNS und dem Reverse Proxy bekomme ich hin. Nur nicht die Weiterleitung von eth0 10.7.7.49:8080 auf wlan0 10.8.8.10:8080. Ich gehe schwer davon aus, dass ich hier an die "iptables" muss.
Kann mir jemand helfen? Welchen Befehl brauche ich hier?
3 Antworten
Läuft auf dem Raspberry ein Webserver? Dann kannst Du dort einen Reverse Proxy aufsetzen, der auf die 10.8.8.10 zeigt. Der Port wäre sogar frei wählbar, Du kannst auch von Port 80 auf 10.8.8.10:8080 zeigen.
Die vHost-Konfiguration eines Apache müsste so aussehen:
<VirtualHost *:80>
ServerAdmin email@domain.com
ServerName subdomain.dyndns.com
ProxyRequests off
ProxyPass / http://10.8.8.10:8080
ProxyPassReverse / http://10.8.8.10:8080
CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined
ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>
Alternativ wäre möglich, in iptables ein NAT zu konfigurieren:
sudo iptables -t nat -A PREROUTING -d 10.7.7.49/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.8.8.10:8080
--dport 80 musst Du Deinen Begebenheiten entsprechend anpassen. Ich habe das jetzt nicht getestet, aber so sollte es funktionieren.
genau, es läuft ein Apache2 drauf. Der lauscht schon am Port 80
Das wäre kein Hindernis, weil die vHosts über den Namen unterschieden werden. Ich habe hier einen Apache laufen, der auf Port 80 und 443 lauscht. Dort laufen knapp 30 vHosts, die teilweise als Reverse Proxy auf andere Server und Docker-Container auf die unterschiedlichsten Ports weiterreichen. Über den Reverse Proxy habe ich den Vorteil, immer über Port 443 zuzugreifen und so keiner Firewall-Regel zum Opfer zu fallen. Außerdem bieten die Server teilweise kein TLS, was durch den Reverse Proxy erledigt wird.
Klingt als möchtest du ein destination NAT.
Könntest auch n Reverse Proxy auf dem Pi selber machen eventuell.
Neuer als iptables wäre nftables, ich finds auch übersichtlicher und einfacher. Iptables Befehle sind oft unübersichtlich, bei nftables hat man relativ verständliche Befehle und Config files. Ich hab damit schon ein paar Sachen gemacht und fand es relativ angenehm.
Es gibt auch Tools die Firewall Regeln vereinfachen sollen wie firewalld oder ferm, aber ausprobiert habe ich das noch nicht.
Wenn du Nftables nutzen möchtest findest du hier infos über NATing:
sudo apt install nftables
sudo nano /etc/nftables.conf # Regeln in dieses File eintragen
systemctl enable --now nftables.service
Beachte aber, dass der letzte Befehl potenziell dazu führen könnte das du dich selber aussperrst wenn du die Firewall Regeln falsch schreibst oder es auch Probleme mit anderen Programmen verursachen könnte.
Nftables und IPtables sind by default übrigens nicht persistent, also wenn du über die commandline Regeln hinzufügst sind die nach einem neustart weg. Das config file und der Systemd service sind dafür um die Regeln immer automatisch zu laden.
Hallo BeamerBen,
danke für deine Unterstützung. Du hast recht, iptables sind nicht wirklich übersichtlich.
Beste Grüße,
Paul
Reverse Proxy von http://meine.domain:8080 zu 10.8.8.10:8080. Normalerweise eigentlich von http://meine.domain zu 10.8.8.10:8080
Hallo GrakaVII,
du hast natürlich absolut recht. So würde man es richtig machen.
Grüße,
Paul
Hallo franzhartwig,
genau, es läuft ein Apache2 drauf. Der lauscht schon am Port 80. Den Client habe ich mit 8080 verbunden. Habe mich für die iptables entschieden. Funktioniert prima.
Vielen dank für deine schnelle Hilfe.
Beste Grüße,
Paul