Depois de ler diversas opiniões em vários fóruns e depois de seguir alguns tutoriais que, infelizmente, não resolveram minha simples pendência, resolvi resumir este assunto.”

Contexto Geral:

–> Trabalho em uma rede com aprox. 100 hosts ligados a um servidor DHCP (mais exatamente dhcp3-server + Debian “Lenny”); e

–> Meu DHCP está configurado de forma que os IP’s são distribuídos conforme as seguintes linhas do dhcpd.conf:

#esse é um pequeno trecho de minha conf#

host NOME_DO_HOST {
hardware ethernet NUMERO_MAC (ex.: 00:12:13:25:aa:c7);
fixed-address 192.168.1.X (ex.: 1 a 254);
}

#De modo simples, essas linhas querem dizer que um determinado MAC de placa de rede atende sempre por um determinado IP em minha LAN.#

#Acho essa conf fantástica. Isso porque não preciso ficar configurando IP manualmente nos clientes. Qualquer host que eu cadastre no /etc/dhcp3/dhcpd.conf recebe um IP de forma automática quando ligado a um dos cabos da LAN. Bão demais!#

Problema encontrado pelo admin da rede:

–> Se uma pessoa qualquer colocasse na rede seu PC, não previamente cadastrado no dhcpd.conf do servidor, ela não conseguiria ter acesso a nada na rede; mas

–> Se essa mesma pessoa desse uma “olhada” mais de perto em outros hosts já cadastrados na rede, ela poderia deduzir um número IP qualquer não utilizado (entre 1 e 254) e colocá-lo manualmente no seu “cliente clandestino”.

–> Conclusão: Acesso permitido!

Como contornar o problema:

–> Crie um arquivo chamado ethers (o nome não pode variar) no diretório /etc.

–> Edite o arquivo ethers conforme o exemplo abaixo:

#IP  espaço MAC

192.168.1.1 00:23:00:c4:25:c4
…
192.168.1.254 00:00:00:00:00:00

#Ou seja, IP desejado (conforme sua rede) + MAC conforme aquele do cartão de rede. Os IP’s que ainda não tiverem cliente devem ser preenchidos com full zeros no MAC (00: … :00). Isso porque MAC com “tudo zero” não funciona em uma rede e uma possível clonagem não lograria êxito. Obs.: Caso você deixe algum IP sem MAC, haverá uma vulnerabilidade no “esquema”. Então, tem que se digitar MAC para todos os possíveis IP’s da rede!#

–> Ainda no diretório /etc, crie um arquivo (com qualquer nome) e dê permissão de execução (ex.: touch ip_mac. Depois, chmod +x ip_mac).

–> Edite esse arquivo e dentro dele digite o seguinte comando:

arp -f

#Ou seja, esse é o comando que fixa o IP ao MAC e usa por padrão o arquivo ethers como referência#

–> Agora só falta colocar o arquivo ip_mac para ser inicializado no boot do seu S.O. Com isso garantimos que o comando arp -f será executado em todos as reinicializações de forma automática.

–> Se sua “distro” for derivada do Debian (ex.: Ubuntu, Knoppix, Linspire, etc) é só buscar pelo arquivo /etc/init.d/bootmisc.sh. (Pode ser que ele não esteja exatamente neste diretório. Então é só procurar por ele usando os comandos find e locate, por exemplo.)

–> Se sua “distro” não for da “linha” Debian, faça uma breve pesquisa para saber quais são os meios de se inicializar um script de forma automática no boot (existem muitas outras formas).

–> Edite o bootmisc.sh e escreva o endereço do arquivo com permissão de execução que foi criado anteriormente: /etc/ip_mac. Depois salve.

–> Para saber se tudo está funcionado é só digitar o comando arp -a e todos os IP’s que estiverem fixos ao seu respectivo MAC vão aparecer como neste exemplo:

? (192.168.1.118) em 00:c4:54:18:a7:c8 [ether] PERM em eth1

#”Fique de olho” na palavra PERM. Os IP’s não fixados ao MAC, em um sistema DHCP, aparecem sem PERM na saída do comando arp -a. Exemplo:

? (192.168.1.118) em 00:c4:54:18:a7:c8 [ether] em eth1

–> Conclusão: Problema contornado.
Fontes:

  • wandersonbpaula em http://www.vivaolinux.com.br
  • http://pt.wikipedia.org/wiki/Address_Resolution_Protocol
  • /usr/share/doc/dhcp3-server/examples/dhcpd.conf