W A R N I N G
DISCLAIMER - EXCENCIÓN DE RESPONSABILIDAD
El siguiente tutorial / manual / howto, instrucciones o texto en general, carece de cualquier garantía y sólo está pensado como uso a modo educativo, de aprendizaje, experimentación, investigación y desarrollo.
Puede contener errores así como ambigüedades o falta de información precisa. En cualquier caso, las sugerencias, comentarios y críticas constructivas serán siempre bienvenidos.
El autor rechaza cualquier responsabilidad por cualquier tipo de daño, ya sea directo o indirecto, accidental o intencionado que la aplicación del siguiente texto pueda ocasionar.
Su uso está totalmente desaconsejado en entornos de producción a no ser, bajo la supervisión de un profesional debidamente cualificado y bajo su única y exclusiva responsabilidad.
La aplicación del siguiente texto en cualquier sistema ya sea total o parcialmente, implica la total aceptación de estas condiciones.
Peperfus.
HOWTO FIREWALL (desde Luci)Cómo bloquear Internet a un hosts por su MACEste Howto contiene
configuraciones de ejemplo, no siendo ninguna definitiva, ya que cada caso tiene su configuración adecuada correspondiente.
Consideraciones previas.
Se recomienda descargar este texto a un archivo, o bien imprimirlo por si se pierde acceso a Internet durante la manipulación del firewall. Además, se recomienda encarecidamente, tener conocimientos de arranque en modo failsafe y recuperación. Altamente recomendado también es tener una copia del archivo de configuración del firewall (/etc/config/firewall). Pero sobre todo, la mejor opción es practicar estas
pruebas en una máquina virtual.
Se parte de un router openwrt con 2 interfaces: la interfaz
WAN (roja, Wide Area Network, normalmente correspondiente a Internet) y la
LAN (verde, Local Area Network). Las opciones no comentadas las he dejado en su valor por defecto. Este Howto se centra sólo en red IPv4.
Configuración básica 1. (Configuración por defecto. Aquí no cambiaremos nada. Sólo echaremos un vistazo.)
Pestaña General.Firewall – Zone Settings. Esta sección se refiere a las reglas generales por defecto.. Cuando un paquete no encaja con ninguna regla, se aplican estas por defecto. Si por ejemplo creamos una nueva interfaz y le asignamos una nueva zona, se le aplicarán estas reglas por defecto. (Una zona es un conjunto de reglas que se aplican a sus interfaces asociadas)
Input: accept
Output: accept
Forward: reject
Zones
Name | Zone Forwardings | Input | Output | Forward | Masquerading | MSS clampling |
lan | lan=>wan | accept | accept | accept | | |
wan | wan=>reject | reject | accept | reject | check | check |
Explicación:
- El Zone forwarding se refiere al reenvío de paquetes, de una zona a otra. En este caso, la columna Zone Forwardings nos indica que la redirección de lan hacia wan está permitida (cosa necesaria para poder navegar por Internet). Esta es una regla específica que se puede modificar pulsando Edit, para especificar qué redirecciones entre qué interfaces permitir. Lo que venga de wan se rechaza. Esta configuración es específica.
- Input se refiere a cualquier paquete que tenga como destinatario el propio router y provenga de alguna interfaz asociada a esa zona (entrada).
- Output se refiere a cualquier paquete que tenga como emisor el propio router y vaya a alguna interfaz asociada a esa zona (salida).
- Forward se refiere a cualquier paquete que venga desde esa zona para otra zona o viceversa (redirección).
Configuración básica 2. (Un poco más avanzada, con el propósito de entender mejor cómo funciona.
No es una configuración fija, ni mucho menos. Se trata tan sólo de un ejemplo para practicar y entender. Cada uno que ajuste su firewall a sus necesidades)
Pestaña General.Antes de nada, lo primero que vamos a hacer es irnos a la pestaña Traffic Rules.
Sección Open ports on router (bajo la lista de traffic rules)
Name: WEB
Protocol: TCP
External port: 80 443 (no sé por qué pone
external. Yo creo que debería poner
internal)
Pulsamos ADD. Se recargadá la página con la regla que hemos creado añadida a la lista. Le pulsamos el botón Edit:
Restrict to address family, yo le pongo sólo IPv4 porque paso del IPv6.
En Source zone le ponemos: lan
Bajamos abajo del todo y le damos a Save and Apply.
Gracias a la regla que acabamos de crear, no perderemos el acceso la web del router por los cambios que vamos a hacer ahora. Aparte, se debe poner una IP estática en el PC porque a partir de ahora cerraremos también el tráfico al DHCP y nos quedaremos sin IP de la red si la tenemos en dinámica (se nos asignará una
dirección APIPA).
Nótese que en la especificación de puertos, hemos podido escribir varios, separados por espacio. También se puede especificar un rango, separando el puerto inicial y el final con un guión.
Vamos a ponerlo todo en reject (ojo, no apliquéis la configuración sin haber creado la regla anterior, porque perderéis el acceso al router y tendréis que reiniciarlo en
failsafe mode)
Firewall – Zone Settings. Esta sección se refiere a las reglas generales. Cuando un paquete no encaja con ninguna regla, se aplican estas.
Input: reject
Output: reject
Forward: reject
Zones
Name | Zone Forwardings | Input | Output | Forward | Masquerading | MSS clampling |
lan | lan=>wan | reject | reject | reject | | |
wan | wan=>reject | reject | reject | reject | check | check |
Pulsad en Edit de la Zona lan y, abajo, en la sección Inter-Zone Forwarding, desactivad wan de Allow forward to destination zones. El Zone Forwarding de la zona lan pasará a estar ahora en reject.
Save And Apply.
Comprobad en otra pestaña del navegador que no podréis navegar por Internet. Supuestamente, ahora mismo sólo deberíamos poder acceder a la web de administración del router (el maravilloso LUCI).
Explicación extra:
- Masquerading significa que esa zona necesita enmascaramiento de IP (básicamente muy parecido a NAT, salvo que NAT asocia 1IP priv-1IP pub y NAPT asocia x IP's priv-1 IP pub), es decir, que la IP privada del host de lan debe ser “traducida” a la IP pública con la que sale a Internet, y luego viceversa para el camino de vuelta desde Internet hacia el host de la lan. Masquerading = NAPT
- MSS Clamping no va a ser explicado aquí. No tocar.
Nota: NAT traduce (asocia) una dirección IP privada a una dirección IP pública, de tal manera que tan sólo podría navegar por Internet una máquina de la red local, puesto que la IP pública estaría ocupada en ese momento (a no ser que tuviéramos contratadas más direcciones IP públicas, lo cual es caro e innecesario en ámbito doméstico).
En cambio, Masquerading, también conocido como NAPT (Network Address Port Translation) o PAT (Port Address Translation) es capaz de asociar una IP pública a múltiples IPs privadas, gracias al uso de puertos. La asociación de una IP con su puerto IP:puerto (y su protocolo de transporte correspondiente en cada caso) se conoce como SOCKET.
Pestaña Port ForwardsEn este apartado podemos abrir puertos para ofrecer servicios a Internet. Por ejemplo, servidor web, ftp, … o por ejemplo abrir puertos para eMule, uTorrent, o algún videojuego.
New port forward
Aquí le indicamos un nombre, el protocolo necesario, la zona externa (zona cliente), el puerto externo (en caso de querer asociar algún puerto concreto o rango, que no es algo común), la zona interna (servidora), la IP interna que ofrece el servicio y el puerto interno. Este apartado se entiende mejor cuando comprendemos el masquerading o NAPT. En este caso, nuestro servicio IP:puerto se “traduciría” a múltiples asociaciones IP:puerto a la salida, para los clientes. Veamos un ejemplo:
Voy a abrir los puertos 42.000 TCP y 42.001 UDP al eMule de mi ordenador (192.168.0.125)
Name | Protocol | External zone | External port | Internal zone | Internal IP address | Internal port |
eMule TCP | TCP | wan | 42000 | lan | 192.168.0.125 | 42000 |
eMule UDP | UDP | wan | 42001 | lan | 192.168.0.125 | 42001 |
En este caso estoy ofreciendo servicio TCP eMule en mi ordenador a través del puerto 42.000. El "external port" ponemos el mismo, porque aquí es donde podemos redirigir un puerto a otro. Por ejemplo: Imaginad que nos exigen que abramos el puerto X, pero no podemos porque no lo tenemos disponible. Pues lo que hacemos es abrir el puerto Y y redirigier el X al Y, de esta manera (el firewall redirigirá el puerto X de petición de un cliente, al puerto Y de la IP especificada). ACLARACIÓN: Según tengo entendido, podemos dejarlo en blanco y por defecto tiene en cuenta el mismo puerto. Esto lo creo así, porque en la casilla no aparece la palabra "any" atenuada cuando está vacía. Y lo mismo con el servicio UDP.
Nota: es posible especificar un rango de puertos en la misma casilla. Para ello, simplemente separar el puerto inicial del final con un guión, por ejemplo: 3000-4000 (del 3000 al 4000). En otros apartados, también es posible la especificación de distintos puertos sueltos, simplemente separándolos con un espacio. Aquí no deja (no sé porqué)
Pestaña Traffic RulesEn esta sección podemos especificar reglas personalizadas. Aquí veremos la regla que creamos hace un rato, que hace posible que podamos seguir entrando a Luci.
Toda comunicación (esto es un concepto básico general) requiere de un emisor y un receptor. Y para que haya un diálogo, ambos papeles se intercambian en cuanto a que un mensaje va y vuelve de uno a otro.
Ahora nos preguntamos: Si tan sólo hemos abierto los puertos web a la entrada del router (INPUT).... y todo lo demás lo hemos cerrado (reject) ¿Cómo es que la información también puede volver, si no hemos creado regla de salida desde dichos puertos?
Esta cuestión me tuvo bastantes horas investigando, hasta que di con el tema
Existe una
regla especial que se aplica por defecto y no podemos modificar desde este apartado (ya que es algo más avanzada), que dice que cualquier paquete de una conexión previamente establecida o relacionado con ella, tiene el paso permitido. Por esta regla genérica especial, que no vemos en esta sección, no es necesario permitir el tráfico de vuelta de un servicio, sino sólo el de ida.
Vamos a crear algunas reglas más para entenderlo mejor con ejemplos.
Ahora mismo podemos navegar por la web del router, pero prácticamente nada más. No podemos navegar por Internet, ni entrar por SSH al router....
Vamos a permitir esas conexiones desde aquí.
Open ports on router:
Name. SSH
Protocol: TCP
External port: 22
Pulsamos Add y luego, en la lista, la editamos para afinar la regla (botón Edit):
Restrict to family: (esto depende de tu configuración. Yo uso sólo IPv4)
Source zone: lan (de momento no queremos abrir este puedo afuera de nuestra red local)
Bajamos al final y Save & Apply.
Ahora ya deberíamos poder acceder por SSH al router. Probadlo con (por ejemplo) el putty.
Entramos por putty. Vamos a probar a hacer ping a google:
ping google.com
ping: bad address 'google.com'
Aquí tenemos otro problema: no hay comunicación DNS. No tenemos ninguna regla que permita tráfico DNS. Además, necesitamos 2 reglas: una para entrada de DNS desde lan hacia el router y otra de salida para que el propio router pueda consultar DNS a los servidores DNS de Internet (en este caso, la regla especial que hemos comentado antes no nos vale, porque nos referimos a dos conexiones distintas). ¿Nos valdría con una regla de tipo forward? Pues depende: si usamos el propio router como servidor dns (servicio dnsmasq) no, porque el router hace de "pivote" y por lo tanto va a recibir la consulta del cliente (entrada) y cuando no conozca la respuesta, deberá, a su vez, consultar a algún otro servidor DNS (salida); pero si usamos en el cliente un servidor DNS en Internet, en ese caso sí nos haría falta la regla de tipo forward, para que el firewall permita el reenvío de la consulta, desde lan hacia wan (y vuelta). Bueno, pues vamos a crearlas:
Caso router como DNS:
Open ports on router
Name: DNS IN
Protocol TCP+UDP
External port: 53
Add, Edit...
Source zone: lan
Save & Apply
Y el de salida (no confundir con el de retorno de respuesta, sino con salida del router a DNS de Internet para que él mismo también pueda consultar):
Name: DNS OUT
External port: 53
Add, Edit...
Source zone: Device (output)
Output zone: wan
Save & Apply
Caso otro servidor DNS (en Internet, se entiende):
Como ahora vamos a utilizar otro servidor DNS para que nos resuelva nombres de dominio, lo que necesitamos es una regla de tipo FORWARD, para que el router redirija el paquete desde LAN hacia WAN. Esta conexión ya requiere de Masquerading (que lo teníamos activado), porque ya vamos a salir a Internet.
New Forward rule
Name: DNS FW
Source zone: lan
Destination zone: wan
Add and edit....
Destination port: 53
Save & Apply
Se puede probar sin necesidad de cambiar la configuración DNS con el comando nslookup, por ejemplo:
nslookup
www.google.com 194.179.1.100
Envía la petición de resolución del dominio
www.google.com al servidor DNS 194.179.1.100 (Telefónica)
Vamos a abrir el servicio DHCP:
Open ports on router
Name: DHCP IN
Protocol UDP
External port: 67 68
Add, Edit...
Source zone: lan
Save & Apply
Normalmente sería suficiente con abrir la entrada, pero no sé porqué, en este caso hay que abrir la salida también.
Open ports on router
Name: DHCP OUT
Protocol UDP
External port: 67 68
Add, Edit...
Source zone: Device (output)
Source port: 67 68
Save & Apply
Ya en principio sólo nos faltaría abrir el puerto web al exterior para poder navegar con normalidad. Efectivamente, necesitamos una nueva regla de tipo Forward.
New Forward rule
Name: NAVEGACION
Source zone: lan
Destination zone: wan
Add and edit....
Destination port: 80 443
Save & Apply
Se pone también el puerto 443, para poder navegar por las webs con protocolo https.
Se comprueba en otra pestaña que podemos navegar.
Y así, sucesivamente se podría abrir todos los puertos que quisiéramos, etc.
PESTAÑA Custom Rules
En esta sección podemos especificar los parámetros específicos que queremos que ejecute iptables. Se trata de poder personalizar al máximo el comportamiento del firewall, a través del propio comando iptables. No se va a explicar aquí, porque ya pasa del límite de este propósito que es dar una idea básica del funcionamiento del firewall.
El firewall iptables tiene muchísimos parámetros y opciones y sólo los expertos llegan a entenderlo y saber su funcionamiento completo, además de que requiere conocimiento avanzado de redes...
Más información (básica) sobre iptables:
http://es.tldp.org/Manuales-LuCAS/doc-iptables-firewall/doc-iptables-firewall.pdfCómo bloquear Internet a un host determinado por su MAC