#  > Servidores >  > Servidores de Rede >  >  :: ACL SQUID :: Bloquear faixa IP e Liberar alguns IPs.

## petrolina360graus

Galerinha, to precisando criar uma regra de ACL que faça o seguinte:

Bloquear toda a faixa de ip exemplo: 10.2.27.0/255.255.255.0
Depois liberar alguns ips dessa faixa usando um arquivo onde tenha os ips que serão liberados, alguém sabe me dizer como faço essa regra.

Se posso fazer assim:

acl liberar_ips url_regex "/usr/local/squid/regras/ipsliberados"
acl rede src 10.2.27.0/255.255.255.0
acl rede_bloqueio 10.2.27.0/255.255.255.0
http_access deny rede !ipsliberados

Ou se tem outro jeito....

----------


## cvr

Não seria melhor vc tratar isto a nivel de firewall. Parece bem simples. Cria as regras com iptables bloqueando o que vc não quer.

iptables -A INPUT -s 192.168.0.21/24 -j DROP


Acho que e mais ou menos assim.

----------


## majnun

# O arquivo deve listar 1 endereço IP por linha
acl MaquinasLiberadas src "/usr/local/squid/regras/ipsliberados"
acl RedeBloqueada src 10.2.27.0/255.255.255.0
# Primeiro, permite as liberadas
http_access allow MaquinasLiberadas
# Então, bloqueia o restante
http_access deny RedeBloqueada

----------


## xstefanox

> Não seria melhor vc tratar isto a nivel de firewall. Parece bem simples. Cria as regras com iptables bloqueando o que vc não quer.
> 
> iptables -A INPUT -s 192.168.0.21/24 -j DROP
> 
> 
> Acho que e mais ou menos assim.


Embora seja mais fácil para bloquear, é mais difícil para administrar depois. Quando você tem 10 máquinas, é fácil, mas quando você tem 1000, é um saco saber se você tá bloqueando o cara no Squid, no firewall ou por reza. Padronização de serviços é importante neste aspecto.

Mas respondendo a dúvida do amigo, tu pode fazer assim:



```
acl usuariosliberados src "/etc/squid/lists/usuariosliberados"
acl redebloqueada src 10.0.0.0/24
http_access deny redebloqueada !usuariosliberados
```

 
Abraços!

----------


## caoswing

Boa tarde pessoal, gostaria de aproveitar o topico e pedir umas dicas.

acl redelocal src 192.168.0.0/24 
essa regra poderia ser como:
acl redelocal src "/etc/squid/ip.txt" dentro do ip.txt estariam os ip, seria necessário o /24?

porque eu não quero que seja adicionado mais uma máquina na rede e o range de ip segue-se até o 192.168.0.254 (acho q seria isso)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

----------


## xstefanox

Bem, tu poderia resolver o seu problema de 30 formas diferentes. Eis algumas:

1 - Tu poderia especificar duas ranges de IP no squid.conf, onde você pula o IP que não é pra ser colocado na regra:


```
acl range1 src 192.168.0.1-192.168.0.50
acl range2 src 192.168.0.52-192.168.0.254
```

 
2 - Para cada requisição que o Squid recebe, ele vai tentando encaixar a requisição dentro de padrões. Estes padrões são especificados pela ordem das ACL's e dos HTTP_ACCESS. Quando o Squid encontra uma regra que bate com a requisição, ele ignora todas as regras depois dessa regra. Exemplo:


```
acl perdidonailhadelost src 192.168.0.20
acl eupreferificarnaaustraliamesmo src 192.168.0.0/24
http_access allow perdidonailhadelost
http_access deny eupreferificarnaaustraliamesmo
```

 
Veja que o acesso vai ser permitido para o IP 192.168.0.20 e o resto da range vai ser bloqueado. Só o 192.168.0.20 vai poder usar o proxy e os outros acessos vão ser bloqueados. Entende agora porquê você tem que prestar atenção na ordem das suas ACL's, amiguinho?

Agora, respondendo a sua pergunta elementar sobre o /24 e entrando numa aulinha sobre redes...

O /24 é uma outra notação de máscara de sub-rede, onde o número depois da barra é o número de bits 1 transformando a máscara em binário. Veja:



```
255.255.255.0 = 1111 1111.1111 1111.1111 1111.0000 0000 (Eu sou tão bonzinho que separei até a máscara em nibbles).
```

 
Se você tiver a paciência holística de contar os números 1 acima, verá que o número é igual à 24.

Logo, sempre é bom você se acostumar com isso. No Squid, você pode usar tanto uma quanto a outra notação, que é:



```
192.168.0.0/255.255.255.0
```

 
Caso você queira utilizar uma máscara que caiba apenas um IP, tu normalmente usa 255.255.255.255. Transformando em binário: 1111 1111.1111 1111.1111 1111. 1111 1111.

Adivinhe o número de bits? 32.

Ou seja: 255.255.255.255 = /32

Entendeu?

----------


## caoswing

Vlw pela atenção.

Agora estou entendendo o permitir/negar do squid, minha confusão era a pensar que o squid faria "confusão" na hora do permitir/negar as acl´s tipo

acl perdidonailhadelost src 192.168.0.20
acl eupreferificarnaaustraliamesmo src 192.168.0.0/24
http_access allow perdidonailhadelost
http_access deny eupreferificarnaaustraliamesmo

uma vez permitindo o .20, mas mesmo assim negando logo após (http_access deny eupreferificarnaaustraliamesmo), mas pelo visto o squid quando "libera" uma acl, essa mesma faz um "pulo" por todos os outros bloqueios que se seguem. Pelo menos foi o que eu entendi, por isso algumas acl´s minhas não funcionavam, pensava ser as http_access que não estavam de acordo, mas pelo visto não se coloca a carroça na frente dos bois. :lol:

Quanto ao /24 esse eu sabia :lol: o que gostaria de saber, se é possível colocar a acl sobre os ip´s da rede em um arquivo .txt. Não sei se estou explicando direito o que preciso. Mas usarei sua dica.

Valeu pela ajuda.

----------


## xstefanox

Sim, dá pra colocar a lista de IP's da rede em um arquivo texto.

----------


## caoswing

Poxa xstefanox muito obrigado pela ajuda, só mais uma dúvida (essa é a última prometo hehe)

acl ipdir src "/etc/squid/ipdir.txt"
acl ipdir2 src "/etc/squid/ipdir2.txt"

acl ipuser1 src "/etc/squid/ipuser1.txt"
acl ipuser2 src "/etc/squid/ipuser2.txt"
acl ipuser3 src "/etc/squid/ipuser3.txt"

acl redelocal src 192.168.10.0/24 192.168.11.0/24 (isso seria necessário? afinal eu tenho os ip´s que quero nos .txt´s)

#sites bloqueados
acl proibidos url_regex -i "/etc/squid/proibidos"
acl user2 dstdomain "/etc/squid/user1.txt" (sites que usuarios podem acessar)
acl user3 dstdomain "/etc/squid/user2.txt" (idem)

#regras de acesso
http_access allow ipdir
http_access allow ipdir2
http_access deny proibidos
http_access allow ipuser1
http_access deny ipuser2 !user1
http_access deny ipuser3 !user2
http_access deny redelocal (ainda não sei se seria necessário, já que os ip´s estão liberados/bloqueados conforme os .txt´s)

Desculpe o aborrecimento, o .txt dos ip´s tem q ser algo assim
192.168.10.2
192.168.10.3...
ou
192.168.10.2/24
192.168.10.3/24...

Obs.: Os "user" são apenas demontrativos, os nome são outros, um pouco mais organizado.

Obrigado pela ajuda.

----------


## xstefanox

Então cara... se eu entendi direito, você tá entendendo errado, hehehe.

Na verdade, declarar um IP por arquivo texto é perda de tempo, pois você tá declarando um único endereço IP em uma lista. Listas geralmente possuem mais de uma entrada, lembra?

Para o que você quer fazer, o legal é dividir a sua rede em vários ranges, por setores, por exemplo, e especificar todos os endereços dentro do arquivo txt ou ainda a range.

O que é mais prático? Fazer assim:


```
acl usr1 src 192.168.10.1
```

 Ou assim?


