Você está na página 1de 8

Firewall + Proxy autenticado + Apache (Centos 5.

5 32/64 bits)

Ambiente
O ambiente usado neste artigo consiste em umaVM (Virtual Machine ou Máquina Virtual), rodando Centos5.5 64
bits com duas placas de redes. Uma para o link de Internet, e outra para a rede interna.

Testei e tenho em produção tudo que abordaremos neste artigo. Dúvidas, dicas e críticas construtivas são sempre
bem-vindas.

Lista dos pacotes que utilizaremos:

• Firewall: Iptables
• Proxy: Squid 2.6 Stable
• Relatórios de acesso a sites: Sarg 2.3.1
• Web Server: Apache 2.2.3
• Sistema Operacional: Centos 5.5 64 Bits

Tendo em vista que:


• eth0 = Minha placa de rede INTERNA
• eth1 = Minha placa de rede EXTERNA
• 192.168.1.0/24 = Cadeia de ips da minha rede interna

Instalação dos pacotes necessários


Primeiramente atualizaremos o sistema:

# yum update -y

Depois instalaremos os pacotes necessários que incluem bibliotecas GCC, Apache, PHP, Joe e Squid:

# yum install gcc* httpd php php-devel squid joe -y

Instalado todos os pacotes acima, chegou a hora do Sarg:

# cd /root/
# wget http://www.sfr-fresh.com/unix/privat/sarg-2.3.1.tar.gz

Depois descompactamos o Sarg e efetuamos sua instalação:

# tar -zxvf sarg-2.3.1.tar.gz


# cd sarg-2.3.1
# ./configure
# make && make install

Configuração do seu Firewall (Iptables)


O script que utilizaremos é simples, mas eficaz. Ele bloqueia TUDO e depois você tem que liberar o que é
necessário para sua rede. No script teremos todos os comentários possíveis ajudando na sua interpretação:

Crie o arquivo:

# joe /etc/rc.d/rc.firewall

E nele, cole o que estiver abaixo:

#!/bin/sh
### Script criado por Lucas Possamai ######################################
###############################################################
###############################################################
############ Define Variaveis ########################################

echo "Definindo variaveis.................................[OK]"


EXT=eth1
INT=eth0
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

echo "Ativando roteamento.................................[OK]"


echo "1" > /proc/sys/net/ipv4/ip_forward

echo "Limpando Regras.....................................[OK]"


### Limpando regras iptables ###
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F
iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
iptables -X
###############################################################
############ Politicas #############################################
###############################################################

echo "Dropando tudo.......................................[OK]"


iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

###############################################################
############## NAT #############################################
###############################################################

echo "Definindo NAT.......................................[OK]"


## Redireciona SQUID rede INT ##
iptables -t nat -A PREROUTING -i $INT -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

## Mascarando internet ##
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o $EXT -j MASQUERADE

###############################################################
############ INPUT ##############################################
###############################################################

echo "Definindo INPUT......................................[OK]"


iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
## Aceita conexao SSH qualquer lugar ##
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
## Aceita APACHE ##
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
## Aceita ping ##
iptables -A INPUT -p icmp -j ACCEPT
## Libera SQUID na rede INT ##
iptables -A INPUT -i $INT -p tcp --dport 3128 -j ACCEPT

###############################################################
############ OUTPUT #############################################
###############################################################

echo "Definindo OUTPUT.....................................[OK]"


iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

###############################################################
############ FORWARD ############################################
###############################################################

echo "Definindo FORWARD.....................................[OK]"


iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
## Liberando ( TCP ) DNS, smtp, pop, http e squid para rede interna ##
iptables -A FORWARD -p tcp -m multiport --dports 25,53,80,110,3128 -j ACCEPT
## Liberando DNS ( UDP ) para rede interna ##
iptables -A FORWARD -p udp --dport 53 -j ACCEPT
## Liberando PING para rede interna ##
iptables -A FORWARD -p icmp -j ACCEPT

Avisos:
• Você deve alterar a variavel EXT para qual for sua placa de rede ligada a internet
• Você deve alterar a variavel INT para qual for sua placa de rede ligada a rede interna
• Você deve alterar os campos aonde contém 192.168.1.0/24 para a range de IPS da sua rede interna

Agora daremos permissão de execução ao script:

# chmod 777 /etc/rc.d/rc.firewall

Configuração do seu Proxy autenticado


Bom, chegou a hora de nosso amigo... o Squid! Com ele você conseguirá bloquear/liberar sites,
downloads e palavras. Com a autenticação, ele permite que você libere o
site www.vivaolinux.com.br para o usuário lucas, mas para o joão fica ainda bloqueado, por
exemplo.

Liberação por grupos:

Bem, vamos ao que interessa. Entremos na pasta do Squid:

# cd /etc/squid/

Após isso, vamos editar o arquivo de configuração:

# joe squid.conf

A seguir o meu arquivo squid.conf. O mesmo possuí vários comentários que irão auxiliar você. No
final postarei meus comentários extras.
### INICIO SQUID.CONF ###
#############################################################
##### By Lucas Possamai ###########################################
#############################################################

acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8

############## REDE LOCAL #########################


### Aqui ele libera a rede 192.168.1.0/24 para se conectar ao squid ####
acl localnet src 192.168.1.0/255.255.255.0
## Na linha a baixo, ficarao os ips que poderao
## Navegar sem passar pelo proxy
acl ips_sem_senha src 192.168.1.168

############## ACL PORTAS ##############


acl all src 0.0.0.0/0.0.0.0
acl SSL_ports port 443 acl Safe_ports port 80 # http
; acl Safe_ports port 21 # ftp
; acl Safe_ports port 25 # SMTP
; 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 autenticacao ##
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
## Nesta linha a baixo, vc ira informar qual mensagem ira aparecer
## Para o usuario, quando ele abrir o navegador
auth_param basic realm | Proxy da xxxxx - Entre com seu usuario e senha |
auth_param basic credentialsttl 10 hours
auth_param basic children 10

## ACL de GRUPOS ##
acl diretoria proxy_auth "/etc/squid/grupos/diretoria"
acl administrativo proxy_auth "/etc/squid/grupos/administrativo"
acl informatica proxy_auth "/etc/squid/grupos/informatica"
acl financeiro proxy_auth "/etc/squid/grupos/financeiro"

## ACL de MSN ##
acl usuariosMSN proxy_auth
acl MSN req_mime_type -i ^application/x-msn-messenger$
acl dll_MSN url_regex -i gateway.dll
acl dll2_MSN url_regex -i sqmserver.dll
acl msn_domains
dstdomain .msn.com .msn.com:443 .hotmail.com .hotmail.com:443 .live.com .live.com:443 .microsoft.com .micro
soft.com:443

#ACL's de update do Windows


acl windows_update dstdomain download.windowsupdate.com download.microsoft.com update.microsoft.com
www.update.microsoft.com:443
update.microsoft.com:443

## ALCs de SITE ##
acl sites_informatica url_regex -i "/etc/squid/regras/sites_liberados_informatica"
acl sites_administrativo url_regex -i "/etc/squid/regras/sites_liberados_administrativo"
acl sites_diretoria url_regex -i "/etc/squid/regras/sites_liberados_diretoria"
acl sites_financeiro url_regex -i "/etc/squid/regras/sites_liberados_financeiro"

## EXTENCOES BLOQUEADAS ##
acl extencoes urlpath_regex -i "/etc/squid/regras/extencoes"

## Bloqueando navegadores ##
acl firefox browser Firefox
acl chrome browser Chrome
acl opera browser Opera

hosts_file /etc/hosts

## Mailserver ##
acl mailserver url_regex mailserver
always_direct allow mailserver
http_access allow windows_update
http_access allow msn_domains
http_access allow dll2_MSN
http_access allow dll_MSN usuariosMSN
http_access allow MSN
http_access allow ips_sem_senha

acl pass proxy_auth REQUIRED


http_access allow manager localhost
http_access deny administrativo !sites_administrativo
http_access deny financeiro !sites_financeiro
## Libero tudo da informatica ##
http_access allow informatica
## Libero tudo da diretoria ##
http_access allow diretoria
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost

http_access deny all


icp_access deny all
############## PORTA SQUID ##############
http_port 3128
visible_hostname proxy.xxxxxxx.com.br

hierarchy_stoplist cgi-bin ?

############## LOGS ##############


access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log

############## DESEMPENHO/DISCO ##############


cache_mem 512 MB
maximum_object_size_in_memory 8 KB
memory_replacement_policy lru
cache_replacement_policy lru
cache_dir ufs /var/spool/squid 60000 16 256

### Tamanho maximo do arquivo que ira ser armazenado em cache ###
maximum_object_size 200000 KB

icp_access allow all

### Limpa cache ###


cache_swap_low 90
cache_swap_high 95

### Icones ###


icon_directory /usr/share/squid/icons
short_icon_urls on

### Errors configuracao ###


error_directory /usr/share/squid/errors/Portuguese

refresh_pattern ^ftp: 1440 20% 10080


refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320

#Cache windowsupdate
refresh_pattern windowsupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern www.download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern www.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims
refresh_pattern download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims
refresh_pattern www.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims

#Cache atulizacao avira


refresh_pattern personal.avira-update.com/.*\.(cab|exe|dll|msi|gz) 10080 100% 43200 reload-into-ims

debug_options ALL,2

icp_port 3130
coredump_dir /var/spool/squid

###### FIM DO ARQUIVO SQUID.CONF ######

Avisos:
• Lembre de alterar o campo 192.168.1.0/255.255.255.0 para o range de ips da sua rede interna
• Lembre de alterar no campo ips_sem_senha para os ips que vc queira que não utilizem proxy
• Lembre de alterar o seu visible_hostname
• Lembre de alterar/incluir/excluir os grupos que quiser

Agora criaremos os arquivos de grupos e de sites.

