A razão pela qual isso não está funcionando (e não vai funcionar) é que o iptables opera no endereço IP da máquina que está diretamente conectada à sua. Se você está usando o CloudFlare, isso significa que você está recebendo conexões do CloudFlare, não diretamente dos usuários finais.
Veja um exemplo, tirado de um dos meus sites no CloudFlare:
::ffff:108.162.221.19 www.yes-www.org - [05/Sep/2012:21:50:50 +0000] "GET / HTTP/1.1" 200 9585 "http://no-www.org/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.8 (KHTML, like Gecko) Chrome/23.0.1251.2 Safari/537.8" "64.244.153.130"
Aqui vemos que a conexão foi recebida do 108.162.221.19, um dos servidores da CloudFlare. Se isso foi bloqueado no iptables, então CloudFlare não seria capaz de nos alcançar (a partir desse endereço; felizmente eles têm muitos outros). A conexão com o CloudFlare na verdade veio de 64.244.153.130, que é o que apareceu nos cabeçalhos X-Forwarded-For e CF-Connecting-IP.
Infelizmente, neste tipo de configuração, isso significa que você não pode realmente usar o iptables para bloquear visitantes. Você tem algumas opções, no entanto:
- Use o painel de controle de ameaças da CloudFlare, como Damon mencionou. Isso é doloroso se você tem muitos endereços IP que deseja bloquear ou eles mudam com frequência.
- Bloqueie as solicitações no nível do aplicativo. Ferramentas como o meu próprio Mau Comportamento podem realizar esse tipo de coisa.