O pacote squid é um proxy Internet com uma cache integrada. A vantagem de uma cache internet é a de guardar localmente dados pedidos anteriormente para, numa utilização futura, serem servidos localmente, evitando acessos repetidos a servidores distantes.
root@server:~# apt install squid
A configuração do squid é guardada no ficheiro /etc/squid/squid.conf.
O squid aceita ligações na porta 3128, por omissão. No entanto esta pode ser alterada (a porta 8080 também é muito utilizada com porta para o serviço de cache Internet):
#[...] # Squid normally listens to port 3128 http_port 3128 #[...]
Por segurança o squid só responderá a pedidos originados na rede local ou no próprio servidor. Esta restrição é conseguida definindo uma lista de controle de acesso ou ACL (Access Control List) (acl home.lan src 192.168.1.0/24
) e autorizando o acesso apenas aos sistemas incluídos nessa lista (http_access allow home.lan
):
Definição da lista de endereços da rede interna na secção acl:
# [...] # TAG: acl # Defining an Access List # [...] #Default: # ACLs all, manager, localhost, and to_localhost are predefined. # # # Recommended minimum configuration: # # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network #acl localnet src fc00::/7 # RFC 4193 local private network range #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl home.lan src 192.168.1.0/24 # [...]
Definição das permissões de acesso na secção http_access:
# [...] # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed #http_access allow localnet http_access allow localhost http_access allow home.lan # And finally deny all other access to this proxy http_access deny all # [...]
O tamanho total da cache do squid pode ser afinado para um valor conveniente, como por exemplo, 2048Mb:
# [...] # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256 cache_dir ufs /var/spool/squid 2048 16 256 # [...]
A identificação do servidor proxy pode também ser definida:
# [...] # TAG: visible_hostname # If you want to present a special hostname in error messages, etc, # define this. Otherwise, the return value of gethostname() # will be used. If you have multiple caches in a cluster and # get errors about IP-forwarding you must set them to have individual # names with this setting. #Default: # Automatically detect the system host name visible_hostname proxy.home.lan # [...]
Opcionalmente, pode-se também configurar o tamanho máximo de um objeto a guardar em cache definindo o parâmetro maximum_object_size
:
# [...] # TAG: maximum_object_size (bytes) # Objects larger than this size will NOT be saved on disk. The # value is specified in kilobytes, and the default is 4MB. If # you wish to get a high BYTES hit ratio, you should probably # increase this (one 32 MB object hit counts for 3200 10KB # hits). If you wish to increase speed more than your want to # save bandwidth you should leave this low. # # NOTE: if using the LFUDA replacement policy you should increase # this value to maximize the byte hit rate improvement of LFUDA! # See replacement_policy below for a discussion of this policy. #Default: # maximum_object_size 4 MB maximum_object_size 16 MB # [...]
Como segurança adicional, vamos também instruir o squid para não divulgar a sua versão:
# [...] # TAG: httpd_suppress_version_string on|off # Suppress Squid version string info in HTTP headers and HTML error pages. #Default: # httpd_suppress_version_string off httpd_suppress_version_string on # [...]
O ficheiro de configuração pode ser testado:
root@server:~# squid -k parse
É mostrado um resumo da configuração. Se não houverem erros, podemos reiniciar o serviço squid:
root@server:~# systemctl restart squid
É possível configurar o browser Firefox para utilizar um proxy, acedendo ao menu Ferramentas –> Opções… –> Avançadas –> Rede –> Definições…, ativar a opção Configuração manual do proxy e inserir o endereço do servidor proxy (192.168.1.100) e a porta (3128). Podem-se definir exceções para o próprio posto (127.0.0.1) e para a rede local (192.168.1.0/24):
No caso de sistemas Linux, é possível declarar a variável http_proxy
com a URL do proxy a utilizar:
fribeiro@server:~$ export http_proxy="http://192.168.1.100:3128/"
No entanto, na próxima sessão terá que ser declarada novamente.
Um método mais duradouro é declarar a variável automaticamente a cada login, incluindo a declaração no ficheiro ~/.profile do utilizador:
fribeiro@server:~$ echo 'http_proxy="http://192.168.1.100:3128/"' >> ~/.profile
A declaração pode ainda ser feita de modo automático e para todos os utilizadores, se incluída no ficheiro de sistema /etc/profiles:
root@server:~# echo 'http_proxy="http://192.168.1.100:3128/"' >> /etc/profile
O mesmo princípio é aplicável para a variável ftp_proxy que define o proxy a utilizar nas ligações FTP ou para a variável https_proxy para as ligações seguras.