27 junio, 2004

Un mini-portal cautivo wifi

Estaba pensando en poner un AP en mi casa con mi tarjeta Prism2+Antena omni, y si seria facil hacer un pequeño portal cautivo (por no usar NoCat). Las herramientas serian un proxy dns, un servidor dhcp, apache e iptables.

Mi idea es dar acceso a Internet limitado, (solo se podría navegar en internet por Almeria-wireless.org), ademas de redirigir las demas web hacia esta.

Tengo el driver hostap configurado para que la tarjeta actue en modo Master con ssid "latinnodo.almeria-wireless.org" (el maximo son 32 caracteres).

Buscando en apt encontre dnsMasq, que es un proxy dns y servidor dhcp que me viene perfecto. Basta activar el servidor dhcp y en mi caso decirle que no use el /etc/hosts.

dhcp-range=192.168.0.50,192.168.0.150,12h

Para hacer el portal cautivo necesitamos iptables con filter, snat y dnat.

En primer lugar filtramos:


    # Permitir dhcp
    $IPT -A INPUT -i wlan0 -p udp --source-port 68 --destination-port 67 -d 255.255.255.255 -j ACCEPT

    # LOG & DROP
    # no permitir ip fuera de rango
    $IPT -A INPUT -i wlan0 -s ! 192.168.0.0/24 -j LOG
    $IPT -A INPUT -i wlan0 -s ! 192.168.0.0/24 -j DROP
    # no jugar con el servidor
    $IPT -A INPUT -i wlan0 -s 192.168.0.1 -j LOG
    $IPT -A INPUT -i wlan0 -s 192.168.0.1 -j DROP

    # Ahora hacemos (S)Nat, pero solo hacia la ip de almeria-wireless.
    $IPT -t nat -A POSTROUTING -s 192.168.0.0/24 -p tcp --destination-port 80 -d 150.214.157.71 -j MASQUERADE

    # Para capturar otras web hacemos DNAT
    $IPT -t nat -A PREROUTING -i wlan0 -p tcp --destination-port 80 -d ! 150.214.157.71 -j DNAT --to-destination 192.168.0.1:81

En la ultima regla no puedo redirigir el trafico directamente al servidor de almeria-wireless porque no tomaria el vhost adecuado de apache. Para ello arranco un apache ligado a 192.168.0.1 y puerto 81 sin vhosts, y como indice pongo:

    <html><head>
    <meta http-equiv="Refresh" content="1, http://www.almeria-wireless.org" />
    </head><body>

    <a href="http://www.almeria-wireless.org">http://www.almeria-wireless.org</a>
    </body></html>

De esta manera es el propio navegador el que se redirige a la web permitida de almeria-wireless.

No hay comentarios: