O controle de acesso por MAC x IP é feito com a ajuda do Iptables. O cliente deverá ter sempre o mesmo IP, basta configurar o DHCP com IP fixo ou configurar o micro do cliente manualmente.
Funcionará da seguinte forma:
- Teremos um arquivo que conterá todos os IPs e MACs da rede;
- Alteraremos a política padrão de ACCEPT para DROP (assim estaremos bloqueando TUDO);
- Adicionaremos 2 regras no script do firewall, essas últimas serão responsáveis por liberar o acesso aos cadastrados.
7.1. Configurando o acesso (MAC x IP)
Atualmente nosso rc.local (
/etc/rc.d.rc.local) está da seguinte forma:
# Limpando Regras
iptables -F
iptables -X
iptables -Z
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
echo " Limpando Regras ..............................[ OK ]"
# Definindo Política Padrão
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo " Alterando política padrão.....................[ OK ]"
# Redireciona o tráfego http(80) para o Squid (3128)
iptables -t nat -A PREROUTING -i eth1 -p TCP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p UDP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
# Compartilha Conexão
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
Criaremos o arquivo que conterá os IPs e MACs e adicionaremos os IPs e MACs, cada cliente em uma linha, da seguinte forma:
IP;MAC;Marcação pacote;nome do cliente
# vim /etc/macxip
172.167.0.9;00:12:31:b3:6f:4C;10019;andrio
Agora editamos o rc.local (
/etc/rc.d.rc.local) deixando-o da seguinte forma:
# Parâmetros do controle de acesso
MACLIST=/etc/macxip
echo " Configurações necessárias.....................[ OK ]"
# Limpando Regras
iptables -F
iptables -X
iptables -Z
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
echo " Limpando Regras ..............................[ OK ]"
# Definindo Política Padrão
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
echo " Alterando política padrão.....................[ OK ]"
# # Controle de ACESSO # #
# Diretivas do BD IP, MAC e Port
for i in `cat $MACLIST`; do
IPSOURCE=`echo $i | cut -d ';' -f 1`
MACSOURCE=`echo $i | cut -d ';' -f 2`
CBQMARK=`echo $i | cut -d ';' -f 3`
# Controle de Acesso IPxMAC
iptables -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT
iptables -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
done
# Redireciona o tráfego http(80) para o squid (3128)
iptables -t nat -A PREROUTING -i eth1 -p TCP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth1 -p UDP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
# Compartilha Conexão
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
Execute o script do firewall e seu controle de acesso IP x MAC já estará funcionando.
Para bloquear um determinado cliente, basta mudar os 2 primeiros "00" do MAC do mesmo, dessa forma, o novo mac cadastrado não baterá com o mac real do cliente (MAC 00:12:31:b3:6f:4C é diferente do MAC 11:12:31:b3:6f:4C)
Pode ser necessário adicionar mais 3 linhas de regras no script para manter/aceitar as conexões estabilizadas. adicione-as logo abaixo das regras de "Política Padrão".
# Aceita os pacotes que realmente devem entrar
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Como deixamos o firewall restritivo, é bom adicionar a regra abaixo, responsável por aceitar toda conexão loopback.
# Aceita todo o tráfego vindo do loopback e indo para o loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
7.2. Links extras