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:
[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.
[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.
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.
[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"
# 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