Pessoal, eu estava precisando fazer um proxy transparente com o squid + pf e uma interface web para administrar (webmin) Encontrei aqui na lista um email que falava sobre o squid 2.6, porém era usando ipfw + squid 2.6 que tem no ports. O problema é que com o esse squid do ports eu não consegui fazer funcionar, mas consegui fazer funcionar compilando o squid 2.6 apartir dos sources.
Ah.. também consegui fazer funcionar o squid 2.5 do ports. Então resolvi fazer uma receitinha de bolo e postar aqui, caso alguém precise disso no futuro (sabe como é, né? dicas nunca são ruins). o 'documento' que segue está escrito de um modo bem mastigado e então serve para quem não tem experiência no freebsd, espero que sirva para alguém... Ah. Acho que está meio 'porco' esse monte de 'echo' que deixei aqui (principalmente quando a linha do echo tem os caracteres: ! ` $ hehe portanto acho que se você não estiver usando o bash como shell (eu estou usando) você vai ter um comportamento diferente, mas ai você dá seus pulos, né?) E claro, façam correções nos erros que vocês encontrarem aqui. Bom, vai ai: #========================================================== #========================================================== #========================================================== #Tanto para o squid 2.5 quanto para o 2.6 você vai precisar recompilar o kernel #para usar o pf no FreeeBSD (eu estou usando o FreeBSD 6.1, mas tenho certeza #que no 6.0 é a mesma coisa e acredito que no 5.4 também deve ser o mesmo) ######################################################### #### compilar o kernel GENERIC com suporte ao pf, ALTQ (no mínimo), pflog e pfsync #### se o source do kernel não existir (/usr/src/sys/) #### use o /usr/sbin/sysinstall para baixá-lo #### (sysinstall --> Configure --> Distributions --> src --> sys #diretório do source para o kernel na arquitetura i386 cd /usr/src/sys/i386/conf/ #o arquivo de configuração do kernel é esse (GENERIC), vamos tirar #uma cópia dele no $home do root (deixando o 'original' intacto) cp GENERIC /root/KERNEL.HOST #fazendo um link para a cópia do kernel no diretório de configuração #(/usr/src/sys/i386/conf) ln -s /root/KERNEL.HOST #isso vai fazer 'aparecer' no seu sistema o /dev/pf echo "device pf" >> KERNEL.HOST #não é necessário, mas sei lá.. vamos adicionar também, né? echo "device pflog" >> KERNEL.HOST #também não é necessário, mas... echo "device pfsync" >> KERNEL.HOST #se não adicionar suporte ao ALTQ você vai receber uma mensagem chatinha do pf #dizendo que o suporte ao ALTQ está desabilitado, então vamos colocá-lo também echo "options ALTQ" >> KERNEL.HOST echo "options ALTQ_CBQ" >> KERNEL.HOST echo "options ALTQ_RED" >> KERNEL.HOST echo "options ALTQ_RIO" >> KERNEL.HOST echo "options ALTQ_HFSC" >> KERNEL.HOST echo "options ALTQ_PRIQ" >> KERNEL.HOST echo "options ALTQ_CDNR" >> KERNEL.HOST #gera as informações para compilação /usr/sbin/config KERNEL.HOST #entra no diretório com as informações de compilação cd ../compile/KERNEL.HOST/ #compila as dependências do kernel make depend #compila o kernel make #instala o kernel: o novo kernel está em /boot/kernel #e o antigo foi renomeado para /boot/kernel.old #se na hora de reiniciar der problema no kernel, você poderá bootar #com o kernel antigo digitando: #kernel.old, mas nós temos sorte e não vamos precisar disso ; ) make install ######################################################### #pronto. o kernel foi compilado e suporta o uso do pf, agora #temos que dizer para o FreeBSD ativar o PF na inicialização: ######################################################### #### "ligar" o pf durante o boot ##### echo "pf_enable=\"YES\"" >> /etc/rc.conf echo "pf_rules=\"/etc/pf.conf\"" >> /etc/rc.conf echo "pf_flags=\"\"" >> /etc/rc.conf echo "pflog_enable=\"YES\"" >> /etc/rc.conf echo "pflog_file=\"/var/log/pflog\"" >> /etc/rc.conf echo "pflog_flags=\"\"" >> /etc/rc.conf echo "gateway_enable=\"YES\"" >> /etc/rc.conf ######################################################### #e para fazer o proxy ser transparente, vamos redirecionar o que vai sair #pela porta 80 para o squid ######################################################### #### fazer o proxy transparente #### #### (vr0 é a interface interna) #### echo "rdr pass on vr0 proto tcp from any to any port 80 -> 127.0.0.1 port 3128" >> /etc/pf.conf ######################################################### #========================================================== #========================================================== #========================================================== #até agora o que foi feito serve para você usar tanto o squid 2.5 quanto o squid 2.6 #agora vou mostrar o que deve ser feito para usar o squid 2.5 e #mais para baixo o squid 2.6 #========================================================== #========================================================== #========================================================== ############################################################# #### Se for o usar o squid 2.5 - instale pelo ports #### cd /usr/ports/www/squid make clean make SQUID_CONFIGURE_ARGS="--bindir=/usr/local/sbin --sysconfdir=/usr/local/etc/squid --datadir=/usr/local/etc/squid --libexecdir=/usr/local/libexec/squid --localstatedir=/usr/local/squid '--enable-removal-policies=lru heap' '--enable-auth=basic digest' '--enable-basic-auth-helpers=NCSA PAM MSNT SMB YP' --enable-async-io --with-pthreads --with-aio '--enable-storeio=ufs diskd null aufs coss' --enable-delay-pools --enable-snmp --enable-htcp --enable-cache-digests --enable-underscores --enable-useragent-log --enable-arp-acl --enable-pf-transparent --with-large-files --enable-large-cache-files --enable-stacktraces --enable-err-languages=Portuguese --enable-default-err-language=Portuguese --prefix=/usr/local" make install clean ############################################################# #o squid já está instalado, agora vamos adicionar umas regrinhas de exemplo no squid. #Essas regras bloqueiam todas as url que tenham a sigla 'ol' e 'orkut', #a não ser que a url tenha também as siglas 'mail' ou 'bol'. #Para todo o resto o acesso é liberado #na prática significa que se são bloqueados os sites: #www.uol.com.br www.gol.com.br www.olimpia.com.br www.orkut.com #mas não são bloqueados os sites: #zipmail.uol.com.br www.gmail.com www.bol.com.br ############################################################# #### colocar em /usr/local/etc/squid/squid.conf ##### #### caso estiver usando o squid 2.5 echo "" > /usr/local/etc/squid/squid.conf echo "http_port 127.0.0.1:3128" >> /usr/local/etc/squid/squid.conf echo "acl all src 0.0.0.0/0.0.0.0" >> /usr/local/etc/squid/squid.conf echo "acl to_localhost dst 127.0.0.1" >> /usr/local/etc/squid/squid.conf echo "acl blockSites url_regex orkut ol" >> /usr/local/etc/squid/squid.conf echo "acl unblockSites url_regex mail bol" >> /usr/local/etc/squid/squid.conf echo "" >> /usr/local/etc/squid/squid.conf echo "http_access deny to_localhost" >> /usr/local/etc/squid/squid.conf echo -n "http_access deny blockSites " >> /usr/local/etc/squid/squid.conf echo -n ! >> /usr/local/etc/squid/squid.conf echo "unblockSites" >> /usr/local/etc/squid/squid.conf echo "http_access allow all" >> /usr/local/etc/squid/squid.conf echo "" >> /usr/local/etc/squid/squid.conf echo "#visible_hostname seuhostname.seudominio" >> /usr/local/etc/squid/squid.conf echo "httpd_accel_host virtual" >> /usr/local/etc/squid/squid.conf echo "httpd_accel_port 80" >> /usr/local/etc/squid/squid.conf echo "httpd_accel_with_proxy on" >> /usr/local/etc/squid/squid.conf echo "httpd_accel_uses_host_header on" >> /usr/local/etc/squid/squid.conf ############################################################# #criar os diretórios do cache squid -z #adicona no /etc/rc.conf a linha para iniciar o squid no boot echo "squid_enable=\"YES\"" >> /etc/rc.conf #o squid precisa ter premissão rw no /dev/pf, então muda-se o grupo do #pf para 'squid' e dá as permissões rw para o dono(root) e grupo(squid) echo "own /dev/pf root:squid" >> /etc/devfs.conf echo "perm /dev/pf 0660" >> /etc/devfs.conf #pronto! é só rebootar a máquina que tudo vai funcionar. #Para você configurar o squid edite o arquivo /usr/local/etc/squid/squid.conf, #ai você vai ter que pesquisar como fazer as configurações nesse arquivo, #ou então você pode usar o webmin para configurar (entre outras coisas) o squid 2.5 ############################################################# #### se estiver usando o squid 2.5 compilar #### #### o webmin pelo ports (Versão 1.290) #### cd /usr/ports/sysutils/webmin/ make clean make install clean #agora configure o webmin, algumas perguntas serão feitas, #deixe todas com o valor padrão e não esqueça da senha /usr/local/lib/webmin/setup.sh ######################################################### #ah! e só falta dizer para o FreeBSD 'ligar' o webmin no boot echo "webmin_enable=\"YES\"" >> /etc/rc.conf #Pronto! Reinicie a máquina. Para acessar o webmin acesse pela porta 10000, #ou seja http://ipdamaquina:10000/ #os clientes da sua rede necessitam ter como gateway essa máquina, #do resto não é necessário nenhuma outra #informação/configuração. #========================================================== #========================================================== #========================================================== #se você quiser usar o squid 2.6 as instruções estão a seguir. #eu tentei compilar o squid 2.6 pelo ports, mas tive um comportamento bem chato. #se eu configurasse o squid 2.6 do ports para ficar na porta 3128 (a padrão) #então quando alguém tentasse acessar um site (www.bol.com.br , por exemplo) #o squid tentava acessar http://www.bol.com.br:3128 #(entendem? ao invés de usar a porta 80... #o squid tentava usar a porta dele para acessar o site. #se eu colocasse o squid em outra porta (5050, por exemplo) #então quando o usuário digitasse no navegador http://www.bol.com.br #o squid tentava acessar http://www.bol.com.br:5050 #e assim para qualquer porta. Não sei se é cabeçada/cagada/imbecilidade **minha**, #só sei que não consegui com o squid 2.6 do ports, #mas consegui usar o squid 2.6 quando eu #compilei apatir dos sources do site do squid #ah claro! se eu usasse o squid do ports e colocasse ele na porta 80 então funcionava, #mas ai eu não poderia usar esse computador para servir páginas e seria bem porco isso... #========================================================== #========================================================== #========================================================== ############################################################# #### Se for o usar o squid 2.6 - baixe o source no site #### #### http://www.squid-cache.org/Versions/v2/2.6/ #### cd /usr/src wget http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE3.tar.gz tar -zxvf squid-2.6.STABLE3.tar.gz cd squid-2.6.STABLE3 ./configure --bindir=/usr/local/sbin --sysconfdir=/usr/local/etc/squid --datadir=/usr/local/etc/squid --libexecdir=/usr/local/libexec/squid --localstatedir=/usr/local/squid '--enable-removal-policies=lru heap' '--enable-auth=basic digest' '--enable-basic-auth-helpers=NCSA PAM MSNT SMB YP' --enable-async-io --with-pthreads --with-aio '--enable-storeio=ufs diskd null aufs coss' --enable-delay-pools --enable-snmp --enable-htcp --enable-cache-digests --enable-underscores --enable-useragent-log --enable-arp-acl --enable-pf-transparent --with-large-files --enable-large-cache-files --enable-stacktraces --enable-err-languages=Portuguese --enable-default-err-language=Portuguese --prefix=/usr/local make all make install pw adduser -n squid -d /dev/true chown -R squid:squid /usr/local/squid chown -R squid:squid /usr/local/etc/squid chmod -R 740 /usr/local/squid chmod -R 740 /usr/local/etc/squid ############################################################# #o squid já está instalado, agora vamos adicionar umas regrinhas de exemplo no squid. #Essas regras bloqueiam todas as url que tenham a sigla 'ol' e 'orkut', #a não ser que a url tenha também as siglas 'mail' ou 'bol'. #Para todo o resto o acesso é liberado #na prática significa que se são bloqueados os sites: #www.uol.com.br www.gol.com.br www.olimpia.com.br www.orkut.com #mas não são bloqueados os sites: #zipmail.uol.com.br www.gmail.com www.bol.com.br ############################################################# #### colocar em /usrl/local/etc/squid/squid.conf ##### #### caso estiver usando o squid 2.6 echo "" > /usr/local/etc/squid/squid.conf echo "cache_effective_user squid" >> /usr/local/etc/squid/squid.conf echo "cache_effective_group squid" >> /usr/local/etc/squid/squid.conf echo "http_port 127.0.0.1:3128 transparent" >> /usr/local/etc/squid/squid.conf echo "acl all src 0.0.0.0/0.0.0.0" >> /usr/local/etc/squid/squid.conf echo "acl to_localhost dst 127.0.0.1" >> /usr/local/etc/squid/squid.conf echo "acl our_networks src 192.168.1.0/24" >> /usr/local/etc/squid/squid.conf echo "acl blockSites url_regex orkut ol" >> /usr/local/etc/squid/squid.conf echo "acl unblockSites url_regex mail bol" >> /usr/local/etc/squid/squid.conf echo "" >> /usr/local/etc/squid/squid.conf echo "http_access deny to_localhost" >> /usr/local/etc/squid/squid.conf echo -n "http_access deny blockSites " >> /usr/local/etc/squid/squid.conf echo -n ! >> /usr/local/etc/squid/squid.conf echo "unblockSites" >> /usr/local/etc/squid/squid.conf echo "http_access allow all" >> /usr/local/etc/squid/squid.conf ############################################################# #criar os diretórios do cache squid -z ############################################################# #criar um script de inicialização: echo -n "#" > /usr/local/etc/rc.d/squid echo -n ! >> /usr/local/etc/rc.d/squid echo "/bin/sh" >> /usr/local/etc/rc.d/squid echo "" >> /usr/local/etc/rc.d/squid echo "# PROVIDE: squid" >> /usr/local/etc/rc.d/squid echo "# REQUIRE: LOGIN cleanvar" >> /usr/local/etc/rc.d/squid echo "" >> /usr/local/etc/rc.d/squid echo ". /etc/rc.subr" >> /usr/local/etc/rc.d/squid echo "" >> /usr/local/etc/rc.d/squid echo "name=\"squid\"" >> /usr/local/etc/rc.d/squid echo "rcvar=\`set_rcvar\`" >> /usr/local/etc/rc.d/squid echo "command=/usr/local/sbin/squid" >> /usr/local/etc/rc.d/squid echo "stop_cmd=\"squid_stop\"" >> /usr/local/etc/rc.d/squid echo "start_cmd=\"squid_start\"" >> /usr/local/etc/rc.d/squid echo "" >> /usr/local/etc/rc.d/squid echo "squid_stop() {" >> /usr/local/etc/rc.d/squid echo " echo \"Stopping \${name}.\"" >> /usr/local/etc/rc.d/squid echo " \${command} -k kill" >> /usr/local/etc/rc.d/squid echo "}" >> /usr/local/etc/rc.d/squid echo "" >> /usr/local/etc/rc.d/squid echo "" >> /usr/local/etc/rc.d/squid echo "squid_start() {" >> /usr/local/etc/rc.d/squid echo " echo \"Starting \${name}.\"" >> /usr/local/etc/rc.d/squid echo " \${command} -D" >> /usr/local/etc/rc.d/squid echo "}" >> /usr/local/etc/rc.d/squid echo "" >> /usr/local/etc/rc.d/squid echo "load_rc_config \${name}" >> /usr/local/etc/rc.d/squid echo "run_rc_command \"\$1\"" >> /usr/local/etc/rc.d/squid chmod 740 /usr/local/etc/rc.d/squid ############################################################# #adicona no /etc/rc.conf a linha para iniciar o squid no boot echo "squid_enable=\"YES\"" >> /etc/rc.conf #o squid precisa ter premissão rw no /dev/pf, então muda-se o grupo do #pf para 'squid' e dá as permissões rw para o dono(root) e grupo(squid) echo "own /dev/pf root:squid" >> /etc/devfs.conf echo "perm /dev/pf 0660" >> /etc/devfs.conf #pronto! é só rebootar a máquina que tudo vai funcionar. #Para você configurar o squid edite o arquivo /usr/local/etc/squid/squid.conf, #ai você vai ter que pesquisar como fazer as configurações nesse arquivo, #ou então você pode usar o webmin para configurar (entre outras coisas) o squid 2.6 #o detalhe é que o webmin que existe no ports não funciona (ainda) para o squid 2.6 #então temos que pegar o webmin lá no site dele a versão que usei do webmin que #funciona com o squid 2.6 é a versão 'teste' 1.300 ############################################################# #### se estiver usando o squid 2.6 tem que baixar os #### #### sources do webmin "beta" (Versão 1.300) #### #### http://download.webmin.com/devel/tarballs/ #### #### descompactar e no diretorio onde descompactou #### cd /usr/src/ wget http://download.webmin.com/devel/tarballs/webmin-1.300.tar.gz tar -zxvf webmin-1.300.tar.gz cd webmin-1.300 #agora configure o webmin, algumas perguntas serão feitas, #deixe todas com o valor padrão e não esqueça da senha ./setup.sh ############################################################# #ah! e só falta dizer para o FreeBSD 'ligar' o webmin no boot #na verdade acho que essa versão do webmin já adiciona essa #linha no rc.conf, mas é bom garantir... echo "webmin_enable=\"YES\"" >> /etc/rc.conf #Pronto! Reinicie a máquina. Para acessar o webmin acesse pela porta 10000, ou seja http://ipdamaquina:10000/ #os clientes da sua rede necessitam ter como gateway essa máquina, do resto não é necessário nenhuma outra #informação/configuração. -- Marcelo Rossi ------------------------- Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd