Squid autenticando no OpenLDAP utilizando o CentOS 6.3
E ai galera, aqui eu vou abordar a configuração do Squid no CentOS 6.3 autenticando no AD, e vamos instalar o lightsquid um gerador de relatórios show de bola.
Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialcentos6_en para que não falte nenhum pacote ou configuração.
- Endereço Ip do Proxy: 192.168.1.4
- Endereço Ip do OpenLDAP PDC: 192.168.1.200
- Domínio utilizado: douglasqsantos.com.br
- Habilitar o dns do Windows a fazer atualizações seguras e não seguras, pois vamos inserir o centos no domínio.
Grupos que precisam ser criados no OpenLDAP, não esqueça de inserir os usuários nos grupos ;)
- proxy-ti
- proxy-diretoria
- proxy-gerencia
- proxy-administracao
- proxy-logistica
Vamos fazer um update dos repositórios e vamos fazer um upgrade do sistema
yum check-update && yum update -y
Agora vamos instalar o squid e o openldap-clients
yum install squid openldap-clients -y
Agora vamos inserir o squid na incialização do sistema
chkconfig --add squid
Agora vamos ativar o squid
chkconfig squid on
Vamos agora fazer um backup do arquivo /etc/resolv.conf
cp -Rfa /etc/resolv.conf{,.bkp}
Agora vamos ajustar o arquivo /etc/resolv.conf
vim /etc/resolv.conf #Domínio e Ip do servidor OpenLDAP search douglasqsantos.com.br nameserver 192.168.1.200
Agora vamos testar se o servidor ad esta respondendo corretamente
nslookup douglasqsantos.com.br Server: 192.168.1.200 Address: 192.168.1.200#53 Name: douglasqsantos.com.br Address: 192.168.1.200
Vamos deixar o dns do ifcfg-eth0 igual o do resolv.conf, por que senão na próxima inicialização do sistema ele vai zuar o /etc/resolv.conf
vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="static" BROADCAST="192.168.1.255" DNS1="192.168.1.200" GATEWAY="192.168.1.1" IPADDR="192.168.1.4" NETMASK="255.255.255.0" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet"
Agora vamos atualizar o relógio do sistema
ntpdate -u ntp.usp.br
Vamos consultar a configuração do cliente OpenLDAP
vim /etc/openldap/ldap.conf URI ldap://192.168.1.200/ BASE dc=douglasqsantos,dc=com,dc=br
Agora vamos consultar os usuários do OpenLDAP
ldapsearch -xLLL -h 192.168.1.200 '(objectClass=person)' dn: uid=root,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br cn: root sn: root objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: sambaSamAccount objectClass: posixAccount objectClass: shadowAccount gidNumber: 0 uid: root uidNumber: 0 homeDirectory: /home/root sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaHomeDrive: U: sambaPrimaryGroupSID: S-1-5-21-4179873133-1112765275-2003508382-512 sambaSID: S-1-5-21-4179873133-1112765275-2003508382-500 loginShell: /bin/false gecos: Netbios Domain Administrator sambaLMPassword: 64C756234A35D5CF90004151ADA7B438 sambaAcctFlags: [U] sambaNTPassword: D3C6A8274E92A87B52E2552364FF0924 sambaPwdLastSet: 1360539527 sambaPwdMustChange: 1364427527 shadowLastChange: 15746 shadowMax: 45 dn: uid=nobody,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br cn: nobody sn: nobody objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: sambaSamAccount objectClass: posixAccount objectClass: shadowAccount gidNumber: 65534 uid: nobody uidNumber: 65534 homeDirectory: /nonexistent sambaPwdLastSet: 0 sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaPwdMustChange: 2147483647 sambaHomeDrive: U: sambaPrimaryGroupSID: S-1-5-21-4179873133-1112765275-2003508382-514 sambaLMPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX sambaNTPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX sambaAcctFlags: [NUD ] sambaSID: S-1-5-21-4179873133-1112765275-2003508382-2998 loginShell: /bin/sh dn: uid=domainadm,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount objectClass: sambaSamAccount cn: domainadm sn: domainadm givenName: domainadm uid: domainadm uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/domainadm loginShell: /bin/zsh gecos: System User sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 displayName: domainadm sambaSID: S-1-5-21-4179873133-1112765275-2003508382-3000 sambaPrimaryGroupSID: S-1-5-21-4179873133-1112765275-2003508382-3001 sambaLogonScript: logon.bat sambaHomeDrive: U: sambaLMPassword: CCF9155E3E7DB453AAD3B435B51404EE sambaAcctFlags: [U] sambaNTPassword: 3DBDE697D71690A769204BEB12283678 sambaPwdLastSet: 1360536379 sambaPwdMustChange: 1364424379 shadowLastChange: 15746 shadowMax: 45 dn: uid=douglas.santos,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br objectClass: sambaSamAccount objectClass: posixAccount objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person sambaHomeDrive: U: sambaDomainName: LAB sambaAcctFlags: [XU ] sambaHomePath: \\192.168.1.200\douglas.santos sambaLogonScript: logon.bat sambaProfilePath: \\192.168.1.200\profiles\douglas.santos sambaNTPassword: 2C736BDC8CA1C4DFE5D79E4F9617312C sambaPwdLastSet: 1360535600 homeDirectory: /home/douglas.santos loginShell: /bin/zsh uid: douglas.santos cn: Douglas Quintiliano dos Santos uidNumber: 10000 sn: Santos givenName: Douglas sambaSID: S-1-5-21-4179873133-1112765275-2003508382-519 sambaPrimaryGroupSID: S-1-5-21-4179873133-1112765275-2003508382-512 gidNumber: 512 [...]
Vamos fazer um backup do arquivo de configuração do /etc/squid3/squid.conf
cp -Rfa /etc/squid/squid.conf{,.bkp}
Agora vamos a configuração do squid
vim /etc/squid/squid.conf #Porta padrão do proxy http_port 3128 #Endereco de E-mail do administrador do proxy cache_mgr suporte@douglasqsantos.com.br #Nao faz cache de dados de formularios html,em de resultados de programas cgi #hierarchy_stoplist cgi-bin ? #Cria uma access control list, baseando-se na url e utilizando exp. regulares nesta situacao #foi criado uma exp. regular para cgi e ?. acl QUERY urlpath_regex cgi-bin \? #Nao faz cache da acl QUERY cache deny QUERY #Define o tamonho maximo de um objeto para seu armazenamento no cache local maximum_object_size 4096 KB #Define o tamanho minimo de um objeto para seu armazenamento no cache local minimum_object_size 0 KB #Define o tamanho maximo de um objeto para seu armazenamento no cache de memoria maximum_object_size_in_memory 64 KB #Definicao da quantidade de memoria ram a ser alocada para cache cache_mem 60 MB #Para nao bloquear downloads quick_abort_min -1 KB # Resolve um problema com conexões persistentes que ocorre com certos servidores, # e que provoca delays em nosso cache. detect_broken_pconn on # Provoca um ganho de performance ao usar conexões Pipeline (requisições em paralelo) pipeline_prefetch on #Para cache de fqdn fqdncache_size 1024 #Tempo de atualizacao dos objetos relacionados aos prot ftp, gopher e http. 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 #Definicao da porcentagem do uso do cache que fara o squid descartar os arquivos mais antigos cache_swap_low 90 cache_swap_high 95 #Logs access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log #Define a localizacao do cache de disco, tamanho, qtd de diretorios pai, e por fim a qtd de dir filhos cache_dir aufs /var/spool/squid 100 16 256 #Controle do arquivo de Log logfile_rotate 10 #Arquivo que contem os nomes de maquinas hosts_file /etc/hosts #Maquinas que nao precisaram de autenticacao acl liberados src "/etc/squid/regras/liberados" http_access allow liberados #liberar o acesso ao site da caixa que está com problemas acl caixa dstdomain caixa.gov.br always_direct allow caixa cache deny caixa #MACS que estão liberados. acl macliberado arp "/etc/squid/regras/mac_liberado" http_access allow macliberado #### Autenticao no OpenLDAP auth_param basic program /usr/lib64/squid/squid_ldap_auth -R -b "dc=douglasqsantos,dc=com,dc=br" -v 3 -f uid=%s -h 192.168.1.200 auth_param basic children 5 auth_param basic realm Digite Seu Login para acessar a Internet auth_param basic credentialsttl 30 minutes auth_param basic casesensitive off external_acl_type ldap_group %LOGIN /usr/lib64/squid/squid_ldap_group -v 3 -b "dc=douglasqsantos,dc=com,dc=br" -f "(&(cn=%g)(memberuid=%u))" -h 192.168.1.200 ### ACL Padroes acl manager proto cache_object acl localhost src 127.0.0.1/32 acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync 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 Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl Safe_ports port 1080 acl Safe_ports port 1863 acl Safe_ports port 8443 # https acl Safe_ports port 5222 # gTalk acl Safe_ports port 5223 # gTalk acl Safe_ports port 47057 # torrent acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports # Seguranca (Protecao do Cache) acl manager proto cache_object #Limita conexeos HTTP acl connect_abertas maxconn 8 #sites que não serão feito cache geralmente bancos acl NOCACHE url_regex "/etc/squid/regras/direto" \? no_cache deny NOCACHE #-----------------------------------------------------------------------------------# # Nome ACL TIPO Nome Grupo OpenLDAP # #-----------------------------------------------------------------------------------# acl proxy-ti external ldap_group proxy-ti acl proxy-diretoria external ldap_group proxy-diretoria acl proxy-gerencia external ldap_group proxy-gerencia acl proxy-administracao external ldap_group proxy-administracao acl proxy-logistica external ldap_group proxy-logistica # Whitelists / Blacklists acl downloads urlpath_regex -i "/etc/squid/regras/downloads" acl sites-liberados url_regex -i "/etc/squid/regras/sites_liberados" acl sites-proibidos url_regex -i "/etc/squid/regras/sites_proibidos" acl sites-bloqueados url_regex -i "/etc/squid/regras/sites_bloqueados" acl sites-gerencia url_regex -i "/etc/squid/regras/sites_gerencia" acl sites-administracao url_regex -i "/etc/squid/regras/sites_administracao" acl sites-logistica url_regex -i "/etc/squid/regras/sites_logistica" #Bloquear determinados usuários autenticados acl usu_bloqueados proxy_auth "/etc/squid/regras/usu_bloqueados" #Controle de acesso por horário aqui, vamos liberar o acesso no horário do almoço #aqui os usuário vão poder acessar alguns sites diferenciados entre as 12:00 até as 13:00 acl almoco time MTWHFAS 12:00-13:00 #Agora vamos criar uma regra para garantir que os usuários que vão acessar no almoço estão autenticados acl autenticados proxy_auth REQUIRED #Agora vamos criar uma lista de sites que eles vão poder acessar no horário do almoço acl sites-almoco url_regex -i "/etc/squid/regras/sites_almoco" # Permissoes de Acesso http_access allow proxy-ti http_access allow sites-liberados http_access deny sites-proibidos http_access allow proxy-diretoria #Aqui vamos cruzar as acls para garantir que os usuários que vão acessar os sites no almoço estejam autenticados http_access allow almoco autenticados sites-almoco http_access deny sites-bloqueados http_access deny downloads http_access deny usu_bloqueados http_access allow proxy-administracao sites-administracao http_access allow proxy-logistica sites-logistica #Acesso ao site da caixa #http_access allow caixa proxy-administracao #http_access allow caixa proxy-diretoria http_access deny all http_reply_access allow all icp_access allow all miss_access allow all visible_hostname proxy.douglasqsantos.com.br error_directory /usr/share/squid/errors/pt-br #cache_effective_group proxy cache_effective_user squid coredump_dir /var/spool/squid
Galera o site da caixa já é uma merda de natureza, e o maldito ainda tava dando uns paus quando o squid vai acessar, analisando os pacotes percebi que o dns demora pra retornar uma requisição válida para o squid por isso a demora pra navegar, a maneira que eu resolvi foi adicionando os endereços da caixa no /etc/hosts da da seguinte forma
vim /etc/hosts [...] 200.201.161.106 www.caixa.gov.br www.caixa.gov.br 200.201.162.210 www1.caixa.gov.br www1.caixa.gov.br
Com isso o site da caixa vai retornar mais rapido par ao squid. ;)
Agora vamos criar o diretório para armazenar as regras do squid
mkdir -p /etc/squid/regras
Arquivo com os ips que não precisaram de autenticação e não terão bloqueio
vim /etc/squid/regras/liberados #Arquivo que contem os ips que não vão passar por autenticação e não terão bloqueio 192.168.1.1 192.168.1.100
Arquivo com os macs que não precisaram de autenticação e não terão bloqueio
vim /etc/squid/regras/mac_liberado #MACS que não precisaram de autenticação e não terão bloqueio. 01:01:01:01:01:01
Arquivo com os sites que não vamos fazer cache
vim /etc/squid/regras/direto #Sites que não vamos fazer cache bradesco itau caixa.gov hsbc squid-cache
Arquivo com os sites que vão poder ser acessados no horário do almoço das 12:00 as 13:00
vim /etc/squid/regras/sites_almoco #Sites que vão poder ser acessados no horário de almoço facebook gmail
Arquivo com as extensões bloqueadas ou seja as extensões que os usuários não vão poder baixar
vim /etc/squid/regras/downloads #Arquivo com as extensões que os usuários não vão poder baixar .ace$ .af$ .afx$ .asf$ .asx$ .avi$ .bat$ .cmd$ .com$ .cpt$ .divx$ .dms$ .dot$ .dvi$ .ez$ .gl$ .hqx$ .kar$ .lha$ .lzh$ .mov$ .movie$ .mp2$ .mp3$ .mpe$ .mpeg$ .mpg$ .mpga$ .pif$ .qt$ .ra$ .rm$ .rpm$ .scr$ .spm$ .vbf$ .vob$ .vqf$ .wav$ .wk$ .wma$ .wmv$ .wpm$ .wrd$ .wvx$ .wz$
Arquivo com os sites que vão estar liberados para todos os usuários autenticados
vim /etc/squid/regras/sites_liberados #sites que vão estar liberados para todos os usuários autenticados squid-cache site_da_empresa
Arquivo com os sites que estão proibidos para todos os usuários
vim /etc/squid/regras/sites_proibidos #Sites que vão estar proibidos para todos os usuários 041vip 4shared abusado acervoamador acompanhante amador amante anal aninha anus arquivonet arquivosex arrebitadas arrombadas baixaki bangbus batepapo bizarro boceta boneca bronha bruninha buceta bunda buttman cabaret calcinhas camerasex caralho caricia carlinha chantily checkip.dyndns.org chupar classisex climax clitoris cocota curitibasexo curitibastarnight cwbvip cybersex delicia deliciosas delirius deliriusonline easyquarto ebuddy ejacula erotic erotismo estupro foda foder fuck furacao galinhas gang-bang gangbang gata gatinhas gay getmyip.co.uk getmyip.org gostosa gostoso homosexual hustler idealcompany juggworld lolita malicia marcinha megaupload molhadinhas morango.ig ninfeta ninfetinha orgia orkut parperfeito partypoker penis penthouse pica pinto playboy porno private pubshop pussy puta putinha redtube revistabrazil sandrinha secretas sedutoras sensual sex sexlive sexo sexxxyvideo sexy sexyclube shemale swing talk teen trafficconverter.biz transa travestis tufos vagina virgen youtube zipmail zoofilia
Arquivo que vai conter os sites bloqueados somente a diretoria pode acessar esses sites
vim /etc/squid/regras/sites_bloqueados #Sites que estão bloqueados para todos os usuários menos a diretoria 208.80.152.2 4shared adorocinema afterhour altoagito altosagitos amazon americanas aoe aondenamoro apolar atleticoparanaense atleticopr atoouefeito atrativa atrativagames aumentonatural baixaki batepapo blog blogdocebolinha blogspot blowjob bluebell bondedorole brasilviagem caiobafm caixabranca caixapreta caixapretta cartasdeamor cartoon chantily cineplayers cocemsuacasa collider comercioeletronico corinthians corinthians coritiba corpoperfeito cowboysdoasfalto coxa coxanautas declaracaodeamor ebuddy facearfacebook films filmschoolrejects fimdostempos flogao forumpcs furacao furiajovem fusion futebol galinhas games globo.com gonzagaaluguel gravatar guiademulher guruweb gvt hartmannimoveis humortadela icq idolos ig imoveiscuritiba imoveisportoseguro imperioalviverde investeloto jovemnerd jovempanfm jpfm jtavaresimoveis judao last.fm latinoreview lojadojardim marisa meebo meebo.com megaupload mercadolivre metal-archives meucarronovo morehate morte mtv music myspace namoro nokia ofuxico orkut padrereginaldomanzotti palmeiras parperfeito pindavale pontofrio portal3.casasoft portalnoivas powerscrap radio rapidshare samsung shop shopfacil shopfacil shopinvest shoppingtotal siemens socarrao sonico sony superdownload talk televisao teologia teologica tim timmusicstore tirinhas tribal twitter upload.wikipedia.org videolar violencia virtua vivo vocoxa webmotors webnoivas wikia wikimedia wikipedia.com.br wikipedia.org yahoo youtube zipmail
Sites que a gerencia vai ter acesso
vim /etc/squid/regras/sites_gerencia #Sites que o grupo de gerencia vai ter acesso terra uol google gerencia.siteempresa bradesco itau caixa.gov hsbc .gov
Sites que a administração vai ter acesso
vim /etc/squid/regras/sites_administracao #Sites que o grupo adminstracao vai ter acesso adm.siteempresa bradesco itau hsbc caixa.gov
Sites que a logística vai ter acesso
vim /etc/squid/regras/sites_logistica #Sites que o grupo logistica vai ter acesso logistica.siteempresa
Bloquear determinados usuários autenticados
vim /etc/squid/regras/usu_bloqueados #Usuários que vão ser bloquados no proxy jose.silva
Agora crie os grupos e usuários no OpenLDAP
Vamos consultar os nossos grupos
ldapsearch -xLLL -h 192.168.1.200 '(objectClass=PosixGroup)' dn: cn=proxy-ti,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: posixGroup description: Grupo de Admins gidNumber: 10000 cn: proxy-ti memberUid: douglas.santos dn: cn=Domain Admins,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 512 cn: Domain Admins description: Netbios Domain Administrators sambaSID: S-1-5-21-4179873133-1112765275-2003508382-512 sambaGroupType: 2 displayName: Domain Admins memberUid: root dn: cn=Domain Users,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 513 cn: Domain Users description: Netbios Domain Users sambaSID: S-1-5-21-4179873133-1112765275-2003508382-513 sambaGroupType: 2 displayName: Domain Users memberUid: root dn: cn=Domain Guests,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 514 cn: Domain Guests description: Netbios Domain Guests Users sambaSID: S-1-5-21-4179873133-1112765275-2003508382-514 sambaGroupType: 2 displayName: Domain Guests dn: cn=Domain Computers,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 515 cn: Domain Computers description: Netbios Domain Computers accounts sambaSID: S-1-5-21-4179873133-1112765275-2003508382-515 sambaGroupType: 2 displayName: Domain Computers dn: cn=Administrators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 544 cn: Administrators description: Netbios Domain Members can fully administer the computer/sambaDom ainName sambaSID: S-1-5-32-544 sambaGroupType: 5 displayName: Administrators dn: cn=Account Operators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 548 cn: Account Operators description: Netbios Domain Users to manipulate users accounts sambaSID: S-1-5-32-548 sambaGroupType: 5 displayName: Account Operators dn: cn=Print Operators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 550 cn: Print Operators description: Netbios Domain Print Operators sambaSID: S-1-5-32-550 sambaGroupType: 5 displayName: Print Operators dn: cn=Backup Operators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 551 cn: Backup Operators description: Netbios Domain Members can bypass file security to back up files sambaSID: S-1-5-32-551 sambaGroupType: 5 displayName: Backup Operators dn: cn=Replicators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 552 cn: Replicators description: Netbios Domain Supports file replication in a sambaDomainName sambaSID: S-1-5-32-552 sambaGroupType: 5 displayName: Replicators dn: cn=domainadm,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: top objectClass: posixGroup objectClass: sambaGroupMapping cn: domainadm gidNumber: 1000 sambaSID: S-1-5-21-4179873133-1112765275-2003508382-3001 sambaGroupType: 2 displayName: domainadm memberUid: domainadm dn: cn=proxy-diretoria,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: sambaGroupMapping objectClass: posixGroup displayName: Diretoria sambaGroupType: 2 sambaSID: S-1-5-21-4179873133-1112765275-2003508382-21003 description: Diretoria gidNumber: 10001 cn: proxy-diretoria memberUid: jose.silva dn: cn=proxy-gerencia,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: sambaGroupMapping objectClass: posixGroup displayName: Gerencia sambaGroupType: 2 sambaSID: S-1-5-21-4179873133-1112765275-2003508382-21005 description: Gerencia gidNumber: 10002 cn: proxy-gerencia memberUid: joao.maria dn: cn=proxy-administracao,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: sambaGroupMapping objectClass: posixGroup displayName: Administracao sambaGroupType: 2 sambaSID: S-1-5-21-4179873133-1112765275-2003508382-21007 description: Administracao gidNumber: 10003 cn: proxy-administracao memberUid: maria.madalena dn: cn=proxy-logistica,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: sambaGroupMapping objectClass: posixGroup displayName: Logistica sambaGroupType: 2 sambaSID: S-1-5-21-4179873133-1112765275-2003508382-21009 description: Logistica gidNumber: 10004 cn: proxy-logistica memberUid: vagner.margarina
Agora temos que criar os diretórios para o squid armazenar o cache
squid -z
Vamos acertar o horário dos relatórios do squid, por padrão ele mostra no formato GMT com uma variável %T e nós precisamos do formato UTC %t.
sed -i "s/%T/%t/g" /usr/share/squid/errors/pt-br/*
Agora podemos iniciar ele
/etc/init.d/squid start
OBS: NÃO ESQUECA DE CRIAR OS GRUPOS NO OpenLDAP E COLOCAR OS USUÁRIOS NOS GRUPOS
Agora vamos testar se o squid está reconhecendo as nossas acls
/usr/lib64/squid/squid_ldap_group -v 3 -b "dc=douglasqsantos,dc=com,dc=br" -f "(&(cn=%g)(memberUid=%u))" -h 192.168.1.200 douglas.santos proxy-ti OK
Aqui acima nós estamos testando se o usuário douglas.santos está no grupo proxy-ti.
Agora vamos testar a autenticação do usuário douglas.santos no OpenLDAP
/usr/lib64/squid/squid_ldap_auth -v 3 -b "dc=douglasqsantos,dc=com,dc=br" -f uid=%s -h 192.168.1.200 douglas.santos senha OK
Agora vamos consultar se o nosso usuário é membro do grupo proxy-ti
ldapsearch -xLLL '(cn=proxy-ti)' dn: cn=proxy-ti,ou=Grupos,dc=douglasqsantos,dc=com,dc=br objectClass: posixGroup description: Grupo de Admins gidNumber: 10000 cn: proxy-ti memberUid: douglas.santos
Instalação e Configuração do lightsquid
Podemos ver um demo do lightsquid em http://lightsquid.sourceforge.net/demo18/index.cgi?year=2009&month=08
Agora vamos fazer um update dos repositórios e um upgrade do sistema
yum check-update && yum update -y
Agora vamos instalar as dependências dele
yum install perl-GD perl-CGI httpd -y
Agora vamos obter o lightsquid
cd /var/www/html/ wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/lightsquid-1.8.tgz
Agora vamos desempacotar ele
tar -xzvf lightsquid-1.8.tgz
Agora vamos remover o tgz
rm -rf lightsquid-1.8.tgz
Agora vamos renomear o nosso diretório do lightsquid
mv lightsquid-1.8 lightsquid
Agora vamos acertar as permissões dos arquivos
cd lightsquid chmod +x *.cgi chmod +x *.pl
Agora vamos mudar o dono do diretório
chown -R apache:apache /var/www/html/lightsquid
Agora vamos ajustar o arquivo do apache
vim /etc/httpd/conf/httpd.conf [...] #Insira as linhas abaixo após a linha 362 do arquivo <Directory "/var/www/html/lightsquid"> DirectoryIndex index.cgi Options +ExecCGI -Indexes -MultiViews +SymLinksIfOwnerMatch AddHandler cgi-script .cgi AllowOverride All </Directory> [...]
Agora vamos ajustar o idioma do lightsquid
vim /var/www/html/lightsquid/lightsquid.cfg [...] $lang ="pt_br";
Agora vamos testar o lightsquid
perl /var/www/html/lightsquid/check-setup.pl LightSquid Config Checker, (c) 2005-9 Sergey Erokhin GNU GPL LogPath : /var/log/squid reportpath: /var/www/html/lightsquid/report Lang : /var/www/html/lightsquid/lang/pt_br Template : /var/www/html/lightsquid/tpl/base Ip2Name : /var/www/html/lightsquid/ip2name/ip2name.simple all check passed, now try access to cgi part in browse
Agora vamos inserir o apache na inicialização do sistema
chkconfig --add httpd chkconfig httpd on
Agora vamos iniciar o apache
/etc/init.d/httpd start
Agora vamos gerar os nossos relatórios
/var/www/html/lightsquid/lightparser.pl
Agora já podemos acessar o nosso relatório em http://ip_servidor/lightsquid/
Umas das opções interessantes que eu acho desse cara é que podemos configurar grupos para os usuários, com isso podemos mandar consultar quais grupos acessaram o que e quais usuários pertences a eles.
Vamos acessar o diretório do lightsquid
cd /var/www/html/lightsquid
Agora vamos fazer uma copia do group.cfg
cp group.cfg.src group.cfg
Agora vamos editar o nosso arquivo
vim group.cfg douglas.santos 01 ti-admin anderson.angelote 01 ti-admin hillary 02 matriz-logistica nerso 02 matriz-logistica
Aqui temos na primeira coluna o nome do usuário poderia ser o endereço ip do cliente, na segunda coluna o número do grupo e a terceira coluna é o nome do grupo
Agora para que apareça a identificação dos grupos precisamos gerar novamente o nosso relatório.
/var/www/html/lightsquid/lightparser.pl
Outra opção bacana que temos é fazer o mapeamento para nomes completos por exemplo o nome douglas.santos vamos mapear para Douglas Quintiliano dos Santos, o arquivo que precisamos editar é o seguinte
vim /var/www/html/lightsquid/realname.cfg douglas.santos Douglas Quintiliano dos Santos 192.168.1.3 Nerso da Silva
Aqui podemos mapear tanto nomes de usuários como endereço ip com isso no relatório podemos não lembrar na hora quem utilizar o ip 192.168.1.3 mais pelo nome é bem mais fácil de cobrar um determinado usuário, após efetuar a modificação precisamos gerar o relatório novamente
/var/www/html/lightsquid/lightparser.pl
Agora vamos criar um agendamento no cron para gerar automaticamente o nosso relatório:
crontab -e [...] */20 * * * * /var/www/htdocs/lightsquid/lightparser.pl today
Agora vamos criar um virtualhost para o lightsquid
vim /etc/httpd/conf.d/lightsquid.conf <VirtualHost *:80> ServerName lightsquid.douglasqsantos.com.br ServerAlias lightsquid.douglasqsantos.com.br DocumentRoot "/var/www/html/lightsquid" #Controle de acesso ao lightsquid <Directory "/var/www/html/lightsquid"> DirectoryIndex index.cgi Options +ExecCGI -Indexes -MultiViews +SymLinksIfOwnerMatch AddHandler cgi-script .cgi AllowOverride All #Autenticação do lightsquid AuthUserFile /etc/httpd/access/lightsquid-htpasswd AuthName "LightSquid" AuthType Basic require valid-user </Directory> #Configuração dos logs do apache ErrorLog /var/log/httpd/lightsquid.douglasqsantos.com.br-error.log CustomLog /var/log/httpd/lightsquid.douglasqsantos.com.br-access.log common #Retirando a assinatura do Apache ServerSignature Off IndexIgnore .??* *~ *# README RCS CVS *,v *,t * # Possible values include: debug, info, notice, info, error, crit, # alert, emerg. LogLevel info </VirtualHost>
Agora vamos criar o diretório que vai conter o arquivo de controle dos usuários que podem acessar o lightsquid
mkdir /etc/httpd/access/
Agora vamos gerar o usuário e a senha, aqui eu vou cadastrar o usuário lightsquid
htpasswd -s -c /etc/httpd/access/lightsquid-htpasswd lightsquid New password: Re-type new password: Adding password for user lightsquid
Agora vamos reiniciar o apache
/etc/init.d/httpd restart
Agora já podemos acessar http://lightsquid.douglasqsantos.com.br ou http://ip_servidor