Bloquear o DHCP de dispositivos móveis
Publicado por Vinicius Mathias (última atualização em 22/02/2017)
[ Hits: 3.811 ]
Homepage: https://www.linkedin.com/in/mathiasvinicius/
Este script que desenvolvi tem o intuito de bloquear no DHCPD de modo que dispositivos não cadastrados em uma lista obtenham endereço IP.
Neste script um usuário de celular ou tablet consegue obter na primeira vez o IP. E com isso o MAC dele entra para uma lista que assim que o mesmo se desconectar não vai conseguir mais uma conexão.
Este script foi montado usando partes de códigos encontrados aqui no Viva o Linux e outras fontes na internet. Devem existir melhores formas de melhorar este script, porém foi a forma como eu conseguir fazer.
Na pasta que colocar o script, crie o arquivo chamado: dispositivosLiberados.txt
E coloque no formato:
#Nome
macliberado;
#!/bin/bash
#Desenvolvido por Vinicius Mathias
#Incluir no vi /etc/sysconfig/dhcpd o "/scripts/dispositivos.txt"
DIR="/scripts/Proxy/dispositivos/";
NOMES="android|blackberry|iphone|pad|windows-phone|redmi";
LISTDISP="/var/lib/dhcp/db/dhcpd.leases";
DHCPCONF="/etc/dhcpd.conf";
#Preparacao
#Cria os arquivos temporarios de original, para preservar os macs antigos.
cp "$DIR"dispositivosMoveis.log "$DIR"dispositivosMoveis.tmp;
cp "$DIR"dispositivosDiversos.log "$DIR"dispositivosDiversos.tmp;
awk '
/lease/{IP=$2};
/hardware/{MAC=substr($3,0,length($3)-1)}
/hostname/{HOST=substr($2,2,length($2)-3);
printf("%s %s \n",HOST,MAC)};
' $LISTDISP > "$DIR"dispositivos.tmp;
while read LINHA; do
HOST=$(echo $LINHA | awk '{print $1}');
MAC=$(echo $LINHA | awk '{print $2}');
MAC2=$(sed -e 's/://g' <<< $MAC); #Remove os dois pontos.
if echo "$HOST" | egrep -iE $NOMES >/dev/null;then #Verifica se um dispositivo listado.
{
if echo "$HOST" | egrep -iE "android" >/dev/null;then #Se for Android remove ID
{
echo "host android-$MAC2{hardware ethernet $MAC; deny booting;}" >> "$DIR"dispositivosMoveis.tmp; #Cria o arquivo no formato de bloqueio.
}
else #Para outros dispositivos listados.
{
echo "host $HOST-$MAC2{hardware ethernet $MAC; deny booting;}" >> "$DIR"dispositivosMoveis.tmp; #Cria o arquivo no formato de bloqueio.
}
fi
}
else
echo "Dispositivo:$HOST MAC:$MAC" >> "$DIR"dispositivosDiversos.tmp; # Apenas faz uma listagem dos outros dispositivos.
fi
done < "$DIR"dispositivos.tmp
sort "$DIR"dispositivosMoveis.tmp | uniq > "$DIR"dispositivosMoveis.log; #Organiza o arquivo por ordem alfabeta e remove linhas duplicadas.
sort "$DIR"dispositivosDiversos.tmp | uniq > "$DIR"dispositivosDiversos.log; #Organiza o arquivo por ordem alfabeta e remove linhas duplicadas.
if [ "$1" == "blo" ]; then
# Limpa os dados de bloqueio antigo.
grep -vE "(deny booting)" $DHCPCONF > "$DIR"dhcpd.tmp #Remove do DHCPD as linhas que contem deny booting.
cp "$DIR"dhcpd.tmp $DHCPCONF
# Inicia o bloqueio.
cat "$DIR"dispositivosLiberados.txt|grep -v "^#" |sed 's/;/|/g' |sed ':a;N;s/\n//g;ta' > "$DIR"dispositivosLiberados.tmp;
# ^ O grep remove linhas comentadas, o primeiro SED substitui o ; por | para varios macs, e segundo SED remove quebra de linha e espacos
DIS_LIBERADOS=$(egrep -v "(^#|^$)" "$DIR"dispositivosLiberados.tmp)"fim;"; # Recebe a lista de dispositivos liberados e acionad o fim para remover do loop.
#Envia para o DHCPD
cat "$DIR"dispositivosMoveis.log |grep -viE $DIS_LIBERADOS >> $DHCPCONF # Envia para o fim do dhcpd.conf os dispositivos nao liberados
service dhcpd restart #Reinicia o dhcpd. (No meu caso opensuse.
fi
if [ "$1" == "lib" ]; then
#Envia para o DHCPD
grep -vE "(deny booting)" $DHCPCONF > "$DIR"dhcpd.tmp #Remove do DHCPD as linhas que contem deny booting.
cp "$DIR"dhcpd.tmp $DHCPCONF
service dhcpd restart #Reinicia o dhcpd. No meu caso opensuse.
fi
rm "$DIR"*.tmp #Remove os arquivos temporarios.
Script de Instalação de Layer7 no CentOS 6.0
Monitorando processo do Squid em diferentes redes
Zentheme-Install - Instala e desinstala temas usando interface gráfica
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Removendo entradas de boot UEFI "fantasmas" via terminal
Atualizações de Segurança Automáticas no Debian
Como cortar as partes de um vídeo com passagens de áudio em branco
Tiling automático no KDE Plasma
SNMP Scan no OCS Inventory só funciona com HTTPS corretamente configurado
Tentativa de instalar Linux em um notebook HP 246 G6 (0)
Reflexão sobre a sobrevivência do Gentoo Linux (4)
Alguém tem que acabar com ANATEL!!! (1)
GOG confirma suporte oficial ao sistema Linux: "o trabalho começo... (4)









