PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : iptables forwarding



mactini
19.11.03, 23:07
Es ist so
Ich habe da ein Proxy mit der IP
eth0=LAN x.x.10.10
eth1=DSLModem x.x.20.10 und wer es glaubt
ppp0=mit dynamischer ip.

Im GLEICHEN NETZWERKSEGMENT eth0 befindet sich noch ein Abahatschi der auf
meinem WEBSERVER x.x.10.5 Port 80 hört.
Nun habe ich versucht mit Nat iptables etwas hinzubekommen:
Mein Nat füt http sie wie folgt aus:
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination x.x.100.5
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -j SNAT --to-source x.x.100.5
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d x.x.100.5 --dport 80 -j ACCEPT

Jetzt DIE GROSSE FRAGE : Warum funzt das nicht. Wo liegt mein Fehler:
Warum wird mein Webserver nicht angesprochen???????????????????????

Bitte kein Verweis auf Manpage oder ähnlichem.
Kann kein English, ausserdem habe ich mir die tausendmal durchgelesen.
:confused:

Matzetronic
19.11.03, 23:13
hi,

is schon spät und ich bin müde, aber ich glaube, du musst "iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d x.x.100.5 --dport 80 -j ACCEPT" an den anfang stellen. außerdem solltest du NEW,ESTABLISHED,RELATED nehmen.....

wenns nicht geht, dann melde dich nochmal (morgen).

gute nacht,
matze

mactini
19.11.03, 23:17
Versuche es gleich. Gute Nacht

klemens
19.11.03, 23:21
ptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d x.x.100.5 --dport 80 -j ACCEPT

-d x.x.100.5:
Die Anfragen werden doch an die IP von ppp0 gestellt und POSTROUTING geschieht (s. Beitrag von mactini) nachher.

mactini
19.11.03, 23:29
Schade das wars nicht!

An klemens:
ja http:80 aus dem wan an ppp0 postrouting an den intern webserver x.x.100.5

was habe ich denn nun flasch gemacht?

klemens
19.11.03, 23:41
Tu das -d x.x.100.5 weg

Nehmen wir an, Dein ppp0 hat die IP 123.456.123.456

Jetzt kommt der Zielort 123.456.123.456 an Deine Firewall und nicht x.x.100.5
Daher greift die Regel so, dass nicht geforwarded wird.

edit:
echo 1 > /proc/sys/net/ipv4/ip_forward

hast nicht zufällig vergessen?

mactini
19.11.03, 23:58
LAN_IP=192.168.100.5

# NAT fuer HTTP
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.5

iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp --dport 80 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -j SNAT --to-source $LAN_IP

So sieht es aus und trotzdem funzt s nicht.

Kann es vielleicht auch was mit allow zu tun haben. in der httpd.conf

ip_forward habe ich nicht vergessen

klemens
20.11.03, 00:25
NEW,ESTABLISHED,RELATED

Schalte einmal die forward-policy auf accept, damit einmal eingeschränkt wird, obs überhaupt daran liegt.

Vielleicht kannst gleich das ganze Script anhängen.


iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -j SNAT --to-source $LAN_IP

Was soll denn das sein? Ich verstehs wirklich nicht?

Bitte verfolge den Weg der Pakete Schritt für Schritt und denk die IP dazu

Eine Anfrage kommt auf 123.456.123.456:80 rein.
Das Ziel wird auf 192.168.100.5:80 geändert
Das Paket wird geroutet
Dann wird dem Paket die Absenderadresse auf 192.168.100.5 geändert (geht ja bei eth0 raus, oder)
Das Paket kommt am Server an.
Das Antwort Paket wird an 192.168.100.5 zurückgeschickt

Was soll da funktionieren - oder hab ich da was falsch verstanden.

Mach das vielleicht Schritt für Schritt!
Schalte die Firewall aus, dann:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.5

(hoffe, ich hab mich jetzt nicht vertippt und den Aufbau Deines Netzwerkes erraten)

Funkt es dann?

btw. ist das Proxy? oder meinst Du Router

mactini
20.11.03, 00:32
Habe es so gemacht aber geht auch nicht.

Der Proxy ist Squid redhat 7.3 upgedated. Webserver ist Redhat 9.0


Ich hau mich jetzt hin. Auf jedenFall bedanke ich mich schon mal bei dir
(bin morgen wieder im einsatz)

