PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bridging mit Iptables???



Seiten : [1] 2

Duffy1905
17.07.03, 13:29
Hallo zusammen,
habe ein problem, und zwar wollte ich fragen ob es möglich ist mit Iptables Bridging zu machen? Vielleicht gibt es auch eine andere Möglichkeit für mein Problem.
Und zwar habe ich hinter meiner Firewall mehrere Webserver stehen (also müssen über Port 80, 443 ... usw erreichbar sein). Jetzt kann ich ja mit DNAT den Port 80 zB an die IPadresse 141.52.X.Y weiterleiten. Bloss habe ich nun mehrere Webserver die den Port 80 brauchen, was mach ich nun? Ich habe überlegt ob es mit bridging funktioniert?! Kann mir da jemand weiterhelfen???

Danke schon mal im Vorraus


Gruss Sascha

msi
17.07.03, 13:37
Original geschrieben von Duffy1905
Hallo zusammen,
habe ein problem, und zwar wollte ich fragen ob es möglich ist mit Iptables Bridging zu machen? Vielleicht gibt es auch eine andere Möglichkeit für mein Problem.
Und zwar habe ich hinter meiner Firewall mehrere Webserver stehen (also müssen über Port 80, 443 ... usw erreichbar sein). Jetzt kann ich ja mit DNAT den Port 80 zB an die IPadresse 141.52.X.Y weiterleiten. Bloss habe ich nun mehrere Webserver die den Port 80 brauchen, was mach ich nun? Ich habe überlegt ob es mit bridging funktioniert?! Kann mir da jemand weiterhelfen???

Danke schon mal im Vorraus


Gruss Sascha

du hast leider pro ip nur einen port tcp port 80 :(

Duffy1905
17.07.03, 13:43
Ja das ist mir auch klar, aber mit DNAT kann ich nicht einen Port an mehrere IPs weitergeben!!! Meine Firewall selbst hat ja auch noch eine IP (eigentlich auch ein Risiko).
Ich glaube du hast mein Prob nicht verstanden.

Ich habe mehrere Webserver hinter der Firewall. Möchte jetzt jemand vom Inet auf einen der Webserver zugreifen gelangt er ja als erstes zur Firewall.

jetzt habe ich zB 4 Webserver:

-141.52.X.W1
-141.52.X.W2
-141.52.X.W3
-141.52.X.W4

jetzt kann ich mit de Dnat sagen, gebe alle anfragen an den Port 80 weiter an die IP 141.52.X.W1.

Was ist jetzt aber mit den anderen Servern, ich kann ja nicht einen Port an mehrere IPs weitergeben?!

msi
17.07.03, 14:26
mach doch einfach mehrere regeln, und ergänze sie um die destination mit -d

emba
17.07.03, 14:37
dnat kann randomly ziel-ips für ein und den selben port vergeben
wenn alle webserver das gleiche "anbieten" wäre das eine art load-balancing

ansonsten kannst du, wenn du verschiedene inhalte anbietest, doch mit dem string match arbeiten und die pakete entsprechend forwarden

greez

Duffy1905
17.07.03, 14:41
jo also ich probier das jetzt mal mt Dnat. Trage für jede IP meine gewüschten Ports ein. Also ihr meint das geht? Wird dann das paket etwa an jede IP geschickt über den Port 80?

Duffy1905
17.07.03, 14:56
ne geht nicht, bringt ne Fehlermeldung:

unknown arg `--to-destination'
Bad argument `80'

habe das jetzt mal mit Harrys generator gemacht.
Die DNAT regeln sehen dann so aus:

Für X steht immer bsw 60 beim nächsten 61 dann 62 dann 63 ist en bißle blöd gemacht von mir

also sind immer 4 verschiedene Server. Ich gebe für alle 4 server Port 80, 443 und 22 frei



# NAT fuer HTTP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 80 -j ACCEPT

# NAT fuer HTTP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 80 -j ACCEPT

# NAT fuer HTTP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 80 -j ACCEPT

# NAT fuer HTTP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 80 -j ACCEPT

# NAT fuer HTTPS
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 443 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 443 -j ACCEPT

# NAT fuer HTTPS
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 443 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 443 -j ACCEPT

# NAT fuer HTTPS
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 443 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 443 -j ACCEPT

# NAT fuer HTTPS
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 443 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 443 -j ACCEPT

# NAT fuer SSH
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 22 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 22 -j ACCEPT

# NAT fuer SSH
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 22 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 22 -j ACCEPT

# NAT fuer SSH
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 22 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 22 -j ACCEPT

# NAT fuer SSH
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 22 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 22 -j ACCEPT

# NAT fuer HTTP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d --dport 80 -j ACCEPT

mbo
17.07.03, 15:02
ich grüble noch, wer von euch am thema vorbei schliddert ;)

mal grundsätzlich:
1.) vier regeln hinteinander für ein und denselben port wird dir nix bringen
2.) sind die vier server dahinter gleich? bieten sie alle das selbe?

cu/2 iae

Duffy1905
17.07.03, 15:05
Ja bieten alles den selben dienst an, sind alles Webserver, also ich brauche auf den Servern, port 80, 443, 22, und den SMTP.
Wie kann ich das dann umsetzten???

mbo
17.07.03, 15:19
also möchtest du soetwas wie loadbalancing machen?

dann siehe nat-howto:
6.3.1. Auswahl von mehrere Adressen in einer Reihe
Wenn eine Reihe von IP-Adressen gegeben ist, wir diejenige
ausgewaehlt, die im Moment am wenigsten fuer IP-Verbindungen, von
denen die Maschine weiss, benutzt wird. Dies macht primitives 'load-
balancing' moeglich.

oder auch random, alle vier einträge mit random 25% versehen ... unsauber aber sieht lustig aus ...

fortgeschrittene lösungen:
http://www.linuxvirtualserver.org/

was solls seein?

Duffy1905
17.07.03, 15:23
mom ich glaube du meinst was anderes.
Ich habe mehrere Webserver (nur webserver!!!)
bsw 4 Stück!!! Aber auf jeden Server liegen andere Inhalte!

mbo
17.07.03, 15:29
ei siehst, das ist was anderes

nur mal visualisiert
stell dir vor:
wenn du den botschafter von <land> besuchen willst, wie gehst du vor?
du fährst nach <stadt>
du fährst in die <name>-Str.
gehst zu Haus <Nr.>
gehst in <zimmer>
und da sitzt er.

wenn du vier verschiedene WebServer, wahrscheinlich auch noch mit vier verschiedenen domains betreiben willst, wird das nix mit einer ip-adress und einem port. wenn dann mußt du entweder drei server virtualisieren, also einer wird DEIN webserver, oder du holst dir vier ip-adressen ODER arbeitest mit vier verschiedenen ports, womit du viele proxy's ausschließt.

cu/2 iae

ps: ich dacht das wären netzwerkgrundlagen? wer schafft es vier webserver ohne diese grundlagen zu betreiben?

Duffy1905
17.07.03, 15:31
ich glaube ich habe mich vorhin falsch ausgedrückt, sorry!!!
Ich habe vier Webserver und jeder Webserver hat seine eigene IP (nach außenhin sichtbare!!!)

mbo
17.07.03, 15:43
was denn nun?

zählen wir mal
- vier Webserver
- vier öffentliche IP-Adressen
- ein Router

und jetzt möchtest Du die vier öffentlichen IP-Adressen vier verschiedenen IP-Adressen im LAN, in Deinem Fall die vier WebServer zuordnen.



iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 141.52.248.X
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 80 -j ACCEPT


auf eth0 sind die öffentlichen Adressen gebunden?
141.52.248.X sind die privaten Adressen?

dann fehlt dir als erstes mal die IP-Adress, auf welcher die Anfragen für die einzelnen WebServer ankommen, Du mußt also
vier Regeln
mit jeweils verschiedenen öffentlichen-Ip-Adresse:Port auf vier interne IP-Adresse "natten"

Das snat raus, sonst liest im log nur noch anfragen vom router

cu/2 iae

Duffy1905
17.07.03, 17:06
mom, noch mal ganz von vorne, ich habe ja nicht gesagt das ich das alles mit DNAT machen will, ich habe gefragt ob das damit machbar ist.

Also ich habe 4 Webserver die öffentliche IPs besitzen und auch beibehalten sollen.
Diese Webserver sind momentan über einen Router mit dem Internet verbunden, aber ungeschützt. Ich habe jetzt eine Firewall mit IPtables aufgesetzt. Diese funktioniert nicht. Der Grund ich habe 4 Webserver, jeder Server muss über die Ports 80,443 ... angesprochen werden. Ansonsten sollen sie aber geschützt sein! Und jetzt will ich wissen wie ich das umsetzen kann?!?!?! Verstehst du mein Prob???



(sorry bin ein totaler newbi bei Linux und Iptables)

mbo
17.07.03, 17:13
*räusper*

hm vielleicht sollte man die überschrift lesen ;) da steht ja bridging.

think future fällt mir spontan ein, und da meine frau mir gesagt hat, ich soll ihr das denken überlassen, hab ich einfach google gefragt und der gab mir das
http://www.think-future.de/DOCUMENTATION/Ethernet-Bridge-netfilter-HOWTO_de/other_formats/Ethernet-Bridge-netfilter-HOWTO_de.txt
stand auch gleich an erster stelle ;)
damit solltest du eigentlich weiter kommen

cu/2 iae

emba
17.07.03, 20:08
nunja, wers dennoch mit iptables machen will:

wie oben schon gesagt: mit dnat wirst du da nicht glücklich, weil dabei die ziel-ip´s random verteilt werden !

nun gänge es noch mit der string extension (modul laden)
da sicher jeder deiner webserver versch. DNS namen hat, kannst du danach filtern und naten

greez

swen1
18.07.03, 07:01
Such auch mal nach Proxy-ARP. Die Installation klingt schwerer als sie ist. Einfach im Kernel Proxy-ARP aktivieren (echo "1" > /proc/sys/net/ipv4/conf/eth0/proxy_arp) (auch für eth1), damit spart man sich die Pflege der ARP-Tabelle. Dann noch die Routing-Tabelle anpassen - fertig. Danach kannst Du mit einen Firewallskript ganz normal filtern.

Gruß Swen

Der Rechner braucht dann natürlich 2 Netzwerkkarten mit 2 öffentliche Adressen!

Temp
19.07.03, 11:14
sorry freunde das ich mich hier so einmisch.... hab nämlich nur ne frage zum Thema ;)

Eine bridge gibt "alles" einfach mal weiter oder? Lieg i da richtig? Deshalb kann man wenn das so looft alle 4 Webserver danach erreichen und ich kann auf der Bridge auch filtern.

Hab i des jetzt kapiert?????

;)

Gruß Temp

mbo
21.07.03, 07:37
Original geschrieben von Temp

Eine bridge gibt "alles" einfach mal weiter oder?

was verstehst du unter "alles"



Deshalb kann man wenn das so looft alle 4 Webserver danach erreichen und ich kann auf der Bridge auch filtern.

was heißt looft? wahrscheinlich ist noch zu früh für mich ...

cu/2 iae

ps: wer is "i"?

Duffy1905
21.07.03, 07:50
sollte normal so funktionieren!!!!!!!!
Danke noch mal für eure Tips! Teste es jetzt mal in der
Praxis, werde nacher noch mal Posten

Jinto
21.07.03, 09:47
Ich glaube nicht, dass Bridging hier die gesuchte Funktionalität war. Es wird hier wohl eher die Möglichkeit gesucht den Router als kombinierten Router/Paketfilter zu verwenden.

Wenn der Router bereits eine Linuxkiste war, sollte es sich um ca. 8 iptables-Zeilen handeln.
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 80 -j ACCEPT
iptables -A FORWARD -o eth0 -m state --state ESTABLISHED,RELATED -p tcp -s 141.52.248.X --sport 80 -j ACCEPT
[hier die anderen 6 Regeln einsetzen]

Naja, evtl kann man das mit subnetzen verbessern.

HTH

Duffy1905
21.07.03, 10:44
aha, jo bridging kommt seid ca 5 minuten auch nicht mehr in Frage!
Und zwar wurde mein Netz in zwei netze geteilt. Jetzt soll die FW zwischen
Netz 1 und 2 stehen.

iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 80 -j ACCEPT

Geht das wirklich??? Ich habe mehrere Server die über den Port erreichbar sein müssen!!! Das ist doch wieder DNAT?!

iptables -A FORWARD -o eth0 -m state --state ESTABLISHED,RELATED -p tcp -s 141.52.248.X --sport 80 -j ACCEPT

Jinto
21.07.03, 11:20
Original geschrieben von Duffy1905
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 80 -j ACCEPT

Geht das wirklich??? Ich habe mehrere Server die über den Port erreichbar sein müssen!!! Das ist doch wieder DNAT?! Ja sowas geht.
Nein, das ist kein DNAT. NAT=Network Address Translation, wenn du nun in dieser Zeile eine Adress Veränderung findest bist du entweder wahnsinnig, oder wahnsinnig gut ;)

Das ist eigentlich ganz simples Routing (vorausgesetzt die Route ist bekannt und stimmt).

mbo
21.07.03, 12:05
also aus einem netz mach zwei? wieso erst die arbeit mit der bridge? hier habt ja komsiche "entschieder" ;)

eben, es ist jetzt simples routing geworden ... hört sich gut an.

wenn die webserver ihre ip's behalten (sofern sie unterschiedlich bleiben) und die firewall ihre eigene ip hat ( da sinds schon fünf ) ... hm, wie geht die firewall ohne virtuelle interfaces mit den vier anderen öffentlichen IP's um?

cu/2 iae

Duffy1905
21.07.03, 12:10
Original geschrieben von Jinto
iptables -A FORWARD -i eth0 -m state --state NEW -p tcp -d 141.52.248.X --dport 80 -j ACCEPT
iptables -A FORWARD -o eth0 -m state --state ESTABLISHED,RELATED -p tcp -s 141.52.248.X --sport 80 -j ACCEPT
HTH

also soll ich diese beiden Zeilen eintragen, jeweils für meine ganzen Webserver ...
dann les dir mal den Beitrag von EMBA durch bitte, der hat geschrieben das das nicht ginge weil dabei die ziel-ip´s random verteilt werden! Aber ich probiers jetzt mal schnell.

mbo
21.07.03, 12:14
nein, so werden sie nicht random verteilt, so nicht ;)

cu/2 iae

emba
21.07.03, 21:56
sie werden nur beim DNAT random verteilt, wie ich klar und deutlich geschrieben habe

mit den von dir geposteten rules bekommst du es immer noch nicht hin!
wieso machst du es nicht über strings?

greez

mbo
22.07.03, 07:14
mal visualisiert:

---- webserver1 (141.52.248.1) ------ |
|
---- webserver2 (141.52.248.2) ------ |
|-------( xxx.xxx.xxx.xxx)-FW-(141.52.248.5)-- ROUTER
---- webserver3 (141.52.248.3) ------ |
|
---- webserver4 (141.52.248.4) ------ |

<edit>
Router und Fw stehen rechts, webserver links ....
</edit>


ist das soweit richtig?
es gibt meines erachtens zwei möglichkeiten. folgende würde ich für die sauberste halten:

du änderst die öffentlichen IP-Adressen der WebServer von 141.x.x.x auf 10.x.x.x, das interne Interface der Firewall ebenso.
Alle öffentlichen IP-Adressen als virtInterface auf die Firewall
eth0 141.52.248.5
eth0:1 141.52.248.1
eth0:2 141.52.248.2
eth0:3 141.52.248.3
eth0:4 141.52.248.4

dementsprechend den input erlauben und das forward zB von 141.52.248.1 auf 10.52.248.1, dementsprechend natürlich auch den output.

cu/2 iae

ps: die bridging-lösung hätt mir besser gefallen. du hättest nicht am router oder an den webserver umkonfigurieren müssen, hättest sie transparent rein und raus nehmen können ... und vieles mehr ...

Temp
22.07.03, 07:20
hmm das wird ja hier richtig kompliziert wenn ich mir die obigen posts so anseh ;)

ahjo

Eine bridge gibt "alles" einfach mal weiter oder?

da dacht ich mir den kompletten iptraffic an das "interne" netz (intern=das hinter der FW) gibt er weiter.....

Gruß Temp