Page 1 of 2

port forwarding

Posted: 2003-05-12 10:35
by sfeni
da die suchfunktion gerade nicht funktioniert und ich in google auch nichts passendes finde, muss ich dann doch hier posten. ;-)

ich möchte gerne den Port 6667 von meinem server auf ein server im irc-netz umleiten. wie kann ich das machen?

ziel:
connect auf 6667 meines servers, dieser soll dann alles weiterleiten auf den server auf den das umgeleitet wird und natürlich sollen auch daten von dem irc-server wieder an den user kommen.

praktisch wäre dies sicherlich mit iptables, aber ich weis ehrlich gesagt nicht, wie das funktioniert.

EDIT:
Mein System: debian woody
Folgendes, was evtl. wichtig ist, ist bereits installiert:

Code: Select all

...
ii  ipchains       1.3.10-15      Network firewalling for Linux 2.2.x
ii  iproute        20010824-8     Professional tools to control the networking
...

Re: port forwarding

Posted: 2003-05-12 10:42
by dodolin
a) Ich verschiebe nach Security.
b) Guckst du, Anleitung: -> http://www.netfilter.org/documentation/ -> NAT-Howto -> DNAT.
Ist gerade down, sonst hätte ich dir einen direkten Link gepostet, aber dort steht das (inklusive Beispielen) auf jeden Fall.

Bedenke: Wenn das IRC-Protokoll IP-Infos in den Nutzdaten überträgt, dann benötigst du NAT-Helper-Module, damit das funktionieren kann.

Re: port forwarding

Posted: 2003-05-12 10:51
by sfeni
Und was macht dieses NAT-Helper Module?

Info/Bitte:
Bitte macht irgendein Add-On in das Forum, dass einem verschobene Threads anzeigt, bis man seinen Topic wiederfindet, naja, das kann evtl schon mal lange dauern und ob man es wiederfindet ist ja auch die Frage.

EDIT:
Da ich nun wusste, dass das NAT ist, habe ich dann mal in Google gesucht.
Die Regel in iptables müsste ja dann so aussehen:

Code: Select all

iptables -A PREROUTING -t nat -p tcp -d MEINE-IP --dport 6667 -j DNAT --to IRC-SERVER:6667

Re: port forwarding

Posted: 2003-05-12 11:05
by dodolin
Und was macht dieses NAT-Helper Module?
Die schreiben gegebenenfalls die Layer 3 Infos in den Nutzdaten passend um.
Halt so, wie NAT das Paket verändert, das muss sich dann ja auch in den Nutzdaten wiederspiegeln. *Wenn* in den Nutzdaten Infos aus Layer 3 übertragen werden. Ansonsten natürlich nicht. Wie das jetzt bei IRC genau ist, weiss ich nicht hundertprozentig, ich weiss aber, dass es für Kernel 2.2 mit ipchains IRC-Module gibt. Was auch immer diese machen...
Info/Bitte:
Bitte macht irgendein Add-On in das Forum, dass einem verschobene Threads anzeigt, bis man seinen Topic wiederfindet, naja, das kann evtl schon mal lange dauern und ob man es wiederfindet ist ja auch die Frage.
Sorry!

Das gibt es bereits, wir hatten uns aber darauf geeinigt, dass wir es nicht verwenden.
Ich werde nochmals eine interne Diskussion darüber anregen, versprochen.
Die Regel in iptables müsste ja dann so aussehen:
Jo, denke, das ist korrekt.

Re: port forwarding

Posted: 2003-05-12 11:33
by sfeni
Habe mich mal nach diesen Modulen umgeschaut.
Das sind Kernel Module:

Code: Select all

pXXXXXXXX:~# modprobe ip_nat_irc
pXXXXXXXX:~# modprobe ip_conntrack_irc / ports=6667,6668,6669,7000,7001,7002
pXXXXXXXX:~# lsmod
Module                  Size  Used by    Not tainted
ip_nat_irc              2496   0  (unused)
iptable_nat            15924   1  [ip_nat_irc]
ip_tables              11328   3  [iptable_nat]
ip_conntrack_irc        3168   1  [ip_nat_irc]
ip_conntrack           19724   2  [ip_nat_irc iptable_nat ip_conntrack_irc]
pXXXXXXXX:~#
Das bedeutet doch, das dir drin sind die Module oder?

Dann müsste ich noch per apt-get install folgendes Paket installieren:

Code: Select all

iptables - IP packet filter administration tools for 2.4.4+ kernels
Oder?

