quarta-feira, 26 de setembro de 2007

Configurando um servidor proxy/cache com firewall no Linux

Este documento foi criado com base no Debian Etch4

Para este procedimento o sistema deverá estar devidamente instalado e configurado com duas placas de rede, caso estas ainda não tenham sido configuradas, você pode fazer essa configuração á partir do arquivo /etc/network/interfaces, conforme segue abaixo:

root@servidor:/# vi /etc/network/interfaces

# The loopback network interface

auto lo

iface lo inet loopback

# The primary network interface (interface de acesso a internet, ligada a um modem ou cable modem)

allow-hotplug eth0

iface eth0 inet static

address 200.xxx.xxx.xxx

netmask 255.255.255.xxx

network 200.xxx.xxx.xxx

broadcast 200.xxx.xxx.255

gateway 200.xxx.xxx.xxx

# dns-* options are implemented by the resolvconf package, if installed

dns-nameservers 200.204.0.10 200.204.0.138

dns-search servidor.dominio.com.br

#Interface de acesso a rede interna

allow-hotplug eth1

iface eth1 inet static

address 192.168.0.1

netmask 255.255.255.0

network 192.168.0.0

Com as placas de rede configuradas, partimos para a instalação e configuração do servidor proxy, só que para isso devemos verificar se os espelhos utilizados para baixar novos pacotes e atualizar do sistema, estão configurados. Então abra o arquivo /etc/apt/sources.list e verifique se espelhos abaixo estão presentes no arquivo:

deb http://linorg.usp.br/debian/ etch main

deb-src http://linorg.usp.br/debian/ etch main

deb http://security.debian.org/ etch/updates main contrib

deb-src http://security.debian.org/ etch/updates main contrib

deb http://ftp.de.debian.org/debian stable main contrib non-free

Caso esteja tudo ok, vamos atualizar nossa lista de pacotes, utilizando o comando:

root@servidor:/# apt-get update.

Após atualizado o sistema, seguimos com a instalação do servidor proxy Squid (http://www.squid-cache.org), mas lembre-se que para isso você deverá está logado como root.

root@servidor:/#aptitude install squid.

Se tudo correu bem, o sistema será instalado e inicializado automaticamente.

Com o servidor de proxy rodando, agora podemos fazer as configurações conforme nossas necessidades, isto costuma mudar de acordo com as regras de cada empresa, por isso não irei entrar em detalhes. Essas configurações são feitas á partir do arquivo /etc/squid/squid.conf, onde podemos criar as acl´s (listas de controle de acesso), configurar a porta na qual o servidor irá ouvir requisições, etc.

Após configurado o esquid.conf, partimos para a configuração de um firewall, uma vez que o servidor está conectado a internet e vulnerável á ataques de pessoas mal intencionadas. Para isso, verificamos se o iptables (http://www.netfilter.org/) encontra-se instalado com o comando:

root@servidor:/#iptables –v

Se o mesmo estiver instalado, você terá uma resposta parecida com esta (hoje a versão atual é a 1.3.8) iptables v1.3.8.

Agora criamos um arquivo chamado firewall dentro do diretório /etc/init.d e damos a ele permissão de execução:

root@servidor:/# touch /etc/init.d/firewall (criação do arquivo)

root@servidor:/# chmod +x /etc/init.d/firewall (dando permissão de execução)

root@servidor:/# vi /etc/init.d/firewall(abrindo o arquivo para edição)

Este script monta um firewall básico, pois assim como a configuração do squid, as regras variam de acordo com cada empresa.

#!/bin/bash

echo "Carregando o firewall"

#variaveis

IPT="/sbin/iptables"

REDEINT="192.168.0.0/24"

IPFW="192.168.0.1"

# Habilitando o recurso de IP forwarding

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

#Limpa as regras ativas

$IPT -F

$IPT -t nat -F

$IPT -A INPUT -p tcp -i lo -j ACCEPT

#Libera o acesso via ssh na porta 30200

$IPT -A INPUT -p tcp --sport 1024: --dport 30200 -j ACCEPT

#Libera a porta do DNS

$IPT -A INPUT -p udp --sport 1024: -d $IPFW --dport 53 -j ACCEPT

#Libera o acesso a internet na porta 3128

$IPT -A INPUT -p tcp --sport 1024: -d $IPFW --dport 3128 -j ACCEPT

$IPT -A INPUT -m state --state RELATED, ESTABLISHED -j ACCEPT

#Faz nat para a rede interna

$IPT -t nat -F POSTROUTING

$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE

#Libera as portas de e-mail

$IPT -A FORWARD -p tcp --dport 25 -j ACCEPT

$IPT -A FORWARD -p tcp --dport 110 -j ACCEPT

#Bloqueia a porta 80

$IPT -A FORWARD -p tcp --dport 80 -j DROP

#Protege contra o ping da morte

$IPT -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

#Protege contra ataques do tipo syn-flood, dos, etc

$IPT -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT

#Protege contra port scanners avancados Ex: nmap

$IPT -A FORWARD -p tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#Protege contra pacotes que podem procurar e obter informações da rede interna

$IPT -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP

#Protege contra todos os pacotes danificados ou com defeito

$IPT -A FORWARD -m unclean -j DROP

#Bloqueando o traceroute

$IPT -A INPUT -p udp -s 0/0 -i ppp0 --dport 33435:33525 -j DROP

#Protege contra ataques

$IPT -A INPUT -m state --state INVALID -j DROP

Pronto, seu sistema está instalado e configurado para compartilhar o acesso a internet via proxy.

Algumas configurações adicionais são recomendadas para que o servidor tenha um pouco mais de segurança, conforme segue:

- Evitar que o usuário root faça login

Edite o arquivo /etc/ssh/sshd_config e adicione linha:

PermitRoorLogin no

- Mudar a porta de acesso via ssh, que por padrão é 22

Edite o arquivo /etc/sshd_config e altera a linha:

Port 22 para por exemplo Port 30200

- Bloquear respostas ao comando ping, mantendo o servidor escondido

Edite o arquivo /etc/sysct1.conf e adicione a linha:

net.ipv4.icmp_echo_ignore_all = 1


Bibliografia:

Ferreira, Rubem E. Linux Guia do Administrador do Sistema Novatec editora

http://www.debian.org/

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=7384

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=5644

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=8539

Nenhum comentário: