Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Efeito Cubo na nova área de trabalho
Por waslinux
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Amarrando IP X MAC de maneira simples e funcional
Linux user
Publicado por Lacier Dias em 04/11/2005

Login: lacierdias, 703516 pontos
[ Hits: 20432 ]

Amarrando IP X MAC de maneira simples e funcional

Depois de vagar na internet vendo que existem várias informações desencontradas sobre este assunto, resolvi escrever esta dica com o que julgo ser a melhor maneira de implementar está solução e com o intuito de ajudar quem me ajudou a implementar a solução e principalmente ajudar aos mais novos. Por isso vamos direto ao que interessa.

O firewall é a gosto de cada um, este script de firewall é apenas para melhor entendimento da dica, mas funciona corretamente.

É relativamente simples depois que você entende o conceito das regras, por isso resolvi explicar de modo bem simples cada uma delas.

Destrinchando as regras:

1. Esta linha informa à tabela filter que os pacotes de origem 192.168.0.2 com o MAC 00:0B:05:EC:0D:5A podem ser aceitos e redirecionados para qualquer rede:

iptables -t filter -A FORWARD -d 0/0 -s 192.168.0.2 -m mac --mac-source 00:0B:05:EC:0D:5A -j ACCEPT

2. Esta linha informa à tabela filter que os pacotes com destino ao IP 192.168.0.2 que venham de qualquer rede podem ser aceitos e redirecionados:

iptables -t filter -A FORWARD -d 192.168.0.2 -s 0/0 -j ACCEPT

3. Esta linha autoriza o pacote de origem 192.168.0.2 com o MAC 00:0B:05:EC:0D:5A a serem aceitos pelo firewall:

iptables -t filter -A INPUT -s 192.168.0.2 -d 0/0 -m mac --mac-source 00:0B:05:EC:0D:5A -j ACCEPT

4. NAT:

iptables -t nat -A POSTROUTING -s 192.168.0.2 -o eth1 -j MASQUERADE

Entendido essa parte, acho que é hora de partirmos para a prática.

Abaixo segue um demonstrativo de como ficam as regras dentro de um firewall básico.

Abraço e espero ter ajudado.

#!/bin/sh

#Internet=eth1
#Rede Interna=eth0

# Ativa módulos
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_nat_ftp
modprobe ipt_REJECT
modprobe ipt_MASQUERADE

# Zera regras
iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t filter
iptables -X -t filter


# Determina a política padrão
iptables -P INPUT DROP
iptables -P FORWARD DROP

# Aceita os pacotes que realmente devem entrar
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Controle de acesso IP X MAC

# Cliente 1
iptables -t filter -A FORWARD -d 0/0 -s 192.168.0.2 -m mac --mac-source 00:0B:05:EC:0D:5A -j ACCEPT
iptables -t filter -A FORWARD -d 192.168.0.2 -s 0/0 -j ACCEPT
iptables -t filter -A INPUT -s 192.168.0.2 -d 0/0 -m mac --mac-source 00:0B:05:EC:0D:5A -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.2 -o eth1 -j MASQUERADE

# Cliente 2
iptables -t filter -A FORWARD -d 0/0 -s 192.168.0.3 -m mac --mac-source 00:0C:86:00:00:00 -j ACCEPT
iptables -t filter -A FORWARD -d 192.168.0.3 -s 0/0 -j ACCEPT
iptables -t filter -A INPUT -s 192.168.0.3 -d 0/0 -m mac --mac-source 00:0C:86:00:00:00 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.3 -o eth1 -j MASQUERADE

# Cliente 3
iptables -t filter -A FORWARD -d 0/0 -s 192.168.0.4 -m mac --mac-source 00:28:00:35:00:00 -j ACCEPT
iptables -t filter -A FORWARD -d 192.168.0.4 -s 0/0 -j ACCEPT
iptables -t filter -A INPUT -s 192.168.0.4 -d 0/0 -m mac --mac-source 00:28:00:35:00:00 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.4 -o eth1 -j MASQUERADE

#Compartilha a conexão
echo 1 > /proc/sys/net/ipv4/ip_forward

#Fecha o resto
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP

Autor: Lacier Dias
msn: lacierdias@hotmail.com


Outras dicas deste autor

Leitura recomendada
   Dica Linux recomendada Instalando modelos extras para o OpenOffice (BrOffice.org)
   Dica Linux recomendada Wayland, um servidor gráfico não-X muito interessante
   Dica Linux recomendada Configurando Cisco + NAT para LP Telefônica
   Dica Linux recomendada Instalação do DHCP Server
   Dica Linux recomendada Instalando o Firefox e o novo flash player de maneira fácil

