• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Server zwischen zwei Netzen, soll aber nicht routen

Walli23

Newbie
Herzliches Moin in die Runde!
Ich habe eine netzwerktechnische Problemstellung, für die es wahrscheinlich mehrere Lösungen gibt, bei der ich aber nicht recht weiß, wie ich es angehen soll. Daher versuche ich zunächst die Ausgangssituation zu beschreiben:
Für unsere ganzen Hosts (interne Server, Drucker, Desktops, ...) haben wir offizielle IP-Adressen, tausend Stück im Block. Sagen wir 200.0.10.0/22. Ein größerer Bereich, etwa 200.0.10.0-200.0.11.253 bildet ein LAN (LAN1) und wird für allerlei Hosts verwendet. Diese beziehen IP-Adresse, Gateway und DNS vom DHCP. Wo eine feste IP-Adresse benötigt wird, wird diese anhand der MAC-Adresse immer gleich zugeteilt. Alle Hosts befinden sich hinter der Firewall und die meisten können Verbindungen nach "draussen" aufbauen. In umgekehrter Richtung blockt die Firewall erstmal alles. Nur für einzelne Hosts mit festen IP-Adressen sind eingehende Verbindungen auf dezidierten Ports zugelassen. Soweit erstmal alles gut.
Jetzt habe ich noch zehn ganz spezielle Hosts (eine Art Messgeräte) in einem eigenen LAN (LAN2). Dieses hat bisher gar keine Verbindung zu irgendeinem anderen Netzwerk (IP-Adressen sind hier statisch 200.0.12.1-200.0.12.10, also auch welche aus dem Block offizieller IP-Adressen, ist halt so und kann ich nicht ändern). Nun möchte ich regelmäßig bestimmte Daten von diesen Geräten abrufen, verarbeiten und in dem Netz 200.0.10.0-200.0.11.253 bestimmten Hosts zugänglich machen. Allerdings möchte ich diese beiden Netze weiterhin strickt getrennt halten, auf keinen Fall irgendein Routing zwischen diesen Netzen haben!
Daher hatte ich mir überlegt, dass ich einen Linux-Server mit zwei Interfaces nehme. Das eine Interface hängt in dem kleinen LAN mit den Geräten, bekommt die IP 200.0.12.11 und das andere bezieht eine quasi feste IP (200.0.11.252) vom DHCP-Server. Ein Dämon auf diesem Server ruft dann regelmäßig die Daten von den Geräten ab, verarbeitet sie und stellt sie dann mit Hilfe von Apache auf dem Server bereit, schickt ab bestimmten Messwerten Warnungen per Email oder SMS-Gateway raus, muss also selbst Verbindungen zum Internet herstellen können. Allerdings soll auch nicht jeder Host in unserem großen Netz einfach auf den Webserver zugreifen können, tatsächlich kommen da nur einzelne in Frage. Am liebsten wäre mir, wenn es überhaupt nur einen Zugang über ssh auf den Server gäbe.


Code:
Gerät01 (200.0.12.1)--+                
Gerät02 (200.0.12.2)--+                
.                     |                 
.                     |                 
.                     |  (LAN2)              
Gerät10 (200.0.12.10)-+
                      |    
                      |  Verbindungen nur vom Server ausgehend
                      |  ggf. auch noch einzuschränken auf bestimmte Ports/Protokolle
                      | 
                 (200.0.12.11)  eth1
                 ### MEIN SERVER ###
                 (200.0.11.252) eth0
                      |
                      |  ausgehende Verbindungen vom Server okay,
                      |  ggf. auch noch einzuschränken auf bestimmte Ports/Protokolle/ Ziel-Hosts
                      |  eingehend nur ssh, ggf. zus. einzuschränken auf bestimmte Quell-Hosts
                      |
Host00--+             |
Host01--+             | 
.       |     (LAN1)  | (200.0.10.1-200.0.10.253)
.       +-------------+
.       |             |
HostFF--+             |                  
                ## Firewall ##   
                      |
                      |
                   Internet

Eigentlich habe ich mehrere Baustellen:
- Wie bekomme ich es hin, dass Verbindungen von meinem Server zu den Geräten nicht falsch über eth0 in das LAN1 geschickt werden?
- Wie stelle ich sicher, dass mein Server gar nicht zwischen den beiden LANs routet.
- Mein Server nur auf dem SSH-Port lauscht und das auch nur auf eth0?
Der Apache sollte dann natürlich nicht auf 200.0.11.252 (eth0) horchen sondern nur auf dem 127.0.0.1. Ich meine, dass ich durch den ssh-Tunnel dann darauf zugreifen können müsste, oder?
Wenn ich mich unklar ausgedrückt habe, fragt einfach nach. Würde mich über Hilfe echt freuen!
Walli
 

