VNC e IPTABLES en suse11

Imagen de mikeMTY

Forums: 

usamos un sever corriendo SUSE 11 con squid, tengo IPTABLES por defecto denegando todo el trafico de entrada y salida, y solo tengo habilitados los puertos que necesito, surgio la necesidad de hablitar el acceso al escritorio remoto via browser, solo para mi PC, habri los siguientes puertos:


Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT udp -- 172.21.44.50 172.21.44.250 udp spts:1024:65535 dpt:5801
ACCEPT tcp -- 172.21.44.50 172.21.44.250 tcp spts:1024:65535 dpt:5801
ACCEPT tcp -- 172.21.44.50 172.21.44.250 tcp spts:1024:65535 dpt:5901
ACCEPT udp -- 172.21.44.50 172.21.44.250 udp spts:1024:65535 dpt:5901
ACCEPT tcp -- 172.21.44.50 172.21.44.250 tcp spts:1024:65535 dpt:5900
ACCEPT udp -- 172.21.44.50 172.21.44.250 udp spts:1024:65535 dpt:5900

Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 172.21.44.250 172.21.44.50 tcp spt:5801 dpts:1024:65535
ACCEPT udp -- 172.21.44.250 172.21.44.50 udp spt:5801 dpts:1024:65535
ACCEPT tcp -- 172.21.44.250 172.21.44.50 tcp spt:5901 dpts:1024:65535
ACCEPT udp -- 172.21.44.250 172.21.44.50 udp spt:5901 dpts:1024:65535
ACCEPT tcp -- 172.21.44.250 172.21.44.50 tcp spt:5900 dpts:1024:65535
ACCEPT udp -- 172.21.44.250 172.21.44.50 udp spt:5900 dpts:1024:65535

pongo en mi browser http://172.21.44.250:5801/ y me comienza a habrir el escritorio remoto, pero despues de unos momentos de solo quedarce procesando la peticion, no logra mostrarme los elementos del escritorio y me aparece la leyenda "Network error: remote side closed conexion" y un boton de "login again", borro las reglas del iptables y me conecto sin ningun problema...

me faltan puertos, que podra suceder, por que no me permitira hacer la conexion....
gracias

Lo que necesitas no se hace

Imagen de damage

Lo que necesitas no se hace con INPUT y OUTPUT si necesitas que tu maquina pueda ser accedida desde la LAN via VNc necesitas habilitar el FOWARD a los puertos pertientes, si la necesidad es que sea alcanzada tu PC desde el exterior necesitas hacer DNAT y redirigir la conexión, pegale una mirada a:

http://www.pello.info/filez/firewall/iptables.html

Saludos.

P.D. No necesitas espesificar el "spt" Source port como lo muestras, solo declarar de destino nada más (en este caso)

segun lo que entiendo de la

Imagen de mikeMTY

segun lo que entiendo de la documentacion solo los paquetes que no van al propio firewall se les aplica la regla FORWARD, no se si estoy interpretando mal estos terminos pero la conexion VNC es un proceso propio del FIREWALL, de igual manera se intentaron las reglas en FORWARD con los mismo puertos y no resulto


iptables -A FORWARD -s 172.21.44.50/32 -d 172.21.44.250/32 -p tcp --dport 5801 -j ACCEPT
iptables -A FORWARD -s 172.21.44.50/32 -d 172.21.44.250/32 -p udp --dport 5801 -j ACCEPT
iptables -A FORWARD -s 172.21.44.50/32 -d 172.21.44.250/32 -p tcp --dport 5901 -j ACCEPT
iptables -A FORWARD -s 172.21.44.50/32 -d 172.21.44.250/32 -p udp --dport 5901 -j ACCEPT
iptables -A FORWARD -s 172.21.44.50/32 -d 172.21.44.250/32 -p tcp --dport 5900 -j ACCEPT
iptables -A FORWARD -s 172.21.44.50/32 -d 172.21.44.250/32 -p udp --dport 5900 -j ACCEPT

como observacion al quitar las reglas, y conectarme via vnc, ejecute

netstat -putan

y vimos que se establecen conexiones por el puerto 6001 del vnc de la siguiente manera

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 172.21.44.250:6001 172.21.44.250:24609 ESTABLISHED 7895/Xvnc
tcp 0 0 172.21.44.250:6001 172.21.44.250:24608 ESTABLISHED 7895/Xvnc
tcp 0 0 172.21.44.250:6001 172.21.44.250:24614 ESTABLISHED 7895/Xvnc
tcp 0 0 172.21.44.250:6001 172.21.44.250:24628 ESTABLISHED 7895/Xvnc

al buscar ese puerto en /etc/services mensiona que ese puerto no esta asignado a algun servicio, habrimos ese puerto en tcp y udp y nada... bueno seguimos intentado e ideando, si alguien por ahi tiene alguna sugerencia es bien recibida ...

Creo entendi mal, lo que

Imagen de damage

Creo entendi mal, lo que necesitas es ingresar a tu server por VNC desde tu PC? si es asi lo normal es abrir lo puertos pertinentes con el metodo INPUT/OUTPUT, mira los puertos que vnc usa por lo general el escritorio remoto es vino-server, ahora no creo sea necesario especificar el destino de la conexión ya que es el mismo server. deberia estar asi y funcionar sin problemas:

iptables -A INPUT -s 172.21.44.50/32 -p tcp --dport 5800:5801 -j ACCEPT
iptables -A INPUT -s 172.21.44.50/32 -p tcp --dport 5900:5901 -j ACCEPT
iptables -A INPUT -s 172.21.44.50/32 -p tcp --dport 6000:6001 -j ACCEPT

Idem para el OUTPUT con las modificaciones del caso.

De igual forma mira si en realidad esta corriendo el VNC intenta bajar el firewall y probar.

pues ya funciono, las reglas

Imagen de mikeMTY

pues ya funciono, las reglas quedaron de la siguiente manera


Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 172.0.0.0/8 172.21.44.250 tcp dpt:5801
ACCEPT tcp -- 172.0.0.0/8 172.21.44.250 tcp dpt:5901
ACCEPT tcp -- 172.21.44.250 172.21.44.250

Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 172.21.44.250 172.0.0.0/8 tcp spt:5801
ACCEPT tcp -- 172.21.44.250 172.0.0.0/8 tcp spt:5901
ACCEPT tcp -- 172.21.44.250 172.21.44.250

con esto dejamos el ecceso habierto a cualquier equipo de la red, lo que determino que funcionara fue la ultima linea de INPUT y OUTPUT, ya que al ver como se comportaba la conexion del VNC con el netstat -putan marca que realiza conexiones a si mismo:

