PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Iptables Routing Apache



Stiftmaster
23.04.05, 10:58
Hallo Leute,

ich habe hier einen SuSE 9.3 Router mit zwei Netzwerkkarten.
eth0: 172.17.1.1 / 255.255.0.0 => Intranet
eth1: 192.168.1.1 / 255.255.255.0.0 => Internet

Im Intranet steht ein Server mit der IP 172.17.1.4. Darauf läuft ein Apache auf Port 80. Dieser ist über das Intranet auf erreichbar und läuft.

Über dnyDNS.org ist der 1.1 auch von außen zu erreichen (SSH). Jetzt möchte ich den Server so konfigurieren, dass der WebServer auch von außen zu erreichen ist; heißt: Port 1.1 leitet alle Anfragen auf Port 80 an eth1 weiter und dort an die IP 1.4.

Meine Versuche mit iptables sind alle bisher gescheitert. Hier mein letzter Versuch:
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -p tcp -i eth1 -d 172.17.1.4 --dport 80 -j ACCEPT

Hat jemand n' Ahnung, warum das nicht klappt? Ich danke euch für eure Hilfe

Stefan

klemens
23.04.05, 11:57
eth1: 192.168.1.1 / 255.255.255.0.0 => Internet

Ich kann mir beim besten Willen nicht vorstellen, dass eth1 mit 192.168.1.1 vom Internet erreichbar ist. Ev. hast Du DSL oder ähnliches. Dann wäre die eingehende Schnittstelle vielleicht ppp0. Schau Dir das mit
'ifconfig'
an.

Stiftmaster
23.04.05, 12:04
das ist natürlich korrekt... habe dsl0 (T-Online DSL) das an eth1 hängt.

hab das gleich mal geändert, ohne Erfolg...

iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j ACCEPT

geronet
23.04.05, 12:14
Poste mal ein "ifconfig" hier herein.

Stiftmaster
23.04.05, 18:08
sd-s-gateway:~ # ifconfig
dsl0 Link encap:Point-to-Point Protocol
inet addr:80.136.77.237 P-t-P:217.0.116.149 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:44391 errors:0 dropped:0 overruns:0 frame:0
TX packets:40209 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:40611208 (38.7 Mb) TX bytes:4464746 (4.2 Mb)

eth0 Link encap:Ethernet HWaddr 00:A0:B0:19:88:5E
inet addr:172.17.1.3 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::2a0:b0ff:fe19:885e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:47167 errors:0 dropped:0 overruns:0 frame:0
TX packets:55489 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:10243742 (9.7 Mb) TX bytes:46284051 (44.1 Mb)
Interrupt:11 Base address:0xe800

eth1 Link encap:Ethernet HWaddr 00:A0:B0:19:71:28
inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::2a0:b0ff:fe19:7128/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:45425 errors:0 dropped:0 overruns:0 frame:0
TX packets:41249 errors:0 dropped:0 overruns:0 carrier:0
collisions:66 txqueuelen:1000
RX bytes:41650118 (39.7 Mb) TX bytes:5412128 (5.1 Mb)
Interrupt:11 Base address:0xcc00

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:96 errors:0 dropped:0 overruns:0 frame:0
TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4800 (4.6 Kb) TX bytes:4800 (4.6 Kb)

wahaha
23.04.05, 20:31
iptables -vL ?


iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j ACCEPT

lässt vermuten, dass die Policy in Forward auf DROP steht... da müsstest du dann noch den Rückweg erlauben:

iptables -A FORWARD -p tcp -i eth0 --sport 80 -j ACCEPT

mfg

Stiftmaster
23.04.05, 20:50
Eingegebene Befehle:


iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 --sport 80 -j ACCEPT


iptables -vL

