Bloqueando e liberando domínios com Firewall IPFW

Publicado por Anderson Oliveira em 17/03/2014

[ Hits: 6.732 ]

 


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

Hack 'n' Cast v0.3 - Introdução ao GNU/Linux

Remover kernel(s) antigo(s) no Ubuntu

Instalando agente do Zabbix no Windows

Linux em casa? Ih... Não tem o botão iniciar!

Limpando Cache do Disk Usage no Pfsense

  

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