Você está na página 1de 69

A P O STI L A

DE
GNU / LINUX

1. KERNEL

Kernel de um sistema operacional entendido como o ncleo deste ou, numa


traduo literal, cerne. Ele representa a camada mais baixa de interface com o
Hardware, sendo responsvel por gerenciar os recursos do sistema computacional
como um todo. no kernel que esto definidas funes para operao com
perifricos (mouse, disco, impressora, interface serial/interface paralela),
gerenciamento de memria, entre outros. Resumidamente, o kernel um conjunto
de programas que fornece para os programas de usurio (aplicativos) uma interface
para utilizar os recursos do sistema.
Quanto sua arquitetura, o kernel pode ser monoltico - em um nico bloco, com
todas as funcionalidades carregadas na memria - ou modular (micro-kernel) - com
os mdulos especficos para cada tarefa carregados opcionalmente, dinamicamente.
O kernel a parte mais importante do sistema operacional, pois, sem ele, a cada
programa novo que se criasse seria necessrio que o programador se preocupasse
em escrever as funes de entrada/sada, de impresso, entre outras, em baixo
nvel, causando uma duplicao de trabalho e uma perda enorme de tempo. Como o
kernel j fornece a interface para que os programas possam acessar os recursos do
sistema de um nvel mais alto e de forma transparente, fica resolvido o problema da
duplicao do trabalho.
Quando h perifricos ou elementos de um sistema computacional que o kernel no
cobre, ento se faz necessrio escrever a interface para eles, os chamados device
drivers. Geralmente, os kernels oferecem uma funo para se executar chamadas
de sistema, como por exemplo a ioctl(), funo essa que podemos denominar de I/O
Control do Linux. Valendo-se dessa funo, podem-se escrever rotinas para
qualquer dispositivo.
1.1 Kernel monoltico.
Kernel monoltico ou mono-bloco um kernel que implementa um interface de alto
nvel para possibilitar chamadas de sistema especficas para gesto de processos,
concorrncia e gesto de memria por parte de mdulos dedicados que so
1

A P O STI L A
DE
GNU / LINUX
executados com privilgios especiais.
Alguns exemplos deste tipo de kernel:

BSD
Linux

1.2 Micro-Kernel.
Micro-kernel um termo usado para caracterizar o sistema cujas funcionalidades do
sistema saram do kernel e foram para servidores, que se comunicam com um
ncleo mnimo, usando o mnimo possvel o "espao do sistema" (nesse local o
programa tem acesso a todas as instrues e a todo o hardware) e deixando o
mximo de recursos rodando no "espao do usurio" (no espao do usurio, o
software sofre algumas restries, no podendo acessar alguns hardwares, nem tem
acesso a todas as instrues).
Alguns exemplos deste tipo de kernel:

Hurd
Minix
Microsoft Windows NT

A P O STI L A
DE
GNU / LINUX
1.3 Recompilando o Kernel.
A recompilao do kernel tem de ser extremamente observada. nela que voc
poder colocar suporte a muitos tipos de hardwares, habilitar recursos do kernel
(como firewall e compartilhamento NAT), entre outras coisas. Muitas distribuies
incluem kernels j compilados e prontos para usar, mas sempre recomendado que
voc compile o seu kernel para otimiz-lo conforme suas necessidades.
Alguns pacotes precisam ser instalados antes da recompilao do kernel, entre eles,
os pricipais so o gcc-4.0, initrd-tools, automake1.9, make e libncurses5-dev.
Pacotes de descompactao tambm sero necessrios, portanto devemos instalar
os pacotes tar, bzip2 e gzip.
Descompactando o kernel
Em primeiro lugar, vamos baixar uma imagem e descompact-la em algum diretrio,
para depois comearmos a configurar a compilao. Os cdigos-fonte do kernel em
suas vrias verses podem ser todos encontrados atravs do seguinte endereo:

http://www.kernel.org Pgina oficial do Kernel


ftp://ftp.kernel.org FTP oficial do Kernel
http://ftp.kernel.org Acesso HTTP ao FTP oficial do Kernel
ftp://ftp.br.kernel.org Mirror Brasileiro do FTP do kernel

Para facilitar, vamos um browser em modo texto para baixar a ltima verso do
kernel, para isso deveremos instalar o links atravs do apt-get com o seguinte
comando:
# apt-get install links
Para acessarmos a pgina do kernel devemos digitar o seguinte comando no shell:
# links www.kernel.org
Vamos baixar a ltima verso disponvel do kernel, utilizando a seta de
direcionamento para baixo at chegarmos a letra F (Full), em seguida precione a
letra D (download) e em seguida pressione a tecla enter para iniciar o download.
Terminado o download, utilizaremos o comando mv para mover o pacote do kernel
para o diretrio /usr/src.
# mv linux-v.x.y.z.tar.bz2 /usr/src
Agora, portanto hora de descompactarmos o cdigo fonte do kernel, para isso
3

A P O STI L A
DE
GNU / LINUX
utilizaremos a seguinte linhas de comando:
# cd /usr/src
# tar -xvjf linux-v.x.y.z.tar.bz2
Para facilitar, criaremos um link simblico do diretrio nos quais os fontes do kernel
foram extraidos.
# ln -s

linux-v.x.y.z linux

No proximo passo, iniciaremos a configurao para posteriormente compilarmos o


kernel.
# cd linux
# make menuconfig

extremamente necessrio que voc tenha todo o conhecimento sobre o hardware


utilizado no computador, e servios para os quais ele dever atender.
Para verificarmos uma listagem simplificada de hardware, utilizaremos o segundo
terminal disponvel, apertando as teclas Alt+F2.
Em seguida, digitaremos o seguinte comando:
# lspci
4

A P O STI L A
DE
GNU / LINUX

Desta forma saberemos quais so os principais hardwares instalados no computador


para que possamos passar informaes corretas ao kernel.
Sabendo qual o tipo de hardware existente no computador, retornaremos janela
de configurao do kernel pressionando as teclas Alt+F1.
Dentro das configuraes do kernel Linux, podemos setar as opes como build in
(compilado diretamente dentro de uma nica estrutura do kernel, sendo carregado
sempre que o computador for iniciado e representado por um *) ou podemos ainda
setar as opes como modules (modulos que podem ou no ser carregados pelo
kernel em sua inicializao e representado pela letra M).
Aps todas as modificaes necessrias, iremos salvar o arquivo de configurao
selecionando a opo Save Configuration to an Alternate File

Agora iremos salvar as configuraes do kernel com o nome de config-meu-kernel


(pode ser qualquer outro nome desde que se recorde posteriormente).

A P O STI L A
DE
GNU / LINUX

Agora s sair selecionando a opo Exit ele ir questionar se deseja salvar,


selecione Yes.
Com o kernel configurado, iniciaremos a compilao com o seguinte comando:
# make bzImage
Se todas as configuraes do kernel estiverem corretas, o kernel j estar compilado
e ser salvo dentro do diretrio /usr/src/linux/arch/i386/boot/ , caso contrrio,
deveremos reconfigur-lo identificando na mensagem de erro qual o causador do
problema e rodar novamente o comando acima descrito.
O prximo passo instalar os mdulos. Para isso utilizaremos os seguintes
comandos:
# make modules
# make modules_install
Vamos agora copiar a imagem do kernel compilado, do nosso arquivo de
configuraes e um arquivinho chamado System.map para o diretrio /boot nota-se
que o nome do kernel geralmente inici-se por vmlinuz, portanto ao copiarmos o
arquivo bzImage, j estaremos renomeando-o com esse prefixo mais sua verso
tudo isso com os seguintes comandos:
6

A P O STI L A
DE
GNU / LINUX
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-v.x.y.z
# cp /usr/src/linux/System.map /boot
# cp /usr/src/linux/config-meu-kernel /boot
Agora necesrio criarmos uma imagem initrd, que uma imagem relativa aos
procedimentos de inicializao do sistema, para isso usaremos o seguinte comando:
# mkinitrd /lib/modules/v.x.y.z/ -o /boot/initrd-v.x.y.z.img
Para organizar a estrutura de kernels, uma vez que pode-se ter mais de um no
sistema operacional GNU/Linux, vamos criar links simblicos no diretrio raiz com os
seguintes comandos:
# ln -s /boot/vmlinuz-v.x.y.z /
# ln -s /boot/initrd.v.x.y.z.img /
Agora s adicionar as linhas no /etc/lilo.conf e redar o comando lilo ou adicionar
em menu.lst dentro do diretrio /boot/grub/ conforme j aprendido acima.
CUIDADO!!!
Lembre-se de sempre adicionar uma nova entrada em seu arquivo de configurao
do kernel, no seguro substitu-las, pois, o novo kernel pode no funcionar aps a
prxima reinicializao.

A P O STI L A
DE
GNU / LINUX

2. SERVIDOR DHCP

O DHCP (Dynamic Host Control Protocol) um protocolo utilizado para


endereamento dinmico de hosts. Atravs do DHCP, possvel enderear uma
grande quantidade de hosts de uma rede, sem perder um grande tempo
configurando estaes de trabalho.
Existe um servio no GNU/LINUX chamado dhcpd que pode ser configurado para
fornecer endereos IP's automaticamente para os clientes da rede. Com isso, o
administrador da rede ganha tempo, tem uma configurao mais confivel e muito
mais estvel em todas as suas estaes. Alm disso, possvel ter um controle dos
endereos utilizados pelos hosts da rede e fornecer algumas configuraes
adicionais, tais como, endereo de gateway, servidor de DNS primrio, servidor de
DNS secundrio, entre outros.
2.1 Instalando o servidor e cliente dhcp.
Para instalar o servidor e o cliente de dhcp, devemos usar o seguinte comando:
# apt-get install dhcp3-server dhcp3-common dhcp-client
Instalado o servidor, daremos incio sua configurao, seu arquivo encontra-se
dentro do diretrio /etc/dhcp3/dhcpd.conf
As linhas que contiverem # na frente, no sero lidas pelo servidor DHCP, pois
estaro comentadas.
# vi /etc/dhcp3/dhcpd.conf
ddns-update-style none;
Esta opo especifica se o servidor DHCP dever tentar atualizar o DNS quando
um arrendamento aceito ou devolvido. Na implementao da ISC, esta opo
obrigatria.
option domain-name "marcioleonardi.com.br";

A P O STI L A
DE
GNU / LINUX
Esta opo especifica o domnio que ser fornecido aos clientes como o principal
domnio de busca.
option domain-name-servers 200.167.216.14,200.167.216.15;
Esta opo especifica uma lista separada por vrgulas de servidores DNS que o
cliente deve utilizar.
default-lease-time 600;
Um cliente pode requerer um perodo de tempo especfico vlido para um
arrendamento. Seno o servidor dever fazer um arrendamento com este prazo de
expirao (em segundos).
max-lease-time 7200;
Se voc tiver mais endereos IP do que mquinas os endereos IP das estaes
raramente vai precisar mudar. Mas, no caso de uma rede congestionada, o " maxlease-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, em condies normais estas duas opes no so muito
importantes.
authoritative;
Em uma rede com 2 servidores DHCP, esta opo o torna padro da rede local.
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.101 192.168.1.254;
option routers 192.168.1.1;
}
A opo "range" determina a faixa de endereos IP que ser usada pelo servidor.
Se voc utiliza a faixa de endereos 192.168.1.0 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.
A opo routers declara o gateway padro que ser fornecido aos clientes.
host Marcio {
hardware ethernet 00:0C:6E:8E:F7:9A;
fixed-address 192.168.1.5;
9

A P O STI L A
DE
GNU / LINUX
}
O endereo MAC de um sistema (de forma que o servidor DHCP possa reconheclo quando dele receber uma solicitao).
Especifica que o sistema sempre deve receber o mesmo endereo IP. Note que um
hostname funciona aqui, desde que o servidor DHCP seja capaz de resolver o
nome via DNS antes de responder solicitao com as informaes do
arrendamento.
Desta forma estar finalizada a configurao do seu servidor DHCP devendo inicilo atravs do seguintes comandos:
# /etc/init.d/dhcp3-server stop
# /etc/init.d/dhcp3-server start

10

A P O STI L A
DE
GNU / LINUX

3. SERVIDOR FTP

FTP significa File Transfer Protocol (Protocolo de Transferncia de Arquivos), e


uma forma bastante rpida e verstil de transferir arquivos, sendo uma das mais
usadas na internet.
Pode referir-se tanto ao protocolo quanto ao programa que implementa este
protocolo (neste caso, tradicionalmente aparece em letras minsculas, por influncia
do programa de transferncia de arquivos do Unix).
A transferncia de dados em redes de computadores envolve normalmente
transferncia de arquivos e acesso a sistemas de arquivos remotos (com a mesma
interface usada nos arquivos locais). O FTP (RFC 959) baseado no TCP, mas
anterior pilha de protocolos TCP/IP, sendo posteriormente adaptado para o TCP/IP.
o standard da pilha TCP/IP para transferir arquivos, um protocolo genrico
independente de hardware e do sistema operacional e transfere arquivos por livre
arbtrio, tendo em conta restries de acesso e propriedades dos arquivos.
Existem diversos servidores FTP disponvel para GNU/Linux, vamos utilizar o
ProFTPd como exemplo para nossa experincia.
3.1 Instalando o ProFTPd.
Como j vimos antes, vamos instalar o servidor atravs do comando apt, com os
seguintes parmetros:
# apt-get install proftpd proftpd-common
3.2 Configurando o ProFTPd.
Como todo daemon de um sistema GNU/Linux e Unix, o ProFTPd configurado
atravs de um arquivo texto, o /etc/proftpd.conf. Com um simples editor de texto
possvel efetuar sua configurao. interessante observar que o ProFTPd apenas l
seu arquivo de configurao ao ser iniciado. Portanto aps cada modificao
deveremos reinici-lo.
A sintaxe do arquivo /etc/proftpd.conf simples. O ProFTPd usa o conceito de
contextos em sua configurao e nestes contextos temos as chamadas diretivas.
Contexto uma configurao global de um certo comportamento do ProFTPd
11

A P O STI L A
DE
GNU / LINUX
enquanto as diretivas so as sub-opes que configuram os contextos.
Contextos do ProFTPd.
Basicamente temos dois contextos principais:
Contexto Principal: Contm as configuraes default que sero utilizados inclusive
por outros contextos.
Contexto <Directory DIR >: Determina o comportamento do ProFTPd quando
acessando e/ou servindo o diretrio DIR.
Abaixo temos um exemplo de configurao do ProFTPd (perceba que a
configurao default de nossa verso customizada).
Exemplo 1. exemplo do configurao do ProFTPd
#Configurao do ProFTPd
ServerName
ServerType
DefaultServer
ServerAdmin

"FTP-TESTE"
standalone
on
root@localhost

#Para efetuar download aos pedaos


AllowRetrieveRestart

on

#porta 21 padro
port

21

#Umask 022 um bom padro pra prevenir que novos diretrios e


arquivos
#sejam gravveis pelo grupo de usurios
Umask

022

#Quantidade mxima de instncias


MaxInstances 10
#Usurio e grupo para o servidor no caso de especificao
12

A P O STI L A
DE
GNU / LINUX
especifica
#User
#Group

nobody
nobody

#Autenticao de usurio...utilizando o usurio do prpio server


GNU/Linux
AuthUserFile /etc/passwd
#login como root
RootLogin

on

#Faz com que o usurio apenas acesse seu diretrio $HOME


DefaultRoot ~
<Directory /*>
Todas as devias alteraes realizadas vamos reiniciar o processo com o seguinte
comando:
# /etc/init.d/proftpd stop
# /etc/init.d/proftpd start

13

A P O STI L A
DE
GNU / LINUX
Algumas diretivas do contexto principal:

14

A P O STI L A
DE
GNU / LINUX
Algumas diretivas do contexto <Directory>

15

A P O STI L A
DE
GNU / LINUX

4. SERVIDOR OPENSSH

O Secure Shell ou SSH , simultaneamente, um programa de computador e um


protocolo de rede que permite a conexo com outro computador na rede, de forma a
executar comandos de uma unidade remota. Possui as mesmas funcionalidades do
TELNET, com a vantagem da conexo entre o cliente e o servidor ser criptografada.
As redes de computadores so uma mdia inerentemente insegura. A menos que
voc tem certeza que seus pacotes nunca iro passar por um roteador ou
computador que voc no controle direto sobre, seus dados no esto seguros. Eles
podem ser visualizados por sysadmins pouco confiveis ou por um script kiddie, ele
pode ser alterado em trnsito, ou pode ser interceptado e trocado por dados
completamente diferentes.
4.1 Criptografia e Assinaturas Digitais.
Como mensionado anteriormente, voc no pode simplesmente confiar em qualquer
dado que passe pela Internet sem algum mtodo para garantir que o dado que voc
envia o mesmo dado que recebido do outro lado. Isto parece paranico, e na
maioria dos casos , mas sempre melhor estar seguro que ter problemas. muito
fcil para qualquer um falsificar os seus dados durante o trnsito. E se voc tem
dados que so sensveis ou privados, certamente voc no vai querer que J.
Random Hacker ou H. Bored Sysadmin leia o mesmo. aqui onde a criptografia e a
assinatura digital entram.
Vejamos um exemplo concreto de um problema tpico de segurana. Suponha que o
servidor A deseje envia uma mensagem ao servidor B. Se a mensagem for enviada
descriptografada e passa pelo roteador C, qualquer informao enviada visvel a
root@C. Se root@C hostil, ele pode resolver ler o que o servidor A est tentando
enviar para o servidor B, e, em vez de repassar a mensagem, enviar uma
mensagem falsa para B, e fazer a mesma coisa no retorno de B para A. Este o
ataque conhecido como "man-in-the-midle" ou "intermedirio".

16

A P O STI L A
DE
GNU / LINUX
Dados Sensveis
Tipicamente os pacotes enviados pela Internet viajam por vrios roteadores antes de
chegar a seu destino. Cada um destes roteadores um perigo potencial e possui
completo acesso a seus dados. Esta , claramente, uma situao inaceitvel para
muitos dados importantes ou sensveis. Infelizmente as pessoas constantemente
esto enviando segredos da empresa, informaes pessoais, senhas, nmeros de
carto de crdito, e outros dados privados no criptografados pela internet. Ou elas
no percebem o perigo disto ou simplesmente no acreditam que valha o esforo a
prpria proteo.
Autenticao
Outra rea em que a tcnica de criptografia usada na rea de autenticao como eu fico sabendo que voc quem voc diz ser? Um nome de login e senha
podem ter sido seguros h 20 anos atrs, mas eles so facilmente roubados ou
violados. E um esquema de login e senha pode fornecer um servio bsico de
autenticao, mas uma vez autenticado, eles no garantem que os dados recebidos
sejam exatamente os mesmos que foram enviados. Criptografia e assinaturas
digitais so extremamente importantes para resolver estes problemas
(particularmente sistemas de chave pblica).
Criptografia de Chave Privada vs. Pblica
Tradicionalmente a criptografia tm se baseado em um segredo compartilhado,
conhecido como chave. Esta chave usada em uma frmula matemtica para
embaralhar a informao em questo de forma que ela no possa ser
desembaralhada facilmente sem o conhecimento da chave secreta. Enquanto esta
tcnica pode ser bem segura quando estiver em uso um bom algoritmo e uma chave
de tamanho razovel, ela introduz o problema da troca de chaves. Como voc pode
se comunicar com um host remoto na Internet quando voc no tem um canal
seguro de comunicao que voc possa utilizar para transferir a chave de
criptografia em primeiro lugar? Este problema tem sido resolvido tipicamente pela
transferncia das chaves pessoalmente.
A presuno que a criptografia requer o compartilhamento do conhecimento de uma
chave est to entranhado que ele geralmente no reconhecido. Simplesmente
assumido pela maioria que este um defeito das tcnicas de criptografia.
Entretanto, tudo mudou em 1976 quando Martin Hellman, Whitfield Diffie, e Ralph
Merkle apresentaram a idia da criptografia de chave pblica na Stanford University.
A criptografia de chave pblica aborda
diferente. Aqui temos 2 chaves cuidadosamente, e uma chave pblica,
chave pblica pode ser derivada da

o problema de um ngulo completamente


uma chave privada, que protegida
que pode ser passada a quem a quiser. A
chave privada, mas no vice-versa. Os
17

A P O STI L A
DE
GNU / LINUX
algoritmos de chave pblica possuem a propriedade que os dados criptografados
pela chave pblica podem ser somente descriptografados pela chave privada
correspondente.
Com esta descoberta, o problema da troca de chaves est praticamente resolvido.
No h mais necessidade de uma mdia segura para a transferncia inicial de
chaves, mas voc pode simplesmente criptografar os dados com a chave pblica do
recipiente e ter certeza que os dados s podem ser recuperados com a chave
privada dele, a qual nunca precisa sair do controle dele. Isto tambm resolve o
problema mencionado acima da autenticao - se voc quer ter certeza que algum
quemdiz ser, simplesmente criptografe uma pequena quantia de dados (conhecida
como "desafio") usando sua chave pblica, e envie a esta pessoa. Esta pessoa
ento descriptografa a mesma com sua chave privada e envia de volta
(possivelmente criptografada com tua chave pblica). Se os dados que voc receber
so idnticos aos dados originalmente enviados, voc sabe que ele quem diz ser.
Ento por qu a criptografia de chave privada ainda utilizada? A razo tem a ver
com eficincia. Os mtodos atuais de criptografia com chave pblica so muito mais
lentos que os mtodos de chave privada, tornando, desta forma, impraticvel a
criptografia de enormes quantias de dados. Frequentemente, (como com o SSH),
um mtodo de chave pblica pode ser utilizado para autenticao e para a troca de
uma chave privada. Se tudo der certo com estes dois passos, a criptografia de chave
privada pode ser usada.
Funes de Hash
Uma funo de Hash simplesmente uma funo que pega uma enorme quantia de
dados e encolhe a mesma para um tamanho bem menor. uma funo de uma via
(ou seja, a informao original no pode ser determinada a partir do hash
resultante). Funes criptogrficas de hash tem a propriedade adicional que uma
pequena alterao nos dados originais resulta em uma grande alterao no hash
resultante, o que torna extremamente difcil alterar os dados e manter o mesmo hash
resultante.
Assinaturas Digitais
Assinaturas digitais fazem uso das funes de hash criptogrficas para mostrar que
o que o recipiente v , de fato, a informao que foi originalmente enviada.
Algoritmos de assinatura digital tpicos so baseados na criptografia de chave
pblica, e uma viso simplificada de como funcionam mostrada no seguinte
exemplo:
A pessoa A compe um email para a pessoa B. Quando o email est pronto para ser
enviado, ele passado por um algoritmo criptogrfico de hash e o hash resultante
criptografado com a chave privada de A e anexado ao email. Quando a pessoa B
recebe o email, ela descriptografa a assinatura com a chave pblica de A e passa o
18

A P O STI L A
DE
GNU / LINUX
email pelo mesmo algoritmo de hash. Se o hash resultante idntico ao hash
descriptografado, a pessoa B pode confiar que o email no foi adulterado durante o
transporte. Mesmo pequenas alteraes, como o acrscimo de pontuaes ou
espaos ir resultar em um hash completamente diferente.
Assinaturas digitais so uma exigncia legal em alguns estados por que so
(praticamente) impossveis de serem forjadas - certamente so muito mais difceis
de forjar que uma assinatura fsica. Uma aplicao popular para a criao e
verificao de assinaturas digitais (bem como criptografar e descriptografar) o
PGP, ou sua alternativa livre, o GnuPG.
4.2 Instalao do OpenSSH
Para instalarmos o OpenSSH, sero necessrios 3 (trs) pacotes, que devero ser
instalados via apt-get com o seguinte comando:
# apt-get install openssh-server openssh-client ssh
4.3 OpenSSH Bsico
O OpenSSH uma implementao livre dos protocolos SSH, verso 1 e 2. O nome
secure shell um pouco equivocado, uma vez que o mesmo no um shell da
mesma forma que o bash ou do tcsh so shell, mas mais do tipo do rsh. Ele
usado quando preciso fazer um acesso remoto seguro a uma mquina Unix, mas
devido prevalncia de script kiddies que adorariam conseguir sua senha e ober
acesso livre a teus servidores, uma boa idia usar o mesmo sempre que voc
precisar fazer algum acesso remoto.
O uso mais bsico do ssh, e a forma que ele usado pela maioria das pessoas,
como substituto do telnet. O telnet transmite toda comunicao, incluindo o login e
senha, em texto plano, e esta informao pode facilmente ser interceptadapor
qualquer um que tenha acesso fsico a qualquer rede ou roteador em que os seus
pacotes passarem. Qualquer coisa transmitida pela Internet em texto plano jogo
fcil para qualquer um, por isto voc tem que ser cuidadoso. Usar o ssh ao invs do
telnet torna muito mais difcil sua informao ser capturada.
O uso bsico do ssh simples. Vamos por exemplo conectar via SSH no nosse
endereo de loop-back 127.0.0.1, e com nosso usurio comum desta forma voc
pode usar o seguinte comando:
$ ssh acc@127.0.0.1
Dependendo de sua verso do ssh, voc pode tambm ver uma mensagem
mostrando a fingerprint da chave do host remoto. Esta est ligada a um hash da
chave, e se voc estiver sendo extremamente cuidadoso voc vai trocar as
fingerprints com o administrador do host remoto atravs de uma linha segura (tipo
um telefone ou pessoalmente) antes de fazer a conexo, e ento verificar se as
19

A P O STI L A
DE
GNU / LINUX
fingerprints so idnticas. Isto para proteger-se de um ataque "man-in-the-middle"
que eu discuti acima, onde algum fica entre voc e o servidor, trocando as chaves e
criptografando e descriptografando suas comunicaes de uma forma que
transparente tanto para voc quanto para o servidor, mas permitindo-o ver (e alterar)
toda a comunicao.
Uma vez que o ssh tenha feito a conexo, ele ir pedir pela sua senha. Esta a
senha associada conta de usurio na mquina remota que idntica ao username
que voc forneceu ao ssh (se voc no fornecer um username, o ssh assume que
voc quer usar o username no qual voc est logado atualmente na sua mquina).
Quando voc informar a senha, o ssh criptografa a mesma e a envia para o servidor
remoto. Se a senha for idntica senha associada conta remota, o ssh cria um
login shell e loga voc na mquina remota. A partir deste ponto, voc pode usar a
mquina como se estivesse logado no console.
Existem duas verses diferentes do protocolo ssh - ssh1 e ssh2 (ambos so
suportados pelo OpenSSH). Vrias vulnerabilidades foram descobertas no ssh1, e a
recomendao em geral que se use o ssh2.
4.4 SSH Port Forwarding
O telnet e outros mecanismos de login esto longe de serem os nicos protocolos de
rede que tem o mau hbito de transmitir informaes descriptografadas. Muitos
protocolos comuns, como HTTP, POP3, ou IMAP, transmitem as informaes em
texto plano, possivelmente incluindo logins e senhas. Enquanto cada um destes
protocolos tem uma verso protegida pelo SSL, as verses seguras no so to
comuns quanto as verses no protegidas. Alm disto, a instalao de verses
protegidas pelo SSL requer o uso de privilgios de superusurio, e se, por exemplo,
voc l seu email via IMAP de um servidor remoto para o qual voc no tem controle
direto, voc no pode instalar o IMAP-S.
O SSH vem para o resgate aqui. Desde que voc tenha acesso shell ao servidor que
voc deseja se conectar, o SSH pode criar um tunel criptografado para voc usar
como canal para suas conexes de rede. Ele faz isto criando uma conexo segura
ao servidor, abrindo uma porta na sua mquina local, e canalizando tudo que recebe
na porta local para uma porta especfica no servidor remoto.
Vamos usar o IMAP com exemplo, j que ele que eu uso para verificar meu email.
Digamos que voc queira recuperar seus emails de um servidor de nome "vacuum".
vacuum est rodando um servidor IMAP, mas no um protegido pelo SSL, e voc
prefere no transmitir seu username e senha descriptografados. Voc pode chamar
o ssh com o seguinte comando:
$ ssh -L2001:vacuum:143 bob@vacuum

20

A P O STI L A
DE
GNU / LINUX
Este comando diz ao ssh para abrir a porta local 2001 e repassar a conexo para a
porta 143 em vacuum, e logar em vacuum como bob para isto. Uma vez que voc
consiga fazer o login com sucesso no servidor remoto, voc tem um tunel ssh para
brincar. Para checar seu email agora, simplesmente informe seu cliente IMAP para
ler seu email a partir de localhost, porta 2001. O ssh ir fazer uma conexo
transparente para o servidor remoto.
4.5 Autenticao de chaves.
Enquanto usar o ssh com uma senha muito mais seguro que o telnet ou rsh, ainda
no o sem algumas armadilhas. Ao mesmo tempo que sua senha criptografada e
mantida segura de outros olhos durante o trnsito pela rede, uma vez que ela
chegue no servidor remoto ela descriptografada novamente para texto plano antes
da autenticao. Se o servidor remoto foi comprometido, um atacante pode substituir
o sshd por uma verso corrompida que funciona como um cavalo-de-tria, coletando
senhas. Um mtodo muito mais seguro de autenticao a autenticao baseada
em chaves.
A autenticao de chaves SSH baseada nos princpios da criptografia de chave
pblica. Voc tem uma chave privada que voc mantm protegida e que
posteriormente criptografada com uma senha de acesso, e voc tem uma chave
pblica que mantida em cada servidor que voc deseja acessar. Quando voc
desbloqueia sua chave privada e tenta conectar a um servidor para o qual voc
tenha dado a sua chave pblica, sua chave usada para autenticao em vez de
sua senha. Isto significa que suas senhas nunca so enviadas mquina remota,
removendo desta forma toda a possibilidade de ataques de roubo de senha.
Aqui temos uma viso bsica de como este processo funciona. Quando voc
conecta-se a um servidor remoto, o servidor checa para ver se sua chave pblica
est no arquivo authorized_keys da sua conta remota. Se ele est, ento o servidor
criptografa algum dado aleatrio com sua chave pblica e o envia a voc. Voc
descriptografa estes dados, criptografa o mesmo com a chave pblica do servidor
remoto, e manda-os de volta. Se o servidor descriptografar e ver que idntico ao
que ele enviou originalmente a voc, ento ele sabe que voc quem voc diz ser, e
deixa voc entrar sem precisar de senha.
Para criar um par de chaves ssh (um conjunto de chaves, uma pblica, e uma
privada), tudo que voc precisa fazer executar o seguinte comando:
$ ssh-keygen -t rsa
Este comando vai pedir por uma senha para criptografar a chave primria e vai
salvar a mesma por padro em ~/.ssh/identity. Mantenha esta chave
cuidadosamente guardada! Se algum conseguir pegar a chave e a senha que voc
usou para criptografar a mesma, este algum pode fazer logon como se fosse voc
21

A P O STI L A
DE
GNU / LINUX
em todos os servidores que estiverem configurados para aceitar suas chaves!
Depois que o comando enviado:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/acc/.ssh/identity):
Created directory '/home/acc/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/acc/.ssh/identity.
Your public key has been saved in /home/acc/.ssh/identity.pub.
The key fingerprint is:
e8:96:e0:80:06:b5:e5:e4:22:30:3b:76:47:93:95:73 acc@debianserver
Isto tudo que voc precisa fazer! Uma vez que seu keypar tenha sido gerado, voc
pode pegar o contedo de identity.pub e acrescentar ao seu ~/.ssh/authorized_keys
no servidor remoto. Uma vez que ele tenha sido acrescentado, tente conectar-se ao
servidor remoto novamente. Quando voc faz a conexo, em vez de pedir sua
senha, ele ir perguntar pela senha que voc usou para proteger sua chave privada:
$ ssh acc@debian-server
Enter passphrase for RSA key 'acc@debian-server':
Quando voc informar a senha para desbloquear sua chave, o ssh usar ento sua
chave para fazer sua autenticao com o servidor remoto - sua senha nunca
transmitida, e nenhuma informa transmitida pela linha que possa ser mais tarde
usada por um atacante para obter acesso a sua conta. Desde que voc mantenha
sua chave privada em segurana, sua conta est segura.
A autenticao de chaves tem outros benefcios, como a possibilidade de vrias
pessoas utilizarem a conta root sem conhecer a senha de root. Simplesmente
acrescente as chaves pblicas de cada usurio a ~/.ssh/authorized_keys, e elas
podero fazer o login como aquele usurio.
ssh-agent
A autenticao baseada em chaves tambm traz outras possibilidades interessantes.
Por exemplo, se voc est certo que ningum que no seja de confiana ir usar
sua sesso de login atual, voc pode usar um programa chamado ssh-agent para
manter uma cpia desbloqueada de sua chave privada na memria, de forma que
voc no precise escrever sua senha toda vez que faz um ssh para algum lugar.
consideravelmente mais seguro que simplesmente usar uma chave privada sem
22

A P O STI L A
DE
GNU / LINUX
senha pois, mesmo quando sua chave est desbloqueada, o ssh-agent no ir dar a
chave privada para voc - ele somente assina ou descriptografa dados com ela
(como no caso do desafio do servidor). Alm disso, outras pessoas que estejam
logadas em seu servidor (fora o root, claro) no tem acesso ao seu ssh-agent.
O ssh-agent usado conforme abaixo:
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-XXvknpQ6/agent.23799; export
SSH_AUTH_SOCK;
SSH_AGENT_PID=23800; export SSH_AGENT_PID;
echo Agent pid 23800;
A sada do ssh-agent foi feita para ser examinada pelo seu shell para acrescentar as
variveis de ambiente apropriadas. Ou copie e cole a sada na mesma janela de
terminal, ou execute algo assim (assumindo que voc est usando um shell bash):
bash$ eval `ssh-agent`
Agent pid 23800;
O ssh-agent est agora rodando e as variveis de ambiente apropriadas foram
configuradas de forma que o ssh e os vrios utilitrios ssh podem agora acessar o
mesmo. Uma vez que o agente esteja rodando voc pode acrescentar suas chaves
privadas com comandos semelhantes ao abaixo:
$ ssh-add
Need passphrase for /home/acc/.ssh/identity
Enter passphrase for acc@debian-server
Identity added: /home/acc/.ssh/identity (acc@debian-server)
Agora, quando voc fizer um ssh a um servidor remoto que est configurado para
aceitar sua chave, voc no precisa fornecer uma senha, voc simplesmente faz a
conexo. Obviamente, neste ponto voc precisa ser extremamente cuidadoso sobre
deixar pessoas que no so de confianausar sua sesso de login (ssh-add -D faz o
ssh-agent esquecer a senha se voc precisar deixar o computador).
scp
O mtodo tradicional de transferncia de arquivos de uma mquina para outra por
uma rede usando o protocolo FTP. O FTP, como o IMAP e outros, transfere as
informaes de autenticao em texto plano, que pode no ser desejvel.
Infelizmente, devido estrutura do protocolo FTP, muito difcil fazer um tunel para
o mesmo atravs de uma conexo ssh.

23

A P O STI L A
DE
GNU / LINUX
O SSH vem com um programa chamado 'scp', que significa 'secure copy' (cpia
segura). Ele vem bem a calhar quando voc quer transferir arquivos de um
computador para outro de forma segura (ele tambm pode usar compresso se voc
usar a opo -C, que boa para transferncia de teto ou outro formato de dado que
pode ser comprimido). Ele no usa um protocolo separado, mas envia os dados
atravs de uma conexo ssh normal, e por isso ele aceita authorized_keys e
conversa com o ssh-agent.
O uso do scp bem simples. A sintaxe :
scp file1 file2 file3 ... destination
Cada um dos argumentos pode ser um arquivo local ou remoto. Por exmeplo, pra
compiar seu arquivo .bashr do servidor vacuum para o computador local:
$scp vacuum:.bashrc .
vacuum:.bashrc a sintaxe que voc usa para copiar de ou para um host remoto host:arquivo. Se voc no especificar um diretrio, ele utiliza por padro o diretrio
home. O destino dado como ".", que significa o diretrio atual.

24

A P O STI L A
DE
GNU / LINUX

5. SERVIDOR SAMBA

O Samba o servidor que permite compartilhar arquivos e acessar


compartilhamentos em mquinas Windows. Ele dividido em dois mdulos, o
servidor Samba propriamente dito e o smbclient, que permite acessar
compartilhamentos em outras mquinas. Usando o Samba, o servidor Linux se
comporta exatamente da mesma forma que uma mquina Windows, compartilhando
arquivos e impressoras e executando outras funes, como autenticao de
usurios. Voc pode configurar o Samba at mesmo para tornar-se um controlador
de domnio.
A primeira verso do Samba, disponibilizada em 1992, foi escrita por Andrew
Tridgell, um Australiano que na poca era estudante de cincias da computao.
Como na poca a especificao do SMB utilizada pela Microsoft ainda era fechada,
Andrew desenvolveu um pequeno programa, batizado de clockspy, para examinar os
pacotes de dados enviados por uma mquina Windows e assim ir implementando
uma a uma as chamadas de sistema utilizadas, um trabalho extremamente
complexo para ser feito por uma nica pessoa.
O resultado foi um programa que rodava no Solaris e era capaz de responder s
chamadas SMB como se fosse um servidor Windows. Este arquivo ainda pode ser
encontrado em alguns dos FTPs do http://samba.org, com o nome "server-0.5".
O objetivo desta primeira verso era apenas resolver um problema domstico,
interligar um PC rodando o Windows 3.1 ao servidor Solaris. Na poca isso j era
possvel utilizando um dos clientes NFS comerciais para DOS, mas Andrew
precisava de suporte a NetBIOS para um aplicativo que pretendia utilizar, o WindX,
um servidor X para Windows, que permitia rodar aplicativos via rede a partir do
servidor Unix.
At a o objetivo era apenas fazer o programa funcionar, no criar um sistema de
compartilhamento de arquivos.
Depois de algum tempo Andrew recebeu um e-mail contando que o programa
tambm funcionava com o LanManager da Microsoft, permitindo compartilhar
arquivos de um servidor Unix com mquinas rodando o DOS. Andrew s acreditou
depois de testar, mas ficou to maravilhado com o que havia conseguido que criou o
25

A P O STI L A
DE
GNU / LINUX
projeto "NetBios for Unix", e comeou a recrutar voluntrios atravs da Usenet. Mais
tarde o projeto passou a usar o nome Samba, que foi adotado no em apologia ao
Carnaval, mas apenas porque uma das poucas palavras do dicionrio do Aspell
que possui as letras S, M e B, de "Server Message Blocks".
Em 94 a Microsoft liberou as especificaes do SMB e do NetBios, o que permitiu
que o desenvolvimento do Samba desse um grande salto, tanto em recursos quanto
em compatibilidade, passando a acompanhar os novos recursos adicionados ao
protocolo da Microsoft, que novamente deixou de ser aberto.
Hoje, alm de ser quase 100% compatvel com os recursos de rede do Windows 98,
NT e 2000, o Samba reconhecido por ser mais rpido que o prprio Windows na
tarefa de servidor de arquivos.
Um dos pontos fortes do Samba que o projeto foi todo desenvolvido sem precisar
apelar para qualquer violao de patentes. Todas as chamadas (com exceo das
que a Microsoft tornou pblicas em 94) foram implementadas monitorando as
transmisses de dados atravs da rede, uma espcie de engenharia reversa que
no tem nada de ilegal. como se voc descobrisse como funciona um cdigo de
encriptao apenas examinando arquivos encriptados por ele. Matemticos fazem
isso a todo instante e muitas vezes so bem pagos para isso.
Graas a este "detalhe", o Samba no corre o perigo de sofrer restries devido a
aes judiciais. Naturalmente j houveram problemas legais com a Microsoft, cujo
resultado apenas confirmou esta invulnerabilidade.
De qualquer forma, no existem sinais de que a Microsoft pretenda declarar guerra
ao Samba, pelo contrrio, foi a existncia do Samba que permitiu que a Microsoft
conseguisse colocar PCs rodando o Windows em muitos nichos onde s entravam
Workstations Unix, j que com o Samba os servidores Unix existentes passaram a
ser compatveis com as mquinas Windows. Ou seja, de certa forma o Samba
vantajoso at mesmo para a Microsoft.
5.1 Instalando o Samba
O Samba dividido em dois mdulos. O servidor propriamente dito e o cliente, que
permite acessar compartilhamentos em outras mquinas (tanto Linux quanto
Windows). Os dois so independentes, permitindo que voc mantenha apenas o
cliente instalado num desktop e instale o servidor apenas nas mquinas que
realmente forem compartilhar arquivos. Isto permite melhorar a segurana da rede
de uma forma geral.
Para instalarmos o servidor do Samba, ser necessrio o seguinte comando:
# apt-get install samba samba-doc swat
26

A P O STI L A
DE
GNU / LINUX
Lembre-se de que voc deve instalar todos os pacotes apenas no servidor e em
outras mquinas que forem compartilhar arquivos. O Swat ajuda bastante na etapa
de configurao, mas ele opcional, pois voc pode tanto editar manualmente o
arquivo smb.conf, quanto usar um arquivo pronto, gerado em outra instalao. Nos
clientes que forem apenas acessar compartilhamentos de outras mquinas, instale
apenas o cliente.
5.2 Cadastrando usurios.
Depois de instalado, o prximo passo cadastrar os logins e senhas dos usurios
que tero acesso ao servidor. Esta uma peculiaridade do Samba: ele roda como
um programa sobre o sistema e est subordinado s permisses de acesso deste.
Por isso ele s pode dar acesso para usurios que, alm de estarem cadastrados no
Samba, tambm esto cadastrados no sistema.
Existem duas abordagens possveis. Voc pode criar usurios "reais" usando o
comando adduser ou um utilitrio como o "user-admin" (disponvel no Fedora e no
Debian, atravs do pacote gnome-system-tools). Ao usar o adduser, o comando fica:
# adduser maria
Uma segunda opo criar usurios "castrados", que tero acesso apenas ao
Samba. Esta abordagem mais segura, pois os usurios no podero acessar o
servidor via SSH ou Telnet, por exemplo, o que abriria brecha para vrios tipos de
ataques. Neste caso, voc cria os usurios adicionando os parmetros que orientam
o adduser a no criar o diretrio home e manter a senha desativada at segunda
ordem:
# adduser --disabled-login --no-create-home maria
Isto cria uma espcie de usurio fantasma que, para todos os fins, existe e pode
acessar arquivos do sistema (de acordo com as permisses de acesso), mas, por
outro lado, no pode fazer login (nem localmente, nem remotamente via SSH), nem
possui diretrio home.
De qualquer uma das duas formas, depois de criar os usurios no sistema, voc
deve cadastr-los no Samba, usando o comando "smbpasswd -a", como em:
# smbpasswd -a maria
Se voc mantiver os logins e senhas sincronizados com os usados pelos usurios
nos clientes Windows, o acesso aos compartilhamentos automtico. Caso os
logins ou senhas no servidor sejam diferentes, o usurio precisar fazer login ao
acessar.
27

A P O STI L A
DE
GNU / LINUX
Um detalhe importante que, ao usar clientes Windows 95 ou 98, voc deve marcar
a opo de login como "Login do Windows" e no como "Cliente para redes
Microsoft" (que o default) na configurao de rede (Painel de controle > Redes).
Depois de criados os logins de acesso, falta agora apenas configurar o Samba para
se integrar rede e compartilhar as pastas desejadas; trabalho facilitado pelo Swat.
A segunda opo editar manualmente os arquivos de configurao do Samba, o
"/etc/samba/smb.conf", como veremos mais adiante. Neste caso, o ideal comear
a partir de um arquivo pr-configurado, alterando apenas as opes necessrias.
5.3 Configurando o Samba usando o Swat
O Samba pode ser configurado atravs do Swat, um utilitrio de configurao via
web, similar ao encontrado nos modems ADSL. Isso permite que ele seja acessado
remotamente e facilita a instalao em servidores onde o X no est instalado. Esta
mesma abordagem utilizada por muitos outros utilitrios, como o Webmin e o
Pagode.
Manter o X instalado e ativo num servidor dedicado considerado um desperdcio
de recursos, por isso os desenvolvedores de utilitrios de configurao evitam
depender de bibliotecas grficas. Deste modo, mesmo distribuies minimalistas
podem inclu-los.
No Debian, Slackware e tambm no Gentoo, o Swat inicializado atravs do inetd. A
funo do inetd e xinetd parecida, eles monitoram determinadas portas TCP e
carregam servios sob demanda. Isto evita que utilitrios que so acessados
esporadicamente (como o Swat) precisem ficar ativos o tempo todo, consumindo
recursos do sistema. Apesar disso, a configurao dos dois diferente: no caso das
distribuies que usam o inetd, voc ainda precisa adicionar (ou descomentar) a
linha abaixo no arquivo de configurao do inetd, o "/etc/inetd.conf":
swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/sbin/swat
Para que a alterao entre em vigor, reinicie o inetd com o comando:
# /etc/init.d/inetd restart
Para acessar o Swat, basta abrir um Browser disponvel e acessar o endereo
http://localhost:901 . No prompt de login, fornea a senha de root para acessar.
Ao abrir o Swat, voc ver um menu com vrios links para a documentao
disponvel sobre o Samba, que voc pode consultar para se aprofundar no sistema.
Na parte de cima, esto os links para as sees da configurao, que o que nos
interessa.

28

A P O STI L A
DE
GNU / LINUX

Na seo Password, voc pode cadastrar usurios, substituindo o uso manual do


comando "smbadduser -a". Neste caso, voc precisar primeiro cadastrar os
usurios utilizando comando adduser; o Swat apenas cadastra os usurios no
Samba.

Em seguida, acesse a seo "Globals", que engloba todas as configuraes de rede


e acesso.
Nas opes "workgroup" e "netbios name", voc deve colocar o nome do
29

A P O STI L A
DE
GNU / LINUX
computador e o grupo de trabalho a que ele pertence, como faria numa mquina
Windows. Voc pode tanto utilizar o mesmo grupo de trabalho em todas as
mquinas da rede, quanto agrupar suas mquinas em grupos distintos como
"diretoria", "vendas", etc.
A opo "netbios aliases" permite criar "apelidos" para o servidor, de modo de que
ele possa ser acessado por mais de um nome. Usando um alias, o servidor
realmente aparece duas vezes no ambiente de rede, como se fossem duas
mquinas. Em geral isso acaba confundindo mais do que ajudando, mas pode ser
til em algumas situaes, quando, por exemplo, um servidor desativado e os
compartilhamentos movidos para outro. O novo servidor pode responder pelo nome
do servidor antigo, permitindo que os usurios que no foram avisados da mudana
continuem acessando os compartilhamentos.

A seguir temos a opo "interfaces", que permite limitar os acessos ao servidor se


voc tiver mais de uma placa de rede. o caso, por exemplo, de quem acessa via
ADSL ou cabo e possui uma segunda placa de rede para compartilhar a conexo
com os micros da rede local. Nestes casos a placa da web ser reconhecida como
eth0, enquanto a placa da rede local ser reconhecida como eth1, por exemplo.
Voc pode, ento, preencher o campo com o endereo da placa da rede local (eth1),
assim o Samba s aceitar conexes vindas dos micros da rede local, descartando
automaticamente todas as tentativas de acesso vindas da internet. Caso o campo
permanea vazio, o Samba permite acessos vindos de todas as placas de rede, e
necessrio bloquear os acessos provenientes da internet usando o firewall.
30

A P O STI L A
DE
GNU / LINUX
Na seo Security Options chegamos a uma das decises mais importantes, decidir
entre entre utilizar segurana com base no login do usurio (user) ou com base no
compartilhamento (share).
A opo share oferece um nvel de segurana semelhante ao de uma mquina
Windows 98. Os compartilhamentos podem ser acessados por todos os usurios,
atravs da conta guest. Em compensao, esta opo a mais simples de
configurar e pode ser til em pequenas redes onde no h necessidade de
segurana.
A opo user a mais recomendvel, pois permite especificar exatamente quais
usurios tero acesso a cada compartilhamento, como num servidor NT ou Windows
2000. Naturalmente, para que isso funcione, necessrio que voc tenha registrado
todos os usurios no Linux e no Samba (como vimos anteriormente), e que os
clientes Windows efetuem login na rede usando estes mesmos logins e senhas, ou
os forneam na hora de acessar os compartilhamentos.
Escolhendo este modo, as permisses de acesso aos compartilhamentos do samba
ficam condicionadas s permisses de acesso de cada usurio. Por exemplo, se
voc compartilhar a pasta /home/maria/arquivos, por default apenas a usuria maria
ter permisso para gravar novos arquivos e alterar o contedo da pasta.
Para que outros usurios tenham acesso pasta, voc deve dar permisso a eles,
criando um novo grupo e dando permisso de escrita para os integrantes do grupo
ou adicionando os demais usurios no grupo "maria" (que criado juntamente com o
login de acesso) e configurando as permisses de acesso de forma que o grupo
possa escrever na pasta.
Se voc no est to preocupado com a segurana, pode fazer do jeito "fcil",
alterando a opo "outros" nas permisses de acesso da pasta, que d acesso a
todo mundo. Isto faz com que qualquer usurio local do sistema (ou logado via SSH)
tenha acesso aos arquivos da pasta, mas no permite necessariamente que outros
usurios do Samba possam acessar, pois neste caso ainda so usadas as
permisses de acesso no Samba.
Ou seja, necessrio fazer com que os usurios do grupo, ou todos os usurios do
sistema possam escrever na pasta, evitando que as permisses do sistema
conflitem com as permisses configuradas no Samba. Se configuro o Samba para
permitir que o usurio "joao" possa escrever no compartilhamento, mas a
configurao das permisses da pasta compartilhada no permitem isso, o Joao vai
continuar sem conseguir escrever. Ao criar compartilhamentos no Samba, preciso
se preocupar com as duas coisas.
Mais abaixo, temos a opo Encrypt Password. Ela tambm importantssima, e
deve ser configurada de acordo com a verso do Windows que rodar nas mquinas
31

A P O STI L A
DE
GNU / LINUX
clientes. O Windows 95 original no suporta encriptao de senhas, por isso s
poder se conectar ao servidor caso a opo seja configurada com o valor "No".
Porm, o Windows 95 OSR/2, Windows 98/SE/ME, Windows NT, Windows 2000 e
Windows XP utilizam senhas encriptadas, ento, ao utilizar mquinas com qualquer
um destes sistemas (que o mais provvel) a opo deve ser configurada como
"Yes", caso contrrio o Samba simplesmente no conseguir conversar com as
mquinas Windows.
A partir do Samba 3 existe a opo de fazer com que o prprio Samba mantenha as
senhas dos usurios sincronizadas em relao s senhas dos mesmos no sistema.
Antigamente, sempre que voc alterava a senha de um usurio no Samba, usando o
"smbpasswd", precisava alterar tambm a senha do sistema, usando o comando
"passwd". As duas senhas precisam ficar em sincronismo, do contrrio camos no
problema das permisses, onde o Samba permite que o usurio acesse o
compartilhamento, mas o sistema no permite que o Samba acesse os arquivos no
disco.
Para ativar este recurso, ative a opo "unix password sync" no Swat. Originalmente,
esta opo fica desativada e aparece apenas dentro das opes avanadas. Para
chegar at ela voc deve clicar no boto "Change View To: Advanced" no topo da
tela. Depois de alterar, clique no Commit Changes".
Para que tudo funcione, necessrio que as opes "passwd program" e "passwd
chat" estejam configuradas com (respectivamente) os valores: "/usr/bin/passwd %u"
e "*Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n .".
Estes j so os valores padro no Swat, mas no custa verificar.

32

A P O STI L A
DE
GNU / LINUX

A opo "Hosts Allow" deve incluir os endereos IP de todos os computadores que


tero permisso para acessar o servidor. Se quiser que todos os micros da rede
tenham acesso, basta escrever apenas a primeira parte do endereo IP, como em
"192.168.0.", onde todos os endereos dentro do escopo sero permitidos. Se for
incluir mais de um endereo ou mais de um escopo de endereos, separe-os por um
espao, como: "192.168.0., 10.0.0., 123.73.45.167". Caso o campo permanea
vazio, a opo fica desativada, e todos os micros que tiverem acesso ao servidor
Samba podero acessar.

A opo "Hosts Deny" por sua vez permite especificar mquinas que no tero
permisso para acessar o servidor. Voc pode usar o Hosts Deny para estabelescer
excees ao dito na opo Hosts Allow.
Por exemplo, imagine que voc queira que toda a rede local, que usa a faixa
33

A P O STI L A
DE
GNU / LINUX
192.168.0.x, tenha acesso ao servidor, com exceo dos endereos 192.168.0.2 e
192.168.0.3. Neste caso, a configurao ficaria assim:
Hosts Allow: 192.168.0.
Hosts Deny: 192.168.0.2, 192.168.0.3
Numa rede Windows, uma das mquinas fica sempre responsvel por montar e
atualizar uma lista dos compartilhamentos disponveis e envi-la aos demais,
conforme solicitado. O host que executa esta funo chamado de "Master
Browser".
Na seo Browse Options, a opo "OS Level" permite especificar qual chance o
servidor Linux ter de ser o Master Browser do grupo de trabalho ou domnio.
Sempre que voc estiver configurando o Samba para ser o servidor principal,
desejvel que ele seja o master browser.
Para isso, configure esta opo com um valor alto, 100 por exemplo, para que ele
sempre ganhe as eleies. O default dessa opo 20, que faz com que ele perca
para qualquer mquina Windows NT, Windows 2000 ou Windows XP. Para
completar, deixe a opo "Local Master" e "Preferred Master" como "Yes".

A configurao do OS Level muito importante. Caso no seja o Master Browser,


voc poder ter problemas para acessar seu servidor Linux a partir de outras
mquinas Windows, principalmente rodando o NT/2000/XP. Com o valor 100,
sempre que uma das mquinas Windows tentar ser o Master Browser da rede, o
Samba convocar uma nova eleio e a mquina Linux sempre ganhar.
Abaixo, deixe a opo Wins Support ativada (Yes). A opo Wins Server deve ser
deixada em branco, a menos que exista na rede algum servidor Wins (rodando o NT
server ou o 2K server) ao qual o servidor Linux esteja subordinado.
Caso o nico servidor seja a mquina Linux, voc pode configurar as mquinas
34

A P O STI L A
DE
GNU / LINUX
Windows para utiliz-la como servidor Wins, para isto basta colocar o seu endereo
IP no campo "Servidor Wins" na configurao de rede das estaes.
Terminando, pressione o boto "Commit Changes" no topo da tela para que as
alteraes sejam salvas no arquivo "/etc/samba/smb.conf".
Uma observao importante que o Swat l o arquivo smb.conf ao ser aberto, lendo
as opes configuradas e mostrando-as na interface, mas gera um novo arquivo
sempre que voc clica no "Commit Changes". Ao ler o arquivo, ele procura por
trechos especficos de texto, ignorando tudo que for diferente. Isso faz com que ele
remova qualquer tipo de comentrio includo manualmente no arquivo. Em geral,
quem tem o hbito de editar manualmente o smb.conf, acaba nunca usando o Swat
e vive-versa.
Depois de cadastrar os usurios no sistema e no Samba e configurar a seo
Globals, falta apenas configurar as pastas que sero compartilhadas com as
estaes, atravs da seo "Shares".
Cada usurio vlido cadastrado no sistema possui automaticamente um diretrio
home. Estas pastas ficam dentro do diretrio /home e podem ser usadas para
guardar arquivos pessoais, j que, a menos que seja estabelecido o contrrio, um
usurio no ter acesso pasta pessoal do outro. Alm dos diretrios home, voc
pode compartilhar mais pastas de uso geral.
Para criar um compartilhamento, basta escrever seu nome no campo no topo da tela
e clicar no boto "Create Share".

Depois de criado um compartilhamento, escolha-o na lista e clique no boto "Choose


35

A P O STI L A
DE
GNU / LINUX
Share" para configur-la. Voc ver uma lista de opes, contendo campos para
especificar usurios vlidos e invlidos, usurios que podem ou no escrever no
compartilhamento, nomes ou endereos de mquinas entre outras opes.

O campo "path" o mais importante, pois indica justamente qual pasta do sistema
ser compartilhada. O nome do compartilhamento diz apenas com que nome ele
aparecer no ambiente de rede, que no precisa necessariamente ser o mesmo
nome da pasta.
A opo "comment" permite que voc escreva um breve comentrio sobre a pasta
que tambm poder ser visualizado pelos usurios no ambiente de rede. Este
comentrio apenas para orientao, no tem efeito algum sobre o
compartilhamento.
A opo "read only" determina se a pasta ficar disponvel apenas para leitura
(opo Yes) ou se os usurios podero tambm gravar arquivos (opo No). Voc
pode tambm determinar quais mquinas tero acesso ao compartilhamento atravs
das opes "Hosts Allow" e "Hosts Deny". As configuraes feitas aqui subscrevem
as feitas na seo global. Se, por exemplo, a mquina 192.168.0.5 possui permisso
36

A P O STI L A
DE
GNU / LINUX
para acessar o sistema, mas foi includa na campo Hosts Deny do compartilhamento
programas, ela poder acessar outros compartilhamentos do sistema, mas no o
compartilhamento programas especificamente.
A opo "browseable" permite configurar se o compartilhamento aparecer entre os
outros compartilhamentos do servidor no ambiente de rede, ou se ser um
compartilhamento oculto, que poder ser acessado apenas por quem souber que ele
existe. Isso tem uma funo semelhante a colocar um "$" numa pasta compartilhada
no Windows 98. Ela fica compartilhada, mas no aparece no ambiente de rede.
Apenas usurios que saibam que o compartilhamento existe conseguiro acess-lo.
Esta opo tem efeito apenas sobre os clientes Windows, pois no Linux a maior
parte dos programas clientes (como o Smb4k) mostram os compartilhamentos
ocultos por padro.
Finalmente, a opo "available" especifica se o compartilhamento est ativado ou
no. Voc pode desativar temporariamente um compartilhamento configurando esta
opo como "No". Fazendo isso, ele continuar no sistema e voc poder torn-lo
disponvel quando quiser, alterando a opo para "Yes".
Um detalhe importante que os usurios s tero permisso para acessar pastas
que o login permite acessar. Por exemplo, no Linux o nico usurio que pode
acessar a pasta /root o prprio root, ou outro autorizado por ele. Mesmo que voc
compartilhe a pasta root atravs do Samba, os demais usurios no podero
acess-la.
Para editar as permisses de uma pasta, basta abrir o gerenciador de arquivos e,
nas propriedades da pasta, acessar a guia "Permisses". As permisses podem ser
dadas apenas ao usurio, para todos os usurios pertencentes ao grupo do usurio
dono da pasta, ou para todos os usurios. A opo "Aplicar mudanas a todas as
subpastas e seus contedos" deve ficar marcada para que as permisses sejam
aplicadas tambm s subpastas.
Terminadas as configuraes, o servidor j ir aparecer no ambiente de rede, como
se fosse um servidor Windows. Os compartilhamentos podem ser acessados de
acordo com as permisses que tiverem sido configuradas, mapeados como
unidades de rede, entre outros recursos.
Para compartilhar uma impressora j instalada na mquina Linux, o procedimento
o mesmo. Dentro do Swat, acesse a seo printers, escolha a impressora a ser
compartilhada (a lista mostrar todas as instaladas no sistema), configure a opo
available como "yes" e configure as permisses de acesso como vimos
anteriormente.
5.4 Configurando o Samba manualmente - /etc/samba/smb.conf
Toda a configurao do Samba, incluindo as configuraes gerais do servidor,
37

A P O STI L A
DE
GNU / LINUX
impressoras e todos os compartilhamentos, feita num nico arquivo de
configurao, o "/etc/samba/smb.conf". Programas de configurao, como o Swat,
simplesmente lem este arquivo, "absorvem" as configuraes atuais e depois
geram o arquivo novamente com as alteraes feitas.
Isto permite que o Swat coexista com a edio manual do arquivo. Como o formato
bastante simples e conciso, muitas vezes mais rpido e at mais simples editar
diretamente o arquivo do que atravs do Swat.
O smb.conf possui as mesmas sees mostradas no swat: global, homes, printers,
etc.
Para iniciar a edio do arquivo de configurao do smb.conf utilisamos o seguinte
comando:
# vi /etc/samba/smb.conf
Confira abaixo um exemplo do smb.conf e em seguida a explicaao de cada
parmetro presente nas seoes:
[global]
comment = Servidor SAMBA
workgroup = EMPRESA
security = user
os level = 100
announce as = NT Server
domain logons = yes
logon script = %U.bat
logon path = \\%L\Profiles\%U
domain master = yes
local master = yes
preferred master = yes
guest account = nobody
# wins server = 192.168.0.2
wins support = yes
keep alive = 20
debug level = 3
winpopup command = csh -c ''xedit %s;rm %s'' &
log file = /var/log/samba_log.%u
null passwords = no
unix password sync = yes
socket options = IPTOS_LOWDELAY TCP_NODELAY
printing = bsd
printcap name = /etc/printcap
38

A P O STI L A
DE
GNU / LINUX
load printers = yes
hosts allow = 192.168.0. 127.
hosts deny = 192.168.0.3 192.168.0.4
[homes]
comment = Pastas dos Usuarios
public = no
browseable = yes
writeable = yes
hosts deny = 192.168.0.250
[printers]
comment = Impressoras Linux
public = no
browseable = yes
printable = yes
read only = yes
create mode = 0700
path = /var/spool/samba
admin users = admin, usuario1
[netlogon]
comment = Compartilhamento de Scripts
path = /etc/scripts
public = no
browseable = yes
writeable = no
[diretoria]
comment = Grupo Diretoria
path = /home/diretoria
public = no
browseable = yes
writeable = yes
write list = @diretoria
force create mode = 0777
force directory mode = 0777
[comercial]
comment = Grupo Comercial
path = /home/comercial
public = yes
browseable = yes
39

A P O STI L A
DE
GNU / LINUX
writeable = yes
write list = @comercial
read list = @marketing
force create mode = 0777
force directory mode = 0777
[transf]
comment = Area de Transferencia
path = /home/transf
public = yes
browseable = yes
writeable = yes
write list = @todos
force create mode = 0777
force directory mode = 0775
max disk size = 200
[oculto$]
comment = Especifico do Admin
path = /home/admin/oculto
copy = homes max connections = 1

Parmetros

Funoes

comment

Comentrio para este Host na Rede.

workgroup

Especifica o Domnio ou Workgroup a que o Host pertence


na Rede.

security

Por padrao o SAMBA utiliza a segurana a nvel de usurio


(security = user), mas existem outras opoes:
security = share -> Senhas de acesso serao solicitadas por
cada recurso compartilhado e nao por usurio, ou seja,
cada diretrio ou impressora poder ter uma senha nica
conhecida pelos usurios autorizados.
security = user -> As permissoes sao dadas de acordo
com o login do usurio, ou atravs dos grupos (@grupo).
security = server -> O SAMBA tentar validara senha do
usurio enviando os dados para outro servidor SMB, como
outro servidor SAMBA ou um servidor Windows. Deve-se
incluir o parmetro .password server = x.x.x.x. na seao
[global] do smb.conf.
security = domain -> Usado se o Host for adicionado a um
40

A P O STI L A
DE
GNU / LINUX
Domnio Windows atravs do comando smbpasswd. Neste
caso as informaoes de usurio e senha serao enviadas
para o PDC da rede, exatamente como o servidor NT faria.
Note que necessrio que a conta do usurio exista tanto
no Linux quanto no servidor primrio.

os level

Este parmetro nao obrigatrio se voce nao possui um


servidor Windows na rede, mas deve ser usado caso tenha
um ou mais. A varivel um nmero de 1 a 255, onde 65
a mesma varivel utilizada pelo servidor Windows.
Especifique um nmero maior que este (como 100 por
exemplo) para garantir que o servidor SAMBA seja eleito na
escolha de validaao do login das estaoes.

announce as

Permite especificar o tipo de servidor NetBios (nmbd) que


ser divulgado na rede. As opoes aceitas pelo SAMBA:
"NT Server", "NT Workstation", "Win95" ou "WfW".

domain logons

Usado para validar o login na rede, apenas para estaoes


Windows.

logon script

Indica qual arquivo de logon script ser executado para os


usurios. A varivel %u corresponde ao usurio na rede.
Deve tambm ser criado um compartilhamento de nome
[netlogon] apontando para o diretrio dos scripts.

logon path

Indica o caminho do perfil remoto do usurio. A varivel %L


corresponde ao nome do servidor NetBios (que pode ser o
prprio SAMBA). O logon path til quando usurios
costumam efetuar logon em mais de um Host na rede, pois
seu perfil trazido com o logon. No caso do exemplo, o
diretrio "Profiles" deve conter os scripts (em formato
Microsoft usando NET USE e etc) e os scripts devem ser
criados com o notepad do Windows por exemplo, a fim de
conservar o formato do arquivo.

domain master

Indica se o Host ser o Domain Master Browser da rede


inteira (WAN).

local master

Indica se o Host ser o Master Browser da rede local.

preferred master

Este parmetro fora a eleiao do SAMBA como Master


Browser para o workgroup. recomendvel utilizar este
parmetro em conjunto com o .domain master = yes. para
garantir a eleiao. Mas tome cuidado: se voce possui uma
rede com servidores Windows e SAMBA e j possui um
41

A P O STI L A
DE
GNU / LINUX
servidor como Domain Master, nao use esta opao e deixe
o parmetro .os level = 65. para haver equilbrio.
guest account

O SAMBA trabalha melhor em redes Microsoft com a


existencia de uma conta guest (visitante em ingles). Por
padrao a conta usada .nobody.

wins server

Indica qual o servidor de Wins da rede. Se o prprio Host


for o servidor de Wins entao nao utilize este parmetro, pois
haver um loop e o sistema travar!

wins support

Permite ao SAMBA ser o servidor de Wins na rede. Isto


significa que o SAMBA ter uma tabela com o ambiente
completo da rede, garantindo que as estaoes tenham
acesso a estas informaoes e ganho em velocidade para
encontrar e acessar os compartilhamentos e impressoras. O
Wins Server deve ser especificado na configuraao de rede
(TCP/IP) das estaoes, que o endereo IP do servidor.

keep alive

Como mquinas rodando Windows tendem a travar de


tempos em tempos, este parmetro usado para verificar o
estado da conexao, evitando trfego desnecessrio na
rede. Tambm pode ser usado para estaoes Linux.

debug level

Parmetro usado para dar flexibilidade a configuraao do


sistema. Permite ao SAMBA trabalhar corretamente com
algumas situaoes de erro, por exemplo.

winpopup command

Especifica qual commando ser executado quando o


servidor receber mensagens Winpopup. Aqui, muitas
opoes podem ser usadas de acordo com a preferencia do
Administrador. Se sua rede utiliza mensagens deste tipo,
interessante definir um comando para o parmetro, evitando
assim possveis mensagens de erro para quem enviou a
mensagem ao servidor.

log file

Indica o arquivo de log do SAMBA. A varivel %u


corresponde ao nome de logon do usurio.

null passwords

Indica se ser ou nao possvel que usurios tenham senha


nula de logon (logon sem senha).

unix password sync

Se este parmetro for ativado (= yes) entao clientes SMB


(como estaoes Windows) poderao trocar sua senha de
login.

socket options

Este parmetro permite configuraoes extras para o


42

A P O STI L A
DE
GNU / LINUX
protocolo, possibilitando uma melhor performance do
servidor em lidar com os pacotes na rede.
printing

Indica qual o sistema de impressao padrao utilizado pelo


Linux.

printcap name

Indica o arquivo
impressoras.

load printers

Disponibiliza as impressoras para a rede.

hosts allow

Indica quais mquinas tem acesso ao servidor SAMBA.


Pode-se utilizar o endereo IP ou o nome da mquina. Para
garantir acesso a toda uma rede por exemplo, escreva:
"hosts allow = 192.168.1.".

hosts deny

Como em "hosts allow", mas para restringir o acesso ao


servidor SAMBA.

para

busca

das

definioes

das

A seao [homes] define os parmetros para as pastas pessoais dos usurios na rede
(home dir):
Parmetros

Funoes

comment

Comentrio para este compartilhamento.

public

Tambm conhecido como .guest ok., permite ou nao acesso


de outros usurios.

browseable

Define se o compartilhamento ser ou nao visvel para o


Ambiente de Rede. Estaoes Windows95 versao 4.00.950C nao aceitam esta opao, onde uma possvel soluao
utilizar o nome do compartilhamento seguido de $ (teste$
por exemplo), como faz-se no Windows.

writeable

Indica se o usurio poder ou nao ecrever em sua pasta


pessoal (home dir).

As demais seoes correspondem a compartilhamentos presentes na rede. Os


parmtros abaixo sao apenas alguns dos possveis:
Parmetros
comment

Funoes
Comentrio para o compartilhamento.

43

A P O STI L A
DE
GNU / LINUX
path

Caminho do diretrio compartilhado

writeable

Indica se ser ou nao possvel criar ou excluir arquivos ou


diretrios do compartilhamento.

public / guest ok

Indica se ser ou nao permitido o acesso de outros


usurios.

browseable

Define se o compartilhamento ser ou nao visvel para o


Ambiente de Rede.

write list

Define os usurios e/ou grupos com acesso de escrita no


compartilhamento. Para mais de um usurio, separe os
nomes por vrgula (user1, user2, etc) e para grupos utilize
@ antes do nome do grupo.

read list

Como em .write list., mas define quem ter permissao de


apenas leitura.

force create mode

Diz ao SAMBA para forar o tipo de permissao dos arquivos


criados (o mesmo que usar o chmod). Esta permissao tem
menor prioridade que os parmetros .write list. e .read list..

force directory mode

O mesmo que .force create mode., mas para os diretrios


criados no compartilhamento.

admin users

Indica quais sao os usurios com permissao completa para


o compartilhamento (permissao de root).

copy

Permite copiar os parmetros de outra seao, como um


template por exemplo, til se utiliza compartilhamentos
semelhantes. Para alterar parmetros basta inform-los na
seao atual.

hosts allow

Indica quais mquinas podem acessar o compartilhamento.


Pode-se utilizar o endereo IP ou o nome da mquina. Para
garantir acesso a toda uma rede classe C por exemplo,
escreva: "hosts allow = 192.168.1.".

hosts deny

Como em "hosts allow", mas para restringir o acesso ao


compartilhamento.

max connections

Permite especificar o nmero mximo de conexoes


simultneas ao compartilhamento.

max disk size

Permite especificar qual o limite de espao em disco que o


compartilhamento pode utilizar. Este valor definido em Mb

44

A P O STI L A
DE
GNU / LINUX
(megabytes).
A prxima apresenta variveis que podem ser usadas em parmetros:
Variveis

Funoes

%S

Nome do Servio (compartilhamento) atual.

%u

Nome do usurio.

%g

Nome do grupo.

%H

Nome do diretrio pessoal do usurio (home dir).

%m

Nome da mquina cliente fornecido pelo NetBios.

%L

Nome do servidor NetBios, permitindo que a configuraao desejada


seja alterada de acordo com o cliente que vai acessar o sistema.

%M

Nome Internet da mquina cliente.

%a

Sistema Operacional da mquina remota, onde os reconhecidos


sao WfW, WinNT e Win95.

%I

O endereo IP da mquina cliente.

%T

Data e horrio.

Exemplo de um smb.conf bsico para teste e implementao:


[global]
workgroup = Workgroup
server string = Samba server
;wins support = no
###debugging###
log file = /var/null
syslog only = no
security = share
guest account = nobody
[homes]

45

A P O STI L A
DE
GNU / LINUX
browseable = no
creat mask = 0700
directory mask = 0700
###file sharing###
[Compartilhado]
path =/mnt/hdb/mpl/
browseable = yes
security = user
public = yes
writable = yes
5.5 O smbclient
Da mesma forma que o SAMBA permite que o Linux atue como servidor em redes
Microsoft, ele tambm permite atuar como estaao, sem que nenhuma configuraao
seja necessria no servidor Microsoft.
Com o smbclient possvel acessar dados em um servidor Windows (lembra o
comando net da Microsoft, mas os comandos utilizados sao similares aos de FTP).
Ele pode ser usado para receber e enviar arquivos, listar diretrios, navegar pelos
diretrios, renomear e apagar arquivos, entre outros. Diretrios compartilhados por
um servidor SAMBA sao acessados da mesma forma.
Para verificar quais compartilhamentos estao disponveis em um determinado Host,
execute:
#/usr/sbin/smbclient -L host_desejado
A resposta ser uma lista de servios, ou seja, nomes de dispositivos ou
impressoras que podem ser compartilhados com os usurios na rede. A menos que
o servidor SMB nao tenha itens de segurana configurados, ser solicitada uma
senha antes de mostrar as informaoes. Exemplo:
#smbclient -L servidor1
A resposta ser semelhante a:
Server time is Fri Dec 22 15:58:02 2000
Timezone is UTC+10.0 Password: Domain=[EMPRESA] OS=[Windows NT
4.0] Server=[NT LAN Manager 4.0] Server=[servidor1] User=[]
Workgroup=[EMPRESA] Domain=[]
46

A P O STI L A
DE
GNU / LINUX
Sharename Type Comment
ADMIN$ Disk Remote Administration Public Disk Public C$ Disk
Default Share Print$ Disk Printer Control
Para acessar uma pasta compartilhada, basta especificar o caminho na rede,
conforme abaixo:
$smbclient //maquina/pasta1 senha
Onde "senha" literalmente a senha de acesso. Se o caminho estiver correto a
resposta ser algo como:
Server time is Fri Dec 22 16:01:12 2000
Timezone is UTC+10.0
Domain=[EMPRESA] OS=[Windows NT 4.0] Server=[NT LAN Manager]
smb:\>
Digite help para obter ajuda sobre os comandos do smbclient.

47

A P O STI L A
DE
GNU / LINUX

6. SERVIDOR DNS BIND9

Boa parte da usabilidade da Internet vem da facilidade que temos para localizar um
computador conectado. Apesar da maioria dos computadores s conseguirem
localizar outros atravs de endereos IP, ns humanos podemos localiz-los
facilmente atravs de um nome inteligvel. o que acontece, por exemplo, quando
acessamos a pgina oficial do sistema operacional Linux atravs do nome
www.linux.org, ao invs de precisarmos usar o nmero 198.182.196.56 que, c entre
ns, bem mais feio. Esta converso de nome para nmeros feita
automaticamente atravs do mecanismo de DNS (sigla de Domain Name System).
Os administradores de rede gostam de colocar uns nomes um tanto quanto criativos
nas suas mquinas. Alguns usam nomes de cidades da regio em que a LAN est
localizada (como Olinda, Buque e Jaboato). Outros gostam de usar nomes de
personagens de quadrinhos como Mnica, Cebolinha, Casco, Magali. Outros
preferem nomes de grandes nomes da msica brasileira como Raul Seixas, Elis
Regina e Tom Jobim. Assim como o DNS usado na Internet, pode tambm ser
usado em uma rede interna para facilitar sua utilizao. Isso permite, por exemplo
que ao invs de digitarmos ssh 10.1.1.4, possamos digitar simplesmente ssh
raulseixas, uma seqncia bem mais fcil de ser memorizada.
Vamos aprender aqui a configurar uma mquina em uma rede para saber localizar
as demais pelo nome, ou seja, servir de "telefonista" para nossa rede. Ela vai
receber pedidos do tipo "Estou querendo falar com raulseixas. Qual o endereo
dele?" e vai responder "Para falar com o maluco beleza, tente 10.1.1.4". Neste artigo
vamos utilizar o programa named, que parte do pacote BIND, disponvel em
praticamente todas as distribuies Linux. Ele o programa que vai ficar rodando
para receber requisies de mapeamento de nomes em endereos IP e, claro,
respond-las adeqadamente.
6.1 Instalao do BIND9
Obter e instalar o named em uma mquina Debian fcil. Basta procurar em seu
gerenciador de pacotes preferidos pelo pacote bind9. No obrigatrio, mas
sempre bom obter a documentao, que est no pacote bind9-doc. Para instalar
usando o apt, podemos fazer como no exemplo.
# apt-get install bind9 bind9-doc dnsutils
O apt vai ento nos mostrar algumas mensagens e instalar os pacotes que
queremos. Depois que ele completar seu trabalho, j teremos nosso servidor DNS
48

A P O STI L A
DE
GNU / LINUX
funcionando.
Para tirar a prova, podemos pedir a ele o endereo para alguns nomes. Para isso
vamos usar o dig, um programa que faz parte do pacote dnsutils. Poderamos
tambm editar o arquivo /etc/resolv.conf para utilizar o novo servidor de nomes, mas
mais higinico fazermos isso somente no final, quando tudo estiver funcionando
perfeitamente.
# dig www.linux.org @127.0.0.1
; <<>> DiG 9.2.4 <<>> www.linux.org @127.0.0.1
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55879
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0
;; QUESTION SECTION:
;www.linux.org.

IN

;; ANSWER SECTION:
www.linux.org.

41122

IN

198.182.196.56

;; AUTHORITY SECTION:
linux.org.
linux.org.

41122
41122

IN
IN

NS
NS

ns0.aitcom.net.
ns.invlogic.com.

;;
;;
;;
;;

Query time: 7 msec


SERVER: 127.0.0.1#53(127.0.0.1)
WHEN: Sun Dec 11 01:45:26 2005
MSG SIZE rcvd: 104

O que pedimos foi para o programa dig obter o endereo IP da mquina de nome
www.linux.org, utilizando para isso o servidor de nomes localizado em 127.0.0.1
(este o endereo da mquina onde o comando foi executado, ou seja, seu prprio
computador). Ele nos respondeu que o endereo 198.182.196.56 (olhe a seo
ANSWER SECTION).
Note que no informamos ao nosso servidor em lugar nenhum o endereo IP da
mquina www.linux.org, mesmo assim ele conseguiu nos fornecer um nmero. Ele
foi capaz de fazer isso porque se comunicou com uma das mquinas chamadas de
servidores-raiz. O endereo IP dessas mquinas fica, em um sistema Debian,
gravado em um arquivo chamado, sugestivamente, de db.root.
O problema que esses endereos podem mudar com o tempo, apesar disso no
ser muito freqente. Da ltima vez que instalei o pacote bind9, ele veio com um
db.root de 2004. Felizmente, fcil atualizar o arquivo. S precisamos usar o dig (se
voc no instalou ainda, faa agora). Vamos pedir a ele que obtenha a localizao
atual dos servidores-raiz e vamos gravar a resposta em um arquivo.
49

A P O STI L A
DE
GNU / LINUX
Devemos estar dentro do diretrio de configurao do bind para que funcione
perfeitamente para isso entre em /etc/bind/.
# cd /etc/bind/
# dig ns . @a.root.servers.net. > db.root.new
Isso vai gravar a resposta do servidor a.root-servers.net. no arquivo db.root.new.
Se este servidor no responder, tente um dos outros (b.root-servers.net, c.root.servers.net e assim por diante). Se estiver curioso, voc pode dar uma olhada no
contedo do arquivo. O prximo passo substituir o arquivo antigo pelo novo e
reiniciar o programa servidor de nomes para que ele leia o novo arquivo. Note que
essas instrues so para uma instalao Debian padro, sua configurao pode
ser um pouco diferente.
# mv db.root db.root.old
# mv db.root.new db.root
# /etc/init.d/bind9 restart
Stopping domain name service: named.
Starting domain name service: named.
Com isso nosso servidor DNS j pode resolver os nomes dos computadores na
Internet. Precisamos disso porque vamos substituir o servidor DNS antigo (que deve
ser uma mquina do seu provedor de Internet) por um novo e queremos que ele
continue sendo capaz de fazer o que o antigo fazia. Porm essa configurao ainda
no inclui os nomes das mquinas internas, para estas ainda precisamos dos
endereos IP. Para "batizar" nossas mquinas vamos precisar de um domnio
interno.
6.2 Configurando um domnio.
O servio de nomes (DNS) organizado hierarquicamente em domnios, deste
modo isola-se o conjunto de nomes pertencentes a um domnio dos nomes de outro.
O controlador do domnio pode adicionar quaisquer nomes dentro deste domnio e
no haver perigo de coliso de nomes acidental. Estes nomes podem ser
subdomnios (nomes que aceitam mais nomes subordinados) ou hosts (nomes de
mquinas especficas, sem subordinados).
Para ficar mais claro, vamos tomar como exemplo o domnio debianfordummies.org.
Subordinados a este domnio podem ser registrados vrios sub-nomes como, por
exemplo, o www.debianfordummies.org, o ftp.debianfordummies.org e o
mail.debianfordummies.org.
Vamos usar um domnio para identificar nossas mquinas. Neste exemplo, todas
50

A P O STI L A
DE
GNU / LINUX
elas estaro abrigadas sob o mesmo domnio, mas fcil registrar mais de um
domnio uma vez que voc pega o jeito. Recomenda-se utilizar um domnio
controlado por voc, para evitar bloquear acidentalmente outro domnio externo.
Daqui em diante vamos utilizar um domnio chamado de meudominio.org.br, que
ainda no existe.
Para fazer isso no nosso sistema Debian, vamos precisar modificar um pouco o
contedo do diretrio /etc/bind. Primeiramente vamos adicionar uma zona
correspondente ao nosso domnio, adicionando o trecho abaixo ao final do arquivo
named.conf.local.
# vi /etc/bind/named.conf.local
zone "meudominio.org.br" {
type master;
file "/etc/bind/db.meudominio";
};
A segunda linha (type master) diz ao named que ele possui os endereos para a
zona meudominio.org.br e no precisa consultar ningum para responder por ela. A
terceira indica o caminho do arquivo no sistema de arquivos local onde ele vai
encontrar o mapeamento de nomes para endereos IP. este arquivo que vamos
criar agora.
Digamos que na nossa rede temos servios web e ftp localizados na mquina
192.168.1.10, um servidor de nomes na mquina 192.168.1.11 e um servio de email numa terceira mquina 192.168.1.12. Esquematizando, temos o mapeamento
abaixo.
Ftp ----> 192.168.1.10 --> servidor ftp
www --> 192.168.1.10 --> servidor web
ns -----> 192.168.1.11 --> servidor dns secundario
mail ----> 192.168.1.12 --> servidor de email
O que precisamos fazer traduzir este mapeamento para a linguagem entendida
pelo named. Crie o arquivo /etc/bind/db.meudominio com o seguinte contedo.
# vi /etc/bind/db.meudominio
$TTL 86400
@
IN
SOA
ns.meudominio.org.br.
minhamaquina.meudominio.org.br. (
1130118145
; Serial
10800
; Refresh

51

A P O STI L A
DE
GNU / LINUX
3600
604800
86400 )
meudominio.org.br.
ftp.meudominio.org.br.
www.meudominio.org.br.
ns.meudominio.org.br.
meudominio.org.br.
mail.meudominio.org.br.

IN
IN
IN
IN
IN
IN

; Retry
; Expire
; Minimum
NS
A
A
A
MX 10
A

ns.meudominio.org.br.
192.168.1.10
192.168.1.10
192.168.1.11
mail.meudominio.org.br.
192.168.1.10

As quatro ltimas linhas especificam nosso mapeamento, exatamente como


definimos anteriormente. Sempre que quisermos adicionar novos nomes, s
precisamos editar este arquivo. Se, por exemplo, quisermos adicionar endereos
para as mquinas dos personagens imaginrios Andr e Beto, localizadas nos IPs
192.168.1.17 e 192.168.1.18, respectivamente, basta adicionarmos ao final do
arquivo /etc/bind/db.meudominio o trecho abaixo.
andre.meudominio.org.br.
beto.meudominio.org.br.

IN
IN

A
A

192.168.1.17
192.168.1.18

Observe ainda que possvel especificar que o mesmo IP responder por mais de
um nome. A mquina 192.168.1.10 do nosso exemplo est respondendo pelos
nomes ftp e www simultaneamente. O contrrio, especificar vrios endereos para o
mesmo nome, tambm possvel.
Agora que terminamos de editar nossos arquivos hora de fazer uma reviso rpida
neles e reiniciar o servio de nomes, para que ele carregue os novos dados.
# /etc/init.d/bind9 restart
Stopping domain name service: named.
Starting domain name service: named.
Para testar nossa configurao, vamos usar novamente o dig. Do mesmo modo que
consultamos anteriormente o endereo para uma mquina na rede externa
(www.linux.org), agora vamos consultar o endereo para um nome de mquina na
rede interna.
$ dig ftp.meudominio.org.br @127.0.0.1
; <<>> DiG 9.2.4 <<>> ftp.meudominio.org.br @127.0.0.1
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41734
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:

52

A P O STI L A
DE
GNU / LINUX
;ftp.meudominio.org.br. IN

;; ANSWER SECTION:
ftp.meudominio.org.br. 86400 IN A
;; AUTHORITY SECTION:
meudominio.org.br. 86400

IN

;; ADDITIONAL SECTION:
ns.meudominio.org.br. 86400 IN
;;
;;
;;
;;

192.168.1.10
NS

ns.meudominio.org.br.

192.168.1.11

Query time: 6 msec


SERVER: 127.0.0.1#53(127.0.0.1)
WHEN: Tue Dec 27 10:08:05 2005
MSG SIZE rcvd: 100

6.3 Configurando o DNS reverso.


O DNS reverso um meio de que outras maquinas podem ter certeza de que voc
voc, por exemplo, normal servidores de email, checarem se o seu dns mesmo
valido, um exemplo pra voce ver como isso funciona seria usando o comando host.
# host terra.com.br
ele retornar a seguinte sada:
terra.com.br has address 200.176.3.142
terra.com.br mail is handled by 10 mx.terra.com.br.
Fazendo o contrrio:
# host 200.176.3.142
obtemos o seguinte resultado:
142.3.176.200.in-addr.arpa domain name pointer www.terra.com.br.

Ento esse o dns reverso.


Para
configurar
isso,
inicialmente
vamos
configurar
o
arquivo
/etc/bind/named.conf.local (em nosso exemplos, usamos apenas ips internos, ento
vou continuar com este padro).
# vi /etc/bind/named.conf.local
zone "1.168.192.in-addr.arpa" {
type master;
53

A P O STI L A
DE
GNU / LINUX
file "/etc/bind/db.11";
}
Note que se usamos o ip 192.168.1.11 no nosso servidor, entao a zone ser
1.168.192.in-addr.arpa, isso corresponde ao ip ao contrario sem o ultimo numero
Fizemos referencia ao arquivo db.11, portanto preciso cria-lo e dentro dele
entraremos com o as informaes a seguir:
# vi /etc/bind/db.11
;
; BIND reverse data file for meudominio.org.br
;
$TTL
@

604800
IN

SOA

meudominio.org.br. ns.meudominio.org.br. (
1
; Serial
604800
; Refresh
86400
; Retry
2419200
; Expire
604800 )
; Negative Cache TTL

;
11

IN
IN

NS
PTR

meudominio.org.br.
ns.meudominio.org.br.

Olhando com ateno nas duas ultimas linhas, podemos ver o seguinte:
IN

NS

meudominio.org.br.

o dominio principal
11

IN

PTR

ns.meudominio.org.br.

O ip e o host.dominio da maquina
Agora com tudo configurado, podemos reiniciar o bind.
# /etc/init.d/bind9 restart
Stopping domain name service: named.
Starting domain name service: named.
Agora para testar, vamos usar o comando host, substituindo /etc/resolv.conf para
nosso servidor DNS.
# vi /etc/resolv.conf

54

A P O STI L A
DE
GNU / LINUX
search meudominio.org.br
nameserver 127.0.0.1
# host ns.meudominio.org.br
ns.meudominio.org.br has address 192.168.1.11
Est finalizado a confgurao de um servidor DNS utilizando o Bind9.

55

A P O STI L A
DE
GNU / LINUX

7. SERVIDOR DE E-MAIL POSTFIX

O Postfix um sistema composto por vrias estruturas e processos que tratam as


mensagens. Sua arquitetura resulta em um MTA rpido, robusto e seguro. O Postfix
composto por filas, tabelas de pesquisa e programas. Alguns programas tratam as
mensagens enquanto outros gerenciam a atividade do sistema, agindo de forma
mais independente possvel.
O e-mail parte integrante da sociedade moderna. A amplitude de sua utilizao ao
recdor do mundo o caracteriza como uma das mais importantes aplicaes da rede
mundial. Sua origem anterior ao surgimento da Internet e sua tecnologia vem
evoluindo constantemente para poder servir as novas necessidades e fazer frente
aos desafios e riscos envolvidos na transmisso de mensagens pela Internet.
7.1 Protocolos.
Existe um conjunto de protocolos a termos especficos ao transito de e-mail. As
aplicaes envolvidas se dividem em:
MTA
Mail Transfer Agent

MDA
Mail Delivery Agent
MUA
Mail User Agent

MTA a aplicao responsvel pelo transito de


mensagens entre servidores usando o protocolo SMTP.
Um dos MTAs mais seguros o PostFIX, que pode ser
configurado com facilidade por um administrador que no
tenha grande experincia com servidores de e-mail.
A responsabilidade da aplicao MDA arquivar em um
servidor os e-mails transportados pelo MTA. O MTA no
responsvel pelo trfego de mensagens entre os
servidores nem pela manipulao do e-mail pelo usurio.
O MUA utilizado para ler e redigir os e-mails, sendo a
ferramenta do usurio final.

A comunicao entre os equipamentos ocorre com a utilizao dos seguintes


protocolos especficos:

56

A P O STI L A
DE
GNU / LINUX

SMTP
Simple Mail Transfer
Protocol

O SMTP utilizado para transferir e-mails entre os


servidores. Uma aplicao cliente de correio eletrnico
deve especificar um servidor de SMTP para poder enviar
o e-mail para outros servidores. Observe que entre os
servidores de e-mail o protocolo SMTP e utilizado para
receber e enviar.
O protocolo SMTP no exige a autenticao do usurio
que esta enviando o e-mail

POP
Post Office Protocol

Uma aplicao cliente utiliza a POP para transferir o email de um servidor para o espao de armazenamento
da aplicao. Normalmente uma aplicao cliente POP
apaga os e-mails do servidor. O POP exige autenticao.

IMAP
Uma das caractersticas do IMAP que os e-mails ficam
Internet Message Access no servidor e no so transferidos para o espao de
Protocol
armazenamento da aplicao cliente. Ele til quando o
usurio acessa seus e-mails por mais de uma maquina.
7.2 Instalao do Postfix
A instalao do Postfix distribui em diversos diretrios os executveis dos comandos
e as filas de processamento de mensagens.
Para darmos incio a instalao dos postfix utilizaremos o seguinte comando:
# apt-get install postfix

57

A P O STI L A
DE
GNU / LINUX

Vamos selecionar a opo Internet Site.

Esta tela, apresenta uma carcterstica do Postfix, no qual pode-se criar um alias para
o envio de mensagens do sistema root a outros usurios.

58

A P O STI L A
DE
GNU / LINUX

Deixemos a opo padro, caso contrrio, bastaria colocar um usurio qualquer


existente.

Como exemplo, iremos colocar o domnio marcioleonardi.com.br

59

A P O STI L A
DE
GNU / LINUX

Deixaremos em branco uma vez que no haver outros domnios virtuais como
gateway de e-mail.

Como estamos usando um sistema de arquivos com journalling selecionaremos a


opo No.
Finalizada a instalao do Postfix, iremos iniciar a instalao do courier-imap e do
60

A P O STI L A
DE
GNU / LINUX
courier-pop para entrega local de e-mails.
Para instalarmos os pacotes devemos usar o seguinte comando:
# apt-get install courier-imap courier-pop

Selecionaremos a opo Sim, caso desejar configurar o Postfix atravs da web


depois.
7.3 Configurando o Postfix
O postfix contm um arquivo chamado main.cf, no qual esto as configuraes
gerais do daemon, localizado no diretrio "/etc/postfix", pela instalao padro.
Vamos editar esse arquivo e colocar as configuraes para que funcione em perfeito
estado.
# vi /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no

61

A P O STI L A
DE
GNU / LINUX
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
myhostname = mail.marcioleonardi.com.br

Substituir pelo nome da maquina/host


mydomain = marcioleonardi.com.br

Substituir pelo seu domnio


alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = marcioleonardi.com.br
relayhost =
mynetworks = 192.168.1.1 127.0.0.0/8

Neste parmetro voc determina as redes do seu servidor.


mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

Pronto seu servidor de e-mail est configurado, agora vamos aos testes:
Com o usurio root, digite o seguinte comando:
# mail marcio@marcioleonardi.com.br
Subject: Teste
Teste do servidor de e-mail
.
Cc:
Agora vamos logar com o usurio marcio e verificar se o e-mail foi entregue com o
seguinte comando:
# su marcio
Mail version 8.1.2 01/15/2001. Type ? for help.
"/var/mail/marcio": 1 message 1 unread
>U 1 root@marcioleonar Wed Jan 25 03:36
15/545
&

Teste

62

A P O STI L A
DE
GNU / LINUX
Aperte a tecla [Enter] para visualizar a mensagem.
Message 1:
From root@marcioleonardi.com.br Wed Jan 25 03:36:47 2006
X-Original-To: marcio@marcioleonardi.com.br
To: marcio@marcioleonardi.com.br
Subject: Teste
Date: Wed, 25 Jan 2006 03:36:47 +0000 (UTC)
From: root@marcioleonardi.com.br (root)
Teste do servidor de e-mail
&
Est finalizado a instalao e configurao do servidor de e-mail.

63

A P O STI L A
DE
GNU / LINUX

8. FIREWALL IPTABLES

Todo administrador de redes aprende logo que uma das coisas mais importantes
para qualquer rede um bom firewall. Embora existam muitos mitos em torno disto,
os firewall no fazem milagres, apenas adicionam uma camada extra de proteo,
escondendo as vulnerabilidades das mquinas. Voc pode ter um servidor IIS ativo
com todas as vulnerabilidades possveis dentro da sua rede, mas ningum poder
fazer nada se no conseguir se conectar a ele. Este o papel do firewall, limitar e
filtrar os acessos aos servidores e estaes de trabalho da sua rede.
Outra abordagem que vamos ver, o compartilhamento de internet atravs do
iptables, utilizando o NAT.
A configurao do Iptables feita diretamente via terminal, basta voc ir inserindo as
regras uma a uma. As regras se perdem ao reiniciar o micro por isso depois de
testar tudo vamos criar um script para que elas sejam recriadas automaticamente a
cada reboot.
O Iptables to verstil que pode ser usado para praticamente tudo relacionado
inspeo, encaminhamento e at mesmo alterao de pacotes. Se ele no fizer algo
possvel criar um mdulo que o faa. J que as possibilidades so infinitas mais
seu tempo no, vamos ficar em algumas regras simples que resolvem a maior parte
dos problemas do dia a dia. A partir da voc pode ir se aperfeioando e
desenvolvendo solues mais sofisticadas.
8.1 Instao do IPTABLES.
Para instalar o iptables fcil, e como j compilamos no kernel seus mdulos, fica
ainda mais simples sua utilizao, pois, no sero necessrios os carregamentos
dos mdulos.
Para instalar o iptables utilizaremos o seguinte comando:
# apt-get install iptables
O Iptables foi instalado com sucesso.
8.2 Criando regras no IPTABLES.
64

A P O STI L A
DE
GNU / LINUX
Vamos ento criao das regras que determinam o que entra e o que no entra na
mquina. Se o seu micro est ligado apenas internet, sem uma rede local, ento
so necessrias apenas duas regras para resolver o problema. Abra um terminal,
logue-se como root e digite o comando:
# iptables -A INPUT -p tcp --syn -j DROP
# iptables -A INPUT -i ppp0 -p udp --dport 0:30000 -j DROP
Isso far com que o micro passe a ignorar conexes vindas em qualquer porta TCP,
sem enviar sequer uma confirmao de que o pacote foi recebido. Voc continuar
conseguindo acessar a internet normalmente, mas ningum conseguir se conectar
diretamente ao seu PC; um servidor Web ou SSH que voc esquecesse de desativar
passariam despercebidos. Apenas as conexes iniciadas por voc so aceitas, o
que permite que alguns programas de compartilhamento como o gtkgnutella e o
Kazza continuem funcionando normalmente. A segunda regra opcional (dica do
Fabricio Carvalho), ela bloqueia tambm parte das portas UDP, adicionando uma
camada extra se segurana.
O efeito colateral que alguns programas que abrem servidores podem deixar de
funcionar. Voc no conseguir mais receber arquivos pelo ICQ por exemplo, como
se estivesse acessando atravs de uma conexo compartilhada via NAT.
O interessante que voc pode desativar o firewall a qualquer momento, para isso
basta um nico comando:
# iptables -F
Isso elimina todas as regras do Iptables, fazendo com que seu micro volte a aceitar
todas as conexes. Voc pode usa-la para permitir que algum se conecte
rapidamente via ssh na sua maquina por exemplo e depois fechar tudo novamente
reinserindo as regras anteriores.
Se voc tiver uma rede local e quiser que os micros da rede interna seja capazes de
se conectar normalmente, mas mantendo o bloqueio a tudo que vem da internet,
basta dar um "iptables -F" e comear de novo, desta vez adicionando primeiro a
regra que permite os pacotes vindos da rede local:
# iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT

Em seguida vem os comandos anteriores:


# iptables -A INPUT -p tcp --syn -j DROP
Altere o "192.168.0.0/255.255.255.0" para a faixa de endereos e mscara de subrede que estiver utilizando na sua rede. Este exemplo serve para redes que utilizam
65

A P O STI L A
DE
GNU / LINUX
a faixa de 192.168.0.1 at 192.168.0.254.
O Iptables processa os comandos em seqncia. Ento todos os pacotes passam
pela primeira instruo antes de ir para a segunda. Quando um pacote vem de um
dos endereos da rede local imediatamente aceito, os demais vo para as duas
ltimas linhas e acabam recusados. uma simples questo de sim ou no. A
primeira linha diz sim para os pacotes da rede local enquanto as duas ultimas dizem
no para todos os demais.
Imagine agora que voc queira permitir ao mesmo tempo pacotes vindos da rede
local e uma certa porta vinda da Internet, como por exemplo a porta 22 do SSH.
Neste caso voc adicionaria mais uma regra, mantendo as regras anteriores:
#
#
#
#

iptables
iptables
iptables
iptables

-A
-A
-A
-A

INPUT
INPUT
INPUT
INPUT

-p
-p
-p
-p

tcp
tcp
tcp
udp

--destination-port 22 -j ACCEPT
--syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
--syn -j DROP
-j DROP

Agora tudo o que vem na porta 22 (tanto da Internet quanto da rede local) aceito,
tudo o que vem da rede local aceito e todo o resto rejeitado. Voc pode adicionar
mais linhas para abrir outras portas. Se voc quisesse abrir tambm as portas 1021
e 1080, a lista ficaria assim:
#
#
#
#
#

iptables
iptables
iptables
iptables
iptables

-A
-A
-A
-A
-A

INPUT
INPUT
INPUT
INPUT
INPUT

-p
-p
-p
-p
-p

tcp
tcp
tcp
tcp
tcp

--destination-port 22 -j ACCEPT
--destination-port 1021 -j ACCEPT
--destination-port 1080 -j ACCEPT
--syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
--syn -j DROP

Isso permite que voc mantenha disponveis apenas os servidores que voc
realmente quer disponibilizar e nos momentos que quiser. A qualquer tempo voc
pode dar um iptables -F e readicionar apenas as regras para fechar tudo.
8.3 Compartilhando conexes via NAT
Vamos ento segunda receita, para compartilhar a conexo. Ela ainda mais
simples e tambm permite ativar ou desativar o compartilhamento a qualquer
momento.
Em primeiro lugar voc deve configurar as suas placas de rede e modem e verificar
se tanto a conexo com a Internet quando a conexo com os micros da rede local
esto funcionando normalmente. O compartilhamento da conexo em s pode ser
feito com apenas trs comandos:
Para compartilhar a conexo do modem com a rede local:

66

A P O STI L A
DE
GNU / LINUX
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
Para compartilhar uma conexo via ADSL ou cabo instalada na eth0:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
Para desativar o compartilhamento, vale o de sempre:
# iptables - F
O compartilhamento e ativado ou desativado imediatamente, sem que seja
necessrio reiniciar a conexo. Rpido, prtico e confivel.
As duas linhas ativam o nat do iptables, responsvel pela traduo de endereos,
avisam para o iptables que ele deve direcionar todas as conexes recebidas para a
interface ppp0 (o modem) ou eth0 (a primeira placa de rede) e devolver as respostas
para os clientes e confirmam a ativao no arquivo de configurao do TCP/IP.
No faz mal se voc acessa via modem e no fica permanentemente conectado. A
regra mantm o compartilhamento ativo mesmo que voc desconecte e reconecte
vrias vezes.
Se os clientes da rede j estiverem configurados para acessar a web atravs do
endereo IP usado pelo servidor voc j deve ser capaz de acessar a web
automaticamente nos demais PCs da rede.
Uma observao que estas regras no incluem um servidor DHCP, voc deve
configurar os clientes com endereo IP fixo ou ento ativar o servio DHCPD na sua
distribuio.
A configurao nos clientes fica: Endereo IP: Qualquer endereo dentro da faixa de
endereos usada pelo servidor. Ex: 192.168.0.3 Servidor DNS: Os endereos dos
servidores DNS do seu provedor. Ex: 200.177.250.10 Gateway Padro: O endereo
do servidor. Ex: 192.168.0.1 Domnio: O domnio do seu provedor. Ex: terra.com.br
As linhas de compartilhamento da conexo no conflitam com as regras de firewall
que vimos anteriormente, voc deve apenas ter o cuidado de coloc-las no inicio da
seqncia. Neste caso nosso script completo ficaria assim:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
# Abre algumas portas (opcional)
iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 1021 -j ACCEPT

67

A P O STI L A
DE
GNU / LINUX
iptables -A INPUT -p tcp --destination-port 1080 -j ACCEPT
# Abre para a rede local
iptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j ACCEPT
# Fecha o resto
iptables -A INPUT -p tcp --syn -j DROP

Se voc quiser que o PC tambm no responda a pings, adicione a linha:


echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
Agora j temos 10 comandos, fora os para abrir portas especficas. No seria muito
prtico ficar digitando tudo isso cada vez que precisar reiniciar o micro. Para
automatizar isso, basta colar todos os comandos dentro de um arquivo de texto.
Voc pode salv-lo como por exemplo: /usr/local/bin/meu_firewall
Em seguida, d permisso de execuo para o arquivo (chmod +x
/usr/local/bin/meu_firewall) e voc ter um shell script que pode ser chamado a
qualquer momento. Basta digitar: meu_firewall
Para tornar a inicializao realmente automtica, voc precisa apenas colocar o
comando num dos arquivos de inicializao do sistema. Abra o arquivo
/etc/rc.d/rc.local e adicione a linha:
/usr/local/bin/meu_firewall
As regras que vimos acima funcionam como um firewall de bloqueio. Ou seja, o
servidor no deixa que ningum acesse os compartilhamentos de arquivos ou
conectem o backorifice instalado na mquina com o Windows 98, mas no impedem
que os usurios baixem e-mails com vrus ou que acessem uma pgina web que
explore alguma das vulnerabilidades do IE por exemplo. Ao usar clientes Windows o
ideal complementar o firewall com um bom antivrus.
Vamos agora a um ltimo passo que fowardar certas portas para os hosts da rede
interna. Isso permite que voc rode um servidor de FTP ou crie um servidor de por
exemplo em qualquer um dos micros da rede e no apenas no servidor que est
diretamente conectado internet. O servidor simplesmente direciona todas as
requisies recebidas na porta para o micro especificado, de forma transparente.
O foward de portas tambm usa o Nat.
Em seguida vem as regras para fazer o foward da porta. Neste caso estou
direcionando a porta 22 (do SSH) na conexo com a internet (eth0) para o micro
192.168.0.2 da rede local:
# iptables -t nat -A PREROUTING -i etho -p tcp --dport 22 -j
68

A P O STI L A
DE
GNU / LINUX
DNAT --to-dest 192.168.0.2
# iptables -A FORWARD -p tcp -i eth0 --dport 22 -d 192.168.0.2
-j ACCEPT
Basta alterar a regra, adicionando a porta e a mquina da rede interna para onde ele
deve ser redirecionada. Se voc acessa via modem, basta substituir o "eth0" em
ambas as linhas por "ppp0". Esta regra pode ser usada em conjunto com as
antreriores, mas deve ir sempre logo no incio do arquivo, antes das regras para
compartilhar a conexo e, claro, antes das regras para fechar tudo.
Voc pode repetir o comando vrias vezes para direcionar varias portas diferentes
para vrias mquinas. Naturalmente uma mesma porta no pode ser fowardada
duas vezes.
Tambm possvel fowardar ranges de portas. No Unreal Tournament por exemplo
voc precisa abrir as portas UDP 7777, 7778 e 7779 neste caso as regras seriam:
# iptables -t nat -A PREROUTING -i eth0 -p udp --dport 7777:7779 -j DNAT --to-dest
192.168.0.2
# iptables -A FORWARD -p udp -i eth0 --dport 7777:7779 -d 192.168.0.2 -j ACCEPT

69

Você também pode gostar