В iptables можно сделать и то и другое... например так:
1. Создаешь цепочки для каждого пользователя
USER_IP="192.168.0.5"
USER_MAC="00:00:00:00:00:00"
$IPTABLES -N user_verify
$IPTABLES -A user_verify -p ALL -s $USER_IP -m mac --mac-source $USER_MAC -j RETURN
$IPTABLES -A user_verify -p ALL -s $LAN_IP_RANGE -j DROP
2. Добавляешь правило в нужную цепочку, которое бросает пакет в цепочку user_verify.
Общий смысл такой - в цепочку должны бросаться и исходящие и входящие пакеты.
Теперь для того, чтобы узнать трафик пользователя USER нужно в терминале набрать
iptables -L user_verify -v
Можно набирать это скриптом, считывать значение например раз в час и складывать в файлик.