Passo 1 – Preparando o Computador
Primeiramente, você deve começar pela parte que chuta: examine o hardware do seu novo servidor, e dimensione-o para suas necessidades. Ou seja, não configure um P100 com 16MB de RAM para servir uma empresa com 200 funcionários, nem compre um P4 de última geração e 1GB RAM para servir aquele escritório com 6 funcionários.
Leve em conta também que serão instalados vários serviços adicionais (e opcionais) além do squid que tomarão conta dos recursos da máquina. Memória é essencial aqui. No meu caso, peguei um Sempron 2600+ com 512MB num PCChips A31g que tinha acabado de chegar. Isso, para distribuir internet para 50 computadores, dá e sobra, mas a idéia é justamente essa, ter uma boa folga no uso. Lembre-se também que serão necessárias duas placas de rede. Pessoalmente, não recomendo o uso da placa onboard, mas fica ao critério de vocês.
Agora, antes de começar a instalar o sistema, entre no SETUP e desabilite TUDO aquilo que não será usado: som onboard, usb, modem, portas seriais e paralelas, e o que mais for possível. Com isso, conseguimos um pouco mais de segurança (através de qualquer porta usb ou equivalente), confiabilidade (com menos recursos habilitados, menor será a chance de uma falha de hardware, e menor será o seu trabalho para identificar uma possível falha futura) e velocidade (menos coisas para levantar no boot, menos serviços rodando desnecessariamente). Configure o boot pelo CD, coloque uma senha para o setup e saia, para começarmos a instalação de verdade.
Passo 2 – Instalando o sistema
Nenhum segredo aqui, se você já fez isso antes: configure o idioma, o teclado, crie um usuário, defina uma senha, formate as partições necessárias (ou deixe o Ubuntu cuidar disso), e aguarde a instalação. Dois pontos importantes:
1 – Será útil já ter uma conexão com a internet durante a instalação (diretamente ligada à máquina ou através de um outro proxy), pois o Ubuntu já fará uns ‘apt-get update’ durante a instalação.
2 – Em dado momento, o instalador perguntará se você deseja instalar dois perfis pré-configurados: DNS Server e LAMP Server. A instalação fica a critério de vocês, já que boa parte dos pacotes desses perfis serão instalados mais pra frente. No meu caso, não instalei nada por enquanto.
Ao término, o sistema irá reiniciar o sistema.
Passo 3 – Configurações iniciais
Primeiramente, vamos configurar a rede. No meu caso, como eu já tenho um servidor DHCP em outro servidor, o Ubuntu já configurou automaticamente a primeira placa de rede. Mas o que queremos é um endereço estático, então vamos editar o arquivo /etc/network/interfaces
sudo vi /etc/network/interfaces
Seu arquivo deve estar qualquer coisa parecida com isso:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
#The primary network interface
auto eth0
iface eth0 inet dhcp
Altere as informações para algo parecido com:
auto lo eth0 eth1
iface lo inet loopback
#The primary network interface
iface eth0 inet static
address 192.168.1.254
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
#segunda interface. Outras podem ser adicionadas segundo a mesma lógica
iface eth1 inet static
address xxx.xxx.xxx.xxx
netmask xxx.xxx.xxx.xxx
network xxx.xxx.xxx.xxx
broadcast xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx
Nesse caso, considerei que a primeira placa de rede ficará ligada à rede local, e a segunda é que ficará ligada à internet. Nesse caso, tudo dependerá de como é a sua conexão. Para Speedy Businnes, é bem fácil, a Telefônica já te passa todas as informações logo no começo. Outros serviços não devem ser diferente.
Altere também o /etc/resolv.conf , inserindo os endereços DNS que o provedor utiliza:
sudo vi /etc/resolv.conf
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx
Novamente, os dados deverão ser obtidos com seu provedor. A partir daqui, o computador já deverá estar conectado à internet. Tente um ping www.ubuntu.org e veja se está tudo OK. Mas ainda não está pronto, precisamos instalar e configurar os pacotes necessários para que o proxy funcione e os outros usuários também acessem a internet.
É agora que a parte legal começa. Você com certeza já deve ter percebido isso, mas o CD do Ubuntu Server já traz vários pacotes de serviços prontos para o uso. Se você quiser, pode usar esse repositório, o que diminuiria e muito o tempo de download pelo APT-GET. No meu caso, como eu queria me livrar do drive de CD, copiei os pacotes para minha máquina, com os comandos abaixo:
sudo mount /media/cdrom/
sudo cp -r /media/cdrom/dists /edgy
sudo cp -r /media/cdrom/pool /edgy
Logo depois, editem o arquivo de repositórios do apt, com um sudo vi /etc/sources.list
Comentem a linha
deb cdrom:(…)
Colocando um # na frente. Adicionem as linhas:
deb file:/edgy edgy main
deb file:/edgy edgy restricted
Aproveitem e descomentem as linhas dos repositórios ‘Universe‘, retirando o # da frente delas. Salvem, e executem o apt:
sudo apt-get update
sudo apt-get upgrade
Se tudo der certo, vocês terão o sistema pronto para a instalação dos pacotes. Percebam que esse passo é totalmente opcional. No meu caso, eu pude liberar o CD do Ubuntu (assim como o drive) e acelerar bastante as instalações. Se você quiser continuar com o CD, ou se todas as versões do mesmo já estiverem obsoletas, pule essa parte, apenas configurando para aceitar o repositório Universe.
Passo 4 – Instalando e Configurando o ‘Pacote básico do Administrador Feliz‘
Agora, vamos tratar de instalar e configurar alguns programas que irão nos ajudar a administrar o sistema: a trinca MC (Midnight Commander), OpenSSH e Webmin. Muitos experts que estejam lendo isso provavelmente irão querer me bater, mas considero o MC um ótimo navegador de arquivos/editor de textos, ainda mais quando estou com pressa. Se você prefere o VI, simplesmente não instale o MC.
sudo apt-get install mc openssh-server libmd5-perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl
sudo wget http://prdownloads.sourceforge.net/webadmin/webmin_1.320_all.deb
sudo dpkg -i webmin_1.320_all.deb
Com isso, já podemos acessar o servidor via SSH e via Browser. Mas… já que queremos um mínimo de segurança, porque não alterarmos algumas coisinhas?
sudo mcedit /etc/ssh/sshd_config
Altere as seguintes opções:
Port 2756 #Altera a porta padrão do SSH, diminuindo a possibilidade de um port scan
ListenAddress 192.168.1.254 # Somente poderá ser acessado por esse endereço de rede
PermitRootLogin no # Precisa explicar?
AllowUsers <seu usuário padrão no Ubuntu> #somente o usuário criado na instalação poderá se logar.
Assim já temos algo mais seguro. O mesmo pode ser feito com o Webmin, alterando o /etc/webmin/miniserv.conf. Nesse caso, alterar a opção “port” para 4044 ou qualquer outro número já é uma boa.
Agora, já podemos mexer no servidor pela rede, e sem muito medo de uma invasão. Que tal pararmos de enrolar e instalar logo o bendito do proxy, hein?
Passo 5 – Instalando o Squid, o Sarg e o Dansguardian
Apenas para entender: o Squid será o responsável por compartilhar o acesso à internet com todas as máquinas, o Dansguardian irá habilitar alguns filtros de acesso, e o Sarg será o ‘dedo-duro’ do sistema, gerando arquivos HTML com os ‘logs’ de navegação do Squid.
E aqui começa uma parte da configuração onde ‘cada caso é um caso’. O Squid permite um sem fim de combinações de restrições, permitindo que eu simplesmente compartilhe a internet, ou que eu compartilhe apenas para alguns IPs, ou que eu exija uma autenticação para o uso, ou que eu bloqueie algumas páginas de acordo com o horário.
A configuração das ACLs (regras que controlam o acesso) dependerá exclusivamente de como a empresa vê o acesso à internet pelos funcionários, e do quão odiado você quer ser pelos seus colegas de trabalho que não podem mais acessar o orkut.
Se a empresa para o qual você está instalando o proxy não se importa com restrições de acesso, a configuração padrão do squid já está perfeita. Caso contrário, sugiro que você leia a documentação do mesmo e encontre quais regras se adaptam melhor à sua situação. O exemplo aqui é bem restrito, mas já montei um servidor para um escritório de contabilidade onde TUDO era bloqueado, menos uma meia dúzia de páginas….
Vamos às configurações: Comece instalando os pacotes:
sudo apt-get install squid squid-common bind sarg dansguardian
E depois dê um
sudo mcedit /etc/squid/squid.conf
Comece alterando as primeiras linhas, antes das ACL’s:
#Inicio
http_port 192.168.1.254:3129 transparent
visible_hostname proxyspeedy2
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache_mem 48 MB
#Opções para otimização do sistema
maximum_object_size 1024 MB
minimum_object_size 0 KB
cache_swap_low 50
cache_swap_high 90
cache_access_log /var/log/squid/access.log
Vamos às explicações, pra quem não conhece o squid:
http_port – qual porta o squid estará escutando. Ao colocar o endereço IP, eu impeço que alguém tente acessar pelas outras interfaces. O ‘transparent’ será explicado em breve.
visible_hostname – Hostname do servidor
cache_mem – Quantidade de memória RAM que o squid estará utilizando para guardar as páginas acessadas, aumentando a velocidade de acesso posterior.
maximum_object_size e minimum_object_size – Qual o tamanho máximo e mínimo dos arquivos que ficarão armazenados no cache em disco.
cache_swap_low e cache_swap_high – Com o cache_swap_high você define qual a porcentagem máxima que o cache deverá atingir para começar a apagar arquivos antigos. O cache_swap_low define qual a porcentagem deverá ser atingida durante a remoção desses arquivos.
Caso você queira que os usuários se autentiquem para usar a internet, insira esses dados no squid.conf:
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm
Agora, as ACL’s. Novamente, cada caso é um caso, e vou colocar as minhas aqui apenas para exemplo. Se você quiser entender mais sobre ACL’s do Squid e como usá-las, recomendo uma leitura desse texto .
# ACLs normais
acl all src 192.168.1.0/255.255.255.0
delay_pools 1
delay_class 1 2
delay_parameters 1 114688/114688 32768/32768
delay_access 1 allow all
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl SSL_ports port 873
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 631
acl Safe_ports port 873
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT
no_cache deny QUERY
# ACLs paulo
acl Diretoria proxy_auth “/etc/squid/users/diretoria.acl”
acl administracao proxy_auth “/etc/squid/users/administracao.acl”
acl producao proxy_auth “/etc/squid/users/producao.acl”
acl castigo proxy_auth “/etc/squid/users/castigo.acl”
acl PornoURLs url_regex “/etc/squid/users/porno.acl”
acl ProducaoURLs url_regex “/etc/squid/users/producaoURLs.acl”
acl AdministracaoURLs url_regex “/etc/squid/users/administracaoURLs.acl”
acl almoco time MTWHF 12:00-14:00
acl executaveis url_regex -i “/etc/squid/users/executaveis.acl”
acl castigo_ip src “/etc/squid/users/castigo_ip.acl”
#Aplicação das ACL’s
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow purge localhost
http_access deny purge
http_access allow localhost
http_access deny administracao PornoURLs
http_access deny producao PornoURLs
http_access deny castigo PornoURLs
http_access deny Diretoria PornoURLs
http_access deny administracao AdministracaoURLs !almoco
http_access deny producao ProducaoURLs !almoco
http_access deny castigo AdministracaoURLs
http_access deny administracao executaveis
http_access deny producao executaveis
http_access allow Diretoria
http_access allow producao
http_access allow administracao
http_access allow castigo
http_access deny all
http_reply_access allow all
Basicamente, existem três níveis de acesso diferentes, com várias restrições baseado em cada nível, mas com a possibilidade de liberar alguns sites no horário de almoço, a menos que você esteja na ACL ‘castigo’ (sacou? hein?). Pode parecer castrante, mas são normas da empresa, não me odeiem por configurar isso.
Salve o arquivo e saia. Agora que já temos o básico configurado, vamos configurar o firewall para compartilhar conexões. No terminal, digite os comandos abaixo:
sudo modprobe iptable_nat
sudo modprobe ip_nat_ftp
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 3128
Na verdade, apenas os quatro primeiros comandos são necessários. Nesse caso, substitua o ‘eth1′ pela interface que está conectada à internet. O último comando gera o que chamamos de ‘proxy transparente’. Com ela habilitada, qualquer um que queira acessar a internet deverá obrigatoriamente passar pelo Squid (vocês lembram daquele ‘transparent’ logo na primeira linha do squid.conf, né?).
Uma ótima idéia é inserir esses comandos de firewall no arquivo /etc/init.d/boomisc.sh. Assim, caso o computador seja reiniciado, as regras passarão a funcionar automaticamente….
Aqui, já podemos testar o Squid. Primeiro, dê o comando:
sudo /etc/init.d/squid restart
E verifique se não apareceu nenhum erro. Uma lida nos arquivos em /var/log pode ser útil, caso apareça algo estranho. Agora, numa máquina qualquer, abre o seu browser e configure o proxy. No Firefox2, vá em Ferramentas > Opções > Avançado > Rede > Configurações e insira o endereço IP do servidor e a porta do squid. Tente acessar alguma página. Se der tudo certo, parabéns. O grosso do trabalho já foi, agora é cuidar da segurança.
Nota: Percebam que até o momento não é possível usar o Squid com transparência E autenticação ao mesmo tempo. Ao usar os dois você no máximo não terá acesso se não configurar o proxy nas máquinas locais. O que já ajuda em alguma coisas….
Nota2: Para criar um usuário no Squid, você pode usar o comando
sudo htpasswd /etc/squid/passwd <usuário>
E depois cadastrá-lo em uma das regras do squid. OU você pode usar o Webmin, o que eu considero um pouco mais prático…
O Sarg não exige muita configuração, podendo ser executado via Webmin mesmo, ou através do crontab, caso você queira automatizar a tarefa. Uma lida no /etc/squid/sarg.conf pode dar boas dicas do tipo de configuração que o Sarg permite. Para acessar os relatórios, acesse http://192.168.1.254/squid-reports/ que eles deverão estar lá.
Agora, vamos ao Danguardian. Antes, uma observação importante: o DanGuardian é um super-filtro de conteúdo, conseguindo barrar vários tipos de conteúdos diferentes, sejam sites, frase, ou até mesmo tipos de arquivos. A configuração padrão é bem restrita, e você pode penar um pouco até ter uma configuração que lhe permita acessar tudo o que você precisa, e bloqueie o resto. Sempre que possível, utilize os arquivos de exceção para liberar apenas o necessário (exemplo, incluir o endereço da Caixa Econômica Federal como exceção, ao invés de liberar o acesso a arquivos .zip).
Outro ponto é que você pode precisar configurar bastante o DG no quesito performance. Ele utiliza o Clamav para fazer uma varredura antí-virus no que passa pelo proxy, o que pode ser bem ruim se você está usando um Pentium 100 como proxy para 100 máquinas… O Dansguardian é recomendado para ambientes corporativos preocupados com a segurança, e PRINCIPALMENTE em escolas ou universidades.
Comece com um:
sudo mcedit /etc/dansguardian/dansguardian.conf
Para uma configuração simples, comente a linha ‘UNCONFIGURED’ e altere as linhas:
language = ‘portuguese’
loglocation = ‘/var/log/dansguardian/access.log’
filterport = 3128
proxyip = 127.0.0.1
proxyport = 3129
Nota: muitos devem estar achando estranho eu ter configurado o Dansguardian na porta padrão do Squid. O motivo é simples: preguiça. Assim eu não preciso reconfigurar todos os outros computadores…
No ‘/etc/dansguardian/dansguardianf1.conf‘ verifique a opção ‘naughtynesslimit. Ele é o ‘medidor de putaria’ do Dansguardian. Quanto menor esse valor, maior será a possibilidade da página ser bloqueada. Para adultos, um bom valor é 200. Para crianças, pense em valores por volta de 40…
Agora, precisamos baixar as definições em português. Execute os comandos:
sudo wget http://dansguardian.org/downloads/grosvenor/languages.tar.gz
sudo tar -zxvf languages.tar.gz
sudo cp -r languages/* /etc/dansguardian/languages/portuguese/
Agora, insira no arquivo ‘/etc/dansguardian/weightedphraselist’ as linhas:
.Include</etc/dansguardian/languages/portuguese/weightedphraselist.pornsites.portuguese>
.Include</etc/dansguardian/languages/portuguese/weightedphraselist.pornwords.portuguese>
E, no ‘/etc/dansguardian/bannedphraselist’
.Include</etc/dansguardian/languages/portuguese/bannedphraselist.portuguese>
Salve tudo, e reinicie o Dans:
sudo /etc/init.d/dansguardian restart
Se tudo correu bem, você provavelmente é o cara mais odiado pelos funcionários que enrolam no serviço…..
Há um extra para acelerar um pouco a navegação, que é instalar um servidor DNS na máquina. Com isso, as resoluções de nome ficarão mais rápidas, pois haverá um cache de endereços na sua máquina. Até onde eu sei, não é necessário alterar algum arquivo, apenas instalar o bind
Passo 6 – Incrementando o Firewall e instalando o Snort e o Guardian
A parfir daqui, tudo o que será feito é instalar sistemas que bloqueiem ataques externos, ou evitem problemas que um vírus possa causar internamente. As regras de Firewall servem para fechar portas e evitar ataques. O Snort é uma ferramenta de detecção de intrusos, ótima para ficar vigiando a sua rede e verificando se há algo errado. O Guardian trabalha junto com o Snort, criando regras de firewall de acordo com os alertas do Snort.
Para o firewall, vamos utilizar o kurumin-firewall mesmo (disponível no GuiadoHardware), mas com algumas modificações. Novamente, as portas que você irá abrir ou fechar dependerão exclusivamente das necessidades da empresa ou local onde você instalando o servidor.
sudo mcedit /etc/init.d/kurumin-firewall
E edite o arquivo:
#!/bin/bash
# Script de configuração do iptables gerado pelo configurador do Kurumin
# Este script pode ser usado em outras distribuições Linux que utilizam o Kernel 2.4 em diante
# Por Carlos E. Morimoto
firewall_start(){
# Abre para uma faixa de endereços da rede local
iptables -A INPUT -p tcp –syn -s 192.168.1.0/255.255.255.0 -j ACCEPT
# Abre uma porta (inclusive para a Internet)
iptables -A INPUT -p tcp –destination-port 21 -j ACCEPT
iptables -A INPUT -p tcp –destination-port 110 -j ACCEPT
iptables -A INPUT -p tcp –destination-port 2535 -j DROP
iptables -A INPUT -p tcp –destination-port 139 -j DROP
iptables -A OUTPUT -p tcp –destination-port 139 -j DROP
# Fechando as portas do SSH pra fora
iptables -A INPUT -p tcp –dport 2756 -m iprange –src-range 192.168.1.0-192.168.1.255 -j ACCEPT
iptables -A INPUT -p tcp –dport 2756 -j DENY
# Ignora pings
echo “1″ > /proc/sys/net/ipv4/icmp_echo_ignore_all
# Protege contra synflood
echo “1″ > /proc/sys/net/ipv4/tcp_syncookies
# Desabilita o suporte a source routed packets
# Esta recurso funciona como um NAT ao contrário, que em certas circunstancias pode permitir que alguem de fora envie pacotes para micros dentro da rede local.
echo “0″ > /proc/sys/net/ipv4/conf/eth0/accept_source_route
echo “0″ > /proc/sys/net/ipv4/conf/eth1/accept_source_route
# Proteção contra ICMP Broadcasting
echo “1″ > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp -m limit –limit 1/s -j ACCEPT
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT
iptables -A FORWARD –protocol tcp –tcp-flags ALL SYN,ACK -j DROP
iptables -A FORWARD -m unclean -j DROP
iptables -A INPUT -m state –state INVALID -j DROP
iptables -N VALID_CHECK
iptables -A VALID_CHECK -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL ALL -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL FIN -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A VALID_CHECK -p tcp –tcp-flags ALL NONE -j DROP
# Abre para a interface de loopback.
# Esta regra é essencial para o KDE e outros programas gráficos funcionarem adequadamente.
iptables -A INPUT -p tcp –syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# Esta regra é o coração do firewall do Kurumin,
# ela bloqueia qualquer conexão que não tenha sido permitida acima, justamente por isso ela é a última da cadeia.
iptables -A INPUT -p tcp –syn -j DROP
}
firewall_stop(){
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
}
case “$1″ in
“start”)
firewall_start
;;
“stop”)
firewall_stop
echo “O kurumin-firewall está sendo desativado”
sleep 2
echo “ok.”
;;
“restart”)
echo “O kurumin-firewall está sendo desativado”
sleep 1
echo “ok.”
firewall_stop; firewall_start
;;
*)
iptables -L -n
esac
Salve, e configure para rodar no boot. Você pode testar as configurações do iptables dando um
sudo iptables -L
e verificando se ele lista todas as regras criadas.
Para o Snort e o Guardian, o procedimento é exatamente o encontrado na página do Ubuntu Brasil portanto eu não pretendo me repetir. Como dica adicional, insiram as linhas abaixo no bootmisc.sh, para que os serviços sempre rodem ao reinicar o servidor:
snort -c /etc/snort/snort.conf &
guardian.pl /etc/guandian.conf
Faça alguns testes finais, reinicie a máquina, e pronto. Você terá um servidor proxy leve, seguro, e que permite adicionar novos serviços (DHCP, SAMBA, Cups, LDAP, Postfix) facilmente. E tudo em menos de duas horas!
Nota final:
- Caso algum passo descrito aqui não funcione, sempre veja as mensagens de erro e os arquivos de log. Boa parte das soluções podem ser encontradas vendo qual é exatamente o problema.