Não funciona em nível de IP puro, é necessário saber como o DHCP funciona:
-
Primeiro, o cliente DHCP envia um pacote (DHCPDISCOVER) de 0.0.0.0 para 255.255.255.255 (o endereço de transmissão local).
-
O servidor DHCP oferecerá um endereço IP (DHCPOFFER); em termos de iptables, este será um pacote do endereço do servidor DHCP e também direcionado ao endereço de broadcast local 255.255.255.255. O quadro Ethernet é endereçado no endereço MAC do cliente DHCP.
-
O cliente DHCP escolhe de qualquer oferta enviada em seu endereço MAC de ethernet e envia um DHCPREQUEST para o servidor DHCP; para o iptables, este é outro pacote de 0.0.0.0 e ainda é direcionado ao endereço de broadcast local 255.255.255.255.
-
O servidor DHCP confirma a atribuição de endereço IP (DHCPACK). O pacote IP resultante é do endereço IP do servidor DHCP, o endereço IP de destino é mais uma vez 255.255.255.255, o endereço do quadro Ethernet será endereçado no endereço MAC do cliente DHCP.
-
Quando um cliente DHCP deseja renovar sua concessão de DHCP, ele envia outro DHCPREQUEST de 0.0.0.0 para 255.255.255.255 e solicita o endereço IP atual. Ele fará isso até que a concessão do DHCP tenha expirado, de onde começará novamente com o DHCPDISCOVER.
É mais provável que você esteja procurando algo assim:
iptables -A INPUT -m mac --mac-source xx: xx: xx: xx: xx: xx -p udp --dport 67 -j ACEITAR
iptables -A INPUT -p udp --dportar 67 -j DROP
Isso eliminará todas as solicitações de dhcp direcionadas ao seu servidor que não são originadas no MAC listado.
O problema também pode ser resolvido em um nível diferente: remova o pool de endereços IP do servidor DHCP e atribua apenas mapeamentos estáticos para seus respectivos endereços MAC. Dessa forma, o servidor DHCP não responderá a ninguém listado e só atribuirá IPs a hosts conhecidos.