```
acl usr1 src "/etc/squid/usr1"
# echo 192.168.10.1 > /etc/squid/usr1
```

 
O formato dos .txt é assim:


```
192.168.10.1
192.168.10.2
192.168.10.3
192.168.10.4
192.168.10.5
```

 
Organizar é importante, mas para administrar esse é o método que eu prefiro.

Manter ACL's para redes é importante a partir do momento que você quer bloquear qualquer acesso que não faça parte das ranges. Veja bem, é uma medida de segurança apenas. Vamos supor que algum usuário seu troque o IP de sua máquina para um IP fora das suas ranges declaradas? Lembre-se que o Squid libera acesso por padrão. Lembra daquela última regra que você não prestou atenção no squid.conf original? Essa aqui:



```
http_access deny all
```

 
Poisé, é pra isso que ela serve. Depois que todas as requisições passaram dentro dos controles e não bateu em nenhum, ele vai cair nesse e vai bloquear.

Tu pode aborrecer o quanto quiser, a partir do momento que as suas perguntas forem inteligentes e que você faça pesquisas antes de consultar o fórum  :Smile: 


Abraços.

----------


## caoswing

É sim, eu me expressei mal.

Com certeza não é uma boa colocar apenas um único ip por lista. Os "user1, 2 e 3" contém ranges de ip´s.
ex.: user1 = ip 20~50 , user2 = ip 60~120 e user3 = ip´s 130~137.

Mesmo utilizando as listas, haverá necessidade de "mostrar" para o squid que a minha rede é formada pelo conjunto de ip´s 192.168.0.0/24 e 192.168.1.0/24?

Ou ele irá verificar as listas e apenas liberar/bloquear os ip´s contidos nela?

Grato pela ajuda.

Antes de me esquecer. Usei o google para procurar tutorial sobre o squid, mas infelizmente só se acha as mesmas coisas, é um tal de ctrl+c ctrl+v que não acaba mais, aqui no forum posso tirar dúvida com quem entende e já trabalha com squid. Eu particularmente gosto de trabalhar em cima de dois ou mais exemplos, e o squid tem mais de uma maneira de se fazer algo legal.

----------


## xstefanox

Então amiguinho, o negócio é o seguinte:

LISTAS servem apenas como uma forma alternativa de conteúdo de ACL's. A representação em si é a mesma. Ou seja:



```
acl teste src 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.5
```

 
Imagine que eu tenha que colocar 50 IP's em uma ACL. Daí meu squid.conf vai ficar todo escroto. Por isso eu crio uma lista e represento ele assim:



```
acl teste src "/etc/squid/lists/teste.txt"
```

 
Onde o conteúdo é:



```
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
```

 
Você viu que o conteúdo da ACL é o mesmo, e só a representação é diferente?

Se tu for colocar range, tu especifica assim:



```
acl range src 192.168.0.1-192.168.0.50
```

 
Se eu representar isso com lista:



```
acl range src "/etc/squid/lists/range.txt"
```

 
E o conteúdo da lista é:



```
192.168.0.1-192.168.0.50
```

 
Tu percebeu que eu não coloquei /24 até agora, né? Porque se eu colocar, além de dar pau, ele vai entender pelo /24 que é a rede inteira.


Entendeu agora?

----------


## caoswing

Tudo explicado, mais uma vez obrigado pela ajuda. Todas as minhas dúvidas sobre o squid (pelo menos as que eu tinha) foram sanadas. Agora colocarei em prática (para ser mais exato, sábado). Caso haja mais algumas dúvidas a respeito, não hesitarei em postar nesse forum.

Muito obrigado xstefanox e até a próxima.

----------


## vul4

Pessoal

Seguindo as dicas do nosso amigoxstefanox, fiz as seguintes acls:

acl range1 src 192.168.11.1-192.168.11.19
acl range2 src 192.168.11.20-192.168.11.179
acl range3 src 192.168.11.180-192.168.11.254

acl webmail_block dstdom_regex "/proxy/txts/webmail_block.txt"

*dentro desde arquivo tem alguns sites q devem ser bloqueados apenas para a range2

http_access allow range1 range3
http_access deny webmail_block
http_access allow range2