Dann einfach die eine Regel eintragen und fertig!?

Re: port forwarding

Posted: 2003-05-12 11:37
by captaincrunch
Da du schon mit iptables ein paar Regeln aufgestellt hast, sollte das paket schon installiert sein. Die Module gehören zum Kernel, und nicht ins iptables-Paket ... ;)

Re: port forwarding

Posted: 2003-05-12 11:49
by sfeni
Ich habe iptables nicht installiert, somit können auch keine regeln da sein.
die ein regel, die oben steht, hab ich mal so versucht zu erstellen (auf dem notizzettel). ;-)

habe nun auch mal ein tutorials kurz angeschaut, ich komme nur noch nicht ganz zurecht. ich habe auch angst, dass nachher alle ports gesperrt sind und ich nicht mehr drauf komme (gut, das rescue system würde mir in dem fall helfen, aber da drauf habe ich grad keine lust :-)).

Skript zum starten, dass ich nun mal niedergeschrieben habe:

Code: Select all

#!/bin/sh
# Neue iptables Session starten
/sbin/iptables --flush

# Module laden
/sbin/depmod -a
/sbin/insmod ip_tables
/sbin/insmod ip_conntrack
/sbin/modprobe ip_conntrack_irc / ports=6667,6668,6669,7000,7001,7002
/sbin/modprobe ip_nat_irc
/sbin/modprobe iptable_nat

# Regeln
/sbin/iptables -A PREROUTING -t nat -p tcp -d MEINE-IP --dport 6667 -j DNAT --to IRC-SERVER:6667
Kann man das so verwenden?

Re: port forwarding

Posted: 2003-05-12 11:54
by captaincrunch
OK, es sah halt nur so aus, als hättest du schon was gemacht. In dem Fall musst du das Paket natürlich noch installieren ...

Ja, und so lange du keine Default-Policy erstellst, die dir alles dicht macht, brauchst du dir auch keine Sorgen zu machen ... ;)

Re: port forwarding

Posted: 2003-05-12 11:59
by sfeni
OK, werde das mal daheim auf einem Test-Server testen.
Mal sehen, was der zu dem Skript sagt ;-)
Ich werde mich bei Problemen hier wieder melden.

So nebenbei:
Muss in der Mittagspause kurz meinen Router daheim konfigurieren, dass ich per SSH drauf kann, so dass ich in meinem Home-Netz ein bisschen arbeiten kann. Mir ist grad nämlich voll langweilig :)
Und da kommt man dann auf solche Ideen sowas zu machen mit iptables, aber ich denke das ist bei euch nicht anderst 8)

Re: port forwarding

Posted: 2003-05-12 13:17
by sfeni
So habe nun alles nötige eingerichtet um daheim auf meinen test-server zu kommen.
iptables ist installiert (schon im standard installiert ;-))

Ich habe nun mit diesem Skript iptables versucht zu starten:

Code: Select all

#!/bin/sh 
# Neue iptables Session starten 
/sbin/iptables --flush 

# Module laden 
/sbin/depmod -a 
/sbin/modprobe ip_conntrack_irc / ports=6667,6668,6669,7000,7001,7002 
/sbin/modprobe ip_nat_irc 
/sbin/modprobe iptable_nat 

# Regeln 
/sbin/iptables -A PREROUTING -t nat -p tcp -d 10.0.0.3 --dport 6667 -j DNAT --to 62.26.127.132:6667
Wenn ich nun mit "netstat -a" nachschaue, dann ist kein irc port (6667) offen. wie mache ich das nun? mit telnet komme ich auch nicht auf diesen port.

Re: port forwarding

Posted: 2003-05-12 13:50
by dodolin
echo "1" > /proc/sys/net/ipv4/ip_forward

(bin nicht sicher, ob der Pfad wirklich so heisst, bitte nachschauen)

hast du gemacht?

Re: port forwarding

Posted: 2003-05-12 14:05
by sfeni
Hatte ich nicht gemacht.
Skript sieht nun so aus:

Code: Select all