spoensche

Moderator
Teammitglied
Also erst mal ein paar Grundregeln zur Planung.

1. Arbeitsplatz PC´ s (Client´s ) bekommen keine statische öffentliche IP- Adresse, weil sie keine Server- Dienste anbieten und für den Internetzugriff keine öffentl. IP benötigen (der Router leitet per NAT weiter).
2. Server und Client PC´s sind aus sicherheitstechnischen Gründen bzw. Grundmaßnahmen niemals im selben Netz.
Die Server sind in die DMZ (eigenes Netz) und die Clients in einem eigenen LAN. Wenn Server und Clients im selben Netz sind und die Server vom I-Net aus erreichbar sein sollen, dann sind deine Clients leichte Angriffsziele, Die eingehende Ports müssen für die Server ja geöffnet sein.
Die Server sind dann ein Angriffsziel von innen. (durch gekarperter Clients oder z.B. gefrustete Mitarbeiter)

Walli23 schrieb:
Eigentlich habe ich mehrere Baustellen:
- Wie bekomme ich es hin, dass Verbindungen von meinem Server zu den Geräten nicht falsch über eth0 in das LAN1 geschickt werden?
- Wie stelle ich sicher, dass mein Server gar nicht zwischen den beiden LANs routet.
- Mein Server nur auf dem SSH-Port lauscht und das auch nur auf eth0?
Der Apache sollte dann natürlich nicht auf 200.0.11.252 (eth0) horchen sondern nur auf dem 127.0.0.1. Ich meine, dass ich durch den ssh-Tunnel dann darauf z eugreifen können müsste, oder?

eth0 hat eine IP aus einem anderen Subnetz als deine Schnittstelle eth1 und die Server. Daher ist eine Verbindung ohne Routing nicht möglich.
Wenn die Ausgabe von
Code:
cat /proc/sys/net/ipv4/ip_forward
0 ist, dann ist Routing deaktiviert.
Wenn du in der /etc/ssh/sshd_config den Listen Paramater in
Code:
Listen IP-Adresse:22
änderst, den SSH-Dienst dann neu startest, dann nimmt der SSH nur Verbindungen auf dieser IP an. Zusätzlich kannst du den Zugriff per TCP-Wrapper verbieten.

Den Apache nur auf 127.0.0.1 auf Verbindungen warten lassen und nur per SSH- Tunnel eine Verbindung zum Apache aufbauen ist Unsinn. Das macht man bei Datenbankservern, aber nicht bei Webservern. Es ist einfacher wenn du mit zwei simplen IP-Tables Regeln den Zugriff auf den Apache einschränkst. Verschlüsselte HTTP- Verbindung kannst du ja mit SSL realisieren.
 
OP
W

Walli23

Newbie
spoensche schrieb:
Also erst mal ein paar Grundregeln zur Planung.

1. Arbeitsplatz PC´ s (Client´s ) bekommen keine statische öffentliche IP- Adresse, weil sie keine Server- Dienste anbieten und für den Internetzugriff keine öffentl. IP benötigen (der Router leitet per NAT weiter).
2. Server und Client PC´s sind aus sicherheitstechnischen Gründen bzw. Grundmaßnahmen niemals im selben Netz.
Die Server sind in die DMZ (eigenes Netz) und die Clients in einem eigenen LAN. Wenn Server und Clients im selben Netz sind und die Server vom I-Net aus erreichbar sein sollen, dann sind deine Clients leichte Angriffsziele, Die eingehende Ports müssen für die Server ja geöffnet sein.
Die Server sind dann ein Angriffsziel von innen. (durch gekarperter Clients oder z.B. gefrustete Mitarbeiter)
Vielen Dank erstmal für die ausführlichen Tipps, die für sich sicherlich richtig sind. Die Situation hier ist nun einmal so (die vielen Clients sind nicht Teil einer Firmen-Domäne oder so) und es gibt, so habe ich mir sagen lassen, gute Gründe für die Anordnung. Die Clients befinden sich alle hinter einer ordentlichen Firewall, die jedweden Verbindungsaufbau von 'draussen' per default unterbindet. Mein kleiner 'server' befindet sich auch hinter der Firewall und ausnahmsweise habe ich eine Forward-Regel für ssh auf der Firewall, um von explizit angegebenen Hosts einen verschlüsselten Tunnel zu dem Server aufbauen zu können.

