Você está na página 1de 8

Configurar um Compartilhamento

Aqui temos um exemplo de configurao manual da rede para distribuies derivadas do Debian,
onde a interface eth0 usada como interface de rede local e a eth1 usada como placa de internet,
configurada via DHCP:

# /etc/network/interfaces
auto lo eth0 eth1
iface lo inet loopback
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
iface eth1 inet dhcp

Depois de configurada a rede, verifique se consegue pingar os PCs da rede interna (ex: ping
192.168.1.61) a partir do servidor. Se estiver usando Linux nas estaes, experimente ativar o
servidor SSH em uma das estaes e tentar se conectar a ela a partir do servidor.
Da primeira vez que configurar a rede, use endereos IP estticos para todas as estaes, pois assim
mais fcil detectar problemas diversos. Depois de tudo funcionando, mude para configurao via
DHCP, como veremos a seguir. Se alguma das estaes estiver inacessvel, verifique se no existe
um firewall ativo, verifique o cabo de rede e experimente trocar a porta usada no switch.
Depois de tudo preparado, ativar o compartilhamento propriamente dito bastante simples. No
Linux, o compartilhamento feito usando o Iptables, o firewall integrado ao Kernel. Na verdade, o
Iptables expandido atravs de mdulos, por isso suas funes vo muito alm das de um firewall
tradicional, incluindo funes avanadas de roteamento. Para ativar o compartilhamento, so
necessrios apenas trs comandos:
# modprobe iptable_nat
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Substitua o "eth1" pela placa da Internet. Este comando simplesmente compartilha a conexo
proveniente da placa da internet com todas as demais placas de rede espetadas no servidor, por isso
no necessrio especificar a placa de rede local.
O primeiro comando ativa o "iptable_nat", o mdulo do Iptables responsvel por oferecer suporte
ao roteamento de pacotes via NAT. O segundo ativa o "ip_forward", o mdulo responsvel pelo
encaminhamento de pacotes, utilizado pelo mdulo iptable_nat.
Finalmente, o terceiro cria uma regra de roteamento, que orienta o servidor a direcionar para a
internet todos os pacotes (recebidos dos clientes) que se destinarem a endereos que no faam
parte da rede local (ou seja, qualquer coisa fora da faixa 192.168.1.x). A partir da, o servidor passa
a ser o gateway da rede.
Em muitas distribuies com o Kernel 2.6, necessrio usar um quarto comando ao compartilhar
uma conexo ADSL. Este comando ajusta os tamanhos dos pacotes recebidos do modem ao MTU

usado na rede local. Note que, apesar da diagramao do livro tornar necessrio quebrar o comando
em duas linhas, trata-se de um nico comando:
# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -m \
tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
A barra invertida ("\") faz com que o shell no interprete o caractere seguinte (no caso, a quebra de
linha), permitindo quebrar o comando em duas linhas, sem causar um erro. Esse um truque que
permite incluir comandos longos demais para caberem na pgina, divididos em duas linhas ou mais.
Na verdade, o comando forma uma nica linha.
Como de praxe, importante proteger o servidor de ataques provenientes da Internet usando um
firewall. Podemos ativar um firewall simples de bloqueio usando mais alguns comandos do
Iptables, complementando os trs comandos anteriores:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
O primeiro comando faz com que o seu servidor deixe de responder a pings, o que evita muitos
ataques casuais. Os dois comandos seguintes protegem contra IP spoofing (uma tcnica usada em
diversos tipos de ataques, onde o atacante envia pacotes usando um endereo IP falseado como
remetente, tentando assim obter acesso a PCs da rede interna) e contra pacotes invlidos, que so
comumente utilizados em ataques DoS e ataques de buffer overflow.
As duas linhas seguintes autorizam pacotes provenientes da interface de loopback (lo), juntamente
com pacotes provenientes da rede local. Como pode ver, a sintaxe das regras do Iptables segue um
padro lgico, onde voc especifica uma determinada condio e diz o que o firewall deve fazer
com os pacotes que se enquadrarem nela. No caso da regra que autoriza os pacotes da rede local
(iptables -A INPUT -i eth0 -j ACCEPT) usamos os parmetros "-A INPUT" (pacotes de entrada) e
"-i eth0" (recebidos na interface eth0), seguidos da regra "-j ACCEPT", que diz que os pacotes
devem ser aceitos sem checagem adicional. No se esquea de substituir o "eth0" pela interface de
rede local correta, caso diferente.
Continuando, a linha "iptables -A INPUT -p tcp --dport 22 -j ACCEPT" abre a porta 22, usada pelo
SSH para conexes externas, permitindo que voc possa administrar o servidor remotamente. Voc
pode abrir mais portas simplesmente adicionando mais linhas, com as portas desejadas. Concluindo,
temos a linha "iptables -A INPUT -p tcp --syn -j DROP", que faz o trabalho pesado, bloqueando
tentativas de conexo provenientes da Internet.
Depois de testar o compartilhamento, falta fazer com que os comandos sejam executados durante o
boot, tornando a configurao permanente. A forma mais simples de fazer isso colocar os
comandos no arquivo "/etc/rc.local", um script prprio para a tarefa, que est disponvel tanto em
distribuies derivadas do Debian quanto em distribuies da linhagem do Red Hat. Um exemplo
de arquivo completo, incluindo os comandos para ativar o firewall seria:
#!/bin/sh
# /etc/rc.local
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP


echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
Esta receita genrica, deve funcionar em qualquer distribuio. Lembre-se de substituir "eth1"
pela interface de internet e o "eth0" pela interface de rede local, caso diferentes.
Uma segunda opo, mais elegante, porm mais complicada, criar um servio de sistema, que
pode ser ativado e desativado. Neste caso, crie o arquivo de texto "/etc/init.d/compartilhar".
Dentro dele vo as linhas a seguir:
#!/bin/bash
# Interface da Internet:
ifinternet="eth1"
# Interface da rede local
iflocal="eth0"
iniciar(){
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $ifinternet -j MASQUERADE
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i $iflocal -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
}
parar(){
iptables -F
iptables -F -t nat
}
case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo "Use os parmetros start ou stop"
esac
Este um shell script que aceita trs funes: start, stop e restart, executando dentro de cada uma os
comandos que compartilham e param o compartilhamento da conexo. Esta estrutura similar
usada nos demais scripts de inicializao do sistema, como os do Apache, Samba, Squid e outros
servios.
Veja que em vez de especificar as interfaces de internet e de rede local dentro dos comandos, passei
a usar duas variveis no incio do script, que facilitam a configurao e tornam o script mais
elegante. Quando precisar usar o script em outra mquina, onde as interfaces sejam diferentes, voc
precisa apenas se lembrar de alterar as duas variveis. Note tambm que os comandos a partir do
"iptables -A INPUT -p icmp --icmp-type echo-request -j DROP" correspondem s protees e ao

firewall e podem ser removidos caso desejado.


Para usar o script, transforme-o em um arquivo executvel, usando o comando:
# chmod +x /etc/init.d/compartilhar
A partir da, voc pode iniciar e parar o compartilhamento usando os comandos:
# /etc/init.d/compartilhar start
# /etc/init.d/compartilhar stop
Para que o script seja executado durante o boot, voc pode adicionar o comando
"/etc/init.d/compartilhar start" no arquivo "/etc/rc.local", em vez de colocar os comandos
diretamente, como fizemos no exemplo anterior.
Outra opo (mais elegante) criar um link para ele dentro da pasta "/etc/rc5.d", o que tambm faz
com que ele seja executado durante o boot:
# cd /etc/rc5.d
# ln -s ../init.d/compartilhar S21compartilhar
Como vimos no primeiro captulo, o "S" indica que o script deve ser executado com o parmetro
"start" e o "21" indica a ordem em que deve ser executado durante o boot, em relao aos outros
servios. A ordem de execuo dos servios muda de distribuio para distribuio, mas nessa
posio garantimos que ele ser executado depois da ativao das interfaces de rede e de outros
servios essenciais.
Se voc um administrador paranico, verifique a configurao dos servios na distribuio em uso
e altere a ordem de inicializao do script de firewall, de forma que ele seja carregado antes de
qualquer outro servio que aceite conexes, como o Samba ou o Apache. Com isso voc garante
que o firewall ser carregado primeiro e no fica com seu servidor vulnervel nem mesmo por um
curto espao de tempo durante o boot.
Isso nos leva a uma terceira opo para salvar a configurao, utilizando os prprios arquivos de
inicializao do sistema. Ela a mais "correta" do ponto de vista tcnico, embora menos flexvel.
Nesse caso, a configurao seria feita em trs passos:
A primeira parada seria o arquivo "/etc/modules", onde so listados os mdulos carregados pelo
sistema durante o boot. Nele seria adicionada a linha "iptables_nat", ativando o carregamento do
mdulo. Em seguida, voc adicionaria (ou descomentaria) a linha
"net.ipv4.conf.default.forwarding=1" no arquivo "/etc/sysctl.conf", para ativar o roteamento de
pacotes, tornando permanente o comando "echo 1 > /proc/sys/net/ipv4/ip_forward".
Finalmente, depois de executar o comando "iptables -t nat -A POSTROUTING -o $placa -j
MASQUERADE", que efetivamente ativa o compartilhamento, voc usaria o comando
"/etc/init.d/iptables save active" (nas derivadas do Debian) ou "service iptables save" (nas derivadas
do Red Hat) para salvar regra e fazer com que ela passe a ser reativada durante o boot.