siehe unten
Aber es funktioniert immernoch nicht :-(


EDIT:
Hab mittlerweile ein paar Sachen gelesen und Regeln hinzugefügt.
Es funktioniert aber immernoch nicht. Warum?
Sollte iptables eigentlich als Dienst laufen im Hintergrund?

Mein Skript:

Code: Select all

#!/bin/sh
# Neue iptables Session starten
/sbin/iptables --flush

# Module laden
/sbin/depmod -a
/sbin/modprobe ip_conntrack_irc / ports=6667,6668,6669,7000,7001,7002
/sbin/modprobe ip_nat_irc
/sbin/modprobe iptable_nat

/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe ipt_unclean
/sbin/modprobe ipt_LOG

# IP-Forwarding aktivieren
echo "1" > /proc/sys/net/ipv4/ip_forward

# Alte Regeln loeschen
iptables -t filter -F
iptables -t nat    -F

# Standard alles akzeptieren
iptables -t filter -P INPUT       ACCEPT
iptables -t filter -P FORWARD     ACCEPT
iptables -t filter -P OUTPUT      ACCEPT
iptables -t nat    -P PREROUTING  ACCEPT
iptables -t nat    -P POSTROUTING ACCEPT

# ungewoehnliche oder defekte Pakete verwerfen
iptables -A FORWARD -m unclean -j DROP
iptables -A INPUT   -m unclean -j DROP

# Regeln
/sbin/iptables -A PREROUTING -t nat -p tcp -d 10.0.0.3  --dport 6667 -j DNAT --t
o 62.26.127.132:6667
/sbin/iptables -A OUTPUT     -t nat -p tcp -d localhost --dport 6667 -j DNAT --t
o 62.26.127.132:6667

Re: port forwarding

Posted: 2003-05-12 15:32
by dodolin
Hab mittlerweile ein paar Sachen gelesen und Regeln hinzugefügt.
Tipp: Nimm so wenig Regeln wie möglich. Schaue mit iptables -L und Konsorten (siehe manpage), welche Regeln aktiv sind.
Sollte iptables eigentlich als Dienst laufen im Hintergrund?
Nee, das macht der Kernel schon. Du kannst mit iptables -L schauen, welche Regeln aktiv sind, siehe oben.

Bitte wirf einen Blick auf das Bild in http://www.netfilter.org/documentation/ ... WTO-5.html
PREROUTING wird nicht von lokal entstehenden Paketen durchlaufen.

Ich vermute, dass vielleicht schon alles korrekt tut, du nur nicht korrekt testest. Testest du wirklich von extern, nicht von lokal? Wenn nicht, mache das bitte so. Haben diese externen Pakete wirklich Destination 10.0.0.3? Ansonsten würden sie ja von deiner Regel nicht gematched.

Wenn das auch nichts hilft, schreibe äquivalente Regeln mit -j LOG, um zu sehen , ob solche Pakete überhaupt ankommen und gematched werden.

Re: port forwarding

Posted: 2003-05-12 15:43
by sfeni
ich glaube es liegt am testen... :lol:
dann muss ich wohl bis um 16:15 uhr warten bis ich feierabend habe und daheim bin. dort habe ich dann auch wieder die nötigen tools parat.

werde auch mal kurz mit iptables -L nachschauen:

Code: Select all

sfeni:~# iptables -l
iptables v1.2.6a: Unknown arg `-l'
Try `iptables -h' or 'iptables --help' for more information.
sfeni:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere           unclean

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere           unclean

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
sfeni:~#
komisch!?

Re: port forwarding

Posted: 2003-05-12 16:28
by dodolin
komisch!?
Nee, eigentlich nicht.
Das sind deine Regeln, mit denen du -m unclean matchest. Was auch immer das genau soll... Warum lässt du das nicht erstmal weg?

PREROUTING und Konsorten ist beim einfachen -L nicht dabei. Da musst du explizit die Table mit angeben. Syntax habe ich nicht im Kopf, vielleicht

iptables -t nat -L

oder sowas in der Art? Das Howto und die manpage sollten es aber wissen... :)

Re: port forwarding

Posted: 2003-05-12 16:31
by captaincrunch
oder sowas in der Art?
Nö, genau so ... ;)

Re: port forwarding

Posted: 2003-05-12 16:35
by dodolin
Nö, genau so ...
Danke, CC. :-D

Wenn ich was aus dem Kopf sage, dann stimmt es zwar meistens, aber ich will da eine gewisse Absicherung (Disclaimer, whatever) haben. Deshalb schränke ich das ein, wenn ich es nicht selbst nachgeschaut habe, wozu ich halt oft zu faul bin bzw. denke, dass das ja jeder selber kann. ;)

Schliesslich will ich nicht behaupten, es wäre so, wenn ich mir nicht sicher bin. Aber ok.

Re: port forwarding

Posted: 2003-05-12 16:56
by sfeni

Code: Select all

