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.
Nenhum comentário foi encontrado.