klemens
20.11.03, 00:45
Schaut der relevante Teil Deines Netzwerkes so aus?

routerPC:
eth1 -> DSL
eth0 -> 192.168.100.0 (192.168.10.10)

PC mit Apache
eth0: 192.168.100.5

hmm .. mit einer Netzwerkmaske von 255.255.255.0 könntest da überhaupt Probleme haben.

klemens
20.11.03, 00:46
dann gute Nacht!

-vielleicht kannst morgen genaue Informationen liefern -- da ist wo ein Knopf, der schwer zu erraten ist.

mactini
20.11.03, 00:51
Im anhang findest du das Script

mactini
20.11.03, 00:57
proxy
Redhat 7.3 Squid
eth0=192.168.10.10/24
eth1=DSL


Abahaschi PC
RedHat 9.0
eth0 = 192.168.10.5/24



Gute Nacht, hoffentlich kann ich schlafen

Matzetronic
20.11.03, 08:22
guten morgen,

war ein bischen blödsinn gestern.... so sollte es gehen:


iptables -A INPUT -i $EXT_DEV -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $EXT_DEV --dport 80 -j DNAT --to 192.168.10.5:80


$EXT_DEV sollte bei dir dann ppp0 sein. wie klemens schon sagte, muss natürlich das routing auf dem proxy eingeschaltet werden.

gruß,
matze

Stage
20.11.03, 09:22
ich versuchs auch mal

als allerersten ist mir das aufgefallen

iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -j SNAT --to-source x.x.100.5 was soll das denn bewirken ?

Damit werden ja praktisch alle Pakete die von eth0 an port 80 gerichtet sind, so verändert das sie die Ausgangsandresse des Webservers haben ... ziemlich unsinnig find ich, weil der Webserver schickt dann die Antwortpakete dann später an sich --> also weglassen

fürs richtige Forwarden reicht

1.
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination x.x.100.5:80
2.
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
#dies hast du aber bestimmt sowieso schon drinnen, sonst kannst du nit mit den Rechnern im LAN ins Netz
3. Falls ForwardChain defaultmässig auf DROP steht
iptables -A FORWARD -i ppp0 -o eth0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -p tcp --sport 80 -j ACCEPT

mactini
20.11.03, 14:43
wenn ich den service iptables stoppe oder starte und es dann so mache wie du es vorgeschlagen hast passiert gar nichts. Seite kann nicht aufgerufen werden. Irgendwie gelangen die Pakete nicht an den Webserver. oder zurück. Kann es mit irgendwelchen Rechten noch zu tun haben?????????

ip_forward ist eingeschaltet.
Intern funzt der apache Server einwandfrei nur nicht von aussen.

klemens
20.11.03, 14:50
also netweder gehört jetzt nach 192.168.10.5 oder nach 192.168.100.5 weitergeleitet.

Das muss noch klar gestellt werden.

Für 192.168.10.5 hast die falschen Regeln
für 192.168.100.5 hast das falsche Netz

mactini
20.11.03, 15:03
Proxy Server RH 7.3
SQUID (muss ich hier noch etwas routen oder forwarden)
eth0=192.168.10.10/24
eth1= 192.168.20.10/24
ppp0=dyn.ip update durch dyndns

service iptables stopped
service httpd stoppd
ip_forward=1
----------------------------------------------------
Webserver RH 9.0
eth0=192.168.10.5/24

iptables stoppd
httpd started Listen on : 80

But it doesn 't work. internes Netz läuft der Apache Server.

Irgendwie bin ich jetzt völlig durcheinander.

:(
Bin Anfänger was RH betriffft, ich danke euch schon mal für eure Geduld
Frage wie logge ich alles, das ich mir zumindest alles mal anzeigen lassen kann in den messages

klemens
20.11.03, 15:53
tail -f /var/log/messages
so schaust mit, was sich tut.

Und nochmals: ein Problem nach dem anderen!!
Squid ist einmal eine andere Baustelle ;)

squid abschalten.
Dem Browser sagen, dass es keinen Proxy gibt.

Den Proxyserver nennen wir "router" den Webserver "webserver"

Der Test muss von außen erfolgen.