sfeni:~# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             10.0.0.3           tcp dpt:ircd to:62.26.127.132:6667

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Dann habe ich das mal von extern getestet:

Code: Select all

Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:>telnet 10.0.0.3 6667
Verbindungsaufbau zu 10.0.0.3...Es konnte keine Verbindung hergestellt werden mi
t Host  auf Port 6667 : Verbinden fehlgeschlagen

C:>
und nun?

hab mein skript wieder abgespeckt:

Code: Select all

#!/bin/sh
# Neue iptables Session starten
/sbin/iptables --flush

# Module laden
/sbin/depmod -a
/sbin/modprobe ip_conntrack_irc / ports=6667,6668,6669,7000,7001,7002
/sbin/modprobe ip_nat_irc
/sbin/modprobe iptable_nat

/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe ipt_unclean
/sbin/modprobe ipt_LOG

# IP-Forwarding aktivieren
echo "1" > /proc/sys/net/ipv4/ip_forward

# Alte Regeln loeschen
iptables -t filter -F
iptables -t nat    -F

# Regeln
/sbin/iptables -A PREROUTING -t nat -p tcp -d 10.0.0.3  --dport 6667 -j DNAT --t
o 62.26.127.132:6667

Re: port forwarding

Posted: 2003-05-12 16:59
by captaincrunch
Ã?hm sorry, aber seit wann werden Adressen, die für private Netze vorgesehen sind im Internet geroutet ? Für dein 10.0.0.3 trifft genau das zu. Dir wird also nichts anderes übrig bleiben, als das ganze aus dem LAN selbst zu testen.

Re: port forwarding

Posted: 2003-05-12 17:05
by sfeni
Ich teste das momentan noch auf nem rechner hier daheim (10.0.0.3) und dieser soll dann nach außer connecten auf den irc server von euIRC 62.26.127.132. das sollte doch möglich sein.
später möchte ich das auf meinem rooty einsetzen.

zur info:
habe einen router hier, der alles nach außen routet, was nicht intern ist :-)
somit dürfte das kein problem sein.

Re: port forwarding

Posted: 2003-05-12 17:11
by dodolin
Keine Ahnung, ob der Testaufbau so korrekt ist, da ich nicht genau checke, was du jetzt da gemacht hast (Bilder mit dem Netzaufbau würde da z.B. helfen).

Aber warum machst du es überhaupt so umständlich und machst es nicht einfach mal auf dem Rootserver? Solange du nur diesen einen Port in PREROUTING umschreibst, geht a) nichts kaputt und b) wird auch keine Sicherheitslücke aufgerissen. Was spricht also noch dagegen?

Re: port forwarding

Posted: 2003-05-12 17:16
by sfeni
ok, ich teste es gleich mal auf dem server.
apt-get install iptables:
dann noch ne frage, der frägt mich hier ob ich das runlevel skript mit reinmache soll oder nicht?! muss das nun als daemon laufen oder nicht!?

Re: port forwarding

Posted: 2003-05-12 17:20
by captaincrunch
Nein. Das Runlevel-Script dient nur dazu, dass Debian dir ein Paketfilterscript "vorbaut", dass dann automatisch beim Start geladen wird. Mit einem Daemon hat das nichts zu tun.

Re: port forwarding

Posted: 2003-05-12 17:25
by sfeni
ok, funzt aber immernoch nicht. :-(

Code: Select all

#!/bin/sh
# Neue iptables Session starten
/sbin/iptables --flush

# Module laden
/sbin/depmod -a
/sbin/modprobe ip_conntrack_irc / ports=6667,6668,6669,7000,7001,7002
/sbin/modprobe ip_nat_irc
/sbin/modprobe iptable_nat

# IP-Forwarding aktivieren
echo "1" > /proc/sys/net/ipv4/ip_forward

# Alte Regeln loeschen
iptables -t nat    -F

# Regeln
/sbin/iptables -A PREROUTING -t nat -p tcp -d 217.160.174.15 --dport 6667 -j DNAT --to 62.26.127.132:6667

Re: port forwarding

Posted: 2003-05-12 21:36
by rootmaster
ohne auf die einzelheiten von tcp/ip einzugehen:
du musst die verbindung zum irc-server maskieren; also sollte folgender code reichen ;)

Code: Select all

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -p tcp -d 62.26.127.132 -j MASQUERADE
iptables -A PREROUTING -t nat -p tcp --dport 6667 -j DNAT --to-destination 62.26.127.132
"back to the roots"