Neste artigo vou mostrar como bloquear usuários que acessam a Internet através de compartilhamento via iptables, fazer com que estes usuários bloqueados recebam uma página de aviso sobre o bloqueio. Isto ajudará muito a provedores de acesso a Internet a rádio que sentem a necessidade de bloquear usuários com pendências.
No meu caso estou utilizando Conectiva 8 e utilizei o
linuxconf para criar um subdomínio. Neste artigo vamos
considerar que o subdomínio responderá como pendencia.seuprovedor.com.br.
Primeiro vamos criar o diretório onde a página de aviso ficará hospedada no servidor:
# mkdir /home/pendencia
Utilize um editor HTML que você já esteja acostumado para criar a página de aviso que você quer que seu usuário receba e transfira o arquivo para o diretório /home/pendencia.
Aqui eu criei uma página bem simples para o aviso do cliente. Caso precise de um exemplo basta verificar em:
Acesse o linuxconf. Você precisa estar logado como root:
# linuxconf
--> Rede --> DNS - Servidor de Nomes de Domínios --> Configurar --> Adicionar
Adicione o subdomínio pendencia.seuprovedor.com.br.
Reinicie o servidor de DNS:
#/etc/init.d/named stop
#/etc/init.d/named start
Pronto! Agora precisamos configurar o Apache para responder
localmente para este subdomínio. Localize e abra o arquivo de configuração do
Apache "httpd.conf" em seu editor de textos predileto e acrescente no final
do arquivo a configuração conforme o exemplo abaixo:
# find / -iname httpd.conf
Para facilitar, no Conectiva 8 o arquivo httpd.conf fica em /etc/httpd/.
Configuração:
<VirtualHost IPVIRTUAL> # Substitua a palavra IPVIRTUAL pelo número do IP da interface virtual que você criou, pois é esta linha que fará com que o Apache responda localmente em sua rede.
ServerAdmin seuemail@seuprovedor.com.br #Aqui deverá ser acrescentado o endereço de email da pessoa responsável pelo subdomínio.
ServerName pendencia.seuprovedor.com.br #Aqui você deverá informar o subdomínio que você criou através do linuxconf.
DocumentRoot /home/pendencia/ # É aqui que você informa o caminho local onde a página de aviso está salva em seu servidor para que o Apache a busque toda vez que o usuário tente acessar a Internet.
Options ExecCGI # Faz com que neste diretório possam ser executados arquivos CGI.
</VirtualHost> # Esta linha serve para encerrar o script de configuração.
Seu script de configuração do Apache deverá está parecido com o modelo abaixo:
[1] Comentário enviado por parad em 16/05/2005 - 15:39h
Nélio, como posso programar o sistema para que o acesso a internet seja encerrado após um período?
Tipo o sistema após 2 horas encerra o acesso a internet e o usuário tera que se logar novamente.
[3] Comentário enviado por agk em 16/05/2005 - 19:13h
Bacana o artigo, nos abre diversas possibilidades quanto ao bloqueio de acessos. Mas acredito que só bloquear a porta 80 não seja o suficiente, a não ser que as demais já estejam previamente bloqueadas. Não sei se todos os provedores de internet a rádio fazem, mas aqui na minha cidade eles bloqueiam tudo, você não consegue fazer nada, apenas acesso a páginas, e-mail e msn. Se for para ter internet assim eu prefiro discada.
[4] Comentário enviado por alissonline em 16/05/2005 - 21:36h
Legal! Estou mesmo precisando usar no meu pequeno provedor...
mas Uso Slack e num encontrei a o diretorio sysconfig... como faço pra encontrar o arquivo?
[6] Comentário enviado por infocampi em 17/05/2005 - 21:02h
Complementando o artigo e o comentário do nosso amigo AGK pode usar o seguinte script para bloquear por completo o usurário:
# iptables -A FORWARD -p all -s IPDOCLIENTE -j DROP
# iptables -A INPUT -p all -s IPDOCLIENTE -j DROP
# iptables -A OUTPUT -p all -s IPDOCLIENTE -j DROP
[8] Comentário enviado por HaCkErX em 19/05/2005 - 11:42h
Muito bom esse artigo, mas eu queria saber se você poderia me passar como que coloco uma autenticação no meu sistema via web, sendo, todo cliente para acesar a rede ou internet terá que autenticar na página.
[10] Comentário enviado por Bique em 22/11/2005 - 09:10h
Bom esse seu artigo...E por isso que o mundo livre continua BUE DE FIXE...Será possivel responder aos users com um banner de proibição?Um abrço de Moçambique.
[11] Comentário enviado por enioha em 03/02/2006 - 12:23h
Tenho uma rede interna. configurado um compartilhamento de internet junto com um PDC(Samba). Quero apenas que o usuario do ip 192.168.0.10 acesse os seus e-mail atravez de outlook(portas 110 e 25) e não consiga navegar pelo browser.. Como aplicar isto em uma regra do iptables para que funcione sem usar o Squid???
[12] Comentário enviado por infocampi em 03/02/2006 - 18:13h
Você poderá bloquear esse usuário no squid acrescentando as seguintes regras em seu arquivo de configuração do squid:
#acl ips_bloqueados src "/etc/squid/ips_bloqueados.txt
#http_access deny ips_bloqueados
Você deverá criar o arquivo "ip_bloqueados.txt", onde você colocará o ip do usuário que você quer que não tenha acesso a web.
Fazendo desta forma você bloqueia o acesso deste user na net, mas o deixa com acesso aos outros serviços do server.
[13] Comentário enviado por robertochaves em 16/03/2006 - 13:49h
Comentário enviado por Roberto/Fortaleza-ce 16/03/2006
Tenho uma rede interna. E o servidor WEB e SAMBA. Quero apenas que tres máquina acesse a internet. Como aplicar isto usando o Squid? Tenho que colocar IP fixo em todas as minhas máquinas. E como aplicar isto em uma regra que funcione sem usar o Squid?
[14] Comentário enviado por MASTERGTx em 08/05/2006 - 10:05h
Ele não quer bloquear o cliente ele apenas quer rediorecionar o cliente para uma página informando que ele está em débito com o provedor, agora se vc bloquear todo o acesso dele a net ele também não irá ver aviso algum, para resolver isso na minha solução eu uso esta regra que impede qualquer navegação, msn ou algo use a net, ele ficará sempre preso ao gateway vendo o aviso em caso de abrir páginas:
redireciona o ip sempre para uma porta virtual que fiz
iptables -A PREROUTING -t nat -i eth3 -s IP -p tcp --dport 80 -j DNAT --to IP:81
#Estou limitando o cliente apenas a uma navegação dentro do servidor gateway
iptables -A FORWARD -s IP -j ACCEPT
iptables -A FORWARD -d IP -j ACCEPT
#Conf dentro de /etc/apache/httpd.conf
<VirtualHost *:81>
ServerAdmin webmaster@dominio.com.br
DocumentRoot /paginas/aviso
DirectoryIndex index.html index.php
ServerName aviso.dominio.com.br
ErrorLog /var/log/error_log
CustomLog /var/log/access_log common
</VirtualHost>
Espero ter ajudado.
Com esses parâmetros dá pra fazer um hotspot básico..
Valeu
[15] Comentário enviado por julinhoramones em 12/07/2006 - 12:14h
Em relação ao colega Eniocha, se no caso você queira liberar o tráfego para portas 25 e 110 sendo como destino e bloquear o restante é bem simples,
você pode inserir as seguintes regras na chain FORWARD.
inter_local=XXX
ip_cliente=ZZZ.ZZZ.ZZZ.ZZZ
onde ZZZ.ZZZ.ZZZ.ZZZ é o IP do cliente que você quer liberar o repasse de pacotes para as portas destinatárias 25 e 110.
onde XXX é sua interface de rede local, por ex.: eth0, eth1, eth2........
iptables -P FORWARD DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $inter_local -m multiport -s $ip_cliente -p tcp --dport ! 25,110 -j DROP
iptables -A FOWARD -i $inter_local -s 192.168.0.0/24 -j ACCEPT
[16] Comentário enviado por cytron em 08/01/2007 - 15:30h
Este artigo está meio parado desde o ano passado mas sempre dá tempo de comentar... hehehe
No meu ver, para bloqueio de usuário não é muito ideal, apesar de funcionar (incluindo a regra de iptables do infocampi), mas desde artigo dá para tivar muito mais proveito para a criação de subdomínios, regras para impedir acesso a certos subdomínios, tipo... o cliente não pode acessar o domínio do sistema de administração de clientes, seria uma segurança em tanto, ao invés de apenas senhas.
E ainda dá para sacar facilmente como dar subdomínios para os clientes.