Bloqueando e liberando domínios com Firewall IPFW

Publicado por Anderson Oliveira em 17/03/2014

[ Hits: 6.735 ]

 


Bloqueando e liberando domínios com Firewall IPFW



Esta dica, auxilia bloqueios de vários domínios, sem que os mesmos estejam listados linha à linha no Firewall, fazendo com que sua manutenção de mudança de IP, seja automática.

Atualizando o arquivo de Firewall

Atualizando o arquivo de Firewall para bloqueio/liberação de domínio e liberação de IP

Dentro do arquivo do Firewall, chamado aqui de fire.rules, incluiremos uma regra onde serão bloqueados/liberados os domínios e IPs:

#!/bin/sh
#### Reseta o Firewall ####

/sbin/ipfw -f flush

####### Fazendo NAT - minha interface do link é re3
/sbin/ipfw add 10 divert natd all from any to any via re3

############ Redireciona Squid - o tráfego interno que vem da rede interna aqui é denominada re2
/sbin/ipfw add 20 fwd 127.0.0.1,3128 tcp from 10.0.4.0/24 to any 80 via re2

#Bloqueio e liberação
##############################################

#Liberação de IPs - esses mesmos que houverem a regra de bloqueio podem navegar
#Aqui determinamos que todos os IPs da tabela 90 podem navegar, claro se não houver nenhuma restrição no Squid

/sbin/ipfw add 1002 allow ip from "table(90)" to any

#Os demais IPs, ex.: funcionários, não podem acessar os domínios relacionados na tabela 91, mesmo que não exista tal bloqueio no Squid ele ficará bloqueado no firewall.
#Bloqueio de domínio

/sbin/ipfw add 1003 deny ip from any to "table(91)"

Criando arquivos

Criando arquivos para bloqueio de domínios e liberação de IPs.

Estaremos criando dois arquivos, um chamado domains (domínios bloqueados) e outro ips (IPs da rede que podem acessar tudo).

Criando arquivo domains:

# touch /etc/domains

Adicionando domínios: estes sites serão bloqueados no Firewall para todos, com exceção dos IPs listados no arquivo ips:

# echo "facebook.com" >> /etc/domains
# echo "pt-br.facebook.com" >> /etc/domains


Criando arquivo ips:

# touch /etc/ips

Adicionando IPs

Estes IPs serão liberados para acessar tudo:

# echo "10.0.0.1" >> /etc/ips
# echo "10.0.0.4" >> /etc/ips


Fazendo leitura dos arquivos

Fazendo a leitura do arquivo domains e ips para alocar em suas devidas tabelas.

Criando o arquivo responsável por ler e montar a tabela de bloqueio e liberação:

# touch /etc/atualiza_tabela.sh
# vi /etc/atualiza_table.sh


#!/bin/sh
# Leitura do arquivo domains para resolver o endereço IP de cada um


while read domain
do

#Buscando através do domínio as entradas de IP e gravando no arquivo blockedips
nslookup $domain | grep Address | grep -v '#' | egrep '([0-9]{1,3}\.){3}([0-9]){1,3}' | awk '{print $2}'>>  /etc/blockedips
done< /etc/domains

#Limpo a tabela de bloqueio
ipfw -f table 91 flush

#Faço um loop no arquivo com IPs a serem bloqueados
for rede in $(cat /etc/blockedips) ; do

#Adiciono o IP na tabela de bloqueio
ipfw table 91 add $rede
done

#Removendo o arquivo temporário com os domínios
rm /etc/blockedips

#Limpo a tabela de liberação por IP
ipfw -f table 90 flush

#Faço loop nos IPs a serem liberados
for rede in $(cat /etc/firewall/ips | grep -v '#') ; do

#Adiciono o IP na tabela de IPs liberados
ipfw table 90 add $rede
done

Este script fará a leitura dos arquivos, atualizando as tabelas que já estão declaradas no Firewall.

Executando e automatizando

Executando e automatizando a atualização da tabela de bloqueio e liberação.

Vamos automatizar a inicialização do Firewall e do script:

Daremos permissão de executar para o script:

# chmod +x /etc/atualiza_tabela.sh

Criamos o arquivo /etc/rc.local (se não existir):

# touch /etc/rc.local

Adicionaremos o Firewall e o script:

# echo "/etc/fire.rules" >> /etc/rc.local
# echo "/etc/atualiza_tabela.sh" >> /etc/rc.local


Daremos permissão de executar para o rc.local:

# chmod +x /etc/rc.local

Agora que já tenho a inicialização do script, vou adicionar uma linha ao Crontab, onde, a cada 1 hora, o script irá resolver os nomes de IPs que, dependendo do site, estarão apontando para outros ranges:

# vi /etc/crontab

0       *       *       *       *       root    /etc/firewall/firewall.sh

Conclusão

E, é isso.

Está automatizado para incluir IPs para liberação ou bloquear domínios através de arquivos, sem a necessidade de criar uma linha no Firewall para cada domínio, ou tipo de bloqueio.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Adicionando exceções ao proxy Mikrotik V3.XX

DPKG - Resolvendo problemas de instalação de pacotes

Conexão SSH entre servidores Linux sem senha

Instalando o VMWARE Workstation 7 no Debian Lenny

Umask, dmask e fmask - qual a diferença entre esses parâmetros?

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts