Estimados amigos.
tengo una PC con linux SuSE 9.3. La misma tiene 2 tarjetas de red y configurada para que funcioné como router.
EL problema es que necesito natear algunos puertos hacia mi PC en la LAN, es decir, si yo tengo la ip internat 192.168.0.9 y quiero natear el puerto 80 para poder montar un servidor web en mi PC, quiero que todas las peticiones al puerto 80 de mi PC con linux (la cual es la que está conectda directamente a internet), sean redirecionadas a 192.168.0.9.
la verdad que busque información en google y lo que obtuve fue u comando como el siguiente
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.9:80
La verdad no estoy seguro de que este comandos sea el que necesito porque no me ha funcionado.
Cualquier ayuda e información mas concreta sera bienvenida.
Saludos.
Me parece más conveniente la regla:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 80
Fijate lo que dice el manual de iptables con respecto a REDIRECT:
REDIRECT
This target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains. It redirects the packet to the machine itself by changing the destination IP to the primary address of the incoming interface (locally-generated packets are mapped to the 127.0.0.1 address).
"Este destino sólo es válido para la tabla NAT, en las cadenas PREROUTING y OUTPUT y otras definidas por el usuario llamadas por éstas. Redirige el paquete hacia la propia máquina cambiando la dirección IP de destino a la dirección primaria de la interfaz [por la que llega] (los paquetes generados localmente se mapean a la dirección 127.0.0.1)."
Saludos.
CitarMe parece más conveniente la regla:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 80
lo que ali no veo es donde le digo a que PC de la LAN en particular quiero routear.....
Bien... estuve mirando el tema.
Hecha tu aclaración, deberías probar con esta regla:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.9
fijate que no es "--to" sino "--to-destination"
Le saqué el "80" al nuevo destino ya que al no ponerlo se asume que sólo se cambia la dirección de destino y no el puerto de destino. Ponerlo, igualmente, no está mal.
Fijate si te sirve. Si no anda, lo vemos y tratamos de encontrar otro camino.
Saludos.
Aclaro que es esta modificación es para la versión 1.3.6 de iptables, en Debian Etch con kernel 2.6.17
Si tienes otra versión de iptables fijate en el manual.
Desde consola:
$ man iptables
y buscas tipiando /DNAT
Si usas KDE, vas a "Ejecutar comando" del "menú K" (pulsas Alt+F2) y escribes:
man:iptables
Suerte.
Zeiter:
Gracias por tu ayuda, lamentablemente no logro hacerlo funcionar, he intentadod e todo y nada funciona. Supongo que quizas me este equivocando con el nombre de los dispositivos (me refiero a eth0, eth1, etc)
La verdad que no se, quizas es alguna convinación de reglas que aun no encuentro. ¿ no existirá algo mas GUI para configurar esto ?.
Desde ya te agradezco la ayuda que me puedas brindar porque esto me está volviendo loco.
Saludos
Regla Nº 1: No te desanimes. ;)
Herramientas gráficas hay un montón. Yo no uso ninguna porque, al dedicarme a esto prefiero aprender (a los golpes, pero aprender).
Firewall-Builder es una muy buena herramienta gráfica... tiene muchas cositas... así que preparate para investigar y estudiar. Puedes mirarlo aquí (http://www.fwbuilder.org/).
También tienes kmyfirewall (http://kmyfirewall.sourceforge.net/) y también firestarter (http://www.fs-security.com/).
Si lo deseas, enviame el script que has hecho para que le dé un vistazo. En una de esas detecto el problema.
zeiterz @ gmail.com
Saludos.
Gracias ZeiterZ, creo que voy a probar con el Firewall-builder que tiene pinta de bueno (estuve viendo el manual).
Espero que no se tenga que instalar, o al menos si hay que instalarlo que no quede muy a la vista ya que ademas de routear cosas por trabajo quiero routear otras cosas (lease emule :jaja:)
una vez masmuchas gracias ZeiterZ y luego comento como me fue.
Saludos.
Lo que hacen este tipo de herramientas es darte la posibilidad de diseñar "visualmente" el firewall.
Una vez que lo hagas, le dices que "genere" el firewall, que no es otra cosa que un archivo bash script que contiene las órdenes iptables adecuadas. Luego queda en vos, con tus privilegios de administrador el ejecutar ese script, que no debería ser "visible" para nadie sin privilegios de root.
Fijate bien en tu distribución pues muchas suelen traer alguna herramienta "preferida" para firewall.
Por otro lado, firewall builder es muy conocida así que es muy probable que tu distro la traiga lista para instalar.
Saludos.
Una herramienta interesante y muy útil, si hablamos de administrar un servidor Linux, ya sea en forma local o remota, es Webmin (http://www.webmin.com/).
Se instala en el servidor y se activa el demonio de webmin, luego, para accederlo y configurar todos los aspectos del servidor (red, servicios, backups, instalar paquetes, firewall, mail, etc. etc.) se utiliza una interfase web, por lo cual, se puede acceder remotamente desde cualquier PC de la red local e, incluso, desde internet.
SaludOS/2
Cierto... Me olvidaba de Webmin (Debian no lo trae).
Lo instalas, ejecutas el demonio y accedes a Webmin con https://maquina:10000
Saludos.
No se si les servirá de algo, pero yo nunca aprendí a usar iptables y pude poner un firewall y compartir la conexion de internet entre dos máquinas con linux usando shorewall, que te genera las reglas de iptables basandose en archivos de configuración, separados en configuracion de la red, reglas, masquerading, nat
http://www.shorewall.net/
Pero probablemente sea lo mismo, y más facil, con las herramientas gráficas que recomendaron.
Tambien, shorewall es una buena alternativa cuando la configuración de iptables se hace dificil.
Otra para tener en cuenta es Jay´s Iptables Firewall (http://firewall-jay.sourceforge.net/download.php), del estilo de shorewall y con interfase de menúes en consola.
SaludOS/2
Bueno, gracias a todos por los comentarios, esta noche cuando quede solo en la empresa y pueda meterle mano al servidor voy a ir probando todas las aplicaciones que me dijeron.
Espero no romper nada, sino estaré aumentando el indice de desempleo en el Uruguay :jaja:.
Saludos.
Tranqui.
Antes de tocar el firewall guardá las reglas actuales con el comando iptables-save... el hermanito de iptables-restore. (1)
También guardá el resultado del comando route.
Y le metes pa'delante.
Saludos.
Notas:
(1) Una forma de usarlo es:
# iptables-save >> firewall-actual.txt
Luego de las pruebas, lo recuperas con
# iptables-restore << firewall-actual.txt
o con
# cat firewall-actual.txt | iptables-restore
Bueno amigos:
lamentablemente luego de 4 horas frente al servidor no he podido hacer el DNAT de los puertos, intenté con webmin que me parecio completisimo pero no me funcionó, cualquier regla que intentaba poner (incluso siguiendo paso a paso las instrucciones de la documentación) toda la LAN se quedaba sin acceso a internet.
lo que no alcanzo a entender es lo que me tira el ifconfig
dsl0 Link encap:Point-to-Point Protocol
inet addr:190.64.47.7 P-t-P:200.40.19.8 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:164504 errors:0 dropped:0 overruns:0 frame:0
TX packets:162677 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:125867828 (120.0 Mb) TX bytes:101125569 (96.4 Mb)
eth0 Link encap:Ethernet HWaddr 00:16:EC:C7:83:BC
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::216:ecff:fec7:83bc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7152075 errors:0 dropped:0 overruns:0 frame:0
TX packets:8282697 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3363532839 (3207.7 Mb) TX bytes:2343782741 (2235.2 Mb)
Interrupt:11 Base address:0xec00
eth1 Link encap:Ethernet HWaddr 00:08:A1:A0:4A:66
inet6 addr: fe80::208:a1ff:fea0:4a66/64 Scope:Link
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8281180 errors:0 dropped:0 overruns:0 frame:0
TX packets:89 errors:6899291 dropped:0 overruns:0 carrier:13726264
collisions:0 txqueuelen:1000
RX bytes:2482433383 (2367.4 Mb) TX bytes:16785 (16.3 Kb)
Interrupt:10 Base address:0xd000
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:124978 errors:0 dropped:0 overruns:0 frame:0
TX packets:124978 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8610365 (8.2 Mb) TX bytes:8610365 (8.2 Mb)
yo tengo 2 tarjetas de red y un modem ADSL, supongo que esos son los 3 dispositivos que me está tirando alli, lo que no entiendo es porque la tarjeta de red (eth1) que es la que recibe la conexion a internet no tiene IP, y es el DSL0 el que obtiene la IP. No se si esto tendrá algo que ver, quizas ustedes me ayuden a interpretar esta información.
tambien estuve probando con el shorewall pero tampoco hubo caso, nuevamente cada cosa que hacia la LAn entera se quedaba sin red, incluso siguiendo las configuraciones tan sencillas que explica la ayuda, la verdad que necesitaria entender un poco mas esas interfaces que aparecen alli porque me tienen un poco confundido.
Saludos.
PD ZeiterZ: no sabes como me salvó la vida tu recomendaciñon de hacer un backup de las reglas de iptables, cada cagada que me mandaba al toque tenia todo andando nuevamente.
Cuando se usa un módem ethernet hay dos formas de hacerlo funcionar con Linux:
1. Que se comporte como un router/gateway con dirección IP
2. Que se comporte como bridge.
1.
En la modalidad 1. la placa de red a la que conecta tiene que tener una dirección IP de la misma red que la que configuras en el módem.
Por ejemplo, configuras al módem con la dirección 10.0.0.1 (su "lado" ethernet) y pones la placa de red de Linux en una dirección coherente, por ejemplo 10.0.0.2
2. En la modalidad bridge, la placa de red de Linux se deja sin configurar, es decir, no se le asigna una dirección IP sino que ésta la negocia con el módem ethernet.
Por esta razón la placa eth1 no tiene dirección IP asignada pues, a los efectos, a Linux no le interesa esa interfaz sino aquella a la que ésta le permite acceder, es decir dsl0.
Según estas dos configuraciones, hay un montón de detalles a tener en cuenta. En tu caso, la más relevante es que el firewall tiene que tomar como "interfaz externa" (la conectada a internet) a dsl0 y no a eth1. Errar en esto trae muchas amarguras...
Lo mismo pasa con la definición de las rutas (comando route). En la modalidad 1 la ruta por omisión (default en inglés) debe ser vía eth1. La orden para eso es:
# route add default gw 10.0.0.1 dev eth1
Para la modalidad 2, la route debe ser dsl0, comando:
# route add default dev dsl0
Yo siempre prefiero usar los módems ethernet en modo router (modalidad 1) pues me permite un mayor control... pero no siempre se cuenta con módems que funcionen como router.
Saludos.
OK ZeiterZ, entendí perfecto, pero ¿ como influye esto en la regla DNAT ? ¿ deberia ademas de esta regla, crear alguna otra ?
Muchas Gracias.
Saludos
En principio, no influye ya que las decisiones de enrutado se toman luego del procesamiento del firewall.
No sé cómo está configurado tu firewall, pero fijate en esta página (http://www.pello.info/filez/firewall/iptables.html). Fijate que al comienzo del script fija como política para la tabla NAT que acepte el pre y el posenrutado:
Citar
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
Con respecto a FirewallBuilder aquí (http://www.dicas-l.com.br/dicas-l/20070227.php) tienes un tutorial bastante interesante. Está en portugués.
Si quieres profundizar más sobre
iptables aquí tienes un "librito" :) (http://www.grulic.org.ar/eventos/charlas/iptables-2006-11.pdf)
Saludos.