(proxy http, https e ftp)
Squid é um Proxy http, https e ftp. Faz cache, elabora lista de controle de acesso (ACL) e pode trabalhar no modo transparente. Também pode pode trabalhar em conjunto com um serviço de diretório (AD). A seguir tem-se uma lista com a significado de alguns termos bastante utilizados:
- Proxy: intermediário entre um cliente e um servidor. Para o cliente o servidor é o proxy e para o servidor o cliente é o proxy;
- Proxy Transparente: é um proxy onde não tem necessidade de configurar os clientes. Os clientes passaram pelo proxy de maneira automática (transparente);
- ACL: Access Control List (Lista de Controle de Acesso). As ACLs são criadas para permitir ou não um determinado tipo de acesso atraves do Proxy;
- Cache: espaço do disco (HD) onde é armazenado o cache (arquivos) dos clientes. Esse cacha nada mais [e do que as paginas que foram acessadas pelo cliente;
- Objeto: arquivo (jpg, iso, html, mpeg, gif etc);
- http_access: acesso http. Depois de definidas as ACLs, esta opção vai permitir ou não um determinado tipo de acesso http;
- url_regex: regular expression (expressão regular) que será procurada no URL (Uniform Resource Locators);
- SMTWHFA: Domingo, Segunda, Terça, Quarta, Quinta, Sexta e Sábado, respectivamente;
Instalação Squid
# apt-get update ; apt-get install squid (ao instalar o Squid a porta TCP 3128 ja estara aberta. Contudo, ainda nao esta pronto para uso, pois [e necessario modificar o arquivo de configuracao. Caso se configure um browser para usar este Proxy para acessar a Internet, uma mensagem de "Access Denied" aparecera)
ARQUIVO DE CONFIGURACAO (OPCOES NECESSARIAS)
# vi /etc/squid/squid.conf
http_port [IP:]PORT (essa linha alem de indicar qual a porta TCP que o Squid vai trabalhar (PORT), tambem pode especificar qual o IP (interface de rede. VEJA OS EXEMPLOS ABAIXO)
- http_port 3128 (essa linha ja existira por padrao e indica qual a porta TCP que o Squid vai trabalhar (3128)r
- http_port 172.16.200.254:3128 (esta linha alem de indicar qual a porta TCP que o Squid vai trabalhar (3128), tambem pode especificar qual o IP/Interface de Rede (72.16.200.254))
- http_port 172.16.200.254:3128 transparent (o mesmo que a linha anterior, a não ser pelo fato que o Squid trabalhara transparentemente nao necessitando mudar configuraçoes nos browser dos clientes. Os clientes passaram pelo proxy de modo transparente com uma ajudinha o IPTABLES ;-). Veja nas observacoes a seguir. Caso o Squid esteja se autenticando no AD (Active Directory) nao se pode usar essa opcao "transparent")
Obs1: ao trabalhar no modo transparente, os clientes serão redirecionados da porta 80 para a 3128 do proxy. Para isso, é necessário adicionar uma regra "iptables" no computador proxy Squid: # iptables -t nat -A PREROUTING -i eth1 -s 172.16.200.0/24 -d 0/0 -p tcp --dport 80 -j REDIRECT --to-ports 3128 . Esta regra redireciona para porta 3128 todo o tráfego que entrar pela interface de rede "eth1", for proveniente da subrede "172.16.200.0/24", usar o protocolo "TCP" com a porta de destino "80".
Obs2: não se pode usar o modo transparente quando o proxy faz autênticação em um serviço de diretório. Também, a transparência não funciona com HTTPs (porta tcp 443) e FTP (porta 20 e 21). Então, quando for usar autênticação, os protocolo HTTPs e FTP não devem usar proxy transparente. O que acontece na prática e que mesmo fazendo o redirecionamento que o "iptables", quando o tráfego 443, 20 e 21 sai do proxy, saem com destino a porta 80.
Obs3: podem existir varias linhas "http_port" especificando IPs e/ou portas diferentes. Assim, deixa as configuracoes de IP e Porta muito maleaveis, podendo adapta-las as mais diversas situacoes.
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
E INSIRA AS SEGUINTES LINHAS ABAIXO:
acl LAN src 172.16.200.0/24 (cria uma "ACL" chamada "LAN" cuja subrede de origem é 172.16.200.0/24. Esse endereco de subrede [e somente de exemplo e deve ser substituido pelo correspodente da sua rede. O "LAN" poderia ser outra coisa como "REDE" ou "MINHA_REDE" e serve para identificar a ACL criada)
http_access allow LAN (permite (allow) qualquer acesso da rede que esta definida na "ACL" chamada "LAN")
Salve e Sai do arquivo
# /etc/init.d/squid reload (depois de realizar as configurações iniciais do Squid utilize esse comando para validar as mesmas)
PRONTO, AGORA JA SE PODE NAVEGAR NA INTERNET USANDO O SQUID.
Continuando (OPCOES AVANCADAS):
acl YOUTUBE url_regex youtube.com (cria uma acl - access control list - com o nome de YOUTUBE, cuja a url_regex - expressão regular que será verificada na URL será "youtube.com". Se ainda não entendeu o que significa, leia a linha abaixo)
cache deny YOUTUBE (não fará cache, ou seja, não armazenará objetos da "acl" chamada "YOUTUBE", conforme linha anterior. Em outras palavras, nunca fará cache do domínio "youtube.com")
cache_mem X MB (define a quantidade de memória RAM que o Squid usará para os objetos mais usados. Em outras palavras, especifica o tamanho do cache de objetos em memória RAM. Perceba que esse parâmentro não especifica o tamanho máximo do processo em memória, mas sim especifica somente um dos pontos de uso da memória pelo Squid, pois a memória é usada pelo Squid para outros própositos também. Ex: cache_mem 200 MB)
cache_swap_low 90 (valor percentual de 0 a 100 para quando o cache em disco do Squid passar 90% de utilização, o excesso vai sendo excluído)
cache_swap_high 95 (se mesmo com o parâmentro anterior o cache continuar crescendo e chegar à 95%, o excesso vai sendo excluído de uma maneira mais agressiva. Valor percentual de 0 a 100)
minimum_object_size X KB (tamanho mínimo de um objeto que o Squid poderá armazenar no cache do disco. O valor "0" significa que não existe valor mínimo. Ex: mínimum_object_size 0 KB)
maximum_object_size X KB (tamanho máximo de um objeto que o Squid poderá armazenar no cache do disco. Objeto menores melhoram o desempenho desse cache. Ex: maximum_object_size 16384 KB)
maximum_object_size_in_memory X KB (tamanho máximo de um objeto que o Squid poderá armazenar no cache da memória RAM. Ex: maximum_object_size_in_memory 512 KB)
cache_dir type directory size level1 level2 options (o type especifica o tipo/formato do sistema de armazenamento do cache em disco, geralmente "ufs". O directory mostra onde deve ficar o diretório desse cache. O size especifica o tamanho máximo em MegaBytes. O level1 define quantidade de diretórios de primeiro nível. O level2 define a quantidade de diretórios de segundo nível, ou seja, quantidade de subdiretórios dentro de cada diretório do primeiro nível. E options são as opções que informam o número de requisições de I/O e mensagens que podem ficar na fila de I/O e mensagens do Squid, geralmente não se especifica essas opções, usando assim os valores padrão I/O=64 e Mensagens=72. Ex: cache_dir ufs /var/spool/squid 15360 16 256. Esse exemplo especifica que o cache do Squid será armazenado em "/var/spool/squid", terá 15360 MB, 16 diretórios e dentro destes terá mais 256 subdiretórios)
emulate_httpd_log off (formato do log. Se trocar o "off" por "on", o log ficará em um formato mais compreensível e não mais usará o padrão que é do Squid. Mas ferramentas que analizam os logs gerados pelo Squid, não consiguirão analizá-lo que é o caso do SARG)
access_log /var/log/squid/access.log squid (especifica onde fica o arquivo de log do Squid. Esse arquivo é muito utilizado com o comando "tail -f /var/log/squid/access.log" para solucionar problemas e para a geração de relatórios com o SARG. O parâmetro "squid" diz que o formato dos logs será o padrão do Squid)
cache_mgr [email protected] (especifica o e-mail do administrador do Squid caso o cache pare funcionar. Nas mensagens de erro do Squid, é esse e-mail que aparecerá como contato para administrador do Squid. As mensagens de erro ficam em "/usr/share/squid/errors/")
mail_from [email protected] (especifica o e-mail que aparecerá no campo "From" quando o Squid enviar um e-mail. O padrão é "squid")
httpd_suppress_version_string off (muito importante setá-lo para "on", pois com isso, as mensagens de erro do Squid não mostrarão a sua versão. Questão de segurança)
visible_hostname (muito importante setá-lo para algo que não forneça informações confidenciais. Por padrão é colocar no nome de host do Squid que pode ser obtido com o comando "hostname". Questão de segurança mudar o padrão)
error_directory /usr/share/squid/errors/Portuguese (além de especificar onde estão as mensagens de erro do Squid, também se pode escolher o idioma)
dns_nameservers (especifica os DNSs que o Squid utilizará para navegar na Internet. Um exemplo especificando dois DNSs seria "dns_nameservers 10.0.0.1 192.172.0.4". Caso essa opção não esteja configurada, o Squid usará os DNSs que estão dentro de "/etc/resolv.conf")
connect_timeout time unit (fecha uma conexão após um tempo determinado. Ex: connect_timeout 2 hours)
peer_connect_timeout ()
read_timeout ()
request_timeout ()
forward_timeout ()
persistent_request_timeout ()
client_lifetime time unit (tempo de permanencia que um cliente pode ficar conectado no processo do cache do Squid. É uma maneira do Squid se proteger de clientes que não fecham de maneira correta a conexão. Visa evitar um número excessivo de sockets abertos no estado CLOSE_WAIT. É interessante ajustar primeiro as opções "read_timeout", "request_timeout", "pconn_timeout" e "quick_abort". Ex: client_lifetime 30 minutes)
pconn_timeout ()
ident_timeout ()
shutdown_lifetimeout ()
snmp_port ()
snmp_access ()
snmp_incoming_address ()
snmp_outgoing_address ()
ignore_expect_100 on (usado para resolver alguns problemas relacionado a 417 error - 100-continue header present in the request - The request failed with HTTP status 417: Expectation failed.:. Habilitar essa opção é uma violação do protocolo HTTP, mas alguns clientes precisam disso)
()
()
Obs: o diretório que especifica as mensagens de erro do Squid fica em "/usr/share/squid/errors/". Dentro dele se tem vários idiomas que são configurados na opção "error_directory" dentro do arquivo de configuração do Squid (squid.conf). Valendo ressaltar que as mensagens são customizáveis.
Continuando:
acl all src 0.0.0.0/0.0.0.0 (cria uma "acl" chamada "all" cuja subrede e máscara é qualquer um. Esta linha já existe por padrão)
acl localhost src 127.0.0.1/255.255.255.255 (cria uma "acl" chamada "localhost" cuja o endereço IP de origem é "127.0.0.1" e a máscara é "255.255.255.255". Esta linha já existe por padrão)
acl SEXO url_regex "/etc/squid/deny/sexo.txt" (cria uma "acl" chamada "SEXO", cuja expressão regular procurada na URL estará dentro do arquivo "/etc/squid/deny/sexo.txt".
Obs: As expressões regulares, dentro de arquivos, devem ficar uma por linha. Além disso, elas devem diferenciar maiúsculas, minúsculas, com acento e sem acentos, pois sites de busca como o google as diferenciam. Ex: se no arquivo "sexo.txt" tiver a palavra "porno", que deve ser proibida, e no campo de busca do google for digitado "Porno", a busca não será bloqueada pelo proxy ;-(
acl SEXO url_regex -i "/etc/squid/deny/sexo.txt" (idem, mas foi colocado um -"i" que resolve o problema da observação anterior. O -"i" informa que a expressão regular procurada é case-insensitive, ou seja, não importará se a letra/palavra está minúscula ou maiúscula).
acl GAMES url_regex emuladores playstation xbox (cria uma "acl" chamada "GAMES", cuja a expressão regular procurada na URL será "emuladores playstation xbox")
acl CHAT url_regex chat patepapo orkut (cria uma "acl" chamada "CHAT", cuja a expressão regular procurada na URL será "chat patepapo orkut")
acl EXPEDIENTE1 time MTWHF 08:00-12:00 (cria uma "acl" chamada "EXPEDIENTE1" que valerá somente de "Segunda à Sexta-Feira" das "08:00 às 12:00". As letras "MTWHF" significam Segunda, Terça, Quarta, Quinta, Sexta-Feira, respectivamente)
acl EXPEDIENTE2 time MTWHF 14:00-18:00 (cria uma "acl" chamada "EXPEDIENTE2" que valerá somente de "Segunda à Sexta-Feira" das "14:00 às 18:00")
Obs: sempre que trabalhar com dias da semana e horários, deve sempre verificar a exatidão dos mesmos com o comando "date". O ideal é verificar se o equipamento está sincronizado com algum servidor de hora (comando ntpdate) e o fuso horário está correto (comando tz-brasil).
Continuando:
http_access allow localhost (permite qualquer tipo de acesso realizada pela máquina local - Squid. Esta linha já existe por padrão)
http_access deny LAN SEXO (nega o acesso http da LAN, mas somente das expressões regulares definidas na ACL SEXO)
http_access deny LAN GAMES (nega o acesso http da LAN, mas somente das expressões regulares definidas na ACL GAMES)
http_access deny LAN CHAT EXPEDIENTE1 (nega o acesso http da LAN, somente das expressões regulares definidas na ACL CHAT e que estiverem compreendidas dentro do horário definida na ACL EXPEDIENTE1)
http_access deny LAN CHAT EXPEDIENTE2 (nega o acesso http da LAN, somente das expressões regulares definidas na ACL CHAT e que estiverem compreendidas dentro do horário definida na ACL EXPEDIENTE2)
http_access deny all (nega qualquer todos os tipos de acessos http, menos os acessos definidos nas linha anteriores. Esta linha já existe por padrão)
cache_mgr webmaster (e-mail do administrador. Esta linha já existe por padrão. Pode-se substituir "webmaster" por "[email protected]")
Salve e Sai do arquivo
Criando o arquivo sexo.txt
# mkdir /etc/squid/deny
vi /etc/squid/deny/sexo.txt
Obs: As expressões regulares, dentro de arquivos, devem ficar uma por linha. Além disso, elas devem diferenciar maiúsculas, minúsculas, com acento e sem acentos, pois sites de busca como o google as diferenciam. Ex: se no arquivo "sexo.txt" tiver a palavra "porno", que deve ser proibida, e no campo de busca do google for digitado "Porno", a busca não será bloqueada pelo proxy ;-(
Restartando o serviço do Squid
# squid -z (este comando é necessário, pois cria os diretórios swaps definidos na linha de configuração chamada "cache_dir". Caso este comando não seja utilizado, ao tentar startar o serviço do Squid, não será aperta a porta TCP de comunicação que geralmente é a 3128. No entando, ao startar o Squid, não aparecerão erros e aparentemente você consiguirá. Use o comando "netstat -tunap | grep 3128" para saber se o Squid conseguiu abrir a porta de comunicação.)
# /etc/init.d/squid restart (depois de realizar todas as configurações iniciais do squid ou quando houver necessidade utilize esse cumando)
Na maioria das vezes não é necessário restartar o serviço do Squid, basta utilizar o comando a seguir:
# squid -k reconfigure (adiciona as novas configurações feitas no arquivo squid.conf, sem restartá-lo)
Dica: se deve dar preferência ao comando "squid -k reconfigure" ao invés do "/etc/init.d/squid restart", depois de realizar reconfigurações nos arquivos de configuração do squid, pois se evita que a Internet fique indisponível durante o restart.
COMANDOS USUAIS
# /etc/init.d/squid start (colocar o daemon do Squid no ar, abrindo a porta para conexoes)
# squid (idem)
DEBUG
# squid -s (o Squid praticamente nao gera muito logs de erro. Para habilitar isso execute esse comando e monitore o /var/log/syslog para ver que a quantidade de informacoes aumentou)
SQUID + AD (ACTIVE DIRECTORY)
Nao aceita proxy transparente.
OPCAO 1: PARA AD WINDOWS 2003 ou 2008 (autenticacao automatico/sem popup) -
DNS CLIENT
# /etc/resolv.conf (inserir o servidor AD com DNS e inserir as entradas search e domain, especificando o domínio do configurado no AD)
# cp -p /etc/resolv.conf /etc/resolv.conf.default (backup)
domain example.com ()
search example.com ()
nameserver AD/DNS_SERVER_IP_ADDRESS1 (IP do AD/DNS que ira fazer a integracao com o Squid)
nameserver DNS_SERVER_IP_ADDRESS2 (opcional 1. IP de DNS qualquer. Pode ser do OpenDNS. Importante caso o anterior falhe)
nameserver DNS_SERVER_IP_ADDRESS3 (opcional 2. IP de DNS qualquer. Pode ser do OpenDNS. Importante caso o anterior falhe)
HOSTS
# /etc/hosts ()
# cp -p /etc/hosts /etc/hosts.default (backup)
AD_IP_ADDRESS AD_HOSTNAME.example.com AD_HOSTNAME (IP e hostname do AD/DNS (Active Directory))
AD_IP_ADDRESS example.com AD_HOSTNAME (IP e dominio do AD/DNS (Active Directory))
Obs: essas configuracoes acima servem para acelerar a integracao Squid + AD, pois haverao muitas consultas DNS. Assim, em vez de ficar perguntando toda hora sobre o IP do AD, ele lera nesse arquivo. Importante fazer esse tipo de configuracao. ()
NTPDATE
# /usr/bin/apt-get install ntpdate (sincronizacao da hora)
# ntpdate AD/DNS_SERVER_IP_ADDRESS1 (o Squid deve estar com a hora sincronizada com a do AD. É importante colocar o ntpdate no CRON)
# env EDITOR=vi crontab -e ()
* */2 * * * /usr/sbin/ntpdate AD/DNS_SERVER_IP_ADDRESS1 (faz a sincronizacao da hora com o AD a cada 2 horas)
KERBEROS
# apt-get install krb5-config krb5-user (alguns dialogs/telas poderao aparecer. Para Kerberos Server (KDC) digite "AD_HOSTNAME" e para Administrative (admin_server) digite "AD_HOSTNAME")
# cp -p /etc/krb5.conf /etc/krb5.conf.default (backup)
# vi /etc/krb5.conf ()
[libdefaults] ()
default_realm = EXAMPLE.COM (dominio do AD em letras maiusculas)
[realms] ()
EXAMPLE.COM = { (dominio do AD em letras maiuscula. Acrescente essas linhas especificas para o EXAMPLE.COM, as outras linhas já existentes pode deixar sem modificar ou apagar)
kdc = AD_HOSTNAME (hostname do AD em letras minusculas)
admin_server = AD_HOSTNAME (hostname do AD em letras minusculas)
default_domain = example.com (dominio do AD em letras minusculas)
} ()
# kinit [email protected] (esse comando [e somente um teste. Digite o domínio com as letras maiúsculas. Ira pedir a senha do usuario. Se nao aparecer mensagens de erro [e porque os procedimentos ate aqui estao corretos. Digite uma senha errada para verificar se aparece alguma falha de autenticacao)
# kinit AD_USER (idem)
# klist ()
WINBIND
# apt-get install winbind ()
# cp -p /etc/init.d/winbind /etc/init.d/winbind.default (backup)
# vi /etc/init.d/winbind ()
chgrp proxy $PIDDIR/winbindd_privileged/ || return 1 (essa linha ja existe. Contudo, [e necessario colocar o "proxy" como grupo do diretorio "$PIDDIR/winbindd_privileged/")
# vi /etc/nsswitch.conf ()
passwd: compat winbind ()
group: compat winbind (o resto do arquivo nao deve ser alterado)
SAMBA
# apt-get install samba smbfs smbclient (alguns dialogs/telas poderao aparecer. Para WORKGROUP coloque o dominio sem os sinais de ponto final. Para o WINS coloque "NO")
# cp -p /etc/samba/smb.conf /etc/samba/smb.conf.default ()
# vi /etc/samba/smb.conf ()
workgroup = EXAMPLE (dominio sem os sinais de ponto final)
security = ADS (ADS em letras maiusculas)
realm = EXAMPLE.COM (dominio com letras maiusculas)
idmap uid = 10000-20000 (descomentar)
idmap gid = 10000-20000 (descomentar)
template shell = /bin/bash (descomentar)
winbind enum groups = yes (descomentar. Esta linha e a proxima nao sao necessarias para que o compartilhamento/integracao funcione. Em alguns casos, elas sao necessarias para que programas funcionem corretamente. Elas nao devem ser habilitadas em grandes organizacoes, pois podera influenciar na performance da rede. Para que apareca os usuarios do AD com o comando "getent passwd" ou grupos "getent group" deve-se descomentar essas linhas)
winbind enum users = yes (descomentar)
winbind use default domain = yes (essa opção faz com que ao digitar o comando "wbinfo -u" o domínio não apareça. Isso é importante, pois ao criar ACLs não será necessario digitar o "dominio\user", mas somente "user")
RESTANTADO OS SERVICO
# /etc/init.d/samba restart ()
# /etc/init.d/winbind restart ()
INSERIR O LINUX NO DOMINO DO AD
# net ads join -U administrator (inseri esse Linux no dominio do AD. O "administrator" [e um usuario no AD com poderes administrativo (Domain Admin). Verificar la no AD se realmente isso aconteceu)
TESTAR SE TUDO FUNCIONOU
# wbinfo -u (mostra uma lista com todos os usuarios da AD. Dependendo da quantidade, pode demorar muito e impactar na performance da rede)
# wbinfo -g (mostra uma lista com todos os grupos da AD. Dependendo da quantidade, pode demorar muito e impactar na performance da rede)
# wbinfo -t (checa se a chave secreta est[a OK)
Obs: se em qualquer dos comandos acima aparecer um erro "Error looking up domain users" ou "checking the trust secret via RPC calls failed", faca um restarte no servico do Winbind. ()
# net ads info ()
# net ads status ()
# net ads info ()
# getent passwd ()
# getent group ()
# testparm (testa se o arquivo de configuracao do Samba est[a OK)
# kinit [email protected] (esse comando [e somente um teste. Digite o domínio com as letras maiúsculas. Ira pedir a senha do usuario. Se nao aparecer mensagens de erro [e porque os procedimentos ate aqui estao corretos. Digite uma senha errada para verificar se aparece alguma falha de autenticacao)
# kinit AD_USER (idem)
# klist ()
SQUID
# wbinfo -u > /etc/squid/msntauth.allowusers (cria um arquivo com todos os usuario do AD)
# vi /etc/squid/squid.conf
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp ()
auth_param ntlm children 20 ()
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic ()
auth_param basic children 20 ()
auth_param basic realm Squid proxy-caching web server ()
auth_param basic credentialsttl 2 hours ()
Obs: com essas opções acima é usando o binário " ntlm_auth" do Samba. Ele tem a diferença que nos logs do Squid (/var/log/squid/access.log) o usário aparece no padrão "user". Assim, ao se bloquear ou liberar por usuário se deve usar esse padrão.
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS (procure por esta linha e insira as linhas abaixo)
acl PASSWORD proxy_auth REQUIRED (faz com que todos que usarem a ACL chamada PASSWORD necessite de autenticacoa)
acl ALLOWUSERS proxy_auth "/etc/squid/msntauth.allowusers" (arquivo que contem todos os usuarios do AD que podem utilizar o Squid via autenticacao. Essa usuario sao conseguidos da seguinte forma: "wbinfo -u > /etc/squid/msntauth.allowusers")
acl DENYUSERS proxy_auth "/etc/squid/msntauth.denyusers" (OPCIONAL, pois os usuarios que nao estiverem no arquivo da linha anterior nao conseguirao utilizar o Squid. Arquivo que contem os usuarios do AD que NAO podem utilizar o Squid via autenticacao)
acl LAN src SUBREDE_LAN (cria uma ACL chamada LAN que tem o endereco de subrede da LAN. O "SUBREDE_LAN" deve ser substituido pelo endereco de subrede da LAN. Ex: 192.168.1.0/24)
http_access allow LAN PASSWORD ALLOWUSERS (permite acesso ao SQUID para navegar na Internet para os usuarios que estejam dentro da ACL "ALLOWUSERS", que estejam autenticados pela ACL "PASSWORD" e que estejam dentro da subrede definida na ACL "LAN")
http_access deny LAN PASSWORD DENYUSERS (OPCIONAL, pois os usuarios que nao estiverem na ACL "ALLOWUSERS" da linha anterior nao conseguirao utilizar o Squid. Proibe o acesso ao SQUID para navegar na Internet para os usuarios que estejam dentro da ACL "ALLOWUSERS", que estejam autenticados pela ACL "PASSWORD" e que estejam dentro da subrede definida na ACL "LAN")
# /etc/init.d/squid restart ()
NAO EXECUTE ESSE COMANDO (ELE REMOVE O LINUX NO DOMINO DO AD)
# net ads leave (sai do dominio. Pode precisar da opcao -U)
OPCAO 2: SÓ PARA AD WINDOWS 2003 (autenticacao automatico/sem popup)
DNS CLIENT
# /etc/resolv.conf (inserir o servidor AD com DNS e inserir as entradas search e domain, especificando o domínio do configurado no AD)
# cp -p /etc/resolv.conf /etc/resolv.conf.default (backup)
domain example.com ()
search example.com ()
nameserver AD/DNS_SERVER_IP_ADDRESS1 (IP do AD/DNS que ira fazer a integracao com o Squid)
nameserver DNS_SERVER_IP_ADDRESS2 (opcional 1. IP de DNS qualquer. Pode ser do OpenDNS. Importante caso o anterior falhe)
nameserver DNS_SERVER_IP_ADDRESS3 (opcional 2. IP de DNS qualquer. Pode ser do OpenDNS. Importante caso o anterior falhe)
HOSTS
# /etc/hosts ()
# cp -p /etc/hosts /etc/hosts.default (backup)
AD_IP_ADDRESS AD_HOSTNAME.example.com AD_HOSTNAME (IP e hostname do AD/DNS (Active Directory))
AD_IP_ADDRESS example.com AD_HOSTNAME (IP e dominio do AD/DNS (Active Directory))
Obs: essas configuracoes acima servem para acelerar a integracao Squid + AD, pois haverao muitas consultas DNS. Assim, em vez de ficar perguntando toda hora sobre o IP do AD, ele lera nesse arquivo. Importante fazer esse tipo de configuracao. ()
NTPDATE
# /usr/bin/apt-get install ntpdate (sincronizacao da hora)
# ntpdate AD/DNS_SERVER_IP_ADDRESS1 (o Squid deve estar com a hora sincronizada com a do AD. É importante colocar o ntpdate no CRON)
# env EDITOR=vi crontab -e ()
* */2 * * * /usr/sbin/ntpdate AD/DNS_SERVER_IP_ADDRESS1 (faz a sincronizacao da hora com o AD a cada 2 horas)
KERBEROS
# apt-get install krb5-config krb5-user (alguns dialogs/telas poderao aparecer. Para Kerberos Server (KDC) digite "AD_HOSTNAME" e para Administrative (admin_server) digite "AD_HOSTNAME")
# cp -p /etc/krb5.conf /etc/krb5.conf.default (backup)
# vi /etc/krb5.conf ()
[libdefaults] ()
default_realm = EXAMPLE.COM (dominio do AD em letras maiusculas)
[realms] ()
EXAMPLE.COM = { (dominio do AD em letras maiuscula. Acrescente essas linhas especificas para o EXAMPLE.COM, as outras linhas já existentes pode deixar sem modificar ou apagar)
kdc = AD_HOSTNAME (hostname do AD em letras minusculas)
admin_server = AD_HOSTNAME (hostname do AD em letras minusculas)
default_domain = example.com (dominio do AD em letras minusculas)
} ()
# kinit [email protected] (esse comando [e somente um teste. Digite o domínio com as letras maiúsculas. Ira pedir a senha do usuario. Se nao aparecer mensagens de erro [e porque os procedimentos ate aqui estao corretos. Digite uma senha errada para verificar se aparece alguma falha de autenticacao)
# kinit AD_USER (idem)
# klist ()
WINBIND
# apt-get install winbind ()
# cp -p /etc/init.d/winbind /etc/init.d/winbind.default (backup)
# vi /etc/init.d/winbind ()
chgrp proxy $PIDDIR/winbindd_privileged/ || return 1 (essa linha ja existe. Contudo, [e necessario colocar o "proxy" como grupo do diretorio "$PIDDIR/winbindd_privileged/")
# vi /etc/nsswitch.conf ()
passwd: compat winbind ()
group: compat winbind (o resto do arquivo nao deve ser alterado)
SAMBA
# apt-get install samba smbfs smbclient (alguns dialogs/telas poderao aparecer. Para WORKGROUP coloque o dominio sem os sinais de ponto final. Para o WINS coloque "NO")
# cp -p /etc/samba/smb.conf /etc/samba/smb.conf.default ()
# vi /etc/samba/smb.conf ()
workgroup = EXAMPLE (dominio sem os sinais de ponto final)
security = ADS (ADS em letras maiusculas)
realm = EXAMPLE.COM (dominio com letras maiusculas)
idmap uid = 10000-20000 (descomentar)
idmap gid = 10000-20000 (descomentar)
template shell = /bin/bash (descomentar)
winbind enum groups = yes (descomentar. Esta linha e a proxima nao sao necessarias para que o compartilhamento/integracao funcione. Em alguns casos, elas sao necessarias para que programas funcionem corretamente. Elas nao devem ser habilitadas em grandes organizacoes, pois podera influenciar na performance da rede. Para que apareca os usuarios do AD com o comando "getent passwd" ou grupos "getent group" deve-se descomentar essas linhas)
winbind enum users = yes (descomentar)
RESTANTADO OS SERVICO
# /etc/init.d/samba restart ()
# /etc/init.d/winbind restart ()
INSERIR O LINUX NO DOMINO DO AD
# net ads join -U administrator (inseri esse Linux no dominio do AD. O "administrator" [e um usuario no AD com poderes administrativo (Domain Admin). Verificar la no AD se realmente isso aconteceu)
TESTAR SE TUDO FUNCIONOU
# wbinfo -u (mostra uma lista com todos os usuarios da AD. Dependendo da quantidade, pode demorar muito e impactar na performance da rede)
# wbinfo -g (mostra uma lista com todos os grupos da AD. Dependendo da quantidade, pode demorar muito e impactar na performance da rede)
# wbinfo -t (checa se a chave secreta est[a OK)
Obs: se em qualquer dos comandos acima aparecer um erro "Error looking up domain users" ou "checking the trust secret via RPC calls failed", faca um restarte no servico do Winbind. ()
# net ads info ()
# net ads status ()
# net ads info ()
# getent passwd ()
# getent group ()
# testparm (testa se o arquivo de configuracao do Samba est[a OK)
# kinit [email protected] (esse comando [e somente um teste. Digite o domínio com as letras maiúsculas. Ira pedir a senha do usuario. Se nao aparecer mensagens de erro [e porque os procedimentos ate aqui estao corretos. Digite uma senha errada para verificar se aparece alguma falha de autenticacao)
# kinit AD_USER (idem)
# klist ()
SQUID
# wbinfo -u > /etc/squid/msntauth.allowusers (cria um arquivo com todos os usuario do AD)
# vi /etc/squid/squid.conf
auth_param ntlm program /usr/lib/squid/ntlm_auth example/ad_hostname (substitua o "example" pelo dominio sem os sinais de ponto final e tambem substitua o "ad_hostname" pelo hostname do AD)
auth_param ntlm children 20 ()
auth_param basic program /usr/lib/squid/ntlm_auth example/ad_hostname (substitua o "example" pelo dominio sem os sinais de ponto final e tambem substitua o "ad_hostname" pelo hostname do AD)
auth_param basic children 20 ()
auth_param basic realm Squid proxy-caching web server ()
auth_param basic credentialsttl 2 hours ()
Obs: com essas opções acima é usando o binário " ntlm_auth" do Squid. Ele tem a diferença que nos logs do Squid (/var/log/squid/access.log) o usário aparece no padrão "domain\user". Assim, ao se bloquear ou liberar por usuário se deve usar esse padrão.
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS (procure por esta linha e insira as linhas abaixo)
acl PASSWORD proxy_auth REQUIRED (faz com que todos que usarem a ACL chamada PASSWORD necessite de autenticacoa)
acl ALLOWUSERS proxy_auth "/etc/squid/msntauth.allowusers" (arquivo que contem todos os usuarios do AD que podem utilizar o Squid via autenticacao. Essa usuario sao conseguidos da seguinte forma: "wbinfo -u > /etc/squid/msntauth.allowusers")
acl DENYUSERS proxy_auth "/etc/squid/msntauth.denyusers" (OPCIONAL, pois os usuarios que nao estiverem no arquivo da linha anterior nao conseguirao utilizar o Squid. Arquivo que contem os usuarios do AD que NAO podem utilizar o Squid via autenticacao)
acl LAN src SUBREDE_LAN (cria uma ACL chamada LAN que tem o endereco de subrede da LAN. O "SUBREDE_LAN" deve ser substituido pelo endereco de subrede da LAN. Ex: 192.168.1.0/24)
http_access allow LAN PASSWORD ALLOWUSERS (permite acesso ao SQUID para navegar na Internet para os usuarios que estejam dentro da ACL "ALLOWUSERS", que estejam autenticados pela ACL "PASSWORD" e que estejam dentro da subrede definida na ACL "LAN")
http_access deny LAN PASSWORD DENYUSERS (OPCIONAL, pois os usuarios que nao estiverem na ACL "ALLOWUSERS" da linha anterior nao conseguirao utilizar o Squid. Proibe o acesso ao SQUID para navegar na Internet para os usuarios que estejam dentro da ACL "ALLOWUSERS", que estejam autenticados pela ACL "PASSWORD" e que estejam dentro da subrede definida na ACL "LAN")
# /etc/init.d/squid restart ()
NAO EXECUTE ESSE COMANDO (ELE REMOVE O LINUX NO DOMINO DO AD)
# net ads leave (sai do dominio. Pode precisar da opcao -U)
OPCAO3: PARA AD WINDOWS 2003 ou 2008 (autenticacao manual/com popup)
# vi /etc/squid/squid.conf
auth_param basic program /usr/lib/squid/msnt_auth ()
auth_param basic children 5 ()
auth_param basic realm Squid proxy-caching web server ()
auth_param basic credentialsttl 2 hours ()
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS (procure por esta linha e insira as linhas abaixo)
acl PASSWORD proxy_auth REQUIRED (faz com que todos que usarem a ACL chamada PASSWORD necessite de autenticacoa)
acl ALLOWUSERS proxy_auth "/etc/squid/msntauth.allowusers" (arquivo que contem todos os usuarios do AD que podem utilizar o Squid via autenticacao. Essa usuario precisarao ser obtidos la do AD)
acl DENYUSERS proxy_auth "/etc/squid/msntauth.denyusers" (OPCIONAL, pois os usuarios que nao estiverem no arquivo da linha anterior nao conseguirao utilizar o Squid. Arquivo que contem os usuarios do AD que NAO podem utilizar o Squid via autenticacao)
acl LAN src SUBREDE_LAN (cria uma ACL chamada LAN que tem o endereco de subrede da LAN. O "SUBREDE_LAN" deve ser substituido pelo endereco de subrede da LAN. Ex: 192.168.1.0/24)
http_access allow LAN PASSWORD ALLOWUSERS (permite acesso ao SQUID para navegar na Internet para os usuarios que estejam dentro da ACL "ALLOWUSERS", que estejam autenticados pela ACL "PASSWORD" e que estejam dentro da subrede definida na ACL "LAN")
http_access deny LAN PASSWORD DENYUSERS (OPCIONAL, pois os usuarios que nao estiverem na ACL "ALLOWUSERS" da linha anterior nao conseguirao utilizar o Squid. Proibe o acesso ao SQUID para navegar na Internet para os usuarios que estejam dentro da ACL "ALLOWUSERS", que estejam autenticados pela ACL "PASSWORD" e que estejam dentro da subrede definida na ACL "LAN")
# vi /etc/squid/msntauth.conf ()
server ad_hostname ad_hostname example.com ()
# /etc/init.d/squid restart ()
OPCAO4: PARA AD WINDOWS 2003 ou 2008 (autenticacao manual/com popup)
# vi /etc/squid/squid.conf
auth_param basic program /usr/lib/squid/msnt_auth ()
auth_param basic children 5 ()
auth_param basic realm Squid proxy-caching web server ()
auth_param basic credentialsttl 2 hours ()
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS (procure por esta linha e insira as linhas abaixo)
acl PASSWORD proxy_auth REQUIRED (faz com que todos que usarem a ACL chamada PASSWORD necessite de autenticacoa)
acl LAN src SUBREDE_LAN (cria uma ACL chamada LAN que tem o endereco de subrede da LAN. O "SUBREDE_LAN" deve ser substituido pelo endereco de subrede da LAN. Ex: 192.168.1.0/24)
http_access allow LAN PASSWORD (permite acesso ao SQUID para navegar na Internet para os usuarios que estejam autenticados pela ACL "PASSWORD")
# vi /etc/squid/msntauth.conf ()
server ad_hostname ad_hostname example.com ()
ALLOWUSERS /etc/squid/msntauth.allowusers (arquivo que contem todos os usuarios do AD que podem utilizar o Squid via autenticacao. Essa usuario precisarao ser obtidos la do AD)
DENYUSERS /etc/squid/msntauth.denyusers (arquivo que contem os usuarios do AD que NAO podem utilizar o Squid via autenticacao)
# /etc/init.d/squid restart ()
OPCAO5: PARA AD WINDOWS 2003 ou 2008 (autenticacao manual/com popup)
# vi /etc/squid/squid.conf
auth_param basic program /usr/lib/squid/msnt_auth ()
auth_param basic children 5 ()
auth_param basic realm Squid proxy-caching web server ()
auth_param basic credentialsttl 2 hours ()
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS (procure por esta linha e insira as linhas abaixo)
acl PASSWORD proxy_auth REQUIRED (faz com que todos que usarem a ACL chamada PASSWORD necessite de autenticacoa)
acl LAN src SUBREDE_LAN (cria uma ACL chamada LAN que tem o endereco de subrede da LAN. O "SUBREDE_LAN" deve ser substituido pelo endereco de subrede da LAN. Ex: 192.168.1.0/24)
http_access allow LAN PASSWORD (permite acesso ao SQUID para navegar na Internet para os usuarios que estejam autenticados pela ACL "PASSWORD")
# vi /etc/squid/msntauth.conf ()
server ad_hostname ad_hostname example.com ()
# /etc/init.d/squid restart ()
()
()
()
O CLIENTE (BROWSERS)
Até o momento foi configurada a parte do proxy Squid, mas agora será mostrado como configurar um cliente. O cliente que será configurado é o Firefox/Iceweasel. No entando, outros browsers como Konqueror, Internet Explorer etc seguem o mesmo raciocínio:
Abra o Firefox/Iceweasel (conforme figura a seguir)

Clique no menu "Edit - Preferences" (uma janela abrirá)
Clique na aba "Network" e no botão "Settings" (a seguinte janela aparecerá)

Clique "Manual proxy configuration" e digite em "HTTP Proxy" e em "Port" o endereço IP e porta TCP do proxy Squid, respectivamente
Clique na opção "Use this proxy server for all protocols"
Clique em "OK" em "Close"
Pronto o cliente já está configurado.
A seguir é mostrado como configurar um terminal para usar o proxy. Útil na hora de usar browsers no modo texto como W3M, LINKS, ELINKS, LYNX etc:
# vi /etc/bash.bashrc (digite no final do arquivo a linha a seguir)
export http_proxy=http://IP:Porta/ (digite no lugar de "IP:Porta", o endereço IP e Porta do proxy)
Salve e Saia do arquivo (mesmo reiniciando o sistema o "export" não se perderá)
# logout
Efetue login novamente (também em vez de efetuar "logout", podia executar no terminal o "export" acima)
Desvantagem: Esse "export" sobrepõe configurações de outros serviços como a porta do "apt-cacher".