Digite na sua shell:

# mkdir /etc/squid/grupos
# mkdir /etc/squid/regras
# cd /etc/squid/grupos
# touch diretoria
# touch informatica
# touch financeiro
# touch administrativo

Agora incluiremos os usuários nos seus respectivos grupos:

# joe diretoria

## Neste arquivo, bote o usuario que fara parte do grupo diretoria ##


diretoria01

Depois de salvar o arquivo edite o próximo:

# joe financeiro

## Neste arquivo, bote o usuario que fara parte do grupo financeiro ##


financeiro01

Depois de salvar o arquivo edite o próximo:

# joe administrativo

## Neste arquivo, bote o usuario que fara parte do grupo administrativo ##


administrativo01

Depois de salvar o arquivo edite o próximo:

# joe informatica

## Neste arquivo, bote o usuario que fara parte do grupo informatica ##


informatica01

Feito essa parte, vamos agora criar os arquivos de sites em /etc/squid/regras.

# cd /etc/squid/regras
# touch sites_liberados_financeiro
# touch sites_liberados_administrativo
# touch extencoes

Agora incluiremos os sites que desejamos que sejam liberado para os grupos nestes arquivos.

# joe sites_liberados_financeiro

## Neste arquivo ficam os sites que estão liberados para o financeiro ##


terra.com.br

# joe sites_liberados_administrativo
## Neste arquivo ficam os sites que estão liberados para o administrativo ##
terra.com.br
bradesco.com.br
bradesco.com.br:443
bb.com.br
bb.com.br:443

# joe extencoes
## Neste arquivo, ficam as extencoes que os usuarios nao irao poder fazer download
## Exemplo, se voce quiser bloquear download de arquivos .exe
## basta incluir neste arquivo, da seguinte forma
\.exe$
\.bat$
\.avi$

Pronto! Nos resta agora cadastrar os seguintes usuários:


• administrativo01
• informatica01
• diretoria01
• financeiro01

Para isto vá em:

# cd /etc/squid

Digite em sua shell:

# htpasswd -c passwd administrativo01


# htpasswd passwd financeiro01
# htpasswd passwd diretoria01
# htpasswd passwd informatica01

Esses comandos criarão o arquivo passwd, nele ficarão salvas as senhas dos respectivos usuários.

Após tudo isso, execute para iniciar o Squid:

# squid -z
# /etc/init.d/squid start

Se não houver erro seu squid está no ar! Caso contrário consulte os logs.

Configuração do seu Sarg (relatórios de acessos)

Chegou a vez do nosso amigo Sargpara que possamos visualizar os sites acessados/negados e downloads
efetuados em nosso Proxy.

No inicio do artigo iniciamos a instalação do Sarg, então nos resta agora apenas configurá-lo.

Editaremos agora o sarg.conf. Na sua shell digite:

# joe /usr/local/etc/sarg.conf

Caso não consiga localizar o arquivo sar.conf utilize:

# find /* -name sarg.conf


## INICIO DO ARQUIVO SARG.CONF ##
language Portuguese
access_log /var/log/squid/access.log
graphs yes
graph_days_bytes_bar_color orange
title "Relatorios de acesso"
font_face Tahoma,Verdana,Arial
font_size 10px
header_font_size 10px
title_font_size 12px
temporary_dir /tmp
output_dir /var/www/html/relatorios
resolve_ip yes
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse
date_format e
remove_temp_files yes
index yes
overwrite_report yes
topsites_num 100
topsites_sort_order BYTES D
report_type topusers topsites sites_users users_sites date_time denied auth_failures site_user_time_date
downloads
download_suffix
"zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv$,lha,lzh,mdb,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg
"

## FIM DO ARQUIVO SARG.CONF ##


Aviso: Você pode alterar o campo "output_dir /var/www/html/relatorios" conforme sua necessidade.

rc.local + cron e Conclusão


Muito bem. Firewall configurado. Squid configurado e Sarg configurado.

Agora incluiremos no rc.local o que queremos que inicie com o sistema:

# joe /etc/rc.local

## Inicio do arquivo rc.local ##


echo "Iniciando Firewall"
/etc/rc.d/rc.firewall

echo "Iniciando Proxy"


/etc/init.d/squid start

echo "Iniciando apache"


/etc/init.d/httpd/start

## Fim do arquivo rc.local ##

Com isso, quando você reiniciar o seu servidor, tudo iniciará com ele.

Vamos agra configurar para que o Sarg gere relatórios diariamente dos sites acessados.

Vá em:

# cd /etc/cron.daily
# joe sarg

#!/bin/bash
HOJE=$(date --date "1 day ago" +%d/%m/%Y)

/usr/local/bin/sarg -f /usr/local/etc/sarg.conf -d $HOJE-$HOJE exit 0

Com tudo iniciado, seu servidor reiniciado, você pode visualizar os relatórios acessando:
• http://127.0.0.1/relatorios

Obrigado a todos por lerem este artigo. Abraços!

Lucas Possamai.

Você também pode gostar