Usando o lema seguinte, se você usar, faça o mesmo.
# Mon to Fry time
acl blockfacebooktime time MTWHF 8:30-8:30
# Domain name
acl blockfacebookdotcom dstdomain .facebook.com
Suponha que eu queira bloquear o Facebook permanentemente. Para fazer isso, segui os seguintes processos:
#host -t a www.facebook.com
Exemplo de saída:
www.facebook.com has address 69.171.224.40
Encontre o CIDR
#whois 69.171.224.40 | grep CIDR
Exemplo de saída:
CIDR: 69.171.224.0/19
Para evitar o acesso de saída a www.facebook.com
Abordagem 1:
#iptables -I FORWARD -p tcp -d 69.171.224.0/19 -j DROP
Abordagem 2:
#iptables -I FORWARD -p tcp -d www.facebook.com -j DROP
Ambas as abordagens funcionam bem. Na abordagem 1 , o endereço IP pode ser alterado para que não bloqueie o Facebook permanentemente. Eu não sei sobre a abordagem 2 se bloqueará o Facebook permanentemente ou não. Se as abordagens acima não são o caminho certo para bloquear um domínio permanentemente, como posso fazê-lo?
A abordagem 2 NÃO funcionará como você pode pensar. Você pode ler isto em iptables
manual:
[!] -s, --source address[/mask]
Source specification. Address can be either a network name, a hostname (please note that specifying any name to be resolved with a remote query such
as DNS is a really bad idea), a network IP address (with /mask), or a plain IP address.
Naturalmente, o mesmo se aplica à opção de destino -d
. Isso ocorre porque iptables
fará a pesquisa de DNS apenas uma vez e usará o IP recuperado na regra. Então, não vai funcionar se o IP for alterado depois disso.
Uma abordagem melhor é usar um servidor proxy como sugerido por @neolix. No entanto, seus usuários podem tentar ignorar seu proxy, a menos que você tenha regras realmente estritas para evitar isso.
Você pode usar a cadeia de autoscripting para bloquear todos os IPs do domínio. isto é, liste todos os IPs do domínio e bloqueie-os um a um. Se o IP já existir na tabela, a inserção será apenas ignorada. Faça o seguinte:
# nslookup www.facebook.com|grep "^Address: [1-9]"| while read l; do ip=$(sed "s/Address://" <<< "$l"); if [ -z "$(iptables -n -L FORWARD|grep $ip)" ]; then iptables -I FORWARD -j DROP -d $ip; echo Blocked $ip; fi; done
Esse script pode ser chamado de cron
, por exemplo, cada minuto / hora, para renovar os endereços.