Iptables para no tan torpes

Como en mi último post sobre iptables alguien se acordó de mi madre, tengo que darle el gusto de dedicar este a la suya de antemano. Es de bien nacidos ser agradecidos.

Si retomamos el post https://elbinario.net/2019/03/18/iptables-para-torpes/ teníamos un ejemplo de como permitir SSH a nuestra máquina.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT 

Esto permitiría a cualquier dirección acceder a nuestro servicio de SSH, sin importar el origen. Pero podemos complicar las reglas. Vamos a ver un ejemplo, de como utilizar la cadena de INPUT para restringir los accesos según desde que dirección vengan los paquetes de red.

iptables -A INPUT -s 192.168.0.0/16 -p tcp -m state --state NEW --dport 8118 -j ACCEPT

Este ejemplo no difiere mucho del anterior, pero se incorporan dos «flags», -s «source» indica el origen que queremos legitimar. En este caso estaríamos abriendo el puerto 8118 de nuestro privoxy para que lo utilicen todos los ordenadores cuyo origen esté dentro de un rango de red 192.168.0.0/16 y no a todo ordenador que tenga conectividad por red con este. 192.168.0.0/16 es un rango que incluye 192.168.0-255.0-255 esto quiere decir que aceptaría paquetes de las direcciones como 192.168.5.134 o 192.168.0.120, esto como es evidente daría la opción de usar como proxy web un privoxy en la rasberry, para todos los ordenadores de una red doméstica con configuración típica «192.168.x.x» que normalmente traen los routers domésticos.

Además incorpora un flag -m state al que se le pueden añadir otros subflags como –state

  • NEW: Significa que el paquete ha iniciado una nueva conexión, o está asociado de alguna otra manera con una conexión que no ha visto paquetes en ambas direcciones
  • ESTABLISHED lo que significa que el paquete está asociado con una conexión que ha visto paquetes en ambas direcciones
  • RELATED: significa que el paquete está comenzando una nueva conexión, pero está asociado con una conexión existente, como una transferencia de datos FTP o un error ICMP.

¿Usando iptables para saltarse el firewall de tu trabajo y conectarte a tu raspberrypi?…. Muchas empresas restringen el tráfico de red básicamente a http y https puertos 80 y 443, además en muchos caso restringen el tráfico prohibiendo el acceso a según que sitios web y las políticas de seguridad que implementan. ¿Como vas a poder acceder a tu raspberri sin el puerto 22 abierto en el trabajo?. Sencillamente identificando el origen del tráfico y dándole un tratamiento «especial» al paquete de red que llega de un sitio antes de proceder a encaminarlo.

iptables -t nat -A PREROUTING -s miempresa.com -i wlan0 -p tcp --dport 443 -j REDIRECT --to-port 22

En este ejemplo tenemos como usar el PREROUTING para tratar el paquete de forma que lo encaminemos al puerto y máquina que realmente deseamos, desde un origen concreto. -s (source) «miempresa.com».

Ojo, no me hago en absoluto responsable si tu empresa te despide por usar tu propio tunel SSH o similares para saltarse el firewall de la misma, asegurate de que no te están monitorizando antes de proceder.

Nota mental, siempre hay que activar el forwarding en /etc/sysctl.conf:

net.ipv4.ip_forward = 1 (0 = deshabilitado)

En la imagen una session de SSH con Socks Dinámico y verbose (debug) activado en Windows.

ssh -p 443 foobar@raspberrypi.noip.com -D 9999

Si finalmente no consigues conectar porque el firewall que utilizan en tu empresa es muy restrictivo siempre puedes recurrir a este otro post https://elbinario.net/2016/03/29/evitando-firewalls-con-dnscat2/, si todavía no te aclaras con iptables tienes más info aquí: https://elbinario.net/2019/03/18/iptables-para-torpes/ y aquí: https://elbinario.net/2014/06/08/log-del-taller-de-iptables/ y también este increíble manual con ejemplos http://redesdecomputadores.umh.es/iptables.htm

Compartir

Deja una respuesta

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax