Você está na página 1de 14

Guia de Instalao do Squid no Debian

Funcionalidades: Autenticao integrada com AD usando Samba3 e protocolo NTLM. Filtro de Controle de Contedo atravs do Redirector. Uso das listas negras do BIGBLACKLIST usando o Blackimp. Importao dos logs de acesso para BD usando o SquidLogToMySQL. Relatrios de uso da Internet, escritos em PHP. Resumo: Instalao do SQUID usando autenticao integrada usando o AD, atravs de um grupo chamado InternetWebDefault, aonde colocaremos todos os usurios com permisso de acesso a Internet em tempo integral. Todo acesso analisado e filtrado se necessrio usando as listas negras/brancas controladas pelo redirector, listas estas que pode ser carregadas atravs das listas disponveis no BIGBLACKLIST. Tambm existe a possibilidade de criar usurios ou ips privilegiados, que no sofrero nenhuma restrio de contedo. Importao de todos os logs de acesso para banco de dados (MySQL) para permitir retirar relatrios de uso e para isto uma aplicao em PHP tambm disponibilizada, contendo vrios relatrios. Perfil de Instalao Instale o Debian somente com os recursos mnimos e rede funcionando e com acesso Internet liberado. # Instalao e Atualizao de Pacotes Bsicos apt-get update apt-get upgrade # Instalao SSH para acesso remoto apt-get install ssh (responda SIM para todas as perguntas) (Depois de instalado o SSH voc pode acessar remotamente o servidor usando algum aplicativo como exemplo putty e continuar a instalao de sua estao Windows para no ter que esta digitando tudo desse tutorial, pode copiar e colar os comandos e edio de arquivos, use Shift+Insert para colar no Linux.) # Para facilitar a edio de arquivos com o editor vi apt-get install vim # Instalao do pacote de compilao apt-get install apt-build # Instalao do apt-get install apt-get install apt-get install apt-get install apt-get install Servidor Web e BD com mdulo PHP apache2 mysql-server php4-mysql libphp-adodb libapache2-mod-php4 (Pacote para apache reconhecer PHP)

vi /etc/php4/apache2/php.ini #Deve-se descomentar a linha: #extension=mysql.so /etc/init.d/apache2 restart

# Criao do usurio manager para uso futuro: htpasswd -c /etc/apache2/passwd manager # colocar senha credexx* onde xx o numero do Crede #Editar o arquivo abaixo e adicionar a TAG Directory, pode coloc-la no final do arquivo, antes das duas ltimas linhas. vi /etc/apache2/apache2.conf <Directory "/var/www/proxy/"> Options SymLinksIfOwnerMatch allowoverride AuthConfig AuthType Basic AuthName "Proxy - Autenticao de Usurio" AuthUserFile /etc/apache2/passwd require user manager </Directory>

Instalando o Samba 3
O Samba3 ser baixado da Internet e compilado manualmente com as opes necessrias. Do pacote do Samba, s precisaremos do WINBIND, pois ele o responsvel por fazer a autenticao usando NTLM. cd /usr/local/src wget http://www.seduc.ce.gov.br/ftp/priv/Debian/samba-3.0.21c.tar.gz tar xvfz samba-3.0.21c.tar.gz cd samba-3.0.21c/source # Configurando as opes desejadas do samba ./configure --bindir=/bin \ --sbindir=/usr/sbin \ --with-winbind --with-winbind-auth-challenge # Compilando e instalando o Samba make make install # Instalao de biblioteca para o nsswitch cd nsswitch cp libnss_winbind.so /lib ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2 # Inicializao Automtica cd ../.. cp packaging/Debian/debian-sarge/winbind.init /etc/init.d/winbind chmod 755 /etc/init.d/winbind # Configurao do Samba No arquivo que voc vai criar, SMB.CONF, substitua os parmetros logo abaixo, pelos que representam sua rede:

workgroup = nome NETBIOS de seu domnio.(CREDEXX) server string = comentrio que identifica seu Servidor de Proxy netbios name = nome NETBIOS de seu servidor de Proxy.(SRVCREDEXX)

# Vamos agora criar o arquivo smb.conf. vi /usr/local/samba/lib/smb.conf # Copie todo o contedo abaixo para o arquivo smb.conf [global] workgroup = CREDEXX server string = Servidor de Proxy netbios name = FGATEWAY log file = /var/log/samba/%m.log max log size = 50 debug level = 1 security = domain encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd username map = /etc/samba/smbusers socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 unix charset = iso-8859-1 password server = SRVCREDEXX winbind uid = 10000-20000 winbind gid = 10000-20000 winbind enum users = yes winbind enum groups = yes template homedir = /dev/null template shell = /dev/null winbind use default domain = yes passdb backend = smbpasswd [homes] comment = Home Directories browseable = no writable = yes # Fim do arquivo smb.conf #Alterando permisses do arquivo. chmod 755 /usr/local/samba/lib/smb.conf # Criando alias por questes de funcionalidades ln -s /usr/local/samba/lib/smb.conf /etc/smb.conf #Os passos em azul voc deve executar somente se estiver realizando a instalao do Crede e se o servidor j estiver com o ip original que ele vai funcionar no Crede: Agora que tudo j est configurado, iremos adicionar nosso servidor de proxy ao domnio, usando o comando net do pacote do Samba3. net rpc join DOMINIO -S server U administrator Ex: net rpc join credexx -S srvcredexx -U manager password: Joined domain CREDEXX. Pronto! Mquina adicionada ao domnio.

# Inicializando o winbind /etc/init.d/winbind start # Testando o funcionamento do Winbind wbinfo -t checking the trust secret via RPC calls succeeded # Se a mensagem acima apareceu, tudo Ok, seno, revise os passos. # Configurando o nsswitch (adicionar winbind em passwd e group) vi /etc/nsswitch.conf passwd: compat winbind group: compat winbind # Instalar o rcconf para voc selecionar as aplicaes que devem iniciar # juntamente com o Debian. # Marcar winbind para iniciar automaticamente. apt-get install rcconf # Testando sua instalao: #Exibir todos as contas do domnio: getent passwd #Exibir todos os grupos do domnio: getent group # Pronto! O samba3 est instalado.

Instalando o Squid 2.5


O Squid2.5 ser baixado da Seduc e compilado manualmente com as opes necessrias. Iremos compilar para modo portugus, autenticao e controle de banda. cd /usr/local/src wget http://www.seduc.ce.gov.br/ftp/priv/Debian/squid-2.5.STABLE12.tar.gz tar xvfz squid-2.5.STABLE12.tar.gz cd squid-2.5.STABLE12 # Configurando as opes desejadas do Squid ./configure --sbindir=/usr/sbin \ --enable-default-err-language=Portuguese \ --enable-auth="ntlm,basic" \ --enable-external-acl-helpers="winbind_group,wbinfo_group" \ --enable-snmp \ --enable-linux-netfilter \ --enable-delay-pools # Compilando e instalando Squid make make install # Criando alias por questes de funcionalidades ln -s /usr/local/squid/etc/squid.conf /etc/squid.conf # Dando permisses ao usurio de execuo (nobody) cd /usr/local chown -R nobody.nogroup squid # Criando o cache do squid: su - nobody -c "/usr/sbin/squid -z" # Dando permisso ao usurio de execuo do Squid no Winbind chgrp nogroup /usr/local/samba/var/locks/winbindd_privileged # Editando arquivo squid.conf: vi /etc/squid.conf # Alterar porta do squid para 8080 na TAG http_port http_port 8080 OBS: Remova ou comente as tag auth_param basic existentes e adicione as que esto abaixo, alterando CREDEXX para nome de seu Crede: # TAG: auth_param auth_param ntlm program /bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm use_ntlm_negotiate off auth_param ntlm children 10 auth_param ntlm max_challenge_reuses 0 auth_param ntlm max_challenge_lifetime 5 minutes auth_param auth_param auth_param auth_param basic basic basic basic program /bin/ntlm_auth --helper-protocol=squid-2.5-basic children 5 realm Proxy CREDEXX credentialsttl 2 hours

# Colocando o Squid para inicializar como servio automaticamente: cd /etc/init.d wget http://www.seduc.ce.gov.br/ftp/priv/squid chmod 755 /etc/init.d/squid #executar rcconf e marcar squid e winbind para inicializar automaticamente: rcconf # Editando novamente squid.conf vi /etc/squid.conf # Configurando o grupo InternetWebDefault para acesso a Internet Localize o texto: # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # E insira logo abaixo este texto: # Acesso via autenticacao external_acl_type NT_global_group children=10 %LOGIN /usr/local/squid/libexec/wbinfo_group.pl acl ProxyUsers external NT_global_group InternetWebDefault http_access allow ProxyUsers # Horario Comercial acl day time MTWHF 08:00-17:00 # Acesso via autenticacao no horario de meio dia. acl ProxyUsersMeioDia external NT_global_group InternetWebMeioDia http_access allow ProxyUsersMeioDia day #FIM do texto # Correo do script wbinfo_group.pl edite o arquivo abaixo e adicione a linha em NEGRITO: vi /usr/local/squid/libexec/wbinfo_group.pl sub check { local($user, $group) = @_; $groupSID = `wbinfo -n "$group"`; $groupSID = substr($groupSID, 0, index($groupSID, ' ') + 1); chop $groupSID; $groupGID = `wbinfo -Y "$groupSID"`; chop $groupGID; return 'OK' if(`wbinfo -r \Q$user\E` =~ /^$groupGID$/m); return 'ERR'; } ... # Execute o squid squid Teste o acesso a Internet, Configure numa estao cliente o proxy no IE: Proxy: IP do seu servidor de Proxy e Porta 8080 # E acompanhe no log do squid: tail -f /usr/local/squid/var/logs/access.log O log contm entre outras informaes o IP, a URL e usurio. Pronto! O Squid est instalado.

Instalando o redirector (filtro de contedo)


O redirector um filtro de contedo para o squid, que permite trabalhar com vrias classes, aonde em cada classe podemos adicionar domnios, url e expresses. Tambm possvel criar excees para usurios e ips. O redirector totalmente escrito na linguagem C e usa o mysql como repositrio de suas listas negras/brancas. O redirector compativel com todas as listas do bigblacklist atravs do programa blackimp. O bigblacklist pode ser obtido em http://urlblacklist.com. Ele pode ser usado, independente da autenticao, isto , ele pode ser usado como filtro de contedo independente para o Squid. # Criao do banco de dados proxy mysqladmin -u root create proxy # Criao do usurio proxy (iremos usar a senha proxy) mysql -u root proxy mysql> grant all on proxy.* to proxy@localhost identified by 'proxy'; quit mysql -uproxy -pproxy proxy mysql> CREATE TABLE logg ( data date default NULL, hora varchar(5) default NULL, duracao int(10) default NULL, ip varchar(14) default NULL, resultado varchar(25) default NULL, bytes int(10) default NULL, metodo varchar(10) default NULL, url varchar(100) default NULL, usuario varchar(15) default NULL, tipo varchar(20) default NULL, dominio varchar(50) default NULL, KEY idx_loggdata (data), KEY loggusuario (usuario), KEY loggip (ip) ); CREATE TABLE redirector ( TABLENAME varchar(15) NOT NULL default '', VALUE varchar(100) NOT NULL default '', PRIMARY KEY (TABLENAME,VALUE) ); quit cd /usr/local/src wget http://www.seduc.ce.gov.br/ftp/priv/Debian/redirector.tar.gz tar xvfz redirector.tar.gz cd redirector rm -f squidlogtomysql wget http://www.seduc.ce.gov.br/ftp/priv/Debian/squidlogtomysql chmod 777 squidlogtomysql rm -f redirector wget http://www.seduc.ce.gov.br/ftp/priv/Debian/redirector chmod 777 redirector # Arquivo de configurao cp redirector.cfg /etc

# Instalao dos aplicativos cp blackimp /sbin cp squidlogtomysql /sbin cp redirector /sbin # Pgina de erro cp err_access_denied.php /var/www vi /etc/redirector.cfg (Mudar Ip do Proxy, para o ip do servidor Debian para ver a mensagem de erro) # Criando Script para rodar diariamente e deixar somente os ltimos 30 dias de acesso no log do squid: #Criar o arquivo delete30.sql vi /etc/delete30.sql # Adicionar esse contedo ao arquivo delete30.sql: # Incio do arquivo: delete from logg where DATE_SUB(CURDATE(),INTERVAL 31 DAY) > data; # Fim #Alterando permisses: chmod 755 /etc/delete30.sql #Criar o arquivo delete_old_logs vi /etc/cron.daily/delete_old_logs # Adicionar esse contedo ao arquivo delete_old_logs: # Incio do arquivo: mysql -uproxy -pproxy proxy < /etc/delete30.sql # Fim #Alterando permisses: chmod 755 /etc/cron.daily/delete_old_logs Configurando o squid para usar o redirector: # Edite novamente o arquivo squid.conf. vi /etc/squid.conf # Adicione a TAG Abaixo. # TAG: redirect_program redirect_program /sbin/redirector ads audio-video blocked hacking jogos porn proxy # Comentrio: Isto, ir bloquear conteudo: propaganda (ads)