Firewall auf router und webserver ausschalten!
Apache muss auf webserver laufen und von router erreichbar sein. webserver muss ins internet kommen: z.B. ping 213.30.246.148 (IP von linuxforen.de)
/var/log/httpd/access.log und error.log geben Meldungen des Apache wieder.
Der Router muss mit dem Internet verbunden sein.
Den Test von außen (2.Internetverbindung) auf die IP von ppp0

Am router eingeben:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.5

Solange das nicht funktioniert, funktioniert alles andere auch nicht.

Vorsicht: in diesem Stadium liegt dein router "nackert" im Internet -> /var/log/messages nicht aus den Augen verlieren! Schlecht konfigurierte Netzwerkdienste können da eine Sicherheitslücke sein! (samba und schlechte Passwörter sind da Kanditaten).

Stage
20.11.03, 16:32
ach und nochwas...mit dieser Konstelation kannst du nicht von Innen haraus die externe IP ansurfen um auf deinen Apache zu kommen.

Matzetronic
20.11.03, 17:55
@stage
sry, die regel:


iptables -A FORWARD -i ppp0 -o eth0 -p tcp --dport 80 -j ACCEPT

wird nicht funktionieren. es muß INPUT sein und bezieht sich dann natürlich nur auf ppp0, eth0 muss dann logischerweise weggelassen werden (siehe mein voriges posting).

@mactini
probier einfach mal meine zwei regeln aus, hier funktionieren sie ja auch ;)

gruß,
matze

Stage
21.11.03, 07:46
@Matzetronic
wieso input ... der Apache läuft auf einem Anderen PC .. und nicht auf der FW maschine.
schau dir das an
http://www.iptables.org/documentation/HOWTO/de/netfilter-hacking-HOWTO-3.html

zuerst greift PREROUTING, dann Forward und dann POSTROUTING

Matzetronic
21.11.03, 19:19
hallo,

noch mal etwas ausführlich:
FORWARD greift nur, wenn das paket z.b. die empfängeradresse 192.168.10.5 hat.
da der zugriff aus dem internet gesehen immer an die im internet sichtbare ip-adresse gerichtet ist (da das 1. genatete netz nicht sichtbar ist und 2. private ip-adressen im internet nicht geroutet werden sollten) und sozusagen dort endet, sieht der router bzw. die firewall es als INPUT.

gruß,
matze

Stage
21.11.03, 21:12
@ Matzetronic :
das ist ja alles gut und richtig was du schreib...aber bei Portforwarding greift trotzdem nicht die Inputchain

weil
1. greift die PREROUTING chain ... dort wird die destination IP ausgetauscht
2. ist das paket dann an 192.168.10.5 gerichtet,
3. probiers aus

Matzetronic
22.11.03, 08:12
hmm,

asche über mein haupt, du hast natürlich recht, stage.
ich werd wohl langsam alt und senil :(

gruß,
matze

mactini
22.11.03, 10:09
Moin Jungs,
das ist ja rattenscharf, wie Ihr alles zum Besten gebt.

Also gehe ich jetzt davon aus @Matze

echo 1 > /proc/sys/net/ipv4/ip_forward # is klar
iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT # http reinlasse
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE # isse auch klar

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.5:80

# wenn ich das hier richtig verstanden werden alle anfragen an ppp0 mit port 80 zu der angegebenen internen ip geroutet, bzw die pakete bekommen als destination ip:port jetzt 192.168.10.5:80

Und ich brauche kein Forward ??????????

mactini ist aber durcheinander
ob das funzt oder nicht sagt euch gleich das licht ;)

Matzetronic
22.11.03, 10:17
hi mactini,

solange wie wir gebraucht haben, hättest du es schon längst ausprobieren können *scnr*

# Routing
echo 1 > /proc/sys/net/ipv4/ip_forward

# Masquerade
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# Portforwarding Port 80
iptables -A FORWARD -i ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.5:80

sollte funktionieren.

MfG,
Matze

mactini
22.11.03, 10:18
Diese Regeln habe ich von Bertram ipgenerator bekommen:

# NAT fuer HTTP
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.5


iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -j SNAT --to-source 192.168.10.10 <-(Proxy_IP)


iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d 192.168.10.5 --dport 80 -j ACCEPT


Was ist daran falsch, bzw könnt ihr ein Komentar dazu schreiben

mactini
28.11.03, 08:59
VIELEN DANK, es funzt prima