Configurando um Servidor DHCP


Hoje em dia, quase todas as redes utilizam algum tipo de servidor DHCP. Em
geral, eles so ativados automaticamente ao compartilhar a conexo ou junto
com algum outro servio, de forma que voc acaba no aprendendo muita coisa
sobre a sua configurao.
De um modo geral, o trabalho de um servidor DHCP bastante simples. Ele responde aos pacotes
de broadcast das estaes, enviando um pacote com um dos endereos IP disponveis e os demais
dados da rede. Os pacotes de broadcast so endereados ao endereo "255.255.255.255" e so
retransmitidos pelo switch da rede para todas as portas, diferente dos pacotes endereados a um

endereo especfico, que so transmitidos apenas na porta relacionada a ele.


Periodicamente o servidor DHCP verifica se as estaes ainda esto l, exigindo uma renovao do
"aluguel" do endereo IP (opo "lease time"). Isso permite que os endereos IP sejam gastos
apenas com quem realmente estiver online, evitando que os endereos disponveis se esgotem.
O servidor DHCP mais usado no Linux o ISC DHCP, desenvolvido pela Internet Systems
Consortium, uma organizao sem fins lucrativos dedicada a desenvolver servios de infra-estrutura
usados na Internet, incluindo o Bind e o NTPD. Caso esteja curioso, a pgina com o cdigo fonte
a: http://www.isc.org/sw/dhcp/.
Nas distribuies derivadas do Debian, o pacote correspondente ao servidor DHCP se chama
"dhcp3-server" e pode ser instalado via apt-get:
# apt-get install dhcp3-server
Com o pacote instalado, voc pode ativar e desativar o servio usando os comandos:
# /etc/init.d/dhcp3-server start
# /etc/init.d/dhcp3-server stop
Como voc pode imaginar, o "3" corresponde verso do software. Eventualmente ele ser
substitudo pelo "dhcp4-server", o que resultar tambm na mudana do nome da pasta onde fica o
arquivo e do script de inicializao referente ao servio.
No Fedora e no CentOS, o pacote se chama simplesmente "dhcp" e pode ser instalado usando o
yum:
# yum install dhcp
Embora o pacote se chame apenas "dhcp", o script referente ao servio se chama "dhcpd", de forma
que os comandos para iniciar e parar o servio so:
# service dhcpd start
# service dhcpd stop
Diferente do Debian, o servio no ser configurado para ser inicializado durante o boot depois de
instalado. Voc precisa ativ-lo manualmente usando o comando "chkconfig":
# chkconfig dhcpd on
O arquivo de configurao o "dhcpd.conf". Nas distribuies derivadas do Debian, o caminho
completo para ele "/etc/dhcp3/dhcpd.conf", enquanto no Fedora e no CentOS apenas
"/etc/dhcpd.conf", ou seja, um diretrio acima.
Apesar dessas diferenas estticas, o que interessa mesmo a configurao do arquivo e esta sim
igual, independentemente da distribuio. Este um exemplo de arquivo de configurao bsico:
# /etc/dhcp3/dhcpd.conf
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.199;
option routers 192.168.1.1;
option domain-name-servers 208.67.222.222,208.67.220.220;
option broadcast-address 192.168.1.255;
}
A opo " default-lease-time" controla o tempo de renovao dos endereos IP. O "600" indica que