audio/video (audio-video) genrica (blocked) material de hacker (hacking) jogos (jogos) pornogrfico (porn) sites de proxy annimos (proxy)

# Reconfigure o squid para validar as alteraes. squid -k reconfigure

# Carregando as listas negras do bigblacklist: wget http://www.seduc.ce.gov.br/ftp/priv/Debian/bigblacklist.tar.gz tar xvfz bigblacklist.tar.gz # Importanto Listas negras, processo demorado! blackimp adsd blacklists/ads/domains blackimp adsu blacklists/ads/urls blackimp audio-videod blacklists/audio-video/domains blackimp audio-videou blacklists/audio-video/urls blackimp hackingd blacklists/hacking/domains blackimp hackingu blacklists/hacking/urls blackimp jogosd blacklists/games/domains blackimp jogosd blacklists/onlinegames/domains blackimp jogosu blacklists/onlinegames/urls blackimp pornd blacklists/porn/domains blackimp pornu blacklists/porn/urls blackimp proxyd blacklists/proxy/domains blackimp proxyu blacklists/proxy/urls # Expresses mysql -uproxy -pproxy proxy < redirector.sql Pronto! Seu squid est configurado com filtro de contedo. Teste novamente o acesso a Internet, acessando: http://www.playboy.com.br # Criando um usurio privilegiado, esse passo opcional. Ex: Fazer com que o usurio marcos no sofra restries de contedo. vi /etc/redirector.cfg userpriv=marcos # Reconfigure o squid squid -k reconfigure

Instalando o squidlogtomysql
Sintaxe do squidlogtomysql: squidlogtomysql <arquivo de log> # Primeiro, vamos rotacionar o log para no usar o corrente: squid -k rotate # Executando squidlogtomysql /usr/local/squid/var/logs/access.log.0 # Removendo o log rm -f /usr/local/squid/var/logs/access.log.0 # Observe quantas linhas foram importadas. # Criando um arquivo e agendando a importao: vi /etc/cron.hourly/import_squid_log_mysql # Inicio do Arquivo #!/bin/sh # # Import Squid Log To MySQL # squid -k rotate cd /usr/local/squid/var/logs echo Esperando rotacao... while true; do if [ -f access.log.0 ]; then break; fi done squidlogtomysql access.log.0 rm -f *.log.0 echo Importacao finalizada! # Fim do Arquivo # Alterando permisses do arquivo criado. chmod 755 /etc/cron.hourly/import_squid_log_mysql Pronto! Os logs do squid sero importados para o mysql de 1h em 1h. Para forar a atualizao dos logs do squid a qualquer momento voc pode criar um atalho para o arquivo e execut-lo: ln -s /etc/cron.hourly/import_squid_log_mysql /etc/rotate chmod 755 /etc/rotate /etc/rotate Criando site de lista negra: cd /var/www wget http://www.seduc.ce.gov.br/ftp/priv/Debian/proxy-report.tar.gz tar xvfz proxy-report.tar.gz

10

