Página 1 de 1

Simular portal cautivo

Publicado: Vie, 17 Jun 2016, 12:57
por chuck
Hola, acá en la entidad se va a hacer una serie de actividades donde se quiere compartir vía WIFI algunos recursos (documentos, videos, etc) que están alojados en la web accesible desde la LAN. Para esto voy a utilizar una laptop que tiene instalado debian 8 y crear una red wifi utilizando la tarjeta que esta tiene. Ahora, el pollo del arroz con pollo es, como hacer que desde los dispositivos que se conecten a la red y sin necesidad de configurar nada (hacerlo lo más trasparente posible a los usuarios) al ellos abrir sus navegadores cualquier dirección que se ponga sea redireccionada automáticamente hacia la web donde estarán los recursos (puesto que la mayoría de los asistentes al ser ajenos a la entidad no conocerán la dirección de la misma), o sea tratar de simular un portal cautivo que pongan lo que pongan en sus navegadores siempre los lleve a la web en cuestión. Algún norte ??
La red wifi a crear no tendrá ningún tipo de salida al exterior, el único servicio sera la web donde estarán los recursos a compartir.
Saludos y gracias de antemano. ;)

Re: Simular portal cautivo

Publicado: Vie, 17 Jun 2016, 14:34
por hugo
Podrias usar como base pfSense que además de ser un excelente cortafuegos trae un portal cautivo. Quizás puedas personalizarlo para adaptarlo a tus necesidades, el código fuente está en Github si mal no recuerdo.

Re: Simular portal cautivo

Publicado: Lun, 20 Jun 2016, 10:07
por chuck
hugo escribió:Podrias usar como base pfSense que además de ser un excelente cortafuegos trae un portal cautivo. Quizás puedas personalizarlo para adaptarlo a tus necesidades, el código fuente está en Github si mal no recuerdo.
el problema es que para usar pfsense tendria que instalarlo en la laptop (que es la que tiene tarjeta inalambrica) y no lo puedo hacer por otros motivos :? la laptop solo la puedo utilizar para este fin :| , pudiera correr un iptables en la laptop que tuviera estas reglas

Código: Seleccionar todo

IPTABLES -t nat -A PREROUTING -p tcp -s RANGO_IP_LAN dport 80 -j DNAT --to-destination WEB:80
IPTABLES -t nat -A PREROUTING -p tcp -s RANGO_IP_LAN dport 443 -j DNAT --to-destination WEB:443
ahora lo que no me queda claro es como funcionaria la cosa luego de redireccionar la primera peticion y llevar el usuario a la pag web, osea cuando pida algun recurso de la web ya navegando por ella (supongo que el iptables siempre redireccione no ??)
saludos

Re: Simular portal cautivo

Publicado: Mar, 21 Jun 2016, 11:22
por hugo
Solo con iptables no lo conseguirás. Probablemente necesites otras cosas como redirecciones en tu sitio web o quizas algunas direcciones catch-all en tu DNS que redireccionen al sitio principal. Y por cierto, también tendrías que redirigir en iptables las consultas DNS.

Edición: Añado algunos detalles. (OJO: sin probar)

Bueno lo primero sería configurar tu DHCP de una manera apropiada.

Luego podrías crear una reglas de netfilter como estas:

Código: Seleccionar todo

IF_LAN=eth0
IP_SERVER=192.168.0.1
IP_SUBRED=192.168.0.0/24

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -t nat -A PREROUTING -i $IF_LAN ! -d $IP_SERVER -p udp -m udp --dport 53 -j DNAT --to-destination $IP_SERVER:53
iptables -t nat -A PREROUTING -i $IF_LAN ! -d $IP_SERVER -p tcp -m multiport --dports 80,443 -j DNAT --to-destination $IP_SERVER:80
iptables -A INPUT -i lo -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $IF_LAN -s 0.0.0.0 -d 255.255.255.255 -p udp -m udp --dport 67 --sport 68 -j ACCEPT
iptables -A INPUT -i $IF_LAN -s $IP_SUBRED -p icmp -m icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -i $IF_LAN -s $IP_SUBRED -p udp -m udp ! --dport 53 -j REJECT --reject-with icmp-port-unreachable
iptables -A INPUT -i $IF_LAN -s $IP_SUBRED -p udp -m udp   --dport 53 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -i $IF_LAN -s $IP_SUBRED -p tcp -m multiport ! --dports 80,443 -j REJECT --reject-with tcp-reset
iptables -A INPUT -i $IF_LAN -s $IP_SUBRED -p tcp -m multiport   --dports 80,443 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -j DROP
Luego en tu DNS creas un agujero negro con una zona catch-all que devuelva la ip de tu servidor ante cualquier consulta de nombre de dominio. En la documentación de pfSense explican como hacerlo con bind, incluyo aqui algunas partes relevantes.

Editar el archivo named.conf para que contenga algo como esto:

Código: Seleccionar todo

options {
  directory        "/etc/namedb";
  pid-file         "/var/run/named/pid";
  allow-query      { any; };
  allow-recursion  { any; };
};

zone "." {
  type  master;
  file  "/etc/namedb/db.catchall";
};
Crear el archivo de zonas /etc/named/db.catchall con la ip del servidor:

Código: Seleccionar todo

$TTL 6h
@  IN  SOA  . root.localhost. (
   2016062301
   6h
   1h
   1d
   3h
   )

   IN  NS  .
.  IN  A   192.168.0.1
*. IN  A   192.168.0.1
En la lista Lazaro mencionaba como lograr algo parecido con dnsmasq:
Lazaro escribió:

Código: Seleccionar todo

dnsmasq --address=/#/10.0.0.1
Todas las consultas se redireccionarán a la ip 10.0.0.1
En teoría con esto deberías avanzar. Te quedarían los ajustes en tu virtualhost para que responda a cualquier dominio, etc.

Re: Simular portal cautivo

Publicado: Sab, 05 Nov 2016, 08:03
por Yordy
como instalo pfSense

Re: Simular portal cautivo

Publicado: Jue, 10 Nov 2016, 17:10
por hugo
Grabas la imagen ISO en un CD, o la tiras a una flash con dd. Ojo la maquina debe tener al menos dos interfaces de red.