Академический Документы
Профессиональный Документы
Культура Документы
Todos os exemplos deste artigo so baseados no Debian, por ser uma das
distros mais usadas, mas nada impede que voc adapte para outas distros.
Iremos ver tambm como debugar alguns erros comuns, tornando nossas
vidas um pouco mais tranquilas.
Comandos Linux;
Noes de redes;
Configurar interfaces de rede (no abordado neste artigo).
INSTALANDO TUDO
Para ter melhor aproveitamento, alm do IPtables e Squid, teremos mais
algumas ferramentas que iro nos ajudar, ento vamos s ferramentas e
instalaes.
- Squid verso 3
O Squid o Proxy propriamente dito, com ele que iremos criar as regras
para o controle de acesso a sites da Internet.
Instalao:
# apt-get update
# apt-get install squid3
Este o programa que vai gerar para voc, os relatrios dos acessos aos
sites.
Instalao:
- Apache 2
Instalao:
- IPtables
IPTABLES
Vamos criar um Script simples do IPtables.
Com ele, iremos deixar nossa rede mais segura e teremos um maior
controle do que pode, ou no ser acessado.
O Script ser todo comentado, assim, o leitor ter uma maior compreenso
do que est utilizando.
Cabealho;
Variveis que sero usadas;
Ajustes / Mdulos;
Regras de NAT;
Regras de INPUT;
Regras de OUTPUT;
Regras de FORWARD;
Parmetros do script (start | stop | restart).
Vamos ao Script:
#!/bin/bash
#######################################################
# SCRIPT DE FIREWALL PARA FINS DE APRENDIZADO, MODIFIQUE-O A SEU GOSTO #
# Criado por phrich
#
#######################################################
###################
# DECLARANDO VARIVEIS #
###################
# Interface de rede que recebe a internet
IFACE_WEB="eth0"
# Rede interna
REDE_INTERNA="10.0.0.0/24"
#####################################################################
# FUNO STOP
#
# Esta funo limpa todas as regras e libera todos os acessos, caso necessite
de redirecionamentos (NAT) #
# Favor incluir as linhas referentes a nat, que no est incluso neste exempl
o #
#####################################################################
# Cria a funo
function stop() {
# Compartilha a internet
iptables -t nat -A POSTROUTING -o $IFACE_WEB -j MASQUERADE
# Fecha a funo
}
####################################################################
# FUNO START
#
# Esta funo tem por finalidade setar as regras a fim de realizar as libera
es, pois trabalharemos com #
# as polticas do iptables como DROP
#
####################################################################
# Cria a funo
function start () {
# Coloca as polticas padres como DROP, ou seja nenhum acesso foi liberado #
# Em alguns casos esses mdulos sero teis, realize uma pesquisa sobre cada
um #
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe nf_conntrack_ipv4
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe nf_nat
/sbin/modprobe nf_conntrack
/sbin/modprobe x_tables
/sbin/modprobe nf_nat_pptp
# Compartilha a internet
iptables -t nat -A POSTROUTING -o $IFACE_WEB -j MASQUERADE
#############
# REGRAS DE NAT #
#############
###############
# REGRAS DE INPUT #
###############
# Libera o squid a partir da rede interna
iptables -A INPUT -p tcp --dport 3128 -s $LAN -j ACCEPT
################
# REGRAS DE OUTPUT #
################
# Libera FTP para localhost (muito til para o apt-get, yum, etc)
iptables -A OUTPUT -p tcp -m multiport --dports 20,21 -j ACCEPT
iptables -A OUTPUT -p udp -m multiport --dports 20,21 -j ACCEPT
#################
# REGRAS DE FORWARD #
#################
# Fecha a funo
}
############################
# CRIANDO OS PARMETROS DO SCRIPT #
############################
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Erro, utilize os seguintes parmetros: start | stop | restart"
exit 0
;;
esac
SQUID
O Squid, como todos sabem, um servio de Proxy, onde o mesmo realiza
o controle de acesso sites da Internet, faz cache de pginas, etc.
# mkdir /etc/squid3/acls
# mkdir /etc/squid3/grupos
Aps digitar o comando acima, ele pedir uma senha para o novo usurio,
insira a senha e depois confirme-a.
Vamos agora realizar uma pr-bloqueio, com ele, podemos ver algumas
palavras que no queremos que usurios acessem:
# touch /etc/squid3/acls/palavras_proibidas
sexo*
jogo*
jogatina*
facebook*
youtube*
orkut*
Vamos criar uma lista com sites permitidos para o grupo recepo:
# touch /etc/squid3/acls/sites_recepcao
.vivaolinux.com.br*
.siteempresa.com.br*
.cotacoes.com.br*
Novamente, repare no ' . ' (Ponto) antes do site e no ' * ' (Asterisco) ao final.
Eles tambm so expresses regulares, que indicam que devem liberar
todo os subdiretrios do site e tudo o que tiver antes do ponto.
- www2.meusite.com
- www.meusite.com/sexosaude
SQUID.CONF
Crie um cpia do arquivo original do squid.conf para que voc possa ter
uma sempre a mo, pois este arquivo rico em comentrios e exemplos,
portanto, para uma administrao mais simples, eu recomendo 'limpar' os
comentrios e exemplos, deixando o arquivo menor e visualmente mais fcil
de trabalhar...
Contedo de /etc/squid3/squid.conf:
#######
# ACLS #
#######
# Insira dentro do arquivo citado abaixo os ips usados pelo seu antivrus
acl antivirus dst "/etc/squid3/acls/antivirus"
# Torna obrigatrio o uso de autenticao (O que for feito desta linha para b
aixo)
acl internal_lan proxy_auth REQUIRED
# GRUPOS #
# Administradores
acl administrators proxy_auth "/etc/squid3/grupos/administradores"
# Diretoria
acl diretoria proxy_auth "/etc/squid3/groups/diretoria"
# Vendas
acl recepcao proxy_auth "/etc/squid3/groups/vendas"
# Recepcao
acl recepcao proxy_auth "/etc/squid3/groups/recepcao"
# MANAGER ACLS #
# PERSONAL MANAGER #
# Insira aqui as regras de liberaes para o que no vai passar pela autentic
ao
hierarchy_stoplist cgi-bin \?
# Overwrite cache
cache_replacement_policy lru
memory_replacement_policy lru
#Default:
# cache_dir ufs /var/spool/squid3 100 16 256
# Arquivo de log
access_log /var/log/squid3/access.log squid
# Arquivo de cache
cache_log /var/log/squid3/cache.log
icp_port 3130
SARG
# sarg.conf
#
# TAG: language
# Available languages:
# Bulgarian_windows1251
# Catalan
# Czech
# Dutch
# English
# French
# German
# Greek
# Hungarian
# Indonesian
# Italian
# Japanese
# Latvian
# Polish
# Portuguese
# Romanian
# Russian_koi8
# Russian_UFT-8
# Russian_windows1251
# Serbian
# Slovak
# Spanish
# Turkish
#
# VAMOS COLOCAR OS RELATRIOS EM PORTUGS
language Portuguese
# TAG: title
# Especify the title for html page.
#
# A LINHA ABAIXO DIZ RESPEITO AO NOME DA PGINA, ALTERE A SEU GOSTO
title "Squid User Access Reports"
# TAG: font_face
# Especify the font for html page.
#
font_face Tahoma,Verdana,Arial
# TAG: header_color
# Especify the header color
#
header_color darkblue
# TAG: header_bgcolor
# Especify the header bgcolor
#
header_bgcolor blanchedalmond
# TAG: font_size
# Especify the text font size
#
font_size 9px
# TAG: header_font_size
# Especify the header font size
#
#header_font_size 9px
# TAG: title_font_size
# Especify the title font size
#
#title_font_size 11px
# TAG: background_color
# TAG: background_color
# Html page background color
#
background_color white
# TAG: text_color
# Html page text color
#
text_color #000000
# TAG: text_bgcolor
# Html page text background color
#
text_bgcolor lavender
# TAG: title_color
# Html page title color
#
title_color green
# TAG: logo_image
# Html page logo.
#
#logo_image none
# TAG: logo_text
# Html page logo text.
#
#logo_text ""
# TAG: logo_text_color
# Html page logo texti color.
#
#logo_text_color #000000
# TAG: logo_image_size
# Html page logo image size.
# width height
#
#image_size 80 45
# TAG: background_image
# Html page background image
#
#background_image none
# TAG: password
# User password file used by authentication
# If used here, reports will be generated only for that users.
#
#password none
# TAG: temporary_dir
# Temporary directory name for work files
# sarg -w dir
#
temporary_dir /tmp
# TAG: output_dir
# The reports will be saved in that directory
# sarg -o dir
#
# A LINHA ABAIXO INFORMA ONDE SER SALVO OS RELATRIOS GERADOS, APONTE PARA O
SEU DIRETRIO WEB,
# QUE NO CASO DO DEBIAN /var/www/ e o diretrio, squid-reports
#output_dir /var/www/html/squid-reports
output_dir /var/www/squid-reports
# TAG: output_email
# Email address to send the reports. If you use this tag, no html repor
ts will be generated.
# sarg -e email
#
#output_email none
# TAG: date_format
# Date format in reports: e (European=dd/mm/yy), u (American=mm/dd/yy),
w (Weekly=yy.ww)
#
date_format u
# TAG: lastlog n
# How many reports files must be keept in reports directory.
# The oldest report file will be automatically removed.
# 0 - no limit.
#
lastlog 0
# TAG: user_report_fields
# Which fields must be in User report.
#
user_report_fields CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME
TOTAL AVERAGE
# TAG: topuser_num n
# How many users in topsites report. 0 = no limit
#
topuser_num 0
# TAG: weekdays
# The weekdays to take account ( Sunday->0, Saturday->6 )
# Example:
#weekdays 1-3,5
# Default:
#weekdays 0-6
# TAG: hours
# The hours to take account
# Example:
#hours 7-12,14,16,18-20
# Default:
#hours 0-23
# TAG: squidguard_log_format
# Format string SquidGuard logs.
# REJIK #year#-#mon#-#day# #hour# #list#:#tmp# #ip# #user# #tmp#/#
tmp#/#url#/#end#
# SQUIDGUARD #year#-#mon#-#day# #hour# #tmp#/#list#/#tmp#/#tmp#/#url#/#
tmp# #ip#/#tmp# #user# #end#
#squidguard_log_format #year#-#mon#-#day# #hour# #tmp#/#list#/#tmp#/#tmp#/#ur
l#/#tmp# #ip#/#tmp# #user# #end#
# Report limits
# TAG: authfail_report_limit n
# TAG: denied_report_limit n
# TAG: siteusers_report_limit n
# TAG: squidguard_report_limit n
# TAG: user_report_limit n
# TAG: dansguardian_report_limit n
# TAG: download_report_limit n
# report limits (lines).
# '0' no limit
#
#authfail_report_limit 10
#denied_report_limit 10
#siteusers_report_limit 0
#squidguard_report_limit 10
#dansguardian_report_limit 10
#user_report_limit 10
#user_report_limit 50
# TAG: ulimit n
# The maximum number of open file descriptors to avoid "Too many open file
s" error message.
# You need to run sarg as root to use ulimit tag.
#
#ulimit 20000
00 22 * * * /usr/sbin/sarg-reports today
SQUID
muito comum em novas configuraes do Squid, erros de digitao;
quando isto acontece, o Squid no carrega as configuraes e no inicia.
Na hora dos testes, caso o seu Squid no esteja iniciando. Que podemos
ver com o comando:
# squid -d 10
Assim ele tentar inicializar com o modo Debug, onde sero mostradas
todas as mensagens da inicializao do Squid, assim, caso exista algum
erro, voc poder facilmente corrigi-lo.
Assim, voc ver apenas o que est sendo bloqueado para o usurio.
# bash -x /etc/init.d/firewall
PARA FINALIZAR
Sites, dicas, etc.
Vamos supor que voc adicione um novo site em alguma regra, ou que
voc adicione uma nova ACL ou configurao, voc deve reiniciar o Squid
para que as alteraes tenham efeito.
# squid -k reconfigure
Caso ocorra algum erro, ele informar o erro para voc, e ento, basta
corrigir o erro indicado e digitar o comando acima novamente.
Ou, se por ventura, voc comear a popular esta ACL e sem querer, colocar
os site assim:
.site1.com*
.site2.com*
.site3.com*
.site1.com*
Ele vai lhe informar que o 'site1.com' j est inserido, e logo voc precisar
remover uma das entradas e digitar o comando novamente.