Você não conseguirá isso corretamente apenas com o iptables, mesmo que apenas pelo fato de que o URL de solicitação pode estar fragmentado em vários pacotes.
Como você está filtrando o OUTPUT, provavelmente uma maneira mais robusta e fácil seria instalar um proxy HTTP local, como o Squid e adicione suas regras de filtragem ao squid.
Por questões de integridade, você pode usar o iptables para bloquear tudo, exceto o proxy do squid, para se conectar a esse host proibido.
De acordo com o seguinte exemplo de configuração , você deve ter em seu squid.conf
http_port 3129 intercept
e, em seguida, interceptar solicitações com
iptables -t nat -A OUTPUT -p tcp -d somedomain.com --dport 80 -m owner --uid-owner squid -j ACCEPT
iptables -t nat -A OUTPUT -p tcp -d somedomain.com --dport 80 -j DNAT --to-destination 127.0.0.1:3129
A primeira regra é necessária para que o próprio squid possa fazer proxy do pedido para o host original, se você quiser deixar passar algum tempo.
Você pode observar as URLs das solicitações consultando o arquivo access.log
padrão produzido pelo squid. Para realmente bloquear URLs, você deve configurar algumas ACLs em squid.conf
:
acl blocktestphp url_regex test.php
http_access deny blocktestphp