Active Internet connections (servers and established)
Local Address Foreign Address State PID/Program name
172.21.44.250:6001 172.21.44.250:26979 ESTABLISHED 3068/Xvnc
172.21.44.250:26987 172.21.44.250:6001 ESTABLISHED 3235/kicker [kdeini

no pensabamos que fuera por ahi la solucion pero ya funciono... estamos investigando la justificacion de estas ultimas lineas si alguien sabe algo se agradeceria la explicacion,

gracias

La ultima linea para mi

Imagen de damage

La ultima linea para mi criterio no tiene razón de ser ya que aceptas todo lo que vaya y venga de la mimsma ip lo cual es inecesario, pero en fin, si en netstat te dio como resultado que escuchas el vnc por el 6001 debes declarar ese puerto, no lo veo declrado en tu iptables, en mi caso el vino-server (que es el que uso) esta escuchando por el 5900 y tengo declarado que dicho puerto este abierto para ciertas ip's especificas (-s), y le doy drop a todo ya que mi politica por defecto es ACCEPT, con eso funciona al pelo. Además bloqueo por host.allow y .deny por si las moscas ser paranoico aveces es bueno.

$IPT -A INPUT -s 201.218.40.xxx/32 -p tcp --dport 5900 -j ACCEPT
$IPT -A INPUT -p tcp --dport 5900 -j DROP

P.D. No especifiques el Destino no lo necesitas ya que las conexiones van a la ip de tu server la cual es 172.21.44.250, (me imagino ?: ). EN u cas solo necesitas la fuente de donde viene la conexion nada más.

Saludos.

lo curioso de esto es que

Imagen de mikeMTY

lo curioso de esto es que cuando intente habrir el puerto 6001 de la siguiente manera:


iptables -A INPUT -s 172.21.44.50/32 -p tcp --dport 6000:6001 -j ACCEPT
iptables -A OUTPUT -d 172.21.44.50/32 -p tcp --sport 6000:6001 -j ACCEPT

y al correr el netstat se vio esto

Active Internet connections (servers and established)
Local Address Foreign Address State PID/Program name
172.21.44.250:5901 172.21.44.50:4444 ESTABLISHED 7443/Xvnc
172.21.44.250:20167 172.21.44.250:6001 SYN_SENT 7455/-172.21.44.250
0 :::6001 :::* LISTEN 7443/Xvnc

como comentaba al inicio del post, solo me aparece la pantalla en espera de ver la pagina donde me pide el nombre de usuario y contraseña, dura unos segundos, y despues me aparece el error "Network error: remote side closed conexion", curioso que la local address y la Foreign address se la 172.21.44.250, en dado caso la Foreign seria mi ip no?... bueno seguimos justificando la ultima linea "ACCEPT tcp -- 172.21.44.250 172.21.44.250" ya que solo agregandola es como funciona...

Ok, esto es lo que sucede:

Imagen de acl

Ok, esto es lo que sucede: cuando te conectas desde un cliente de vnc a tu máquina servidora, primero se abre una conexión al puerto 5901 que te autentica. Si la autenticación acepta, se abre una segunda conexión a tu misma máquina en 6000 o 6001. Esta segunda conexión es la que se conecta al servidor X que está corriendo (y escuchando en ese 6000/1) y que provee los gráficos que se van a mandar por red. Finalmente se te envían los datos a tí por el 5901.

Sin esa regla rara, parece ser que los paquetes originados en tu interfaz local y dirigidos a tu misma interfaz local no están llegando. Esa regla permite el paso de esos paquetes.

¿Tienes alguna regla en tus cadenas de INPUT y OUTPUT que acepten tráfico de la interfaz lo? Sospecho que no. Agrega una regla que acepte todo el tráfico por esa interfaz en cada cadena y borra esa regla rara (el efecto es el mismo, pero es mucho más claro conceptualmente). Linux pasa los paquetes que van a la misma interfaz local por la interfaz lo.

incialmenete tenia la regla

Imagen de mikeMTY

incialmenete tenia la regla de esta manera:


Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 127.0.0.1 0.0.0.0/0
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 127.0.0.1

despues la cambie por

Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 127.0.0.1 127.0.0.1
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 127.0.0.1 127.0.0.1

de igual manera con ninguna de las dos me ha dejado conectarme mas que con la reglita rara, raresas que pasan.... en fin por lo pronto ahorita lo estamos manejando asi, y pues raro pero se soluciono el problema, se agradecen los comentarios y como siempre esperando que este post le sirva a mas gente de la comunidad

saludos

No es lo mismo. Coloca en

Imagen de acl

No es lo mismo. Coloca en INPUT '-i lo -j ACCEPT' y en OUTPUT '-o lo -j ACCEPT' como las primeras reglas. Aceptar solo en OUTPUT y la dirección 127.0.0.1 no es suficiente; necesitas aceptar en INPUT lo que sacas por OUTPUT (recuerda que la comunicación es bidireccional y tu política por defecto es DROP).

La interfaz lo está asociada a toda la red 127.0.0.0/8

CORRECCION, las reglas

Imagen de mikeMTY

CORRECCION, las reglas quedaron asi como lo mencionaas:


Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 127.0.0.1 0.0.0.0/0
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 127.0.0.1

despues la cambie por

Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 127.0.0.1 127.0.0.1
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 127.0.0.1 127.0.0.1

me fallo el copy paste :P sorry....

Páginas