É possível , mas não sem grande dificuldade.
Você precisa de ipset
e um servidor da Web com script.
Primeiro, você cria um "IPset" para registrar os endereços IP dos computadores que já viram o portal cativo
ipset create AlreadySaw hash:ip timeout $timeout
Em seguida, você cria o conjunto de regras.
A primeira regra captura o tráfego dos hosts não dentro do IPset "AlreadySaw":
-t nat -A PREROUTING -m set ! --match-set AlreadySaw src -j REDIRECT
O segundo conjunto de regras redefine o tempo limite dos pacotes que passam pelo gateway:
-A FORWARD -m state --state ESTABLISHED -j Estab
-A Estab -j SET --add-set AlreadySaw src --exist
-A Estab -j ACCEPT
Por fim, crie um servidor web que escute as portas: 80 e: 443, que apresentará ao usuário um 'portal cativo' e, quando o usuário fizer algo solicitado pelo 'portal cativo', executará o seguinte comando:
ipset add AlreadySaw %IP%
... onde% IP% é o endereço IP de origem, que deve ser detectado pelo script do 'portal cativo'.
.
A parte difícil, é claro, é fazer o script do 'portal cativo'. Isso, eu deixo para você como dever de casa:)