sd-s-gateway:~ # iptables -vL
Chain INPUT (policy ACCEPT 1334 packets, 122K bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 6 packets, 312 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- dsl0 any anywhere 172.17.1.4 tcp dpt:http
0 0 ACCEPT tcp -- eth0 any anywhere anywhere tcp spt:http

Chain OUTPUT (policy ACCEPT 1877 packets, 124K bytes)
pkts bytes target prot opt in out source destination

Aber leider läuft das immer noch nicht - schade... auch tail -f /var/log/messages sagt nix - da kommt kein Eintrag...

Danke für eure Mühe

Stefan

klemens
23.04.05, 21:42
Kommt 172.17.1.4 ins Internet? (ping auf Webadresse)

geronet
23.04.05, 21:44
Wenn's einfach nicht funktionieren will, mit tcpdump und dem iptables LOG target nachhelfen und den Fehler finden.

Grüsse, Stefan

Stiftmaster
24.04.05, 08:48
Kommt 172.17.1.4 ins Internet? (ping auf Webadresse)

Natürlich nicht. Das ist doch der Webserver. Der soll doch nicht ins Internet. Der soll doch nur weitergeleitete Anfragen von Port 80 verarbeiten und dann wieder an die 1.1 schicken. Habe aber trotzdem mal 1.4 den Gateway und DNS-Einträge verpasst, so dass er auf t-online.de pingen kann. => Website-Aufruf klappt immer noch nicht...


Wenn's einfach nicht funktionieren will, mit tcpdump und dem iptables LOG target nachhelfen und den Fehler finden.

tcpdump kennt meine Kiste nicht - denke mal, da fehlt ein Package... und das mit dem Loggen, ist genau, was ich suche - aber klappt nicht. Habe "iptables LOG /log.txt" eingegeben, aber dann meckert er, dass er LOG nicht kennt. habe mir dann die -h angeschaut - aber da gibt es die Hilfe nicht. Wo muss ich das einstellen, dass er loggt - das würd mich echt mal interessieren.

Dankend
Stefan

geronet
24.04.05, 09:02
LOG ist ein target für iptables, genau wie ACCEPT oder DROP:

iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j LOG

Solltest mal die man-page von iptables studieren ;)

Grüsse, Stefan

Stiftmaster
24.04.05, 09:09
danke für deine schnelle Antwort. Die man bin ich am studieren, die ist aber reichlich lang und nicht so trivial ;-) Aber ich bin dabei!!!

Ich teste...

Stefan

geronet
24.04.05, 09:20
Achja, es ist nicht möglich dass du von deinem internen Netzwerk das Portforwarding testest, das geht nämlich nicht rückwärts. Nur von einem anderen Internetzugang siehst du ob es geht.

Sonst probier mal folgendes zum testen:

iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward

Grüsse, Stefan

klemens
24.04.05, 09:54
Natürlich nicht. Das ist doch der Webserver. Der soll doch nicht ins Internet.

Wenn der Server nicht ins Internet kommt, dann kann er auch keine Pakete in Richtung Internet zurückschicken (Ausnahme wäre, wenn das durch einen Paketfilter geregelt ist).

Stiftmaster
24.04.05, 09:58
Vielen Dank für deine Mühe, aber auch das hilft nix - schei***

Ich habe mal auf meiner Windows-Kiste ein tracert NAME ausgeführt - das funktioniert auch alles wunderbar. jetzt müsste es sowas nur noch mit einem Port geben tracert Name:80, um zu schauen, wo die Pakete hingehen...

Das mit dem LOG hat auch geklappt - bzw. er hat den Befehl akzeptiert. aber unter /var/log finde ich keinen Eintrag iptables...

Dankend

Stefan

geronet
24.04.05, 10:05
iptables loggt meist in /var/log/messages.

Stiftmaster
24.04.05, 10:48
Aktueller Stand:


iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -p tcp -i dsl0 -d 172.17.1.4 --dport 80 -j LOG
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j LOG


iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE


ergibt bei iptables -vL

sd-s-gateway:/scripts # iptables -vL
Chain INPUT (policy ACCEPT 34260 packets, 16M bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 2024 packets, 226K bytes)
pkts bytes target prot opt in out source destination
34 2372 ACCEPT all -- any any anywhere anywhere
0 0 LOG all -- any any anywhere anywhere LOG level warning

Chain OUTPUT (policy ACCEPT 39347 packets, 17M bytes)
pkts bytes target prot opt in out source destination

172.17.1.4 kann nach draußen pingen (ping www.t-online.de).

Dann hab ich mir mit tail -f /var/log/messages die Logs angeschaut - nichts. Ich kann pingen, kein Log, ich kann auf http://xxx.dyndns.org gehen - kein Log - und auch keine Seite...

ich versteh das langsam nicht mehr...

dankend

Stefan

geronet
24.04.05, 11:10
Dann probiers nochmal andersrum (die Reihenfolge der Regeln ist wichtig):

iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j LOG
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
...

und schau mal "iptables -t nat -vL" an, das ist interessanter.

Stiftmaster
24.04.05, 11:19
Hi, hab's genau in deiner Reihenfolge eingegeben... am Ende nur noch ein
"iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE", damit die Clients auch ins Internet kommen...


sd-s-gateway:/scripts # iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 4457 packets, 351K bytes)
pkts bytes target prot opt in out source destination

0 0 LOG tcp -- dsl0 any anywhere anywhere
tcp dpt:http LOG level warning
0 0 DNAT tcp -- dsl0 any anywhere anywhere
tcp dpt:http to:172.17.1.4:80

Chain POSTROUTING (policy ACCEPT 741 packets, 46660 bytes)
pkts bytes target prot opt in out source destination

18 1079 MASQUERADE all -- any dsl0 anywhere anywhere


Chain OUTPUT (policy ACCEPT 1352 packets, 82466 bytes)
pkts bytes target prot opt in out source destination

Aber leider klappt das ganze immer noch nicht - auch keine Logs, keine Seitenansicht... irgendwo hackts da noch - und ich weiß absolut nicht wo :-(

Stefan

geronet
24.04.05, 11:24
Hast du http://www.linuxforen.de/forums/showpost.php?p=1139849&postcount=13 auch genau beachtet?

Stiftmaster
24.04.05, 11:33
Ich denk ja... aber zur Sicherheit habe ich es nochmal gemacht... Hier meine Eingabe:

iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j LOG
iptables -t nat -A PREROUTING -p tcp -i dsl0 --dport 80 -j DNAT --to 172.17.1.4:80
iptables -A FORWARD -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE

und das was rauskommt

sd-s-gateway:~ # iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 4581 packets, 359K bytes)
pkts bytes target prot opt in out source destination
0 0 LOG tcp -- dsl0 any anywhere anywhere tcp dpt:http LOG level warning
0 0 DNAT tcp -- dsl0 any anywhere anywhere tcp dpt:http to:172.17.1.4:80

Chain POSTROUTING (policy ACCEPT 761 packets, 47860 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- any del0 anywhere anywhere

Chain OUTPUT (policy ACCEPT 1394 packets, 84995 bytes)
pkts bytes target prot opt in out source destination

Laufen tut's aber immer noch nicht ;-)

Stefan

Mr_Maniac
24.04.05, 11:50
Von wo versuchst du denn, auf deine Seite zu kommen?
Von einem Rechner aus deinem LAN?
Das geht nämlich NICHT! Das verwirrt den Router... Schließlich kommt das Paket aus dem LAN...
Und auch, wenn dein PC versucht, über die Internet-Adresse zuzugreifen, so merkt doch der Router, dass das Paket aus dem LAN kommt und korrigiert das...
Hast du schonmal versucht über einen Proxy zuzugreifen?
Oder mit anderen Diensten von AUSSEN zu überprüfen, ob der WebServer erreichbar ist?

Stiftmaster
24.04.05, 12:24
> Von wo versuchst du denn, auf deine Seite zu kommen?

Im gleichen Lan, wo auch mein Server steht...

> Von einem Rechner aus deinem LAN?

Ja.

> Hast du schonmal versucht über einen Proxy zuzugreifen?

Mach ich die ganze Zeit schon. Das Masqurading nutze ich nur für Dienste wie ICQ, Skype usw.

> Oder mit anderen Diensten von AUSSEN zu überprüfen, ob der WebServer
> erreichbar ist?

Hab grad mal n' Freund angerufen, der sagt, er kommt von außen drauf... das ist ja krass... obwohl ich über einen Proxy rausgehe, kommt der mit den Routing-Einträge durcheinander... Respekt, das war's... werde am Montag auf der Arbeit weiter dran basteln und das mal selber testen, ob das von außen klappt - wäre ja zu schön ;-)

Dankend

Stefan

geronet
24.04.05, 12:40
Na ja, ich habs jetzt einmal geschrieben gehabt und einen Hinweis drauf gegeben:

Achja, es ist nicht möglich dass du von deinem internen Netzwerk das Portforwarding testest, das geht nämlich nicht rückwärts. Nur von einem anderen Internetzugang siehst du ob es geht.

Stiftmaster
24.04.05, 12:49
Ich bin immer davon ausgegangen, dass wenn ich über einen Proxy (ich nutze Squid) ins Internet gehe, dass ich dann den Router übergehe...

Mir ist es verständlich, dass wenn ich über einen Router ins Internet gehe, dass es dann Probleme geben kann (obwohl das eigentlich auch klappen müsste)...

Ich werde das morgen mal auf der Arbeit testen und mich dann nochmal intensiver mit der Materie beschäftigen - ich finde das nämlich super spannend - auch wenn es manchmal übelst harkt ;-)

Nochmal danke - bis dann

Stefan

geronet
24.04.05, 13:00
Das geht nur wenn der Proxy ausserhalb läuft, also nicht auf dem Router.