Squid e firewall em 5 minutos

Este é um modelo simples para instalação e configuração do Squid e iptables. Baseado em dicas rápidas e transcrição de arquivos de configuração.

[ Hits: 132.045 ]

Por: Rogério Tomassoni em 13/09/2007


Introdução



Objetivos deste documento

Descrever e especificar os meios para manipular o proxy da empresa, que é a principal fonte de informações para as pessoas envolvidas com a área de TI.

Público alvo: Técnicos e administradores de rede.

Missão

Dar suporte para realizar as atividades relacionadas a manipulação do proxy, como bloquear e liberar acessos.

Fornecer as informações necessárias para instalação e configuração dos aplicativos utilizados para tal tarefa.

Arquitetura atual

Na presente data de escrita da deste (na versão 1), o servidor conta com o sistema operacional Linux Slackware 11, com instalação personalizada.

Levaremos em consideração que o SO e esteja devidamente instalado, com as duas interfaces de rede funcionando.

Os pacotes necessários (hoje instalados) para o funcionamento são:
  • Iptables versão 1.3.5 - Este para o firewall, onde é realizado o direcionamento.
  • Squid versão 2.6. stable 4 - Este é o Proxy propriamente dito.
  • Sarg versão 2.2.2 - Este para visualizar os relatórios de acesso do squid.

Instalação do Squid