#OBS: Edite o arquivo proxy/top.php e coloque o nome de sua empresa. vi proxy/top.php # Altere o texto Titulo/Nome da Sua Empresa a seu gosto! DNS # Instalao do DNS como servidor secundrio de DNS da SEDUC. aptitude install bind9 bind9-host bind9-doc # Edite o arquivo abaixo. E acrescente ao fim as seguintes linhas: vi /etc/bind/named.conf.local # Inicio zone "seduc.ce.gov.br" { type slave; file "slave/seduc.ce.gov.br"; masters { 172.31.4.30; }; }; # Fim #apenas o usurio root possa ler e gravar os arquivos de configurao e apenas os usurios do grupo bind possam ler estes arquivos. Para isto execute: chown -R root:bind /etc/bind chmod 640 /etc/bind/* # criar a pasta onde ser armazenada as zonas primrias e dar pemisses. mkdir /var/cache/bind/slave chown bind:bind /var/cache/bind/slave chmod 700 /var/cache/bind/slave # Recarregar os arquivos de configurao e as novas zonas do servidor BIND secundrio. rndc reconfig rndc reload # Para visualizar o estado do servidor BIND execute: rndc status # Adicionar as linhas abaixo ao final do arquivo firewall: vi /etc/init.d/firewall #Inicio # Firewall acessando DNS da SEDUC $IPTABLES -A OUTPUT -p udp --dport 53 -j ACCEPT $IPTABLES -A INPUT -p udp --sport 53 -j ACCEPT # Acesso da localnet ao DNS do Firewall $IPTABLES -A INPUT -p udp -s $LOCALNET --dport 53 -j ACCEPT $IPTABLES -A OUTPUT -p udp -d $LOCALNET --sport 53 -j ACCEPT #Fim Firewall

11

cd /etc/init.d wget http://www.seduc.ce.gov.br/ftp/priv/proxy/firewall chmod 755 firewall # Editar o arquivo firewall alterando a linha # IPTABLES IPTABLES=/sbin/iptables # E alterar o IPs dos seguintes alias. LOCALNET="172.31.65.0/24" BROADNET="172.31.65.255" FIREWALL="172.31.64.10/32" SRVDOMAIN="172.31.65.10/32" SIGE="172.31.4.19/32" (Alterar para ip 172.31.4.24) # Para inicializar automaticamente: ln s /etc/init.d/firewall /etc/rc2.d/S22firewall chmod 777 /etc/rc2.d/S22firewall # Configurar placa de rede do servidor: vi /etc/network/interfaces

EXEMPLO: # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 172.31.4.20 netmask 255.255.252.0 network 172.31.4.0 broadcast 172.31.7.255 #gateway 172.31.1.1 auto eth1 iface eth1 inet static address 172.31.1.20 netmask 255.255.255.0 network 172.31.1.0 broadcast 172.31.1.255
Restartando o Servio Network para ativar as modificaes: /etc/init.d/network restart

12

Acessando os relatrios via IE (The Best Browser!). http://ipdoseuproxy/proxy Ex: http://172.31.25.1/proxy Nesta aplicao esto disponveis relatrios de uso e acesso a edio da lista negra. Lista Negra Log de Acesso Top10 Download Top10 Dominio por Trafego de Banda Top10 Dominio por Quantidade de Acesso Top10 Usuario por Tempo de Uso Top10 Usuario por Trafego de Banda Top10 Usuario por Quantidade de Aceso Dominio do Usuario por Trafego de Banda

Por exemplo: Vamos remover o uol.com.br da lista negra da classe JOGOS 1. 2. 3. 4. 5. 6. Acesse a opo lista negra Selecione a tabela jogosd (tabela de dominios para jogos) Digite o valor uol.com.br no campo valor Clique no boto <pesquisar> Clique no item excluir Confirme a excluso.

OBS: No precisa reiniciar ou reconfigurar o squid, j fica valendo. Fim do guia!

POSSVEIS ERROS:
1. Ao abrir relatrio de uso da internet aparece o seguinte erro:

Can't find file: 'logg.MYI' (errno: 2)


Causa: Tabela do Mysql Corrompida. Soluo: # Parar o servico do mysql /etc/init.d/mysql stop # Apagar no diretorio, todos os arquivos logg.* cd /var/lib/mysql/proxy rm f logg.* # Iniciar novamente o mysql /etc/init.d/mysql start # E criar novamente a tabela logg. mysql -uproxy -pproxy proxy mysql>

13

CREATE TABLE logg ( data date default NULL, hora varchar(5) default NULL, duracao int(10) default NULL, ip varchar(14) default NULL, resultado varchar(25) default NULL, bytes int(10) default NULL, metodo varchar(10) default NULL, url varchar(100) default NULL, usuario varchar(15) default NULL, tipo varchar(20) default NULL, dominio varchar(50) default NULL, KEY idx_loggdata (data), KEY loggusuario (usuario), KEY loggip (ip) ); quit

14