A história curta: a maneira como você fez isso está correta (de acordo com o seu comentário à pergunta).
A longa história: no Linux, um "dispositivo" de rede chamado foo:bar é um alias de "foo" usado quando precisamos atribuir várias configurações de rede à interface "foo", por exemplo, para que ele responda em várias sub-redes no mesmo fio.
Esta é uma maneira desajeitada de fazer isso, e inconsistente para inicializar. Para o IPv6, todos os endereços atribuídos à interface eth0 são listados juntos na entrada eth0. Existe um método mais moderno de fazer isso (via o comando ip addr ).
Você pode identificar as interfaces de alias porque elas têm dois pontos : em seus nomes, a parte à esquerda dos dois-pontos é um nome de interface existente e a sub-rotina de interface quando você faz ifconfig é muito curto. O HWaddr também deve ser idêntico ao da interface "pai". Eles também não serão listados em /proc/net/dev . Se você dissesse ip addr , eth0:0 seria mostrado como o segundo endereço da interface eth0 . (procure a linha recuada começando com inet )
Os aliases e seus pais compartilham muitas das configurações e campos, pois compartilham a camada física. O kernel não os trata como interfaces totalmente separadas. Por um lado, o tráfego aparece na interface pai , não no alias. Você deve ter notado que o alias nem tem contadores de pacotes / bytes!
Se você precisa farejar tráfego, firewall, etc. em uma interface de alias, é necessário usar seu pai. Como a única diferença que um alias tem de seu pai são suas configurações IPv4, a única maneira de corresponder o tráfego em um alias é usar essas configurações de IP. Com iptables , você corresponde ao endereço IPv4 do alias como fez no comentário da sua resposta.