o servidor verifica a cada dez minutos se as estaes ainda esto ativas. Se voc tiver mais
endereos IP do que mquinas, os endereos IP das estaes raramente vo precisar mudar. Mas, no
caso de uma rede congestionada, o "max-lease-time" determina o tempo mximo que uma estao
pode usar um determinado endereo IP. Isso foi planejado para ambientes onde haja escassez de
endereos IP, como, por exemplo, em um provedor de acesso, onde sempre existem mais clientes do
que endereos IP disponveis e se trabalha contando que nem todos vo ficar conectados
simultaneamente. Em condies normais, essas duas opes no so muito importantes. O que
interessa mesmo o bloco que vai logo abaixo, onde ficam as configuraes da rede.
A opo "range" determina a faixa de endereos IP que ser usada pelo servidor. Se voc utiliza a
faixa de endereos 192.168.1.1 at 192.168.1.254, por exemplo, pode reservar os endereos de
192.168.1.1 a 192.168.1.100 para estaes configuradas com IP fixo e usar os demais para o DHCP,
ou ento reservar uma faixa especfica para ele, de 192.168.1.101 a 192.168.1.201, por exemplo. O
importante usar faixas separadas para o DHCP e os micros configurados com IP fixo.
Na "option routers" vai o endereo do default gateway da rede, ou seja, o endereo do servidor que
est compartilhando a conexo. No necessrio que o mesmo micro que est compartilhando a
conexo rode tambm o servidor DHCP. Pode ser, por exemplo, que na sua rede o gateway seja o
prprio modem ADSL que est compartilhando a conexo e o DHCP seja um dos PCs.
A opo "option domain-name-servers" contm os servidores DNS que sero usados pelas
estaes. Ao usar dois ou mais endereos, eles devem ser separados por vrgula, sem espaos. Em
geral, voc vai usar os prprios endereos DNS do provedor, a menos que voc configure um
servidor DNS interno na sua rede (que pode ser instalado no prprio micro que est compartilhando
a conexo e rodando o DHCP). Estes servios consomem poucos recursos da mquina.

Voc pode substituir o arquivo de configurao padro por este modelo, ou


edit-lo conforme a necessidade. Ao fazer qualquer alterao no arquivo, voc
deve reiniciar o servidor DHCP usando o comando:
# /etc/init.d/dhcp3-server restart
ou:
# service dhcpd restart
Com o servidor DHCP configurado, voc pode testar a configurao em um dos clientes Linux,
configurando a rede usando o "dhclient", seguido da interface a ser configurada. Ele mostra toda a
negociao entre o servidor e o cliente, o que permite que voc verifique se o servidor est usando a
configurao definida por voc:
# dhclient eth0
Internet Systems Consortium DHCP Client V3.0.4
Copyright 2004-2006 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
Listening on LPF/eth1/00:15:00:4b:68:db
Sending on LPF/eth1/00:15:00:4b:68:db
Sending on Socket/fallback
DHCPREQUEST on eth1 to 255.255.255.255 port 67
DHCPACK from 192.168.1.1
bound to 192.168.1.199 -- renewal in 245 seconds.
Como voc pode ver, o cliente deve receber a resposta a partir do endereo IP do servidor rodando o
servidor DHCP e ser configurado com um endereo dentro da faixa definida por voc.
Uma observao importante que sempre que configurar um servidor com duas placas de rede,
voc deve configurar o servidor DHCP para escutar apenas na placa da rede local. No Debian, esta

configurao vai no arquivo "/etc/default/dhcp3-server". Procure pela linha:


INTERFACES=""
... e adicione a placa que o servidor DHCP deve escutar, como em:
INTERFACES="eth0"
Para que a configurao entre em vigor, basta reiniciar o servio novamente.

Mais uma opo interessante no servidor DHCP a possibilidade de relacionar


um determinado endereo IP com o endereo MAC de certo micro da rede. Isso
faz com que ele sempre obtenha o mesmo endereo a partir do servidor DHCP,
como se tivesse sido configurado para usar IP fixo.
Esse recurso usado em redes de terminais leves, para que o servidor "reconhea" os terminais e
possa enviar a configurao adequada a cada um, mas pode ser usado tambm em outras situaes,
como em uma pequena rede, onde alguns micros compartilham impressoras e arquivos e por isso
no podem ficar mudando de endereo IP a cada reboot. Configurar o servidor DHCP para dar a
eles sempre o mesmo IP pode ser mais prtico que configur-los para usar IP fixo manualmente,
pois eles continuaro recebendo o mesmo IP mesmo que voc reinstale o sistema (pois, apesar da
mudana de sistema operacional, a placa de rede continuar a mesma). Veja o caso de quem usa
distribuies Linux live-CD, por exemplo.
Para usar este recurso, adicione uma seo como esta para cada host no final do arquivo
dhcpd.conf, depois de todas as linhas de configurao, mas antes de fechar a chave (}):
host m5 {
hardware ethernet 00:0F:B0:55:EA:13;
fixed-address 192.168.1.211;
}
Veja que a seo comea com o nome da mquina, "m5" no exemplo. Em seguida vo, entre
chaves, o endereo MAC da placa de rede (que voc pode verificar atravs do comando "ifconfig")
e o endereo IP que a estao deve usar. Um exemplo de arquivo completo, incluindo a
configurao de IP fixo para duas mquinas seria:
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.199;
option routers 192.168.1.1;
option domain-name-servers 208.67.222.222,208.67.220.220;
option broadcast-address 192.168.1.255;
host m5 {
hardware ethernet 00:0F:B0:55:EA:13;
fixed-address 192.168.1.211;
}
host semprao {
hardware ethernet 00:0F:B0:45:BC:17;
fixed-address 192.168.1.212;
}
}
No se esquea de reiniciar o servidor DHCP depois de configurar o arquivo para que a nova

configurao seja aplicada:


# /etc/init.d/dhcp3-server restart
Uma pergunta recorrente sobre o uso de servidores DHCP sobre a possibilidade de manter mais de
um servidor DHCP ativo. Em situaes normais, voc nunca deve manter mais de um servidor
DHCP ativo ao mesmo tempo, principalmente se ambos estiverem configurados para fornecer
endereos dentro da mesma faixa. Caso contrrio, comeam a surgir problemas com micros
configurados com o mesmo IP (cada um dado por um DHCP diferente) e assim por diante.
Entretanto, em algumas situaes, uma configurao com dois servidores DHCP pode funcionar,
naturalmente depois de bem testada.
O dhcp3-server usado no Linux bastante rpido, por isso (desde que a configurao no seja muito
complexa) costuma responder antes dos servidores DHCP usados nos servidores Windows e na
maioria dos modems ADSL, o que pode ser usado a seu favor.
Imagine um caso comum: uma rede de 10 ou 20 micros, com um ADSL de 1 megabit,
compartilhado pelo prprio modem. Para melhorar o desempenho da rede, voc resolve implantar
um servidor com o Squid configurado para trabalhar como um proxy transparente, alm de um
servidor DNS prprio e DHCP.
Como este "servidor" o seu prprio micro, que precisa ser desligado de vez em quando, voc
decide manter a rede da forma que est, com o modem compartilhando a conexo e o seu micro
funcionando como um segundo gateway, dentro da rede local. Voc quer que a rede continue
funcionando mesmo quando seu micro precisar ser desligado por um certo tempo, por isso mantm
o servidor DHCP do modem ativo, junto com o servidor DHCP instalado no seu micro,
configurados para fornecerem faixas diferentes de endereos, de forma a minimizar conflitos.
No seu caso, o dhcp3-server mais rpido que o DHCP do modem. Por isso, enquanto ele est
ligado, os micros da rede local so configurados para acessar atravs dele, passando pelo proxy
transparente. Quando ele desligado, o modem ADSL passa a responder as chamadas e os micros
passam a ser configurados para acessar diretamente atravs dele ( preciso reconfigurar os clientes
via DHCP para que eles obtenham a configurao a partir do modem e passem a utiliz-lo como
gateway). A rede continua funcionando mesmo que seu micro seja desconectado definitivamente.
Note que isso tecnicamente errado e s funciona em redes pequenas, onde todos os micros so
ligados ao mesmo hub ou switch. Quanto maior a rede, mais imprevisvel se torna o comportamento
dos servidores DHCP e mais importante torna-se manter apenas um ativo.