Después de un poco de depuración, encontré mi problema. No eran las reglas del firewall, sino el hecho de que el servidor DHCP para mi LAN no funcionaba (y por lo tanto, creaba un escenario muy extraño).
Estas son las reglas que utilicé (eliminé todas las reglas de iptables anteriores del tutorial):
sudo iptables -P FORWARD DROP
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i wlan0 -o eth0 -d 192.168.2.0/24 -j DROP
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wlan0 -d 192.168.2.0/24 -j DROP
sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
Y esto resulta en:
Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
0 0 DROP all -- wlan0 eth0 anywhere 192.168.2.0/24 192 11645 ACCEPT all -- wlan0 eth0 anywhere anywhere
0 0 DROP all -- eth0 wlan0 anywhere 192.168.2.0/24
9 6286 ACCEPT all -- eth0 wlan0 anywhere anywhere
Lo que sucede aquí es que rechazo cualquier tráfico de mi LAN (192.168.2.x) para que no vaya a la WLAN y viceversa. Si los paquetes cumplen con esta regla, uso NAT para transferirlos a la puerta de enlace de la LAN y a Internet.