¡Hola!
A ver si lo entiendo bien. Estás hablando de un portal cautivo con pfSense, con usuario y contraseña para pasar por él.
Y lo que quieres es que tu portal cautivo reconozca además del usuario/contraseña (que debe ser personal e intransferible -como todos los usuario/contraseña-) la máquina asociada a ese usuario/contraseña para que el usuario/contraseña no se pueda emplear desde otra máquina.
En el portal cautivo tienes unos primeros acercamientos a la resolución de tu problema:
*** [Concurrent user logins], que permite asegurar que un usuario/contraseña sólo sirva para UNA conexión simultánea.
*** [Pass-through MAC], para poner MAC que se "saltan" el portal cautivo.
*** [Allowed IP addresses], para autorizar o denegar determinadas IPs en el portal cautivo.
Para ir más lejos tendrías que pensar en una autentificación con un servidor FreeRadius externo, cuestión prevista en el portal cautivo.
En http://www.onlamp.com/pub/a/onlamp/excerpt/radius_5/index1.html se explica cómo montar FreeRadius sobre FreeBSD. En la segunda página de este tutorial hay un usuario de prueba en el que parece (no lo he probado) que se controla la IP desde donde se conecta:
steve Auth-Type := Local, User-Password == "testing"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 172.16.3.33,
Framed-IP-Netmask = 255.255.255.0,
Framed-Routing = Broadcast-Listen,
Framed-Filter-Id = "std.ppp",
Framed-MTU = 1500,
Framed-Compression = Van-Jacobsen-TCP-IP
Si no tienes muchos usuarios no te merece la pena montar todo este tinglado. Simplemente asegúrate de dos cosas elementales en seguridad:
*** El usuario/contraseña es personal e intransferible. Legalmente es un tema "serio". Informa a tus usuarios de ello. Por su seguridad (y por la tuya).
*** No conviene que servicios tan dispares como el acceso al ordenador personal y el acceso a un servicio de portal cautivo tengan el mismo usuario/contraseña. Ya sé que esto es un engorro para usuarios y administradores, pero las "llaves maestras" son un mal asunto.
Saludos,
Josep Pujadas