Ícone do site CooperaTI

Instalando Squid no roteador TL-WR1043ND com DD-WRT


Bem, finalmente chegamos no ponto que a maioria tem pedido para ver, a instalação do Squid no roteador. O processo é simples, apenas temos que fazer uns passos adicionais que o sistema não executa sozinho como nas instalações de distribuições Linux comuns, mas podemos ter um proxy com cache, controle de páginas e até autenticação se for necessário.

Vamos acessar nosso roteador pelo SSH:
# ssh root@192.168.1.1
Primeiro vamos atualizar o Opkg e instalar o Squid:
root@router root $ opkg update
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages//Packages.gz.
Inflating http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages//Packages.gz.
Updated list of available packages in /tmp/var/opkg-lists/snapshots.
root@router root $
root@router root $ opkg install squid

Veja na figura abaixo:

A versão instalado é o Squid 2.7, os módulos de autenticação não são instalados por padrão, por isso se você necessitar habilitar a autenticação é preciso instalar os módulos separadamente, eles são:
squid-mod-basic-auth-getpwnam – 2.7.STABLE9-2 – getpwnam basic authentication helper
squid-mod-basic-auth-ncsa – 2.7.STABLE9-2 – NCSA basic authentication helper
squid-mod-basic-auth-smb – 2.7.STABLE9-2 – Samba basic authentication helper
squid-mod-cachemgr – 2.7.STABLE9-2 – Web based proxy manager and reporting tool
squid-mod-digest-auth-password – 2.7.STABLE9-2 – Password digest authentication helper
squid-mod-external-acl-ip-user – 2.7.STABLE9-2 – IP user external ACL helper
squid-mod-external-acl-unix-group – 2.7.STABLE9-2 – Unix group external ACL helper
squid-mod-ntlm-auth-fakeauth – 2.7.STABLE9-2 – Fakeauth NTLM authentication helper
squid-mod-ntlm-auth-smb-auth – 2.7.STABLE9-2 – Samba NTLM authentication helper
Para autenticação básica eu recomento o módulo ncsa, basta criar um arquivo com o comando htpasswd no seu Linux e copiar para o seu roteador com SSH e apontá-lo no Squid como nas linhas comentadas do arquivo squid.conf que está mais abaixo, para autenticação no Samba(AD) use o smb.
O Squid tem um arquivo de configuração todo comentado já pronto, mas estou disponibilizando abaixo um arquivo de configuração básico, sem blacklist nem controle de downloads. Para colocar autenticação, controle de páginas e de arquivos, veja os vídeos sobre Squid que postei em uma série de artigos aqui mesmo no Portal.
Para o Squid funcionar corretamente tive que modificar o caminho padrão que vem no arquivo, o diretório de cache (/var/cache) passou a ser /opt/var/cache (que é onde nosso HD externo está montado), o diretório do executáveis do squid (/usr/lib/squid) passou a ser /opt/usr/lib/squid e o diretório de logs (/var/logs) passou a ser /opt/var/logs, assim o squid instalado no HD externo funcionou corretamente.
Agora vamos criar nossos diretório com as permissões necessárias:
root@router root $ mkdir -m 777 /opt/var/cache
root@router root $ mkdir -m 777 /opt/var/logs
Veja abaixo o arquivo de configuração do Squid:
# Parametros de Autenticacao
#auth_param basic program /opt/usr/lib/squid/ncsa_auth /etc/squid/senhas
#auth_param basic children 5
#auth_param basic realm Squid proxy-caching web server
#auth_param basic credentialsttl 2 hours
#auth_param basic casesensitive off
# ACL Padrao
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
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
# Minhas ACL
acl localnet src 192.168.1.0/24
# HTTP_ACCESS
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
# Meus HTTP_ACCESS
http_access allow localnet
#
http_access deny all
icp_access allow localnet
icp_access deny all
# Porta do Proxy
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
cache_mem 1024 KB
maximum_object_size_in_memory 8 KB
memory_replacement_policy lru
cache_replacement_policy lru
cache_dir ufs /opt/var/cache 30000 16 256
maximum_object_size 64 MB
cache_swap_low 90
cache_swap_high 95
#LOGS
cache_store_log /opt/var/logs/store.log
access_log /opt/var/logs/access.log squid
cache_log /opt/var/logs/cache.log
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9] mime_table /opt/etc/squid/mime.conf
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
error_directory /opt/usr/share/squid/errors/English
coredump_dir /opt/var/cache
pid_filename /opt/var/logs/squid.pid
logfile_daemon /opt/usr/lib/squid/logfile-daemon
diskd_program /opt/usr/lib/squid/diskd-daemon
unlinkd_program /opt/usr/lib/squid/unlinkd
pinger_program /opt/usr/lib/squid/pinger
icon_directory /opt/usr/share/squid/icons

Como podem ver os diretórios foram apontados para o /opt, basta agora entrar no diretório do Squid, renomear o arquivo padrão e criar o nosso com o nome squid.conf:
root@router root $ cd /opt/etc/squid
root@router squid $ mv squid.conf squid.conf.old
root@router root $ vi squid.conf
Após criar o arquivo com a configuração acima, vamos fazer o Squid criar os diretórios do seu cache:
root@router root $ squid -f squid.conf -z

Para testar vamos executar:
root@router root $ squid -f squid.conf -D -C
Se tudo funcionar, veremos a porta 3128 aberta com o comando netstat -nat.
Vamos agora criar nosso script de inicialização para caso o roteador reinicie o Squid inicie junto (algumas vezes o squid não iniciou junto com o roteador, tive de logar no roteador e executar o script manualmente):
root@router root $ vi /opt/etc/init.d/squid
# Fecha o Squid e remove a regra do IPTABLES
kill -9 $(pidof squid)
/usr/sbin/iptables -t nat -D PREROUTING -p tcp -s 192.168.1.0/24 ! -d 192.168.1.0/24 –dport 80 -j REDIRECT –to-ports 3128
# Inicia o Squid e faz a regra de redirecionamento para o Proxy Transparente.
#
/opt/usr/sbin/squid -f /opt/etc/squid/squid.conf -C -D
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -s 192.168.1.0/24 ! -d 192.168.1.0/24 –dport 80 -j REDIRECT –to-ports 3128

OBS: as variáveis dport e to-ports vem com 2(dois) sinais de – (menos na frente) : –dport –to-ports, mas alguns browsers ao visualizar o wordpress costumam mudar isso para apenas um sinal de – .
Basta agora usar o Browser em qualquer site e se quiser pode monitorar no log do roteador:
root@router root $ tail -f /opt/var/logs/access.log
Espero que seu roteador seja seu novo FTP, cliente de Torrent, seu compartilhamento de Rede, seu Controle e Cache de Internet, e quem sabe futuramente(estou procurando saber mais) seu Print Server.
Não esqueçam de comentar, de divulgar e de assinar o nosso Portal.

Sair da versão mobile