Bloquear o DHCP de dispositivos móveis
Publicado por Vinicius Mathias (última atualização em 22/02/2017)
[ Hits: 3.696 ]
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.
LeTRA - cálculo de valores do arquivo de venda do PDV
Backup Incremental em HD secundário/externo
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (38)
\Boot sem espaço em disco (Fedora KDE Plasma 42) (1)
Mint Xfce não mantém a conexão no wi-fi (2)









