When using multiple AP's, all hooked up to a 'dumb' switch, and this switch hooked up to an OPTx interface on pfSense, each AP should be enforced to allow communication to OPTx - and no body (any other device on the switch) else.
Client Isolation, or what ever the name is, on each AP isn't enough.
Consider "AP1" and 2 clients connected to it. Client Isolation on this AP handles the job. But a third client, connected to AP2 would be able to "see" client 1 and 2 on AP1.
On a low-budget Cisco/Linksys - typically an E1200 - using the DD-WRT OS, this can be handled with :
#!/bin/ash
insmod ebtables
insmod ebtable_filter
ebtables -t filter -A FORWARD -s 0:0:0:0:0:0/0:0:0:0:0:0 -d Broadcast -j ACCEPT
ebtables -t filter -A FORWARD -s 0:0:0:0:0:0/0:0:0:0:0:0 -d 00:0f:b5:fe:4e:e7 -j ACCEPT
ebtables -t filter -A FORWARD -s 00:0f:b5:fe:4e:e7 -d 0:0:0:0:0:0/0:0:0:0:0:0 -j ACCEPT
"00:0f:b5:fe:4e:e7" is the MAC of my OPTx (pfSense - Captive portal) interface.
It states :
Allow all broadcasts.
Allow all traffic coming to interface OPTx
Allow all traffic coming from OPtx
(drop the rest)
With these ebtables rules on each AP, inter AP communication is prohibited.
I guess the same result can be obtained with a "smart switch".