Servidor proxy com Squid, Dansguardian e CBQ no CentOS
Atualizado em:
As vantagens de se usar um servidor Proxy dentro de uma empresa, ou até uma pequena rede são infinitas, vão desde a economia de banda, usando o cache até um decente filtro de conteúdo.
Neste tutorial vou mostrar como configurar um proxy usando o CentOS.
Recursos utilizados
Hardware
Em nosso caso específico, tive a sorte de possuir uma máquina bem parruda para implementar o proxy, um Xeon Quad, com 4Gb de Ram e discos SAS. Lembrando que o servidor tem que ter no mínimo 2 interfaces de rede.
Sistema
Usamos o CentOS 5.7 64bits. Atingiu muito bem nossas necessidades.
Squid
Usamos o Squid para controle de usuários e para cache.
Dansguardian
O dansguardian é nosso filtro de conteúdo, a grande vantagem dele é possuir filtros por heurística, que bloqueia sites baseado em palavras dentro das páginas.
Iptables
Utilizamos o iptables para controlar os IPs dos servidores, que não passam pelo squid/dansguardian
CBQ
Fazemos o controle de banda usando o CBQ, já existente no CentOS.
Instalação
Instalando o Sistema
Baixe aqui a versão mais nova do CentOS, lembre-se sempre de procurar um servidor no Brasil, o o mais próximo possível, há mais chances de ter uma velocidade maior. Dê preferência também ao DVD.
Configure as interfaces de rede, uma apontando para a rede externa (em nosso caso a eth0) e a outra para a interna (eth1). Edite o resolv.conf para seu servidor DNS. Se o servidor estiver resolvendo nomes normalmente, vamos avançar para a próxima etapa.
Instalando o Squid
Nenhum mistério aqui, o squid já esta no repositório do CentOS:
yum install squid
Instalando o Dansguardian
O Dansguardian não está no repositório do CentOS, portanta teremos que compila-lo na mão.
Antes de instalar o dansguardian, trate algumas dependências:
yum install pkgconfig gcc gcc-c++ libstdc++-devel zlib-devel pcre-devel wget make bzip2-devel
Talvez seja necessário incluír a variável de ambiente do pkgconfig:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
Baixe a versão mais nova aqui, descompacte no seu servidor e compile:
tar xzfv dansguardian-2.10.1.1.tar.gz cd dansguardian-2.10.1.1 ./configure make make install
Configurando o Squid
Abaixo esta a minha configuração do Squid (/etc/squid/squid.conf). Já preparado para autenticação básica do squid direcionada no arquivo (/etc/squid/passwd). E com as configurações de cache (/var/squid/cache).
#NAME visible_hostname nome.dominio #PORT http_port 3128 transparent #CACHE MEMORY cache_mem 1024 MB maximum_object_size_in_memory 20 KB memory_replacement_policy heap GDSF #DISCK CACHE cache_dir ufs /var/squid/cache 5000 16 256 cache_replacement_policy heap LFUDA minimum_object_size 15 KB maximum_object_size 5 MB cache_swap_low 90 cache_swap_high 95 #LOG access_log none cache_log /var/log/squid/cache.log #AUTH auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd auth_param basic children 8 auth_param basic realm Insira seu Usuário e Senha auth_param basic credentialsttl 15 minute #ACLs acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 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 acl expediente time SMTWHFA 0:00-24:00 acl autenticados proxy_auth REQUIRED #HTTP_ACCESES http_access allow autenticados expediente http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports # And finally deny all other access to this proxy http_access allow localhost http_access deny all icp_access allow all #OTHERS hierarchy_stoplist cgi-bin ? access_log /var/log/squid/access.log squid acl QUERY urlpath_regex cgi-bin \? cache deny QUERY refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 acl apache rep_header Server ^Apache broken_vary_encoding allow apache coredump_dir /var/spool/squid
Para iniciar o squid pela primeira vez execute o comando squid -z, para que ele crie os arquivos de cache, nas demais vezes basta chamar o comando squid.
Configurando o Dansguardian
Primeiramente vamos atualizar a lista de sites bloqueados, acesse este site (URLBlacklist.com) e baixe a versão mais nova. Descompacte dentro de /usr/local/etc/dansguardian/lists/blacklists.
Vamos editar o arquivo de configuração do Dansguardian (/usr/local/etc/dansguardian/dansguardian.conf)
#REPORT reportinglevel = 3 #IDIOMA languagedir = '/usr/local/share/dansguardian/languages' language = 'ptbrazilian' #LOGs loglevel = 3 logexceptionhits = 2 logfileformat = 3 loglocation = '/usr/local/var/log/dansguardian/access.log' # Network Settings filterip = filterport = 8080 proxyip = 127.0.0.1 proxyport = 3128 nonstandarddelimiter = on #IMAGENS BLOQUEADAS usecustombannedimage = on custombannedimagefile = '/usr/local/share/dansguardian/transparent1x1.gif' # Filter groups options filtergroups = 1 filtergroupslist = '/usr/local/etc/dansguardian/lists/filtergroupslist' # Authentication files location bannediplist = '/usr/local/etc/dansguardian/lists/bannediplist' exceptioniplist = '/usr/local/etc/dansguardian/lists/exceptioniplist' #PALAVRAS - PESO showweightedfound = on weightedphrasemode = 2 # Positive (clean) result caching for URLs urlcachenumber = 1000 # Age before they are stale and should be ignored in seconds urlcacheage = 900 # Clean cache for content (AV) scan results scancleancache = on #Smart, Raw and Meta/Title phrase content filtering options phrasefiltermode = 2 # Lower casing options / 0 = force lower case (default) preservecase = 0 # Hex decoding options hexdecodecontent = off # Force Quick Search rather than DFA search algorithm forcequicksearch = off # Reverse lookups for banned site and URLs. reverseaddresslookups = off # Reverse lookups for banned and exception IP lists. reverseclientiplookups = off # Perform reverse lookups on client IPs for successful requests. logclienthostnames = off # Build bannedsitelist and bannedurllist cache files. createlistcachefiles = on # POST protection (web upload and forms) maxuploadsize = -1 # Max content filter size maxcontentfiltersize = 256 # Max content ram cache scan size maxcontentramcachescansize = 2000 # Max content file cache scan size maxcontentfilecachescansize = 20000 # File cache dir filecachedir = '/tmp' # Delete file cache after user completes download deletedownloadedtempfiles = on # Initial Trickle delay initialtrickledelay = 20 # Trickle delay trickledelay = 10 # Download Managers downloadmanager = '/usr/local/etc/dansguardian/downloadmanagers/fancy.conf' downloadmanager = '/usr/local/etc/dansguardian/downloadmanagers/default.conf' # Content scanner timeout contentscannertimeout = 60 # Content scan exceptions contentscanexceptions = off # Auth plugins authplugin = '/usr/local/etc/dansguardian/authplugins/proxy-basic.conf' authplugin = '/usr/local/etc/dansguardian/authplugins/ip.conf' # Re-check replaced URLs recheckreplacedurls = off # Misc settings forwardedfor = off usexforwardedfor = off logconnectionhandlingerrors = on # Fork pool options logchildprocesshandling = off maxchildren = 120 minchildren = 8 minsparechildren = 4 preforkchildren = 6 maxsparechildren = 32 maxagechildren = 500 # Sets the maximum number client IP addresses allowed to connect at once. maxips = 0 # IPC filename ipcfilename = '/tmp/.dguardianipc' # URL list IPC filename urlipcfilename = '/tmp/.dguardianurlipc' # IP list IPC filename ipipcfilename = '/tmp/.dguardianipipc' # PID filename nodaemon = off # Disable logging process nologger = off # Enable logging of "ADs" category blocks logadblocks = on # Enable logging of client User-Agent loguseragent = off # Soft restart softrestart = off
Dois itens que são interessantes nesta configuração, são o arquivo de log de acesso (/usr/local/var/log/dansguardian/access.log) e o HTML editável de página bloqueada (/usr/local/share/dansguardian/languages) que pode ser personalizada.
Para iniciar o dansguardian basta chamar o comando dansguardian, e para recarregar as regras: dansguardian -r.
Iptables
Para o iptables criei um scrip para carregar as configurações, pois as regras deste devem ser carregadas quando o servodor for iniciado.
Neste script:
- Obrigo todas as conexões que chegam irem para a porta 8080 (dansguardian);
- Libero IPs da rede para 'vazarem' assim não caem no dansguardian e no squid, ideal para os servidores da rede;
- Bloqueio Ips;
- Bloqueio contra Ping da morte e DoS;
Salve este arquivo com o nome iptables-load, por exemplo e chame com o sh iptables-load
#!/bin/bash #RESTAR iptables /etc/init.d/iptables restart #FUNCÕES libera_ip (){ iptables -t nat -I PREROUTING -s $1 -j ACCEPT iptables -t nat -I POSTROUTING -s $1 -o eth0 -j MASQUERADE iptables -I FORWARD -s $1 -j ACCEPT } bloqueia_ip (){ iptables -A INPUT -s $1 -j DROP } ################# #BLOQUEIA IPs #bloqueia_ip "192.168.0.199" # CARREGA MODULOS IPTABLES echo 1 > /proc/sys/net/ipv4/ip_forward modprobe iptable_nat # BLOQUEIA CONTRA PING DA MORTE E DoS iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 1/s -j DROP # ABRE A CONEXO PARA A REDE LOCAL NA PORTA 8080 iptables -A INPUT -i eth1 -p tcp --dport 8080 -j ACCEPT # LIBERA NAVEGAO SEM PROXY PARA SERVIDORES libera_ip "192.168.0.1" #serv1 libera_ip "192.168.0.2" #serv2 #termina echo "Iptables Pronto"
CBQ
Com o CBQ faço o controle de banda da rede, primeiramente vá ao diretório /etc/sysconfig/cbq. Para cada regra crie um arquivo de down e outro de up. EX: cbq-0002.geral-in e cbq-0002.geral-out.
Para cada regra começa a numerar do 0002, e continue, lembrando que essa numeração é em hexadecimal.
Veja meus exemplos:
cbq-0002.geral-in
DEVICE=eth1,1000Mbit,100Mbit RATE=2Mb WEIGHT=200Kbit PRIO=5 RULE=192.168.0.0 BOUNDED=no ISOLATED=no
cbq-0002.geral-out
DEVICE=eth0,1000Mbit,100Mbit RATE=100Kbit WEIGHT=10Kbit PRIO=5 RULE=192.168.0.0, BOUNDED=no ISOLATED=no
Compile o CBQ com o comando cbq compile e inicie com cbd start.
Veja nesse tutorial mais informações sobre o CBQ.
Iniciando tudo
Para finalizar criei um scrip para iniciar todos os serviços necessários, apenas para facilitar:
#!/bin/bash squid echo "iniciando squid" dansguardian echo "iniciando dansguardian" sh /iptables-load echo "carregando iptables" cbq compile echo "compilando cbq" cbq start echo "iniciando cbq" echo "PRONTO"
Adicionais
Para facilitar a administração do servidor, recomendo a instalação do webmin (uma interface web voltada para administração de servidores, já com o modulo do squid instalado, ótimo para a manutenção dos usuários) e o sarg junto com o webalizer. Para relatórios do log do dansguardian.
Finalizando
Espero que seja útil este artigo, claro que não responde todas as dúvidas, e cada instalação terá seus problemas particulares, mas espero que seja uma base para os administradores. Deixem seus comentários com dúvidas e sugestões.
Obrigado pela visita e compartilhem esse post! :D
Deixe um comentário