Existem três partes na sua pergunta:
- Decida sobre uma estratégia de bloqueio no nível da rede: quais conexões são permitidas?
- Implemente essa estratégia de bloqueio.
- … de uma forma que afeta apenas alguns usuários.
Bloquear websites não é fácil. Na verdade, eu diria que é impossível bloquear completamente um site sem bloquear completamente o acesso à rede. Tudo o que você pode fazer é dificultar a vida do usuário bloqueado, mas, se ele realmente quiser, poderá acessar o site bloqueado, com maior latência e menor largura de banda, desde que tenha bastante sofisticação técnica e possa confiar em um servidor externo . Para navegação normal, os usuários podem ver cópias em cache no Google ou de outra forma. Os usuários que têm um servidor externo podem usá-lo como um proxy ou podem usar proxies existentes (proxies abertos vêm e vão rápido demais para serem bloqueados).
Você pode tentar bloquear por nome de domínio ou por endereço IP. Endereços IP podem funcionar para um site grande como o Facebook, embora você tenha que acompanhar todos os movimentos do servidor. Não funcionará com sites menores que são co-hospedados.
Uma maneira leve de bloquear alguns sites é bloquear sua resolução de nomes DNS. Apenas isso provavelmente torna a vida dos usuários irritante o suficiente para que eles trabalhem em torno de seu bloco usando um proxy externo (que requer alguma sofisticação). Mas não há nenhuma maneira prática de ajustar a resolução de DNS por usuário (não é impossível, em princípio, mas você precisa configurar um em funcionamento identd
e encontre um servidor DNS que fale com ele).
A maneira natural de bloquear sites é bloquear o acesso direto à web e permitir acesso somente por meio de um proxy da web. O Squid é o padrão de fato. Você pode configurá-lo como um proxy transparente (todas as conexões nas portas 80 e 443 são roteadas para a máquina proxy; o site estranho em outra porta pode ou não funcionar dependendo de como você configura seu firewall) ou como um proxy explícito (os usuários devem configurar seu navegador; somente a máquina com o proxy pode se conectar ao exterior).
Uma maneira fácil de implementar configurações por usuário é exigir autenticação no proxy. Então, ter diferentes níveis de acesso é um trabalho para o proxy. Para evitar o requisito de senha, você também pode fazer o identificador de uso de proxy (embora isso adicione latência para todos os acessos).
Sua tarefa será mais fácil se você puder executar o proxy em uma máquina diferente (pode ser uma máquina virtual). Fazer tudo na mesma máquina é possível, mas complicado no Linux , e eu suspeito que também seja possível, mas complicado em outros unices.