Comentários
[1] Comentário enviado por marcosvargasmt em 08/11/2005 - 07:34h:

Parabéns pelo artigo, depois q vc comentou na "install fest" sobre esta regra eu fiquei mesmo interessado e já estava procurando algo semelhante.


marcosvargasmt


[2] Comentário enviado por richar em 08/12/2005 - 11:06h:

Como faso para bloquear todos os mac e so os que eu quero permitir que accesem minha internet posam

[3] Comentário enviado por lacierdias em 08/12/2005 - 12:20h:

Mano vc não bloqueia o mac vc só indica quais podem e oq for diferente da lista dos q podem ele não permite...só isso

Abraço

[4] Comentário enviado por pvhnet em 01/03/2006 - 14:03h:

E seu eu quiser redirecionar para um site os clientes nao aceitos pelo firewall , como devo proceder

[5] Comentário enviado por pe360graus em 27/03/2006 - 21:30h:

Cara a parada fiz igual ao exemplo só que da erro e o servidor trava.
A distri é a Slacware 10.2 o erro é este:

v1.3.3.3 iptables bad intruse ESTABELISHED, RELATED

Depois disso a máquina não faz mais nada, ela trava.

[6] Comentário enviado por lacierdias em 28/03/2006 - 08:53h:

Amigo vc errou em um detalhe minusculo....

v1.3.3.3 iptables bad intruse ESTABELISHED, RELATED

Não tem espaço entre as palavras ESTABELISHED,RELATED.. É so isso...

Abraço

[7] Comentário enviado por marcosfnet em 22/04/2006 - 19:32h:

Amigo, aqui no meu servidor estava tudo normal, funcionando perfeitamente, derrepente vi que o amarramento IP x MAC não estava funcionando, então veriquei e descobri que ACCEPT e MASQUERADE não estão sendo aceitos pelo IPTABLES, então verifiquei a versão e como não entendo muito, gostaria que você me desse uma luz, porque estava normal, derrepente ficou assim, veja abaixo o resultado dos comandos:

iptables v1.2.11

: command not found:
iptables v1.2.11: Invalid target name MASQUERADE
iptables v1.2.11: Invalid target name ACCEPT


Aguardo retorno, pois estou precisando resolver o meu problema.

Desde já muito obrigado!

Marcos

[8] Comentário enviado por lacierdias em 25/04/2006 - 09:15h:

Marcos não tem um motivo plausivel para isso ter acontecido...
ACCEPT e MASQUERADE são funções básica do iptables... eles não para de funcionar sem motivo...tente reintalar o iptables e inserir as regras uma a uma para ver se não tem algo de errado na ordem das regras..
Qualquer coisa estamos ai.
Abraço.

[9] Comentário enviado por marcosfnet em 06/05/2006 - 17:10h:

Boa tarde,

Fiz o que te falei, formatei o servidor e instalei tudo novamente, agora está tudo funcionando.

Só que agora estou com um pequeno probleminha, a dica acima funciona maravilhosamente, mas bloqueou tudo que entra no servidor, os clientes acessam a internet normalmente, mas eu usava o Apache (porta 80) dentro e fora da rede e também o SSH (porta 22) somente dentro da rede para acessar o servidor. Agora está tudo bloqueado, gostaria de saber como faço para desbloquear essas portas modificando o script acima, tentei algumas coisas mas não consegui, gostaria de ajuda.

Desde já obrigado!

Marcos

[10] Comentário enviado por barrosvip em 18/11/2006 - 12:31h:

COMIGO FUNCIONOU BLZ, ATE UM CERTO PONTO, O SERVIDOR DE DNS NAO FUNCIONOU, O SERVIDOR DE DNS ESTA COM O IP DA ETHO E OS CLIENTES ESTAO LIGADOS A ETH1


[11] Comentário enviado por julianlinuxer em 24/05/2007 - 16:26h:

É uma dica bem interessante para quem tem provedores, para um maior controle.

[12] Comentário enviado por samircuri em 12/12/2007 - 03:33h:

Sua dica foi muito boa. Parabéns pela iniciativa. Aqui rodou tudo belezinha.

Att.
Samir Curi

[13] Comentário enviado por davirodrigues em 30/01/2008 - 16:39h:

Muito bom essa Dica,

Ôooo marcosfnet, é só vc adicionar uma regra de INPUT e FORWARD na porta 80 e na porta 22 do ssh.

iptables -A INPUT -p tcp --dport 22 -s REDE_INTERNA -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -s REDE_INTERNA -j ACCEPT

essas regras vão dar acesso a sua máquina somente da sua rede interna, se quiser liberar a porta 80 para acesso externo é só colocar sem a rede interna.

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

assim vai aceitar todas as requisições de IP.



[14] Comentário enviado por bfmano em 08/07/2008 - 23:17h:

para facilitar a vida do administrador pode criar um arquivo de "banco de dados" para o iptables ler em /etc/clientes no seguinte formato:
192.168.0.2#00:0B:05:EC:0D:5A#Cliente1
192.168.0.3#00:0C:86:00:00:00#Cliente2
192.168.0.4#00:28:00:35:00:00#Cliente3


ipxmac.sh
#!/bin/bash

#Declarando algumas variaveis
arq_clientes="/etc/clientes"
extnet="eth1"
intnet="eth0"

# Ativa módulos
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_nat_ftp
modprobe ipt_REJECT
modprobe ipt_MASQUERADE

# Zera regras do iptables
iptables -F -t filter
iptables -F -t nat
iptables -X -t filter
iptables -X -t nat

# Determina a política padrão para DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP

#Rejeita conexões Inválidas
iptables -A FORWARD -m state --state NEW,INVALID -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

echo -e 127.0.0.1'\t'localhost > /etc/hosts

# Inicia loop para cada linha do arquivo de clientes
for ip in `cat $arq_clientes|cut -d# -f 1` ; do

# Identifica o MAC ADDRESS
mac="`grep -w $ip $arq_clientes|cut -d# -f2`"

# Identifica o nome do cliente
cliente="`grep -w $ip $arq_clientes|cut -d# -f3`"

# Atribui regra para aceitar encaminhamento com origem sendo o IP do cliente checando o par IP/MAC
iptables -t filter -A FORWARD -d 0/0 -s $ip -m mac --mac-source $mac -j ACCEPT ;

# Atribui regra para aceitar encaminhamento com destino sendo o IP do cliente
iptables -t filter -A FORWARD -d $ip -s 0/0 -j ACCEPT

# Atribui regra para fazer NAT para o IP do cliente caso não tenha IP válido
iptables -A POSTROUTING -t nat -s $ip -o $interface_saida -j MASQUERADE ;

# Ecoa na tela a mensagem de habilitação do cliente
echo -e "Habilitando: \{COMENTARIO}33[1;34m$cliente\{COMENTARIO}33[0;39m com o IP: \{COMENTARIO}33[1;33m$ip\{COMENTARIO}33[0;39m e o MAC: \{COMENTARIO}33[1;37m$mac\{COMENTARIO}33[0;39m [ \{COMENTARIO}33[1;32mok\{COMENTARIO}33[0;39m ]";
fi

# Escreve o IP e o nome do cliente no arquivo /etc/hosts
echo -e $ip'\t'$cliente >> /etc/hosts

# Atribui regra para aceitar pacotes de entrada com origem do IP do cliente checando o par IP/MAC
iptables -t filter -A INPUT -s $ip -d 0/0 -m mac --mac-source $mac -j ACCEPT ;

# Atribui regra para aceitar pacotes de saida com origem no IP do cliente
iptables -t filter -A OUTPUT -s $ip -d 0/0 -j ACCEPT
done

#Compartilha a conexão
echo 1 > /proc/sys/net/ipv4/ip_forward

# Atribui regra para aceitar acesso de SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

#Fecha o resto
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP

[15] Comentário enviado por bfmano em 08/07/2008 - 23:22h:

aconteceu alguma coisa quando enviei o texto, repare que onde tem "\{COMENTARIO}33[" o "{COMENTARIO}" deve ser substituida por "\ 0", ficando "\ \ 0 3 3 [" claro que tudo junto.
vlw

[16] Comentário enviado por fbart em 19/10/2009 - 00:03h:

Outra sujestão seria:

# MACS permitidos
iptables -A FORWARD -m mac -mac-source 00:60:08:91:CC:B7 -j accept
iptables -A FORWARD -m mac -mac-source 00:60:08:91:CC:B8 -j accept
iptables -A FORWARD -m mac -mac-source 00:60:08:91:CC:B9 -j accept
...

# Nega o resto
iptables -A FORWARD -m mac -mac-source ! FF:FF:FF:FF:FF:FF -j DROP
iptables -A FORWARD -m mac -mac-source ! 00:00:00:0:00:00 -j DROP

Não pode esquecer de editar conf do dhcp que fica no /etc/dhcp3/dhcpd.conf


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.