Walli23 schrieb:
Eigentlich habe ich mehrere Baustellen:
- Wie bekomme ich es hin, dass Verbindungen von meinem Server zu den Geräten nicht falsch über eth0 in das LAN1 geschickt werden?
- Wie stelle ich sicher, dass mein Server gar nicht zwischen den beiden LANs routet.
- Mein Server nur auf dem SSH-Port lauscht und das auch nur auf eth0?
Der Apache sollte dann natürlich nicht auf 200.0.11.252 (eth0) horchen sondern nur auf dem 127.0.0.1. Ich meine, dass ich durch den ssh-Tunnel dann darauf z eugreifen können müsste, oder?

eth0 hat eine IP aus einem anderen Subnetz als deine Schnittstelle eth1 und die Server. Daher ist eine Verbindung ohne Routing nicht möglich.
eth0 bekommt seine (immer gleiche, an der Hardware-Adresse festgemachte) IP vom DHCP-Server zugewiesen und damit auch das Standard-Gateway und die Subnetz-Maske. So lang die Geräte in dem kleinen LAN2 erreichbar sind, werden die Pakete offensichtlich auch nach genau dort geschickt (habe mir das mit wireshark auf den beiden Schnittstellen angeschaut). Aber sobald einer dieser Hosts down ist, versucht mein Server diesen Host über das Standard-Gateway zu erreichen. Das klappt natürlich nicht, aber ich möchte auch nicht, dass mein Server überhaupt versucht, den Weg zu nehmen. Kann ich das Problem nicht durch eine Route wie folgt lösen?
Code:
Destination   GAteway      Genmask        Iface
200.0.12.0       *         255.255.255.0  eth1
default      200.0.10.1    0.0.0.0        eth0

Ich verspreche mir davon, dass mein Server all seine Pakete, die für Hosts im Lan2 gedacht sind (200.0.12.0/8) immer nur über eth1 schickt und niemals über eth0, egal ob die Hosts im Lan2 gerade up oder down sind. Alles andere, was der IP-Adresse nach für die große, weite Welt bestimmt ist, soll dagegen über das Standard-Gateway raus gehen. Die Situation ist nicht schön, aber ich kann sie auch nicht ändern sondern nur versuchen, etwas Brauchbares daraus zu machen.
 

spoensche

Moderator
Teammitglied
Walli23 schrieb:
So lang die Geräte in dem kleinen LAN2 erreichbar sind, werden die Pakete offensichtlich auch nach genau dort geschickt (habe mir das mit wireshark auf den beiden Schnittstellen angeschaut). Aber sobald einer dieser Hosts down ist, versucht mein Server diesen Host über das Standard-Gateway zu erreichen. Das klappt natürlich nicht, aber ich möchte auch nicht, dass mein Server überhaupt versucht, den Weg zu nehmen. Kann ich das Problem nicht durch eine Route wie folgt lösen?
Code:
Destination   GAteway      Genmask        Iface
200.0.12.0       *         255.255.255.0  eth1
default      200.0.10.1    0.0.0.0        eth0

Wenn ein Host nicht erreichbar ist, ist es völlig normal, dass dein Server den Versuch startet ihn per default Gateway zu erreichen und das wirst du auch nicht unterbinden können.
Mit dieser Routing Tabelle hast du genau das gleiche Ergebniss wie vorher. Du könntest es mit einem 2. default Gateway versuchen. Allerdings wird dein Server es wieder versuchen, wenn eines der Gateway nicht mehr erreichbar ist.

Eine andere und auch die sinnvollste Möglichkeit wären zwei VLAN´s, die nicht untereinander kommunizieren können.




Ich verspreche mir davon, dass mein Server all seine Pakete, die für Hosts im Lan2 gedacht sind (200.0.12.0/8) immer nur über eth1 schickt und niemals über eth0, egal ob die Hosts im Lan2 gerade up oder down sind. Alles andere, was der IP-Adresse nach für die große, weite Welt bestimmt ist, soll dagegen über das Standard-Gateway raus gehen. Die Situation ist nicht schön, aber ich kann sie auch nicht ändern sondern nur versuchen, etwas Brauchbares daraus zu machen.[/quote]
 
Oben