Mas não funcionou :-(

Alguem pode me da uma força pra q isso funcione. O intuito é deixa a range1 e range3 navegando livremente e bloqueia os sites q estão dentro do arquivo para a range2.

Uso stable10 como slackware 10.2.

Vlws ae, agradeço antecipadamente

----------


## xstefanox

```
acl range1 src 192.168.11.1-192.168.11.19
acl range2 src 192.168.11.20-192.168.11.179
acl range3 src 192.168.11.180-192.168.11.254
 
acl webmail_block url_regex -i "/proxy/txts/webmail_block.txt"
 
http_access allow range1
http_access allow range3
http_access deny webmail_block range2
```

 
É pra funcionar assim. E quando não funciona, não funciona por quê?

----------


## vul4

xstefanox

Minha pergunta seria, eu não estaria bloqueando todo acesso a navegação colocando deny para range2? Por que meu intuito é bloquear o conteudo do arquivo apenas para a range2. A range1 e rang3 teria acesso a internet inrestrito.

*http_access deny webmail_block range2*

A configuração de acls não funcionou, bloqueou tudo para todas as ranges, mas em teste eu colocando apenas ip's, funciona. 

P. ex: 

acl range1 src 192.168.11.1 192.168.11.2 192.168.11.3 .... 192.168.11.19

Desda maneira funciona, mas seria um tanto qdo trabalhoso digitar todos os ip's.


Atenciosamente

----------


## xstefanox

Como estão as suas ACL's?

----------


## ttjedi

coloque para bloquear a rede toda entao.... por exemplo 192.168.0/24 na acl ............. valew!!!

----------


## vul4

Segue o squid.conf para analise:


visible_hostname fw-01.frato
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
# config das regras de acesso
acl all src 0.0.0.0/0.0.0.0
acl rede_interna src 192.168.11.0/255.255.255.0
#acl range1 src 192.168.11.1-192.168.11.19
#acl range2 src 192.168.11.20-192.168.11.179
#acl range3 src 192.168.11.180-192.168.11.254
#acl navegacao_full src 192.168.11.21
#acl download_negado url_regex -i ftp .mov .mpeg .wav .tar .mp3 .avi .asf
#acl permitidos dstdomain "etc/squid/permitidos"
acl webmail_block dstdom_regex -i "/proxy/txts/webmail_block.txt"
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
#http_access deny negados
#http_access allow navegacao_full
#http_access deny download_negado
#http_access allow permitidos
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
#http_access allow range1 range3
http_access deny webmail_block
#http_access allow range2
http_access allow rede_interna
http_access deny all
http_reply_access allow all
icp_access allow all
coredump_dir /proxy/logs
#Config do cache
cache_mem 128 MB
cache_dir ufs /proxy/logs 20000 16 256
cache_access_log /proxy/logs/access.log
cache_log /proxy/logs/cache.log
cache_store_log /proxy/logs/store.log
cache_effective_user squid
cache_effective_group squid
cache_mgr [email protected]
#Config proxy transparente
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_single_host off
httpd_accel_with_proxy on


Atenciosamente

----------


## xstefanox

Puta, que zona, hauehaeuhaeuae.



```
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80     # http
acl Safe_ports port 21     # ftp
acl Safe_ports port 443 563   # https, snews
acl Safe_ports port 70     # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl CONNECT method CONNECT
 
# ACL's para definição de redes
acl all src 0.0.0.0/0.0.0.0.0
acl range1 src 192.168.11.1-192.168.11.19
acl range2 src 192.168.11.20-192.168.11.179
acl range3 src 192.168.11.180-192.168.11.254
 
# ACL's para controle de acesso
acl blocked url_regex -i "/etc/squid/lists/blocked"
acl unblocked url_regex -i "/etc/squid/lists/unblocked"
acl blocked_extensions urlpath_regex -i "/etc/squid/lists/blocked_extensions"
acl webmails url_regex -i "/etc/squid/lists/webmails
 
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
 
# HTTP_ACCESS
http_access deny blocked !unblocked
http_access deny blocked_extensions
http_access allow range1
http_access allow range3
http_access deny webmails
http_access allow range2
 
http_access deny all
```

 
Testado e comprovado.

----------


## vul4

Obrigado pela dica....

----------

