O Iptables é definitivamente sensível à ordenação de regras. O primeiro jogo decide o destino do pacote.
O que pode estar acontecendo é que você tem uma regra correspondente e aceita pacotes ESTABLISHED antes da regra DROP da string. É muito comum que a regra ESTABLISHED seja uma das primeiras regras em uma configuração do iptables.
Uma conexão ganha o estado ESTABLISHED logo após o primeiro pacote SYN, se não me engano. E o pacote SYN não contém o host-header-name com "sub.domain.com". Somente o pacote com a solicitação GET conterá isso e já corresponderá à regra ESTABLISHED.
A solução seria colocar a cadeia DROP antes da ESTABLISHED.
Tendo dito isto, sua solução é bastante incomum, e pode até colocar o servidor em algum problema, se por acaso o volume dessas requisições bloqueadas for alto. A conexão é estabelecida, mas o cliente se acalma. O servidor estará esperando, até que algum timeout termine a coisa. Eu não sei exatamente o que vai acontecer, mas cuidado.Eu supus que você por algum motivo não pode alterar a configuração do servidor para bloquear essas conexões específicas lá. No apache é um pedaço de bolo definindo esse tipo de controle.