Para realizar a instalação do squid , devemos fazer o download do mesmo, e pode ser encontrado em:
Em último caso pode ser encontrado no site dos desenvolvedores:
O pacote se encontra na extensão tgz, extensão nativa para o Slackware, logo basta entrar no diretório onde se encontra o aplicativo e executar o instalador, assim (lembrando que devemos estar com permissão de root, representado no console pelo caractere #):

# installpkg squid-2.6.STABLE4-i486-1ztm.tgz

Para verificar se o pacote foi instalado corretamente (este lista todos pacotes instalados) use:

# pkgtool

Em seguida escolha a opção view.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Arquivos de configuração
   3. Os arquivos
   4. Comandos do Squid
   5. Redirecionando porta
Outros artigos deste autor

Linux + Samba como PDC

Introdução ao framework Mentawai

Openfire + Gateway + MSN

Uma abordagem ao eGroupware como solução para agendamento

Leitura recomendada

Criando delay pools (Proxy/Squid)

Squid 3.4.8 + SSL + Firewall + DNS + DHCP no Debian Jessie (v.8)

Squid atuando como proxy reverso

Gerando relatórios no Sarg com nome da máquina/usuário ao invés do IP

Squid balanceado com LVS

  
Comentários
[1] Comentário enviado por marden_pimenta em 13/09/2007 - 21:56h

muito bom estava pensando em compilar algo parecido.
estou trabalhando para fazer um pacote completo onde ele instala tudo e jah joga os script no lugar devido e seu artigo me deu algumas ideias.

mais uma vez parabens pelo artigo.

[2] Comentário enviado por tomassoni em 14/09/2007 - 11:38h

Legal, fico contente de poder contribuir com algo.
Acredito que isso essa idéia sua e muito boa para instalações rapidas em clientes.Muito legal.
Valeu.

[3] Comentário enviado por coffani em 14/09/2007 - 15:40h

Muito bom seu artigo... Parabens

[4] Comentário enviado por sergrodr em 20/09/2007 - 00:09h

?comentario=Parabens. Excelente artigo. :D

[5] Comentário enviado por duduzinhu em 20/09/2007 - 11:19h

Caro Amigo
Estou com problemas no meu SQUID ao colocar ele com suporte a antivirus.
Uso o SQUID 3.1, o SQUIDCLAMAV 2.5 e o CLAMAV 0.91.2. Todos devidamente configurados (eu acho =D). O servidor antivirus do clamav (clamd) esta rodando em minha maquina, assim como o SQUID. Acontece que quando eu entro em algum site ou faço algum download de um arquivo com a estensão que deve ser escaneada pelo CLAMAV, os logs do squidclamav me retornam a seguinte mensagem:

Thu Sep 20 11:14:13 2007 [28974]:Request:http://rapidshare.com/files/27602652/setup-4.1.2.exe 127.0.0.1/localhost.localdomain eduardo GET
Thu Sep 20 11:14:13 2007 [28974]:regex matched: http://rapidshare.com/files/27602652/setup-4.1.2.exe
Thu Sep 20 11:14:15 2007 [28974]:File size is 172970.00
Thu Sep 20 11:14:15 2007 [28974]:Sending STREAM to clamd.
Thu Sep 20 11:14:15 2007 [28974]:Received port 30830 from clamd.
Thu Sep 20 11:14:15 2007 [28974]:Trying to connect to clamd [port: 30830].
Thu Sep 20 11:14:15 2007 [28974]:Error when downloading url http://rapidshare.com/files/27602652/setup-4.1.2.exe
Thu Sep 20 11:14:15 2007 [28974]:CURLOPT_ERRORBUFFER: The requested URL returned error: 407

Já quando faço download de um arquivo com estensão que não deve ser escaneada os logs do squidclamav me retornam a seguinte mensagem:

Thu Sep 20 11:14:16 2007 [28974]:Request:http://images.rapidshare.com/img/img/terminatr_back.png 127.0.0.1/localhost.localdomain eduardo GET
Thu Sep 20 11:14:16 2007 [28974]:No antivir check for url:http://images.rapidshare.com/img/img/terminatr_back.png
Thu Sep 20 11:14:16 2007 [28974]:Total process time 0.000 sec for URL: http://images.rapidshare.com/img/img/terminatr_back.png 127.0.0.1/localhost.localdomain eduardo GET

O meu squidclamav.conf é o seguinte:

proxy http://127.0.0.1:3128
logfile /usr/local/squidclamav/logs/squidclamav.log
redirect http://127.0.0.1/cgi-bin/clwarn.cgi
debug 1
force 1
stat 1
clamd_ip 127.0.0.1
clamd_port 3310
timeout 60
regexi ^.*\.exe$
regexi ^.*\.com$
regexi ^.*\.zip$
regexi ^.*\.bz2$
regexi ^.*\.tgz$
regexi ^.*\.tar$
regexi ^.*\.gz$
regexi ^.*\.rar$
regexi ^.*\.iso$
regexi ^.*\.pdf$
regexi ^.*\.bat$
regexi ^.*\.src$
abort ^.*\/cgi-bin\/.*$
abort ^.*\..html$
abort ^.*\..htm$
abort ^.*\..css$
abort ^.*\..xml$
abort ^.*\..xsl$
abort ^.*\..js$
abort ^.*\..ico$
aborti ^.*\..gif$
aborti ^.*\..png$
aborti ^.*\..jpg$
aborti ^.*\..tif$
aborti ^.*\..swf$

A parte do squid.conf que envolve o squidclamav é a seguinte:

redirect_program /usr/local/squidclamav/bin/squidclamav
redirect_children 15

Quando inicio o CLAMD (servidor de antivirus do clamav) os logs do clamav são os seguintes:

Thu Sep 20 10:48:44 2007 -> +++ Started at Thu Sep 20 10:48:44 2007
Thu Sep 20 10:48:44 2007 -> clamd daemon 0.91.2 (OS: linux-gnu, ARCH: i386, CPU: i386)
Thu Sep 20 10:48:44 2007 -> Running as user root (UID 0, GID 0)
Thu Sep 20 10:48:44 2007 -> Log file size limit disabled.
Thu Sep 20 10:48:44 2007 -> Reading databases from /var/lib/clamav
Thu Sep 20 10:48:48 2007 -> Loaded 305982 signatures.
Thu Sep 20 10:48:48 2007 -> Bound to address 127.0.0.1 on tcp port 3310
Thu Sep 20 10:48:48 2007 -> Setting connection queue length to 300
Thu Sep 20 10:48:48 2007 -> Unix socket file /tmp/clamd.socket
Thu Sep 20 10:48:48 2007 -> Setting connection queue length to 300
Thu Sep 20 10:48:48 2007 -> Listening daemon: PID: 28359
Thu Sep 20 10:48:48 2007 -> Archive: Archived file size limit set to 3145728000 bytes.
Thu Sep 20 10:48:48 2007 -> Archive: Recursion level limit set to 10.
Thu Sep 20 10:48:48 2007 -> Archive: Files limit set to 5000000.
Thu Sep 20 10:48:48 2007 -> Archive: Compression ratio limit set to 300.
Thu Sep 20 10:48:48 2007 -> Archive: Limited memory usage.
Thu Sep 20 10:48:48 2007 -> Archive support enabled.
Thu Sep 20 10:48:48 2007 -> Algorithmic detection enabled.
Thu Sep 20 10:48:48 2007 -> Portable Executable support enabled.
Thu Sep 20 10:48:48 2007 -> ELF support enabled.
Thu Sep 20 10:48:48 2007 -> Detection of broken executables enabled.
Thu Sep 20 10:48:48 2007 -> Mail files support enabled.
Thu Sep 20 10:48:48 2007 -> Mail: Recursion level limit set to 128.
Thu Sep 20 10:48:48 2007 -> OLE2 support enabled.
Thu Sep 20 10:48:48 2007 -> PDF support enabled.
Thu Sep 20 10:48:48 2007 -> HTML support enabled.
Thu Sep 20 10:48:48 2007 -> Self checking every 3600 seconds.

O CLAMD está rodando na porta 3310 e no ip 127.0.0.1 com o usuario root.

Ja desabilitei o Selinux e o firewall mas nada muda.
Uso o Fedora Core 7
Ja testei com o SQUID 2.5 e uma versão mais antiga do SQUIDCLAMAV mas tbm não muda os logs.

Espero que possas me ajudar

Obrigado
Eduardo

[6] Comentário enviado por rodrigoadachi em 23/09/2007 - 06:30h

Ola muito bom mas no meu deu um erro.
Criei o diretorio /var/cache/squid
e digitei:
# squid -z
me retornou:
2007/09/23 02:42:24| Creating Swap Directories
FATAL: Failed to make swap directory /var/cache/squid/00: (13) Permission denied
Squid Cache (Version 2.6.STABLE6): Terminated abnormally.
CPU Usage: 0.001 seconds = 0.001 user + 0.000 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0

O q ta errado?? Tirei tb algumas coisas cm as alc's de horario e msn pq o meu é para um provedor.
Obrigado...

[7] Comentário enviado por tomassoni em 24/09/2007 - 09:46h

Duduzinho....Cara vou ficar devendo uma ajuda pra você, nunca fiz essa configuração que você precisa.
Mas tem um link bom http://www.linuxman.pro.br/squid/
As vezes possa te ajudar
http://under-linux.org/forums/proxy-nat-firewall/95946-squid-squidclamav-clamav.html

# TAG: cache_effective_user
# If you start Squid as root, it will change its effective/real
# UID/GID to the user specified below. The default is to change
# to UID to nobody. If you define cache_effective_user, but not
# cache_effective_group, Squid sets the GID to the effective
# user`s default group ID (taken from the password file) and
# supplementary group list from the from groups membership of
# cache_effective_user.
#
#Default:
# cache_effective_user nobody
cache_effective_user squid

Rodrigo seu problema esta com a permissão de criação do swap
FATAL: Failed to make swap directory /var/cache/squid/00: (13) Permission denied
Verifique o usuário configurado no squid.conf e se esse usuário existe no /etc/passwd.
Vai dando um status

Exemplo do arquivo /squid.conf com o usuário ‘squid’

Exemplo:

# TAG: cache_effective_user
# If you start Squid as root, it will change its effective/real
# UID/GID to the user specified below. The default is to change
# to UID to nobody. If you define cache_effective_user, but not
# cache_effective_group, Squid sets the GID to the effective
# user`s default group ID (taken from the password file) and
# supplementary group list from the from groups membership of
# cache_effective_user.
#
#Default:
# cache_effective_user nobody
cache_effective_user squid

[8] Comentário enviado por rodrigoadachi em 24/09/2007 - 16:52h

Ok valew tomassoni...

coloquei no /etc/rc.d/rc.local
iptables -t nat -A PREROUTING ! -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING ! -i eth0 -p tcp --dport 8080 -j REDIRECT --to-port 3128

Criar usuario:
# useradd squid
Dei permissão ao usuario:
# chown -R squid.squid /var/cache/squid

squid -z
squid -D
tudo ok

mas quando eu digito:
# service squid restart
Parando o squid: [FALHOU]
Iniciando squid: [FALHOU]

dar erro
Cara preciso de um script simples sem limite de horario sem bloqueio só o basico de um proxy transparente, pq eh para um provedor, precisarei depois de controle de MAC mas preciso rodar ele do jeito mais simples possivel somente cm o cache, meu HD eh de 30GB e memória de 512MB e distro CentOS 5, o q vc me recomenda???

[9] Comentário enviado por tomassoni em 24/09/2007 - 20:48h

Cara eu rodo esse exemplo ai em um pc com placa AIX 500Mhz com 512 de RAM e 40G de hd, ele ficou rodando 40 dias sem parar em uma rede com 35 usuarios.

Agora precisa ver usa necessidade, mas acredito que essa sua ai ta bom.Mas depende....rs.

Na sua regra tem um ! ta certo?! não conheço.
Ja o squid esse usuario existe? squid?

[10] Comentário enviado por rodrigoadachi em 26/09/2007 - 15:13h

Realmente nem tinha reparado mas alem disso o squid ñ funciona quanto ao usuario eu criei cm o nome de squid

Criar usuario:
# useradd squid
Dei permissão ao usuario:
# chown -R squid.squid /var/cache/squid

ms o script da erro...
ja criei tb o cache

squid -z
squid -D
tudo ok

[11] Comentário enviado por Nick em 03/10/2007 - 09:12h

Legal, mas e o sarg?

[12] Comentário enviado por tomassoni em 08/10/2007 - 15:33h

Como assim e o sarg ???

[13] Comentário enviado por rodrigosalmeida em 07/01/2008 - 00:48h

Muito bom artigo...parabens...

[14] Comentário enviado por py9mt em 10/02/2008 - 12:27h

Xou de bola, me ajudou bastante

[15] Comentário enviado por k4mus em 26/07/2008 - 13:19h

artigo muit bom .simples e objetivo. MAs faltou vc falar do sarg, ja q la no inicio vc o coloca como sedo arquivos pra baixar. Mas, o sarg e simplisinho, sei q ninguem vai ter dificuldade em utilizalo nao. Aqui no VOL tem muito falando dele ..


abraco

[16] Comentário enviado por linus black em 13/08/2009 - 14:05h

Cara gostei muito do seu artigo.
baseando se nele eu consegui faser o meu firewall para minha nessecidade.

#!/bin/sh
#
# rc.firewall .By Linus Black For slackware12.2
#
#
#
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_LOG
modprobe ipt_limit
modprobe ipt_state
modprobe ipt_REDIRECT
modprobe ipt_owner
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_gre
#
#Limpa as Regras
iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
#
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/log_martians
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
echo "1800" > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/tcp_ecn
echo "1" > /proc/sys/net/ipv4/tcp_timestamps
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "=========================================================|"
echo "|:INICIANDO A CONFIGURAÇÃO DO FIREWALL NETFILTER ATRAVÉS:|"
echo "|: DO IPTABLES :|"
echo "=========================================================|"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
#Politicas Padrao
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#
### Ativando Protecoes Contra Ataques ###
# 1 - Protecao contra Trinoo
iptables -N TRINOO
iptables -A TRINOO -m limit --limit 1/s -j LOG --log-level 6 --log-prefix "FIREWALL(Prot. Trinoo): "
iptables -A TRINOO -j DROP
iptables -A INPUT -p tcp -i eth0 --dport 27444 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 27665 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 31335 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 34555 -j TRINOO
iptables -A INPUT -p tcp -i eth0 --dport 35555 -j TRINOO
echo "ativado o bloqueio a tentativa de ataque do tipo Trinoo"
echo "ON .................................................[ OK ]"
# 2 - Protecao contra Trojans
iptables -N TROJAN
iptables -A TROJAN -m limit --limit 1/s -j LOG --log-level 6 --log-prefix "FIREWALL(Prot. Trojan): "
iptables -A TROJAN -j DROP
iptables -A INPUT -p tcp -i eth0 --dport 666 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 666 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 4000 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 6000 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 6006 -j TROJAN
iptables -A INPUT -p tcp -i eth0 --dport 16660 -j TROJAN
echo "ativado o bloqueio a tentativa de ataque do tipo Trojan"
echo "ON .................................................[ OK ]"
# 3 - Protecao contra Worms
iptables -A FORWARD -p tcp --dport 135 -i eth0 -j REJECT
echo "ativado o bloqueio a tentativa de ataque do tipo Worms"
echo "ON .................................................[ OK ]"
# 4 - Protecao contra Syn-Flood
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
echo "ativado o bloqueio a tentativa de ataque do tipo Syn-Flood"
echo "ON .................................................[ OK ]"
# 5 - Protecao contra Ping da Morte
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo "ativado o bloqueio a tentativa de ataque do tipo ping "
echo "ON .................................................[ OK ]"
# 6 - Protecao contra Port Scanners
iptables -N SCANNER
iptables -A SCANNER -m limit --limit 1/s -j LOG --log-level 6 --log-prefix "FIREWALL(Port Scanner): "
iptables -A SCANNER -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL NONE -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL ALL -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i eth0 -j SCANNER
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i eth0 -j SCANNER
iptables -A INPUT -p udp -s 0/0 -i eth0 --dport 33435:33525 -j REJECT
iptables -A INPUT -m state --state INVALID -j REJECT
echo "ativado o bloqueio a tentativa de ataque do tipo Scanners"
echo "ON .................................................[ OK ]"
#
#Rotiamento e redirecionamento
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE
echo "ativado o Rotiamento"
echo "ON .................................................[ OK ]"
#Liberando rrede interna
iptables -A OUTPUT -s 192.168.0.0/16 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.0.15 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT
#
#Mantendo a coneo
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# BLOQUEA O QUE NAO SE ENCAIXA NAS REGRAS ACIMA
iptables -A INPUT -p tcp --syn -j DROP
iptables -P FORWARD DROP
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
echo "=========================================================|"
echo "|: CARREGAMENTO BEM SUSSEDIDO :|"
echo "|: DO IPTABLES :|"
echo "=========================================================|"
echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"

Eu estou usando
e já testei em varios sites de teste para firewall e passou em todos....

[17] Comentário enviado por linus black em 13/08/2009 - 14:08h

testes feitos aqui.

Teste o seu firewall nestes sites:

http://scan.sygatetech.com/

Direto na página de testes das portas
http://scan.sygatetech.com/stealthscan.html

http://www.auditmypc.com/

https://grc.com/x/ne.dll?bh0bkyd2


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts