Escolar Documentos
Profissional Documentos
Cultura Documentos
Sumário
Introdução................................................................................................................................................................................4
Introdução às redes locais.................................................................................................................................................4
Introdução ao Linux..........................................................................................................................................................4
Introdução às distribuições...............................................................................................................................................4
A distribuição Debian........................................................................................................................................................5
Requerimento de hardware para cada tipo de aplicação.............................................................................................. 5
Procedimento para instalação.......................................................................................................................................... 6
Conhecendo o sistema Linux..................................................................................................................................................8
Comandos Básicos............................................................................................................................................................. 8
Comandos de sistemas de arquivos............................................................................................................................ 8
Comandos diversos.................................................................................................................................................... 10
Comandos para gerenciamento de usuários............................................................................................................11
Editores de texto.............................................................................................................................................................. 13
Principais arquivos do sistema....................................................................................................................................... 13
Permissões de arquivos................................................................................................................................................... 17
Gerenciamento de Pacotes.............................................................................................................................................. 19
Instalação de aplicativos............................................................................................................................................19
Atualizando sua distribuição.................................................................................................................................... 20
Instalando novos pacotes...........................................................................................................................................20
Removendo pacotes instalados................................................................................................................................. 21
Serviços básicos..................................................................................................................................................................... 22
Servidor dhcp...................................................................................................................................................................22
Conceitos e instalação................................................................................................................................................ 22
Configuração básica e avançada.............................................................................................................................. 22
Servidor de DNS.............................................................................................................................................................. 23
Conceitos e instalação................................................................................................................................................ 23
Configuração avançada............................................................................................................................................. 23
Servidor Proxy(Squid).......................................................................................................................................................... 25
Conceitos.......................................................................................................................................................................... 25
Instalação..........................................................................................................................................................................26
Configuração....................................................................................................................................................................26
Proxy transparente.......................................................................................................................................................... 26
ACLs................................................................................................................................................................................. 26
Exemplo de Configuração...............................................................................................................................................27
Servidor de arquivos(SaMBa)..............................................................................................................................................30
Conceitos.......................................................................................................................................................................... 30
Instalação..........................................................................................................................................................................30
Arquivo de configuração.................................................................................................................................................30
Níveis de segurança......................................................................................................................................................... 31
Configuração de servidor de arquivos simples............................................................................................................. 32
Configuração de máquinas rWindows.......................................................................................................................... 33
Gerenciamento de usuários samba................................................................................................................................ 33
Criando contas confiáveis......................................................................................................................................... 33
Contas de Usuários.................................................................................................................................................... 33
Removendo Usuários................................................................................................................................................. 34
Mudando a senha do usuário.................................................................................................................................... 34
Samba como servidor de autenticação de usuários Windows..................................................................................... 34
Configuração de uma situação real para o SAMBA como PDC........................................................................... 34
Scripts de Logon.........................................................................................................................................................34
Configuração de máquinas rWindows.......................................................................................................................... 37
Usando Linux como firewall................................................................................................................................................ 38
Conceitos.......................................................................................................................................................................... 38
Tipos de firewalls....................................................................................................................................................... 38
O que proteger?......................................................................................................................................................... 38
Introdução........................................................................................................................................................................ 38
Políticas(policiamento) de segurança....................................................................................................................... 39
Regras......................................................................................................................................................................... 39
Chains......................................................................................................................................................................... 40
Tabelas........................................................................................................................................................................ 40
Introdução ao Linux
O Linux é um sistema operacional criado em 1991 por Linus Torvalds na universidade de Helsinki na Finlândia. É um sistema
Operacional de código aberto distribuído gratuitamente pela Internet. Seu código fonte é liberado como Free Software (software livre) o
aviso de copyright do kernel feito por Linus descreve detalhadamente isto e mesmo ele não pode fechar o sistema para que seja usado
apenas comercialmente. Isto quer dizer que você não precisa pagar nada para usar o Linux, e não é crime fazer cópias para instalar em
outros computadores, nós inclusive incentivamos você a fazer isto. Ser um sistema de código aberto pode explicar a performance,
estabilidade e velocidade em que novos recursos são adicionados ao sistema.
Para rodar o Linux você precisa, no mínimo, de um computador 386 SX com 2 MB de memória 4MB e 40MB disponíveis em
seu disco rígido para uma instalação básica e funcional.
O sistema segue o padrão POSIX que é o mesmo usado por sistemas UNIX e suas variantes. Assim, aprendendo o Linux você
não encontrará muita dificuldade em operar um sistema do tipo UNIX, FreeBSD, HPUX, SunOS, etc., bastando apenas aprender alguns
detalhes encontrados em cada sistema.
O código fonte aberto permite que qualquer pessoa veja como o sistema funciona (útil para aprendizado), corrija alguma
problema ou faça alguma sugestão sobre sua melhoria, esse é um dos motivos de seu rápido crescimento, do aumento da
compatibilidade de periféricos (como novas placas sendo suportadas logo após seu lançamento) e de sua estabilidade.
Outro ponto em que ele se destaca é o suporte que oferece a placas, CD-Roms e outros tipos de dispositivos de última geração e
mais antigos (a maioria deles já ultrapassados e sendo completamente suportados pelo sistema operacional). Este é um ponto forte para
empresas que desejam manter seus micros em funcionamento e pretendem investir em avanços tecnológicos com as máquinas que
possui.
Hoje o Linux é desenvolvido por milhares de pessoas espalhadas pelo mundo, cada uma fazendo sua contribuição ou mantendo
alguma parte do kernel gratuitamente. Linus Torvalds ainda trabalha em seu desenvolvimento e também ajuda na coordenação entre os
desenvolvedores.
O suporte ao sistema também se destaca como sendo o mais eficiente e rápido do que qualquer programa comercial disponível
no mercado. Existem centenas de consultores especializados espalhados ao redor do mundo. Você pode se inscrever em uma lista de
discussão e relatar sua dúvida ou alguma falha, e sua mensagem será vista por centenas de usuários na Internet e algum irá te ajudar ou
avisará as pessoas responsáveis sobre a falha encontrada para devida correção.
Introdução às distribuições
Só o kernel GNU/Linux não é suficiente para se ter uma sistema funcional, mas é o principal. Existem grupos de pessoas,
empresas e organizações que decidem “distribuir” o Linux junto com outros programas essenciais (como por exemplo editores gráficos,
planilhas, bancos de dados, ambientes de programação, formatação de documentos, firewalls, etc).
Este é o significado básico de distribuição. Cada distribuição tem sua característica própria, como o sistema de instalação, o
objetivo, a localização de programas, nomes de arquivos de configuração, etc. A escolha de uma distribuição é pessoal e depende das
necessidades de cada um.
Algumas distribuições bastante conhecidas são: Slackware, Debian, Red Hat, Suse, Monkey, todas usando o SO Linux como
kernel principal (a Debian é uma distribuição independente de kernel e pode ser executada sob outros kernels, como o GNU hurd).
Squid
O squid é um serviço que requer muita memória e o mesmo irá toda a memória disponível no sistema para guardar nela os
objetos em transito. Um outro fator importante também é a qualidade do HD e da controladora de disco. Os objetos que o squid não
puder guardar na memória ele irá tentar gravar no disco, e o mesmo irá tentar lê-lo quando o objeto for requisitado. Imagine agora um
servidor que chega a ter 250 clientes acessando páginas simultaneamente. O quanto de memória esse serviço irá consumir? O quanto
dhcp
O serviço dhcp não é um serviço exigente em termos de recursos de hardware. Porém, caso falte o dhcp na sua rede todos os
clientes que dependem dele perderão contato com todos os tipos de serviços, é melhor investir em uma máquina muito estável.
Em uma rede onde tenhamos uns 250 dispositivos ligados simultaneamente, poderemos usar qualquer CPU de pelo menos 1
Ghz, 512 MB de RAM e pelos menos um disco com 5 GB.
Bind
O serviço de DNS não é um serviço que vá lhe exigir muito de disco entre outros recursos. Porém é um serviço crítico e pode
parar boa parte de seus serviços, o acesso à Internet por exemplo, por isso geralmente se usa dois servidores.
Uma máquina semelhante ao servidor de DHCP, porém com uma CPU de 1,5 Ghz pode suprir as suas necessidades.
SAMBA
No caso do serviço de servidor de arquivos, os requisitos de hardware vai depender da quantidade de dados a ser guardada, a
frequência de acesso a esses arquivos e o quanto sua rede vai depender deste serviço.
Para serviços de compartilhamentos onde os arquivos são usados pelos próprios usuários e estes usam o compartilhamento para
centralizar documentos, é fácil calcular o quanto de espaço em disco será necessário. Porém, se você irá usar a opção de roamming
profiles vai ter algo a mais com o que se preocupar. Lembre-se que ao usar os roamming profiles o papel de parede, as demais coisas da
área de trabalho, seus documentos pessoais e até seus e-mails irão ser guardados no servidor. A palavra chave neste caso é disco. Um
disco grande para caber todos os dados em conjunto com uma boa controladora de disco irá satisfazer bem suas necessidades.
Para uma rede acima de 30 usuários simultâneos aconselho ter uma máquina com no mínimo CPU de 1.5 Ghz e 512 MB de
RAM
Iptables
O iptables é um firewall a nível de kernel, ou seja, não é mais um aplicativo para que o sistema manipule por isso ele consome
menos processamento da maquina. Como todas as suas regras são guardadas na memória, ele quase não necessita de acesso ao disco(na
verdade ele não acessa, porém se você usar opções para “logar” atividades estranhas em sua rede, os sistema linux vai ter que acessar o
disco para salvar essas informações).
Um caso de maiores proporções é quando você usa o NAT. O iptables têm que manter na memória registros de todas as
conexões abertas, isso aumenta um pouco o consumo de memória. Uma máquina como o do servidor bind serve muito bem para
tráfegos até 4 Mbps.
Uma observação importantíssima é sobre a acumulação de mais de um desses serviços em uma mesma máquina. Nem sempre
acumular dois serviços significa acumular suas necessidades. Isso depende muito do ambiente onde o serviço está inserido.
Ao longo do curso aprenderemos várias ferramentas para acompanhar o desempenho de nossos sistemas.
Comandos Básicos
Diferentemente do Windows, que tem sua administração totalmente baseada em interface gráfica, o linux tem como sua
principal forma de configuração o modo texto, onde interagimos com o sistema na forma de comandos.
ls
O comando ls serve para listar o conteúdo de um diretório.
ls [opções] [caminho/arquivo] [caminho1/arquivo1]
onde:
caminho/arquivo Diretório/arquivo que será listado.
caminho1/arquivo1 Outro Diretório/arquivo que será listado. Podem ser feitas várias listagens de uma só vez.
Opções:
-a, –all Lista todos os arquivos (inclusive os ocultos) de um diretório.
-A, –almost-all Lista todos os arquivos (inclusive os ocultos) de um diretório, exceto o diretório atual e o de nível anterior.
-d, –directory Lista os nomes dos diretórios ao invés do conteúdo.
-f Não classifica a listagem.
-G, –no-group Oculta a coluna de grupo do arquivo.
-h, –human-readable Mostra o tamanho dos arquivos em Kbytes, Mbytes, Gbytes.
-H Faz o mesmo que -h, mas usa unidades de 1000 ao invés de 1024 para especificar Kbytes, Mbytes, Gbytes.
-l Usa o formato longo para listagem de arquivos. Lista as permissões, data de modificação, donos, grupos, etc.
-n Usa a identificação de usuário e grupo numérica ao invés dos nomes.
-R Lista diretórios e sub-diretórios recursivamente.
Cd
Entra em um diretório. Você precisa ter a permissão de execução para entrar no diretório.
cd [diretório]
onde:
diretório - diretório que deseja entrar.
Exemplos:
• Usando cd sem parâmetros ou cd ~, você retornará ao seu diretório de usuário (diretório home).
• cd /, retornará ao diretório raíz.
• cd -, retornará ao diretório anteriormente acessado.
• cd .., sobe um diretório.
• cd ../[diretório], sobe um diretório e entra imediatamente no próximo (por exemplo,quando você está em /usr/sbin, você digita
cd ../bin, o comando cd retorna um diretório (/usr) e entra imediatamente no diretório bin (/usr/bin).
pwd
Mostra o nome e caminho do diretório atual.
Você pode usar o comando pwd para verificar em qual diretório se encontra (caso seu aviso de comandos não mostre isso).
Mkdir
Cria um diretório no sistema. Um diretório é usado para armazenar arquivos de um determinado tipo. O diretório pode ser
entendido como uma pasta onde você guarda seus papeis (arquivos). Como uma pessoa organizada, você utilizará uma pasta para
guardar cada tipo de documento, da mesma forma você pode criar um diretório vendas para guardar seus arquivos relacionados com
vendas naquele local.
mkdir [opções] [caminho/diretório] [caminho1/diretório1]
onde:
caminho Caminho onde o diretório será criado.
diretório Nome do diretório que será criado.
opções:
Para criar um novo diretório, você deve ter permissão de gravação. Por exemplo, para criar um diretório em /tmp com o nome de
teste que será usado para gravar arquivos de teste, você deve usar o comando "mkdir/tmp/teste".
Podem ser criados mais de um diretório com um único comando (mkdir /tmp/teste /tmp/teste1 /tmp/teste2).
rm
Apaga arquivos. Também pode ser usado para apagar diretórios e sub-diretórios vazios ou que contenham arquivos.
rm [opções][caminho][arquivo/diretório] [caminho1][arquivo1/diretório1]
onde:
caminho Localização do arquivo que deseja apagar. Se omitido, assume que o arquivo esteja no diretório atual.
arquivo/diretório Arquivo que será apagado.
opções
-i, –interactive Pergunta antes de remover, esta é ativada por padrão.
-v, –verbose Mostra os arquivos na medida que são removidos.
-r, –recursive Usado para remover arquivos em sub-diretórios. Esta opção também pode ser usada para remover sub-diretórios.
-f, –force Remove os arquivos sem perguntar.
– arquivo Remove arquivos/diretórios que contém caracteres especiais. O separador “–” funciona com todos os comandos do
shell e permite que os caracteres especiais como “*”, “?”, “-”, etc. sejam interpretados como caracteres comuns.
Use com atenção o comando rm, uma vez que os arquivos e diretórios forem apagados, eles não poderão ser mais recuperados.
Exemplos:
• rm teste.txt - Apaga o arquivo teste.txt no diretório atual.
• rm *.txt - Apaga todos os arquivos do diretório atual que terminam com .txt.
• rm *.txt teste.novo - Apaga todos os arquivos do diretório atual que terminam com .txt e também o arquivo teste.novo.
• rm -rf /tmp/teste/* - Apaga todos os arquivos e sub-diretórios do diretório /tmp/teste mas mantém o sub-diretório /tmp/teste.
• rm -rf /tmp/teste - Apaga todos os arquivos e sub-diretórios do diretório /tmp/teste, inclusive /tmp/teste.
• rm -f -- --arquivo-- - Remove o arquivo de nome -arquivo-.
cp
Copia arquivos.
cp [opções] [origem] [destino]
onde:
origem Arquivo que será copiado. Podem ser especificados mais de um arquivo para ser copiado usando “Curingas” (veja
‘Curingas’ on page 12).
destino O caminho ou nome de arquivo onde será copiado. Se o destino for um diretório, os arquivos de origem serão copiados
para dentro do diretório.
opções
-i, –interactive Pergunta antes de substituir um arquivo existente.
-f, –force Não pergunta, substitui todos os arquivos caso já exista.
-r Copia arquivos dos diretórios e subdiretórios da origem para o destino. É recomendável usar -R ao invés de -r.
-R, –recursive Copia arquivos e sub-diretórios (como a opção -r) e também os arquivos especiais FIFO e dispositivos.
-v, –verbose Mostra os arquivos enquanto estão sendo copiados.
-s, –simbolic-link Cria link simbólico ao invés de copiar.
-l, –link Faz o link no destino ao invés de copiar os arquivos.
-p, –preserve Preserva atributos do arquivo, se for possível.
-u, –update Copia somente se o arquivo de origem é mais novo que o arquivo de destino ou quando o arquivo de destino não
existe.
-x Não copia arquivos que estão localizados em um sistema de arquivos diferente de onde a cópia iniciou.
O comando cp copia arquivos da ORIGEM para o DESTINO. Ambos origem e destino terão o mesmo conteúdo após a cópia.
Exemplos:
cp teste.txt teste1.txt Copia o arquivo teste.txt para teste1.txt.
cp teste.txt /tmp Copia o arquivo teste.txt para dentro do diretório /tmp.
cp * /tmp Copia todos os arquivos do diretório atual para /tmp.
cp /bin/* . Copia todos os arquivos do diretório /bin para o diretório em que nos encontramos no momento.
cp -R /bin /tmp Copia o diretório /bin e todos os arquivos/sub-diretórios existentes para o diretório /tmp.
cp -R /bin/* /tmp Copia todos os arquivos do diretório /bin (exceto o diretório /bin) e todos os arquivos/sub-diretórios existentes
dentro dele para /tmp.
cp -R /bin /tmp Copia todos os arquivos e o diretório /bin para /tmp.
mv
Move ou renomeia arquivos e diretórios. O processo é semelhante ao do comando cp mas o arquivo de origem é apagado após o
término da cópia.
Comandos diversos
df
Mostra o espaço livre/ocupado de cada partição.
df [opções]
onde:
opções
-a Inclui sistemas de arquivos com 0 blocos.
-h, –human-readable Mostra o espaço livre/ocupado em MB, KB, GB ao invés de blocos.
-H Idêntico a -h mas usa 1000 ao invés de 1024 como unidade de cálculo.
-k Lista em Kbytes.
-l Somente lista sistema de arquivos locais.
-m Lista em Mbytes (equivalente a –block-size=1048576).
–sync Executa o sync antes de mostrar os dados.
-T Lista o tipo de sistema de arquivos de cada partição
-t tipo Lista somente sistema de arquivos do tipo tipo.
-x tipo Não lista sistemas de arquivos do tipo tipo.
Exemplos: df, df -h, df -t vfat.
du
Mostra o espaço ocupado por arquivos e sub-diretórios do diretório atual.
du [opções]
onde:
opções
-a, –all Mostra o espaço ocupado por todos os arquivos.
-b, –bytes Mostra o espaço ocupado em bytes.
-c, –total Faz uma totalização de todo espaço listado.
-D Não conta links simbólicos.
-h, –human Mostra o espaço ocupado em formato legível por humanos (Kb, Mb) ao invés de usar blocos.
-H Como o anterior mas usa 1000 e não 1024 como unidade de cálculo.
-k Mostra o espaço ocupado em Kbytes.
-m Mostra o espaço ocupado em Mbytes.
-S, –separate-dirs Não calcula o espaço ocupado por sub-diretórios.
-x Não faz a contagem de diretórios em sistemas de arquivos diferentes do atual.
free
Mostra detalhes sobre a utilização da memória RAM do sistema.
free [opções]
Onde:
opções
-b Mostra o resultado em bytes.
-k Mostra o resultado em Kbytes.
-m Mostra o resultado em Mbytes.
-o Oculta a linha de buffers.
-t Mostra uma linha contendo o total.
-s [num ] Mostra a utilização da memória a cada [num] segundos.
O free é uma interface ao arquivo /proc/meminfo.
head
Mostra as linhas iniciais de um arquivo texto.
head [opções]
Onde:
-c [numero ] Mostra o [numero] de bytes do inicio do arquivo.
-n [numero ] Mostra o [numero] de linhas do inicio do arquivo. Caso não for especificado, o
head mostra as 10 primeiras linhas.
Exemplos: head teste.txt, head -n 20 teste.txt.
tail
Mostra as linhas finais de um arquivo texto.
tail [opções]
Onde:
-c [numero ] Mostra o [numero] de bytes do final do arquivo.
-n [numero ] Mostra o [numero] de linhas do final do arquivo.
Exemplos: tail teste.txt, tail -n 20 teste.txt.
adduser
Adiciona um usuário ou grupo no sistema. Por padrão, quando um novo usuário é adicionado, é criado um grupo com o mesmo
nome do usuário. Opcionalmente o adduser também pode ser usado para adicionar um usuário a um grupo . Será criado um diretório
home com o nome do usuário (a não ser que o novo usuário criado seja um usuário do sistema) e este receberá uma identificação. A
identificação do usuário (UID) escolhida será a primeira disponível no sistema especificada de acordo com a faixa de UIDS de usuários
permitidas no arquivo de configuração /etc/adduser.conf.
Este é o arquivo que contém os padrões para a criação de novos usuários no sistema.
adduser [opções] [usuário/grupo]
Onde:
usuário/grupo Nome do novo usuário que será adicionado ao sistema.
opções
-disable-passwd Não executa o programa passwd para escolher a senha e somente permite o uso da conta após o usuário escolher
uma senha.
–force-badname Desativa a checagem de senhas ruins durante a adição do novo usuário. Por padrão o adduser checa se a senha
pode ser facilmente adivinhada.
–group Cria um novo grupo ao invés de um novo usuário. A criação de grupos também pode ser feita pelo comando addgroup.
-uid [num ] Cria um novo usuário com a identificação [num] ao invés de procurar o próximo UID disponível.
-gid [num ] Faz com que o usuário seja parte do grupo [gid] ao invés de pertencer a um novo grupo que será criado com seu
nome. Isto é útil caso deseje permitir que grupos de usuários possam ter acesso a arquivos comuns. Caso estiver criando um novo grupo
com adduser, a identificação do novo grupo será [num].
–home [dir ] Usa o diretório [dir] para a criação do diretório home do usuário ao invés de usar o especificado no arquivo de
configuração /etc/adduser.conf.
–ingroup [nome ] Quando adicionar um novo usuário no sistema, coloca o usuário no grupo [nome] ao invés de criar um novo
grupo.
Os dados do usuário são colocados no arquivo /etc/passwd após sua criação e os dados do grupo são colocados no arquivo
/etc/group.
OBSERVAÇÃO: Caso esteja usando senhas ocultas (shadow passwords), as senhas dos usuários serão colocadas no arquivo
/etc/shadow e as senhas dos grupos no arquivo /etc/gshadow. Isto aumenta mais a segurança do sistema porque somente o usuário root
pode ter acesso a estes arquivos, ao contrário do arquivo /etc/passwd que possui os dados de usuários e devem ser lidos por todos.
addgroup
Adiciona um novo grupo de usuários no sistema. As opções usadas são as mesmas do ‘adduser’.
addgroup [usuário/grupo] [opções]
passwd
Muda a senha do usuário ou grupo. Um usuário somente pode alterar a senha de sua conta, mas o superusuário (root) pode
alterar a senha de qualquer conta de usuário, inclusive a data de validade da conta, etc. Os donos de grupos também podem alterar a
senha do grupo com este comando.
Os dados da conta do usuário como nome, endereço, telefone, também podem ser alterados com este comando.
passwd [usuário/grupo] [opções]
Onde:
usuário Nome do usuário/grupo que terá sua senha alterada.
opções
-g Se especificada, a senha do grupo será alterada. Somente o root ou o administrador do grupo pode alterar sua senha. A opção
-r pode ser usada com esta para remover a senha do grupo. A opção -R pode ser usada para restringir o acesso do grupo para outros
usuários.
-x [dias ] Especifica o número máximo de dias que a senha poderá ser usada. Após terminar o prazo, a senha deverá ser
modificada.
-i Desativa a conta caso o usuário não tenha alterado sua senha após o tempo especificado por -x.
-n [dias ] Especifica o número mínimo de dias para a senha ser alterada. O usuário não poderá mudar sua senha até que [dias]
sejam atingidos desde a última alteração de senha.
-w [num ] Número de dias antecedentes que o usuário receberá o alerta para mudar sua senha. O alerta ocorre [num] dias antes
do limite da opção -x, avisando ao usuários quantos dias restam para a troca de sua senha.
-l [nome ] Bloqueia a conta do usuário [nome]. Deve ser usada pelo root. O bloqueio da conta é feito acrescentando um caracter
a senha para que não confira com a senha original.
-u [nome ] Desbloqueia a conta de um usuário bloqueada com a opção -l.
-S [nome ] Mostra o status da conta do usuário [nome]. A primeira parte é o nome do usuário seguido de L(conta bloqueada),
NP(sem senha), ou P (com senha), a terceira parte é a data da última modificação da senha, a quarta parte é a período mínimo, máximo,
alerta e o período de inatividade para a senha.
Procure sempre combinar letras maiúsculas, minúsculas, e números ao escolher suas senhas. Não é recomendado escolher
palavras normais como sua senha pois podem ser vulneráveis a ataques de dicionários cracker. Outra recomendação é utilizar senhas
ocultas em seu sistema (shadow password).
Você deve ser o dono da conta para poder modificar a senhas. O usuário root pode modificar/apagar a senha de qualquer
usuário.
Exemplo: passwd root.
userdel
Apaga um usuário do sistema. Quando é usado, este comando apaga todos os dados da conta especificado dos arquivos de contas
do sistema.
userdel [-r] [usuário]
Onde:
-r Apaga também o diretório HOME do usuário.
OBS: Note que uma conta de usuário não poderá ser removida caso ele estiver no sistema, pois os programas podem precisar ter
acesso aos dados dele (como UID, GID) no /etc/passwd.
groupdel
Apaga um grupo do sistema. Quando é usado, este comando apaga todos os dados do grupo especificado dos arquivos de contas
do sistema.
groupdel [grupo]
Editores de texto
No linux existem vários editores de texto, sendo que alguns são em modo gráfico, como o kate, kwrite,kedit, gnome-editor. E
outros em modo texto. Os editores em modo texto são os aconselhados pois podemos usá-los sob a maioria das situações. Ex:
usando console remota em uma linha discada. Alguns editores em modo texto:
nano ou pico
O nano é um editor bem simples e muito fácil de usar e já vem por padrão na distribuição debian. Na parte inferior há os atalhos
para diversas opções do editor. Ex.: ctrl-x(^X) sair, etc.
Joe
Para quem já usou o Wordperfect, esse editor implementa uma aparência semelhante ao seu predecessor. Tendo uma linha de
status que fica no topo da janela, com as informações de status do arquivo, nome do arquivo, linha, coluna, hora e as teclas para se obter
a ajuda, é um editor muito leve e prático. Tem uma "janela" de ajuda que pode ficar visível durante todo o tempo ou oculta, bastando
para isso pressionar Ctrl-H, alternando-se o modo de exibição da janela.
Vi e vim
Neste editor de textos temos dois modos principais de interação com o usuário: o modo de edição de textos e o modo comando.
No modo comando são digitados os comandos para o editor de textos.
Assim que iniciado o vi abre no modo de comando onde então podemos dar comando ao editor como:
■ :e arquivo.txt para abrir
■ :q! sai do arquivo sem salvar nenhuma alteração
■ :wq salva o arquivo atual e sai
■ Note que ao digitar o ”:” o comando é exibido na parte inferior da tela.
■ “c” corta a linha atual.
■ “p” cola o texto anteriormente recortado.
Para iniciar o modo de edição basta teclar a letra i(insert) e digitar normalmente. Para voltar ao modo de comando novamente
basta teclar “esc”.
/etc/network/interfaces
Este é o arquivo de configuração usado pelos programas ifup e ifdown, respectivamente para ativar e desativas as interfaces de
rede.
O que estes utilitários fazem na realidade é carregar os utilitários ifconfig e route através dos argumentos passados do arquivo
/etc/network/interfaces, permitindo que o usuário iniciante configure uma interface de rede com mais facilidade.
Abaixo um exemplo do arquivo interfaces é o seguinte:
auto eth0
iface eth0 inet static
address 192.168.99.1
netmask 255.255.255.0
As interfaces e roteamentos são configurados na ordem que aparecem neste arquivo. Cada configuração de interface inicia com a
palavra chave iface. A próxima palavra é o nome da interface que deseja configurar (da mesma forma que é utilizada pelos comandos
ifconfig e route). Você pode também usar IP aliases especificando eth0:0 mas tenha certeza que a interface real (eth0) é inicializada
antes.
A próxima palavra especifica a familia de endereços da interface; Escolha inet para a rede TCP/IP, ipx para interfaces IPX e
IPv6 para interfaces configuradas com o protocolo IPV6.
A palavra static especifica o método que a interface será configurada, neste caso é uma interface com endereço estático (fixo).
Outros métodos e seus parâmetros são especificados abaixo (traduzido da página do arquivo interfaces):
O método loopback
É usado para configurar a interface loopback (lo) IPv4.
O método static
É usado para configurar um endereço IPv4 fixo para a interface. As opções que podem ser usadas com o métodos static são as
seguintes (opções marcadas com * no final são requeridas na configuração):
address endereço *
Endereço IP da Interface de rede (por exemplo, 192.168.99.1).
netmask máscara *
Máscara de rede da Interface de rede (por exemplo, 255.255.255.0).
broadcast endereço
Endereço de Broadcast da interface (por exemplo, 192.168.1.255).
network endereço
Endereço da rede (por exemplo, 192.168.99.0).
gateway endereço
Endereço do gateway padrão (por exemplo, 192.168.1.10). O gateway é o endereço do computador responsável por conectar o
seu computador a outra rede. Use somente se for necessário em sua rede.
O método dhcp
Este método é usado para obter os parâmetros de configuração através de um servidor DHCP da rede através das ferramentas:
dhclient, pump (somente Kernels 2.2.x) ou dpcpcp (somente kernels 2.0.x e 2.2.x)
hostname nome
Nome da estação de trabalho que será requisitado. (pump, dhcpcd)
leasehours leasttime
Lease time preferida em horas (pump)
leasetime leasetime
Lease time preferida em segundos (dhcpcd)
vendor vendedor
Identificador do vendedor (dhcpcd)
cliente identificação
Identificação do cliente (dhcpcd)
O método bootp
Este método pode ser usado para obter um endereço via bootp:
bootfile arquivo
Diz ao servidor para utilizar arquivo como arquivo de inicialização
server endereço
Especifica o endereço do servidor bootp.
hwaddr endereço
Usa endereço como endereço de hardware no lugar do endereço original.
Algumas opções se aplicam a todas as interfaces e são as seguintes:
noauto
Não configura automaticamente a interface quando o ifup ou ifdown são executados com a opção -a (normalmente usada
durante a inicialização ou desligamento do sistema).
pre-up comando
Executa o comando antes da inicialização da interface.
up comando
Executa o comando após a interface ser iniciada.
down comando
Executa o comando antes de desativar a interface.
pre-down comando
Executa o comando após desativar a interface.
Os comandos que são executados através das opções up, pre-up e down podem aparecer várias vezes na mesma interface, eles
são executados na seqüência que aparecem. Note que se um dos comandos falharem, nenhum dos outros será executado. Você pode ter
certeza que os próximos comandos serão executados adicionando || true ao final da linha de comando.
Onde:
Sistema de Arquivos
Partição que deseja montar.
Ponto de montagem
Diretório do GNU/Linux onde a partição montada será acessada.
Tipo
Tipo de sistema de arquivos usado na partição que será montada. Para partições GNU/Linux use ext2,ext3 ou reiserfs, para
partições DOS (sem nomes extensos de arquivos) use msdos, para partições Win 95 (com suporte a nomes extensos de arquivos) use
vfat, para unidades de CD-ROM use iso9660.
Opções
Especifica as opções usadas com o sistema de arquivos. Abaixo, algumas opções de montagem para ext2/3 (a lista completa
pode ser encontrada na página de manual do mount):
defaults - Utiliza valores padrões de montagem.
noauto - Não monta os sistemas de arquivos durante a inicialização (útil para CD-ROMS e disquetes).
ro - Monta como somente leitura.
user - Permite que usuários montem o sistema de arquivos (não recomendado por motivos de segurança).
sync é recomendado para uso com discos removíveis (disquetes, zip drives, etc) para que os dados sejam gravados
imediatamente na unidade (caso não seja usada, você deve usar o comando sync antes de retirar o disquete da unidade.
Dump
Especifica a frequência de backup feita com o programa dump no sistema de arquivos. 0 desativa o backup.
Ordem
Define a ordem que os sistemas de arquivos serão verificados na inicialização do sistema. Se usar 0, o sistema de arquivos não
é verificado. O sistema de arquivos raíz que deverá ser verificado primeiro é o raíz "/" (a não ser que você tenha um sistema de arquivos
de outro tipo que não é montado dentro do diretório raíz e possui seu suporte embutido no kernel) .
Após configurar o /etc/fstab, basta digitar o comando mount /dev/hdg ou mount /cdrom para que a unidade de CD-ROM seja
montada. Você deve ter notado que não é necessário especificar o sistema de arquivos da partição pois o mount verificará se ele já existe
no /etc/fstab e caso existir, usará as opções especificadas neste arquivo. Para maiores detalhes veja as páginas de manual fstab e mount.
/etc/hosts
O arquivo /etc/hosts faz o relacionamento entre um nome de computador e endereço IP local. Recomendado para IPs
constantemente acessados e para colocação de endereços de virtual hosts (quando deseja referir pelo nome ao invés de IP). A inclusão de
um computador neste arquivo dispenda a consulta de um servidor de nomes para obter um endereço IP, sendo muito útil para máquinas
que são acessadas frequentemente. A desvantagem de fazer isto é que você mesmo precisará manter este arquivo atualizado e se o
endereço IP de algum computador for modificado, esta alteração deverá ser feita em cada um dos arquivos hosts das máquinas da rede.
Em um sistema bem gerenciado, os únicos endereços de computadores que aparecerão neste arquivo serão da interface loopback e os
nomes de computadores.
# /etc/hosts
127.0.0.1 localhost loopback
192.168.99.1 maquina.dominio.com.br
Você pode especificar mais que um nome de computador por linha como demonstrada pela primeira linha, a que identifica a
interface loopback. Certifique-se de que a entrada do nome de domínio neste arquivo aponta para a interface de rede e não para a
interface loopback, ou terá problema com o comportamento de alguns serviços.
OBS: Caso encontre problemas de lentidão para resolver nomes e até para executar os aplicativos (como o mc, etc), verifique se
existem erros neste arquivo de configuração.
Estes sintomas se confundem com erros de memória ou outro erro qualquer de configuração de hardware, e somem quando a
interface de rede é desativada (a com o IP não loopback). Isto é causados somente pela má configuração do arquivo /etc/hosts. O bom
/etc/hostname
Arquivo lido pelo utilitário hostname para definir o nome de sua estação de trabalho.
/etc/issue
Contém um texto ou mensagem que será mostrada antes do login do sistema.
/etc/motd
Mostra um texto ou mensagem após o usuário se logar com sucesso no sistema. Também é usado pelo telnet, ftp, e outros
servidores que requerem autenticação do usuário (nome e senha).
/etc/passwd
É o arquivo mais cobiçado por Hackers porque contém os dados pessoais do usuário como o login, uid, telefone e senha (caso
seu sistema esteja usando senhas ocultas, a senha terá um * no lugar e as senhas reais estarão armazenadas no arquivo /etc/shadow).
/etc/protocols
O arquivo /etc/protocols é um banco de dados que mapeia números de identificação de protocolos novamente em nomes de
protocolos. Isto é usado por programadores para permiti-los especificar protocolos por nomes em seus programas e também por alguns
programas tal como tcpdump permitindo-os mostrar nomes ao invés de números em sua saída. A sintaxe geral deste arquivo é:
nomeprotocolo número apelidos
/etc/resolv.conf
O /etc/resolv.conf é o arquivo de configuração principal do código do resolvedor de nomes. Seu formato é um arquivo texto
simples com um parâmetro por linha e o endereço de servidores DNS externos são especificados nele. Existem três palavras chaves
normalmente usadas que são:
domain
Especifica o nome do domínio local.
search
Especifica uma lista de nomes de domínio alternativos ao procurar por um computador, separados por espaços. A linha search
pode conter no máximo 6 domínios ou 256 caracteres.
nameserver
Especifica o endereço IP de um servidor de nomes de domínio para resolução de nomes. Pode ser usado várias vezes.
Este exemplo especifica que o nome de domínio a adicionar ao nome não qualificado (i.e. hostnames sem o domínio) é
linux.org.br e que se o computador não for encontrado naquele domínio então a procura segue para o domínio linux.org diretamente.
Duas linhas de nomes de servidores foram especificadas, cada uma pode ser chamada pelo código resolvedor de nomes para resolver o
nome.
/etc/services
O arquivo /etc/services é um banco de dados simples que associa um nome amigável a humanos a uma porta de serviço
amigável a máquinas. É um arquivo texto de formato muito simples, cada linha representa um item no banco de dados. Cada item é
dividido em três campos separados por qualquer número de espaços em branco (tab ou espaços). Os campos são:
nome porta/protocolo apelido # comentário
nome
Uma palavra simples que representa o nome do serviço sendo descrito.
porta - Um número que especifica o número da porta em que o serviço estará disponível. Muitos dos serviços comuns tem
designados um número de serviço. Estes estão descritos no RFC-1340.
protocolo - Este sub-campo pode ser ajustado para tcp ou udp. É importante notar que o item 18/tcp é muito diferente do item
18/udp e que não existe razão técnica porque o mesmo serviço precisa existir em ambos. Normalmente o senso comum prevalece e que
somente se um serviço esta disponível em ambos os protocolos tcp e udp, você precisará especificar ambos.
apelidos
Outros nomes podem ser usados para se referir a entrada deste serviço.
Comentário
Qualquer texto aparecendo em uma linha após um caracter "#" é ignorado e tratado como comentário.
/etc/shadow
Este arquivo armazena as senhas criptografadas caso estiver usando o recurso de senhas ocultas. Este arquivo somente pode ser
lido pelo usuário root.
/etc/shells
Contém uma lista de interpretadores de comando (shells) válidos no sistema.
Permissões de arquivos
A permissão de acesso protege o sistema de arquivos Linux do acesso indevido de pessoas ou programas não autorizados. A
permissão de acesso do Linux também impede que um programa mal intencionado, por exemplo, apague um arquivo que não deve,
envie arquivos para outra pessoa ou forneça acesso da rede para que outros usuários invadam o sistema. O sistema GNU/Linux é muito
seguro e como qualquer outro sistema seguro e confiável impede que usuários iniciantes (ou mal intencionados) instalem programas
enviados por terceiros sem saber para que eles realmente servem e causem danos irreversíveis em seus arquivos, seu micro ou sua
empresa.
O princípio da segurança no sistema de arquivos GNU/Linux é definir o acesso aos arquivos por donos, grupos e outros
usuários:
dono
É a pessoa que criou o arquivo ou o diretório. O nome do dono do arquivo/diretório é o mesmo do usuário usado para entrar no
sistema GNU/Linux. Somente o dono pode modificar as permissões de acesso do arquivo. As permissões de acesso do dono de um
arquivo somente se aplicam ao dono do arquivo/diretório. A identificação do dono também é chamada de user id (UID). A identificação
de usuário e o nome do grupo que pertence são armazenadas respectivamente nos arquivos /etc/passwd e /etc/group.
Grupo
Para permitir que vários usuários diferentes tivessem acesso a um mesmo arquivo (já que somente o dono poderia ter acesso ao
arquivo), este recurso foi criado. Cada usuário pode fazer parte de um ou mais grupos e então acessar arquivos que pertençam ao mesmo
grupo que o seu (mesmo que estes arquivos tenham outro dono). Por padrão, quando um novo usuário é criado, o grupo ele pertencerá
será o mesmo de seu grupo primário. A identificação do grupo é chamada de gid (group id).
Um usuário pode pertencer a um ou mais grupos. Para detalhes de como incluir o usuário em mais grupos veja o comando
adduser.
Outros
É a categoria de usuários que não são donos ou não pertencem ao grupo do arquivo. Cada um dos tipos acima possuem três
tipos básicos de permissões de acesso que serão vistas na próxima seção.
Quanto aos tipos de permissões que se aplicam ao dono, grupo e outros usuários, temos 3 permissões básicas:
Gerenciamento de Pacotes
Pacotes são programas colocados dentro de um arquivo incluindo arquivos necessários para a instalação do programa, um
sistemas de listagem/checagem de dependências, scripts de automatização para remoção parcial/total do pacote, listagem de arquivos,
etc.
O dpkg (Debian Package) é o programa responsável pelo gerenciamento de pacotes em sistemas Debian. Sua operação é feita
Instalação de aplicativos
O apt é sistema de gerenciamento de pacotes de programas que possui resolução automática de dependências entre pacotes,
método fácil de instalação de pacotes, facilidade de operação, permite atualizar facilmente sua distribuição, etc. Ele funciona através de
linha de comando sendo bastante fácil de usar. Mesmo assim, existem interfaces gráficas para o apt como o synaptic (modo gráfico) e o
aptitude (modo texto) que permitem poderosas manipulações de pacotes sugeridos, etc.
O apt pode utilizar tanto com arquivos locais como remotos na instalação ou atualização, desta maneira é possível atualizar toda
a sua distribuição Debian via ftp ou http com apenas 2 simples comandos!
É recomendável o uso do método apt no programa dselect pois ele permite a ordem correta de instalação de pacotes e checagem
e resolução de dependências, etc. Devido a sua facilidade de operação, o apt é o método preferido para os usuários manipularem pacotes
da Debian.
O apt é exclusivo da distribuição Debian e distribuições baseadas nela e tem por objetivo tornar a manipulação de pacotes
poderosa por qualquer pessoa.
O arquivo /etc/apt/sources.list
Este arquivo contém os locais onde o apt encontrará os pacotes, a distribuição que será verificada (stable, testing, unstable,
Woody, Sarge) e a seção que será copiada (main, non-free, contrib, non-US).
Etch(Debian 4.0) e Lenny(4.1) são os nomes das versões enquanto stable e unstable são links para as versões estável e testing
respectivamente. Se desejar usar sempre uma distribuição estável (como a Etch), modifique o arquivo sources.list e coloque etch como
distribuição.
Caso você desejar estar sempre atualizado mas é uma pessoa cuidadosa e deseja ter sempre a última distribuição estável da
Debian, coloque stable como versão. Assim que a nova versão for lançada, os links que apontam de stable para Etch serão alterados
apontando para Lenny e você terá seu sistema atualizado.
Abaixo um exemplo simples de arquivo /etc/apt/sources.list com explicação das seções:
deb http://www.debian.org/debian stable main contrib non-free
deb http://nonus.debian.org/debian-non-US stable non-US
Você pode interpretar cada parte da seguinte maneira:
• deb - Identifica um pacote da Debian. A palavra deb-src identifica o código fonte.
• http://www.debian.org/debian - Método de acesso aos arquivos da Debian, site e diretório principal. O caminho pode ser
http://, ftp://, file:/.
• stable - Local onde serão procurados arquivos para atualização. Você pode tanto usar o nome de sua distribuição (Etch,
Lenny) ou sua classificação (stable, testing). Note que unstable é recomendada somente para desenvolvedores, máquinas de testes e se
você tem conhecimentos para corrigir problemas. Nunca utilize unstable em ambientes de produção ou servidores críticos, use a stable.
• main contrib non-us - Seções que serão verificadas no site remoto. Note que tudo especificado após o nome da distribuição
será interpretado como sendo as seções dos arquivos (main, non-free, contrib, non-US). As linhas são processadas na ordem que estão
no arquivo, então é recomendável colocar as linhas que fazem referência a pacotes locais primeiro e mirrors mais perto de você para ter
um melhor aproveitamento de banda. O caminho percorrido pelo apt para chegar aos arquivos será o seguinte:
http://www.debian.org/debian/dists/stable/main/binary-i386
http://www.debian.org/debian/dists/stable/non-free/binary-i386
http://www.debian.org/debian/dists/stable/contrib/binary-i386
Você notou que o diretório dists foi adicionado entre http: //www.debian.org/debian e stable, enquanto as seções main, non-free
e contrib são processadas separadamente e finalizando com o caminho binary-[arquitetura], onde [arquitetura] pode ser i386, alpha,
sparc, powerpc, arm, etc. dependendo do seu sistema. Entendendo isto, você poderá manipular o arquivo sources.list facilmente.
OBS: Caso tenha mais de uma linha em seu arquivo sources.list de onde um pacote pode ser instalado, ele será baixado da
primeira encontrada no arquivo. Ë recomendável colocar primeiro repositórios locais ou mais perto de você, como recomendado nesta
seção.
Segue abaixo uma relação de servidores que podem ser colocados em seu arquivo sources.list:
A opção -f faz com que o apt verifique e corrija automaticamente problemas de dependências entre pacotes. Recomendo executa
o comando apt-get -f –dry-run dist-upgrade|less para ver o que vai acontecer sem atualizar a distribuição, se tudo ocorrer bem, retire o --
dry-run e vá em frente.
A distribuição usada na atualização pode ser:
Servidor dhcp
Quando temos uma rede pequena, somente com alguns poucos dispositivos, é possível você associar um
IP fixo a cada máquina - e saber quem é quem. Porém quando a rede cresce, fica difícil manter na memória
todos os ips da rede.
Conceitos e instalação
O DHCP (Dynamic Host Configuration Protocol) é definido na RFC 2131
(http://www.ietf.org/rfc/rfc2131.txt) e tem como objetivo definir um modo de passar informações para outros
hosts em uma rede TCP/IP. É baseado num antigo protocolo chamado BOOTP (ainda usado em boot de
estações diskless).
Frequentemente o DHCP é usado para fornecer dinamicamente um endereço IP para outros dispositivos de rede, porém o DHCP
pode fornecer outras informações, tais como: IP, DNS, nomes de domínios, gateways e até uma imagem do sistema operacional para
que a máquina inicie.
Em Linux, o servidor DHCP mais utilizado é o ISC-DHCPD, da Internet Software Consortium
(http://www.isc.org), de configuração fácil.
Uma característica interessante do servidor DHCP é que podemos ter hosts com IPS dinâmicos mas que sempre pagarão o
mesmo IP. Essa configuração é feita usando sub-blocos “host” dentro do bloco subnet. Ao declarar um bloco host é necessário fornecer
Servidor de DNS
O DNS (Domain Name System - Sistema de Nomes de Domínios) é um sistema de gerenciamento de nomes. O servidor DNS
traduz nomes para os endereços IP e endereços IP para nomes respectivos, e permitindo a localização de hosts em um domínio
determinado. Num sistema livre o serviço é implementado pelo software BIND.
Conceitos e instalação
Um software de DNS é importantíssimo para as redes locais. quando um cliente tenta acessar um site o sistema do cliente faz
uma consulta a um servidor de dns para descobrir o endereço IP do servidor do site. Caso essa consulta seja feita em um servidor de
DNS distante isso irá acarretar em uma demora na conexão e posteriormente uma insatisfação de seu cliente.
O servidor de DNS pode fazer cache de consultas, ou seja, caso um cliente tente resolver um domínio e posteriormente outro
faça outra consulta sobre o mesmo domínio, este segundo irá se beneficiar da consulta que o primeiro fez e o servidor de DNS irá fazer
somente uma consulta para fora da sua rede local, economizando recursos.
No linux há varios softwares servidores de DNS, o mais conhecido entre eles é o BIND(Berkeley Internet Name Domain). Em
nosso curso usaremos o BIND na versão 9.
Para instalar basta usar o apt-get:
apt-get install bind9
O bind assim que instalado já está pronto para ser usado como servidor de DNS
Configuração avançada
O arquivo principal de configuração do BIND é o “/etc/bind/named.conf”, porém neste curso iremos fazer um servidor de DNS
caching-only( um servidor que apenas resolve nomes e faz cache de consultas), para isso iremos fazer nossas alterações somente em
algumas opções do BIND.
O arquivo do BIND que iremos editar é o “/etc/bind/named.conf.options”. Esse arquivo, por padrão vem com o seguite
conteúdo:
options {
directory "/var/cache/bind";
auth-nxdomain no;
listen-on-v6 { any; };
};
Conceitos
A World Wide Web (WWW) é, sem a menor dúvida, a forma mais conhecida da internet. Tanto isso é verdade, que os leigos
tem uma certa dificuldade em entender que a internet não se resume ao www. Sua popularidade e crescimento são explicados pela
grande variedade de assuntos encontrados nela, pela facilidade de busca, simples entendimento, baixo custo e, via de regra, privacidade.
Em decorrência dessa grande procura alguns efeitos colaterais ocorrem. Não é incomum ouvir as pessoas dizerem que "a internet
está lenta", ou os administradores de rede observarem seus backbones atingirem seus limites em horários de pico. Do lado dos
servidores e ISPs (Internet Service Providers) também existe um lado que poucas pessoas pensam. Somente quem já passou pelo "Efeito
Slashdot1" sabe do que estou falando. Em um momento de sobrecarga dos servidores, como ocorreu na última copa do mundo ou no
tenebroso 11 de setembro, um sistema de caches bem planejado e distribuído seria muito bem visto pelos grandes portais.
A utilização de sistemas de cache, como o Squid, têm se mostrado excelentes para aliviar esses sintomas, reduzindo o tráfego na
rede e, conseqüentemente, a latência da mesma.
Toda a idéia por trás de um sistema de caching é criar um grande banco de dados onde os sites mais populares ou acessados
recentemente são armazenados para futuras consultas. Isso significa que se 10 usuários da sua rede tentarem acessar um mesmo site ao
mesmo tempo, somente uma das conexões realmente irá ser feita a esse site. Todas as outras 9 vão se aproveitar do primeiro acesso e
utilizar a página já em memória. Isso é um enorme ganho de desempenho para seu backbone local, para o backbone do ISP onde o site
está armazenado e para o servidor que hospeda o mesmo.
Além disso, sua banda fica livre para que sites menos acessados, ou que não estejam no cache sejam baixados com maior
velocidade.
Com um sistema de caching bem planejado e mantido, todos tem a ganhar.
São vários os benefícios entre eles podemos citar:
• Velocidade de acesso
A melhor forma de verificar se o seu cache está sendo eficiente é pela velocidade. Um sistema de cache que não agrega
velocidade não está cumprindo o seu papel.
• Disponibilidade
De nada adianta um sistema veloz disponível apenas 2 horas por dia, ou mesmo que precise de um reboot a cada 2 semanas. Em
casos de grandes instalações, ainda é preciso ir mais a fundo, buscando a altíssima disponibilidade. Redundância de servidores, backup,
eliminação de ponto único de falha e disaster recover são uma exigência.
• Transparência ou Ostensividade
São conceitos específicos e que se adaptam a cada caso. Grandes instalações, ISPs e empresas não preocupadas com que seus
usuários vêem ou fazem na internet devem preferir a transparência, onde o usuário desconhece ou não se sente afetado (exceto pelo
ganho de velocidade) pela presença de um cache.
Por outro lado, empresas com uma política de segurança mais rígida, órgãos com informações críticas, ou mesmo pais querendo
controlar o acesso de seus filhos a alguns sites, vão preferir a ostensividade.
• Capacidade de trabalhar com redes heterogêneas.
Alguns sistemas de proxy/cache funcionam baseados com sistemas de autenticação especiais, feitos para rodar somente em uma
plataforma, fazem integração com o serviço de diretórios daquele ou desse sistema ou exigem que o usuário esteja rodando a versão
XYZ do fabricante ABC e deixam todos os outros a ver navios. Em uma instalação séria, é preciso que usuários de todas as plataformas
que saibam como trabalhar com HTTP sejam bem atendidos.
• Simplicidade
Deixando um pouco de lado o usuário e focando no administrador, é preciso ter consciência de que um sistema bom é um
sistema fácil de administrar. O mais rápido, mais disponível e mais abrangente sistema de caching é totalmente inútil se somente uma
pessoa no mundo souber lidar com ele.
Podemos dizer que existem dois grandes motivos pelo qual se deve utilizar um PROXY/CACHE:
• Controle de acesso
Com a internet cada vez mais acessível a pequenas e médias empresas, um número imenso de pessoas está se interligando a
internet. Além de todos os benefícios trazidos por ela, como informação em tempo real, comunicação mundial a baixo custo, contato
com possíveis clientes e fornecedores por todo o mundo, a mesma trouxe alguns problemas.
As pessoas tendem a passar cada vez mais tempo navegando por sites não relativos ao seu trabalho primário, acessam sites que
não condizem com a política da empresa, utilizam a banda de internet destinada a serviços como WEB ou VPN e podem, em muitos
casos, acabar infectando toda a rede da empresa com vírus e worms que são adquiridos em sites impróprios. Isso sem contar na ameaça
sempre presente de propagação de downloads de softwares piratas e músicas, fatores que podem complicar a vida de uma empresa
durante fiscalizações.
De acordo com a Rede Nacional de Ensino e Pesquisa (RNP) , 65% da largura de banda das empresas é utilizada em navegação
Instalação
Em sistemas debian a instalação é muito simples: apt-get install squid
Configuração
O arquivo de configuração do squid é o squid.conf, normalmente ele se encontra em /etc/squid/squid.conf
Pode parecer fútil, mas uma limpeza inicial no arquivo squid.conf pode ser bem útil. O arquivo de configuração original tem, em
média um pouco mais de 2000 linhas. Porém para quem ainda está aprendendo a configurar é bom dar uma lida no arquivo todo.
# cp squid.conf squid.conf.original
# egrep −v "^#|^$" squid.conf.original > squid.conf
As regras contidas no squid.conf são interpretadas de cima para baixo. Ou seja, a ordem de onde você as coloca interfere no
resultado.
Proxy transparente
Esse recurso é muito útil para evitar que seus usuários "burlem" o proxy removendo as configurações do browser. Eles serão
obrigados a passar pelo proxy, mesmo que as máquinas não estejam configuradas para tal.
Extremamente recomendado, principalmente em casos de bloqueio de sites ou limitação de banda. Experiências pessoais
comprovam que usuários com um pouco mais de conhecimentos irão remover a configuração de proxy assim que o administrador sair
da sala, seja por ignorância das funcionalidades, seja por medo de ser auditado ou simplesmente por má conduta.
Para ser possível o uso de proxy transparente com o Squid, o firewall deve ser configurado adequadamente. Algumas pessoas
desejam trabalhar ao mesmo tempo com autenticação e proxy transparente. Isso é possível de ser feito com uma interação entre o
firewall e um cgi, ou algo do gênero.
ACLs
O conceito de ACL é muito útil, por nos permitir trabalhar com níveis de acesso baseados em diversas informações. Não é
incomum que em uma instalação de Squid, a diretoria possa acessar qualquer site, a gerência não possa acessar determinados sites e os
"peões" tenham acesso apenas ao site da empresa e de parceiros. Graças ao uso de ACLs e um pouco de imaginação e suor, podemos
fazer todas essas restrições.
Todas as configurações de usuários, grupos, horários e SITES são configuradas em ACLs. A ordem em que as ACLs aparecem é
muito importante, por isso a ACL que bloqueia os sites deve ser a primeira a aparecer.
Procure no seu squid.conf onde começam a ser descritas as ACLs. Geralmente a primeira ACL a aparecer é:
acl all src 0.0.0.0/0.0.0.0
As ACLs podem ser escritas tendo como base uma série de propriedades contidas nos cabeçalhos HTTP. Entre eles podemos
Exemplo de Configuração
Eis um exemplo de arquivo de configuração do squid.conf com explicações importantes no final. Neste arquivo de exemplo
suprimimos algumas linhas para explicá-las mas detalhadamente no final.
OBS.: O squid lê o arquivo de configuração de cima para baixo. E em muitos casos a ordem das linhas faz diferenca.
(Opções de rede)
http_port 3128 transparent
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
hierarchy_stoplist cgi-bin ?
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
(opções de logging, memória e disco)
cache_mem 800 MB
cache_dir diskd /var/spool/squid 10000 16 256
access_log /var/log/squid/access.log squid
hosts_file /etc/hosts
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl SSL_ports port 563
acl SSL_ports port 873
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 631
acl Safe_ports port 873
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
(Explicações sobre acls)
http_reply_access allow all
always_direct allow all
Opções de rede
• http_port 3128 transparent
Esta opção especifica a porta que o squid irá escutar. Por padrão é a 3128. O parâmetro “transparent” especifica que o squid
poderá fazer proxy transparente.
• acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
Essas duas linhas faz com que o squid não faça cache de urls que fazem parte de uma consulta HTTP. Como essas urls não são
na verdade arquivos não é uma boa idéia cacheá-los.
Strings significam caracteres que devem serem compatíveis com o tipoACL usado. podemos usar várias Strings e separá-las por
espaços e colocá-la toda em uma mesma linha. Caso uma ACL esteja ficando grande podemos colocar as strings em um arquivo(uma
string por linha) separado.
Mas vamos aprender melhor como definir ACLs por exemplos explicando os tipos de ACLs:
• por endereço IP de origem
acl porip src 192.168.99.10 10.1.1.0/24
Essa regra irá “bater” com todos os acessos cujos endereços IPS dos clientes seja o IP 192.168.99.10 ou a rede 10.1.1.0/24.
• por endereço IP de destino
acl poripdestino dst 200.200.200.1 201.4.4.0/24
Essa ACL retornará verdadeiro caso o endereço IP de destino seja o IP 200.200.200.1 ou a rede 201.4.4.0/24
• endereço MAC do cliente
acl pormac arp 00:0a:0b:0c:0d:0e
Essa ACL so retornará verdadeiro caso o endereço MAC seja o MAC 00:0a:0b:0c:0d:0e.
Lembrando que para fazer ACLs de MAC é necessário que o cliente esteja na mesma rede que o squid, pois senão o squid não
será capaz de identificar o endereço MAC.
• domínio de destino
acl pordominio dstdomain uol.com.br
Essa regra só irá “bater” caso o site que o cliente esteja querendo acessar faça parte do domínio uol.com.br
• por horário
Para especificar o horário precisaremos aprender as siglas dos dias da semana:
S –Domingo(Sunday) , M – Segunda-feira(Monday), T – Terça-Feira(Tuesday), W – (Quarta-feira(Wednesday), H -Quinta-
feira(Thursday), F – Sexta-feira(Friday), A - Sábado(Saturday).
As ACLs por horário têm o seguinte formato
Essa ACL irá conferir com todos os acessos nos dias de Segunda a Sexta e no horário das 12:00 as 13:00.
Essa ACL irá conferir com todas as url contenham essas extensões de arquivos.
Agora que aprendemos como construir ACLs vamos usá-las para controlar o acesso a internet através de nosso proxy squid. Para
isso usaremos a tag(linha de configuração) http_access.
http_access allow|deny acl1 [acl2 [acl3 ] ]
Sendo que allow ou deny deve ser mencionado para bloquear ou permitir o acesso. Caso coloquemos mais de uma ACL na linha
http_access o acesso só será permitido ou bloqueado caso todas as ACLs “batam”. Caso quisermos que uma regra não case com uma
ACL podemos colocar um “!” antes da ACL.
Imagine o caso simples, todos os clientes de nossa rede podem acessar a internet sem restrições de acesso:
acl mynetwork src 192.168.99.0/24
http_access allow mynetworks
http_access deny all
Simples. Vamos agora implementar uma restrição onde os usuários só podem acessar o domínio orkut.com no horário de
almoço.
acl mynetwork src 192.168.99.0/24
acl orkut dst_domain orkut.com
acl horariopermitido time MTWHF 12:00-14:00
http_access deny orkut !horariopermitido
http_access allow mynetworks
http_access deny all
Mais ou menos. Observe que agora estamos usando para bloquear o orkut em horário não permitido. Agora vamos aumentar o
tamanho, imagine que um cliente deve não ter nenhum acesso, um cliente privilegiado não dever ter restrição alguma. E
devemos bloquear várias extensões de arquivos.
acl mynetwork src 192.168.99.0/24
acl orkut dst_domain orkut.com
acl horariopermitido time MTWHF 12:00-14:00
acl privilegiado src 192.168.99.2
acl semacesso arp 00:01:02:03:04:05
acl extensoes url_regex -i “/etc/extensoes”
Observe que a ordem em que colocamos as linhas http_access são importantes. Se a linha “http_access allow privilegiado”
viesse primeiro aconteceria que se o cliente que não deve ter acesso colocasse o IP em sua máquina ele teria acesso facilmente.
Observe também que sempre no final de nossas regras sempre colocamos “http_access deny all” pois o cliente que não pertence
a nossa rede(http_access allow mynetworks) não deve ter acesso. Observe também que não foi necessário especificar a ACL all pois ela
já é declarada no squid.conf(acl all src 0.0.0.0/0.0.0.0).
Conceitos
O SMB é um acrônimo para Server Message Block, ou Servidor de Bloco de Mensagens. Ele é o protocolo usado em redes
Microsoft para compartilhamento de recursos, como impressoras e discos.
O samba é composto por uma série de programas que permitem que estações clientes acessem discos e impressoras
compartilhadas em um servidor usando os protocolos SMB e CIFS(Common Internet Filesystem). Através desses protocolos
um servidor Linux comporta-se como em servidor LAN Server ou Windows NT. Desta forma, os recursos compartilhados
podem ser acessados por uma série de clientes na rede.
Workgroups
Um grupo de trabalho é uma coleção de máquinas que implementam o protocolo NetBIOS. Não existe hierarquia de máquinas
dentro de um grupo de trabalho. Cada Computador é dono e responsável por seus próprios recursos. Não existe gerenciamento
centralizado de usuários, senhas ou permissões.
É claro que se pode exigir autenticação por usuário/senha no acesso aos recursos. Mas não existe nada que impeça que um
usuário libere totalmente o acesso aos recursos de sua máquina.
Domínios
Os domínios são workgroups onde existem uma hierarquia, ou separação entre clientes e servidores, sendo que essa hierarquia é
garantida pelo protocolo.
A primeira adição ao conceito de workgroups é o navegador-meste de domínios, que tem de ser indicado explicitamente pelo
administrador. Compeensivelmente, essa função é acumulada pelo PDC.
Um outro aspecto dos domínios é o login do domínio. Isso faz mais sentido quando as máquinas clientes são windows. Para
entrar no domínio, o usuário precisa digitar um usuário/senha válidos, do contrário não poderá ter acesso a nenhum servidor SMB, e
talvez nem à sua própria máquina. Note como isso é diferente de um workgroup onde basta digitar um par usuário/senha no windows
que terá acesso a todos os recursos da rede.
Outro aspecto do login de domínio é o profile, que poderá ficar armazenado no servidor de domínio. Seja qual for a máquina que
o usuário estiver logado, receberá seu próprio ambiente de trabalho, com letras e cores de seu gosto e com as restrições impostas pelo
administrador.
O domínio permite a agregação de servidores com administração centralizada. Ou seja, um computador pode ser definido como
servidor pertencente ao domínio. O acesso dos usuários aos recursos do servidor é cadastrado no servidor.
Instalação
A instalação é simples baseando-se que você está usando o apt-get install samba. Isso fará com que o apt instale o servidor
samba(samba-server), porém aconselha-se instalar também o pacote smbfs.
Arquivo de configuração
O arquivo de configuração do samba é o smb.conf que geralmente está localizado no diretório /etc/samba. Este arquivo é
basicamente dividido em três seções: a configuração do servidor samba(seção [global]), a configuração dos diretórios pessoais dos
usuários(seção [homes]) e as demais seções que representam os diretórios compartilhados e as impressoras. Dentro das seções podem
ser colocadas várias opções como no exemplo a seguir.
[global]
log level = 1
guest ok = no
workgroup = linux
...
[compartilhamento1]
path = /home/samba
Observe que não existem marcações de início e fim de uma seção. As opcões são lidas e são consideradas pertencentes a última
Variável Significado
%I(i maiúsculo) Endereço IP do cliente
%m Nome NetBIOS do cliente
%u Nome do usuário
%U Nome do usuário NetBIOS, pode ser diferente de %u
%g Grupo primário linux de %u
%H Diretório home de %u
%h Nome de DNS da maquina na qual o samba está rodando.
%L Nome NetBIOS do servidor samba
%v Versão do samba
%S Nome do serviço corrente
Essa configuração faria com que as maquinas windows que varressem a rede vissem por exemplo uma máquina com nome
supertux e cujo comentário é “Samba 3.0.3 em supertux”.
Níveis de segurança
Cada vez que um usuário tenta se conectar a um compartilhamento que não permite convidados, ele deve fornecer uma senha
para tornar possível a conexão. O que o SAMBA faz com a senha e consequentemente qual a estratégia ela usará para lidar com a
autenticação de usuários, e por consequência seu nível de segurança será configurado através da opção security. Há quatro opções share,
user, server e domain.
Security= share
Com este nível de segurança, se algum recurso for configurado como compartilhado, ele será compartilhado ara todo mundo. Ele
difere dos outros modos de segurança, pois nele não há restrições quanto a quem pode acessar o compartilhamento.
É possível associar uma ou mais senhas a um recurso e não por usuário, ou seja, cada diretório ou impressora poderá ter uma
senha ou mais senhas conhecidas pelos usuários autorizados.
Por exemplo, uma senha pode garantir acesso apenas leitura, enquanto outra pode garantir acesso de escrita e assim por em
diante. A segurança será mantida enquanto usuários não autorizados não descobrem a senha para um compartilhamento que não devem
ter acesso.
Security= user
Este é nível de segurança de usuário; com este método, a cada compartilhamento são designados usuários que podem acessar.
As permissões são dadas de acordo com o nome do usuário, ou através dos grupos criados. Logo após a negociação de
protocolos, a todo usuário é solicitado informar um nome de usuário e senha, e estes seriam usados para logar-se no servidor linux. O
SAMBA fará a autenticação através da validação do nome de usuário e senha com os usuários autorizados no banco de dados do
SAMBA. O servidor poderá aceitar ou não a combinação. Repare que neste estágio o servidor não tem idéia de qual compartilhamento o
cliente irá eventualmente tentar conectar, por isso, ele não só poderá basear sua decisão de aceitar ou não a combinação em nome de
usuário e senha e a máquina do cliente.
Se o servidor aceitar o nome de usuário e senha o cliente espera ser capaz de montar qualquer compartilhamento sem especificar
uma senha, pois todos os direitos de acesso são especificados na hora da conexão.
security=server
Este é o nível de segurança de servidor. É parecido com o de usuário, mas outro servidor SAMBA ou Windows é utilizado para
autenticar o usuário, normalmente outro servidor SAMBA ou Windows NT agindo como PDC na rede. Se este servidor se este servidor
tiver um nível de segurança de usuário e aceitar a senha, o SAMBA aceita a conexão do cliente. Este servidor é definido dentro da seção
global na opção “password server”, onde é fornecido seu nome NetBIOS.
Quando um cliente tenta fazer uma conexão a um compartilhamento em particular, o SAMBA valida se o usuário é realmente
security=share
interfaces = eth1, lo
bind interfaces only = Yes
[publico]
comment = Diretorio de Acesso Publico
path = /var/samba/publico
read only = No
create mask = 0666
directory mask = 0777
guest ok = Yes
Este arquivo de exemplo criou um compartilhamento típico de disco. Sendo mapeado o diretórios /var/samba/publico no
servidor SAMBA. Também foi fornecido um comentário que descreve o compartilhamento como um drive de dados e também um
nome de volume para ele.
As opções create mask e directory mask definem respectivamente as permissões de arquivos que o SAMBA criar neste diretório.
No caso este compartilhamento usará a máscara que dá permissão de leitura e escrita para os arquivos e leitura, escrita e execução para
os diretório para todos os usuários e grupos.
Lembrando que caso o diretório /var/samba/publico não exista ele deve ser criado e além disso ele deve ter permissões de escrita
por todos os usuários.
Neste compartilhamento estamos usando a opção “guest ok” que da acesso a todos os clientes sem requerer senhas. Poderíamos
incrementar a segurança neste servidor fazendo com sejam requeridas usuário e senha para o compartilhamento.
[publico]
comment = Diretorio de Acesso Publico
path = /var/samba/publico
read only = No
create mask = 0660
directory mask = 0770
valid users = @usuarios
Veja que adicionamos a opção “valid users”, o valor @usuarios especifica que todos os usuários que pertencem ao grupo
“usuarios” podem acessar este compartilhamento. Mais detalhes de sobre usuários e grupos adiante neste capítulo na seção
Gerenciamento de usuários samba.
A opção “a” especifica que uma conta está sendo adicionada e a “m” especifica que esta é uma conta de máquina.
Contas de Usuários
Da mesma forma que criamos as contas confiáveis, iremos criar também as contas do usuários(lembrando que as contas de
usuários não precisam ter o $ no final).
Criaremos o grupo usuarios, para comportar os usuários SAMBA:
É interessante que os usuários SAMBA não sejam usuários normais do linux, caso contrário, eles poderão efetuar login no shell
do servidor ou até mesmo abrir uma sessão por ssh. Então para isso vamos criar os usuário e adicioná-los ao SAMBA usando os
seguintes comandos:
adduser -g usuarios -s /bin/false –disabled-login nomedeumusuario
smbpasswd -a nomedeumusuario
Removendo Usuários
Para remover usuários, removemos tanto do banco de dados do SAMBA quanto do linux:
smpasswd -x nomedeumusuario
userdel nomedeumusuario
Após a configuração das opções será necessário criar um compartilhamento de disco chamado netlogon. Esse compartilhamento
é obrigatório e cada cliente windows deve conseguir conectar-se a ele. Além disso não pode ser public, writeable ou browseable. Esse
compartilhamento é usado pelos scripts de logons(scripts que são execultados após o processo de autenticação do usuário), que serão
explicados um pouco mais adiante.
Scripts de Logon
Os scripts de logon são scripts que são executados no cliente quando um usuário faz logon no domínio Windows. Interessante é
que esses scripts são armazenados no servidor Linux e são encaminhados através da rede ao cliente. Porém, como eles serão executados
por Sistemas Windows, ele devem conter comandos Windows.
[global]
workgroup = GNU
netbios name = supertux
server string = Supertux Linux SAMBA server
[homes]
comment = Diretorios Home
valid users = %S
read only = No
create mask = 0600
directory mask = 0700
browseable = No
[profiles]
comment = Servico de Roamming profiles na Rede
path = /var/samba/profiles
read only = No
create mask = 0600
directory mask = 0700
browseable = No
[publico]
comment = Diretorio de Acesso Publico
path = /var/samba/publico
valid users = @usuarios @financeiro
read only = No
create mask = 0666
directory mask = 0777
[financeiro]
comment = Diretorio de acesso ao financeiro
path = /var/samba/financeiro
valid users = @financeiro
read only = No
create mask = 0660
directory mask = 0770
Seção global
logon script = %G.bat
Usaremos como nome de script de logon o nome do grupo do usuário, ou seja, iremos fazer dois scripts, um para o grupo
usuarios e outro para financeiro.
logon path = \\%L\profiles\%U
O diretório do roaming profile do usuário. Como vimos antes, %L é o nome netbios do servidor(no nosso caso supertux) e %U o
nome do usuário.
logon home = \\%L\%U\profiles
O diretório Home do usuário.
domain logons = Yes
Para permitir os usuários da rede fazer logon.
os level = 100
O parâmetro “os level” é usado quando existem mais de um PDC para o dímínio, para fazer eleição de qual servidor será eleito
como PDC.
preferred master = Yes
domain master = Yes
local master = Yes
Diz ao servidor samba que ele seja o preferencialmente o PDC da rede.
admin users = root
É necessário uma conta de administrador para ingressar em um domínio, neste caso iremos usar a conta root.
hosts allow = 127.0.0.0/8, 192.168.99.0/24
Vamos permitir somente que as redes 127.0.0.0/8 e 192.168.99.0/24 possam acessar nosso servidor.
Seção Homes
valid users = %S
Vamos restringir o acesso do diretório “home” aos usuários do domínio
read only = No
Os usuários podem escrever neste diretório
create mask = 0600
Os arquivos criados pelos usuários neste compartilhamento serão criados no sistema linux como leitura e gravação somente pelo
usuário.
directory mask = 0700
Os diretórios serão criados com todas as permissões para o usuário.
browseable = No
Este compartilhamento não será visualizável pelos usuários.
Observe que não colocamos nenhuma opção path, pois os diretórios homes estão definidos nas propriedades do usuário no linux.
Ao criar um usuário no linux ele recebe um diretório home para seus arquivos pessoais. Caso não tenha sido especificado outro então
por padrão será o /home.
Compartilhamento netlogon
Conforme explicado anteriormente as opções são como o esperado.
Em nosso exemplo usamos os scripts conforme o grupo do cliente. Vamos escrever dois scripts:
• financeiro.bat
net use T: \\supertux\financeiro
net use U:\\supertux\publico
• usuarios.bat
net use U:\\supertux\publico
Compartilhamento publico
path = /var/samba/publico
Os dados serão guardados no diretório /var/samba/publico
valid users = @usuarios @financeiro
Apenas os clientes do grupos usuarios e financeiro terão acesso a este compartilhamento.
create mask = 0666
Observe que os clientes podem pertencer a grupos diferentes ou seja se colocar-mos permissões diferentes poderá ocorrer que o
arquivo que um cliente criar outro não possa acessar.
directory mask = 0777
O mesmo que acontece com os arquivos.
Compartilhamento financeiro
path = /var/samba/financeiro
Os dados serão guardados no diretório /var/samba/financeiro
valid users = @financeiro
Apenas os clientes do grupo financeiro poderão acessar este compartilhamento.
create mask = 0660
Veja que neste compartilhamento usamos a máscara que da permissão de leitura e escrita pelo usuário e pelo grupo.
directory mask = 0770
O mesmo para a criação de diretórios.
Na aba “Nome do Computador” basta clicar em “ID da Rede”. No campo “Nome do computador” preencher com o nome do
usuário que acabamos de criar(torvalds). E no campo “Membro de” preencher com o nome do nosso domínio,no nosso exemplo GNU e
clicar em “Ok”.
Ainda não ingressamos a máquina Windows no nosso domínio. Para poder continuar é necessário uma conta de administrador
do nosso domínio. Como nosso servidor é Linux/SAMBA já temos uma conta administrativa, o root. Basta agora fornecer usuário root
e a senha do root e prosseguir.
Agora deve aparecer na tela a mensagem “Bem vindo ao domínio GNU.” Basta reiniciar o computador e pronto. Quando o
computador reiniciar a tela de login irá mudar e a partir de agora irá aparecer a opção “Fazer logon em” que deve ser sempre o nome do
domínio da rede. A partir de agora qualquer usuário que seja cadastrado no SAMBA deve ter acesso a seus arquivos nesta máquina.
Conceitos
Tipos de firewalls
Existem basicamente dois tipos de firewalls:
Em nível de aplicação - Este tipo de firewall analisam o conteúdo do pacote para tomar suas decisões de filtragem. Firewalls
deste tipo são mais intrusivos (pois analisam o conteúdo de tudo que passa por ele) e permitem um controle relacionado com o conteúdo
do tráfego. Alguns firewalls em nível de aplicação combinam recursos básicos existentes em firewalls em nível de pacotes combinando
as funcionalidade de controle de tráfego/controle de acesso em uma só ferramenta. Servidores proxy, como o squid, são um exemplo
deste tipo de firewall.
A nível de pacotes - Este tipo de firewall toma as decisões baseadas nos parâmetros do pacote, como porta/endereço de
origem/destino, estado da conexão, e outros parâmetros do pacote. O firewall então pode negar o pacote (DROP) ou deixar o pacote
passar (ACCEPT). O iptables é um excelente firewall que se encaixa nesta categoria. Firewall em nível de pacotes é o assunto explicado
nesta seção do guia mas será apresentada uma explicação breve sobre o funcionamento de análise de strings do iptables.
Os dois tipos de firewalls podem ser usados em conjunto para fornecer uma camada dupla de segurança no acesso as suas
máquinas/máquinas clientes.
O que proteger?
Antes de iniciar a construção do firewall é bom pensar nos seguintes pontos:
Quais serviços precisamos proteger. Serviços que devem ter acesso garantido a usuários externos e quais serão bloqueados a
todas/determinadas máquinas. É recomendável bloquear o acesso a todas portas menores que 1024 por executarem serviços que rodam
com privilégio de usuário root, e autorizar somente o acesso as portas que realmente deseja (configuração restritiva nesta faixa de
portas).
E que tipo de conexões eu posso deixar passar e quais bloquear. Serviços com autenticação em texto plano e potencialmente
inseguros como rlogin, telnet, ftp, NFS, DNS, LDAP, SMTP RCP, X-Window são serviços que devem ser ter acesso garantido somente
para máquinas/redes que você confia. Estes serviços podem não ser só usados para tentativa de acesso ao seu sistema, mas também
como forma de atacar outras pessoas aproveitando-se de problemas de configuração. A configuração do firewall ajuda a prevenir isso,
mesmo se um serviço estiver mal configurado e tentando enviar seus pacotes para fora, será impedido. Da mesma forma se uma
máquina Windows de sua rede for infectada por um trojan não haverá pânico: o firewall poderá estar configurado para bloquear
qualquer tentativa de conexão vinda da internet (cracker) para as máquinas de sua rede. Para cópia de arquivos via rede insegura (como
através da Internet), é recomendado o uso de serviços que utilizam criptografia para login e transferência de arquivos ou a configuração
de uma VPN.
• Que máquinas terão acesso livre e quais serão restritas.
• Que serviços deverão ter prioridade no processamento.
• Que máquinas/redes NUNCA deverão ter acesso a certas/todas máquinas.
• O volume de tráfego que o servidor manipulará. Através disso você pode ter que balancear o tráfego entre outras máquinas,
configurar proteções contra DoS, syn flood, etc.
• O que tem permissão de passar de uma rede para outra (em máquinas que atuam como roteadores/gateways de uma rede
interna).
A análise destes pontos pode determinar a complexidade do firewall, custos de implementação, prazo de desenvolvimento e
tempo de maturidade do código para implementação. Existem muitos outros pontos que podem entrar na questão de
desenvolvimento de um sistema de firewall, eles dependem do tipo de firewall que está desenvolvendo e das políticas de
segurança de sua rede.
Introdução
O Firewall é um programa que como objetivo proteger a máquina contra acessos indesejados, tráfego indesejado, proteger
serviços que estejam rodando na máquina e bloquear a passagem de coisas que você não deseja receber (como conexões vindas da
Internet para sua segura rede local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais).
No kernel do Linux 2.4, foi introduzido o firewall iptables (também chamado de netfilter) que substitui o ipchains dos kernels da
série 2.2. Este novo firewall tem como vantagem ser muito estável (assim como o ipchains e ipfwadm), confiável, permitir muita
flexibilidade na programação de regras pelo administrador do sistema, mais opções disponíveis ao administrador para controle de
tráfego, controle independente do tráfego da rede local/entre redes/interfaces devido a nova organização das etapas de roteamento de
pacotes.
O iptables é um firewall em nível de pacotes e funciona baseado no endereço/porta de origem/destino do pacote, prioridade, etc.
Políticas(policiamento) de segurança
Políticas de segurança, ou policiamento, é a ação padrão que o firewall deve fazer quando o forem analizados todas as regras e
nenhuma delas especificar uma ação que deve ser aplicada ao mesmo. Desta forma podemos prever que existem dois tipos de
piliciamentos:
1. Restritivo
No policiamento restritivo quando uma regra não coincidir com o pacote, a ação tomada é descartar o mesmo. Neste tipo de
policiamento devemos ter regras permissivas permitindo o acesso, ou seja, o que não é permitido então será negado.
2. Permissivo
No policiamento permissivo quando uma regra não coincidir com o pacote, a ação tomada é aceitar o mesmo. Neste tipo de
policiamento devemos ter regras restritivas bloqueando o acesso, ou seja, o que não é proibido então será aceito.
Do ponto de vista da segurança, policiamentos restritivos são mais seguros, pois nele é liberado todo o tráfego conhecido e os
outros tráfegos são bloquados refletindo a característica duvidosa desses tráfegos.
Regras
As regras são como comandos passados ao iptables para que ele realize uma determinada ação (como bloquear ou deixar passar
onde:
iptables – Comando para manipular as regras/chains
-A INPUT – Opção para inserir regra na chain INPUT (explicados mais adiante)
-j DROP – Opção para instruir o firewall a descartar o pacote.
Veja que nessa regra colocamos poucas opções para definir os que será descartado. Resultado, o firewall descartará todos os
pacotes ao analisar essa regra. Vejamos uma outra:
iptables -A INPUT -s 192.168.99.4 -j DROP
A opção “-s 192.168.99.4” diz somente os pacotes com ip de origem 192.168.99.4 devem “casar” com essa regra. Resultado,
somente o tráfego vindo do IP 192.168.99.4 será bloqueado. Uma mais extensa:
iptables -A INPUT -s 192.168.99.4 -p tcp –dport 80 -d 200.123.123.123 -j DROP
Faz com que somente o tráfego oriundo do IP 192.168.99.4 com destino ao IP 200.123.123.123 usando o protocolo TCP e com
porta de destino 80 será descartado, todo os outros tráfegos serão aceitos.
Chains
Os Chains são locais onde as regras do firewall definidas pelo usuário são armazenadas para operação do firewall. Existem dois
tipos de chains: os embutidos (como os chains INPUT, OUTPUT e FORWARD) e os criados pelo usuário. Os nomes dos chains
embutidos devem ser especificados sempre em maiúsculas (note que os nomes dos chains são case-sensitive, ou seja, o chain input é
completamente diferente de INPUT).
Tabelas
Tabelas são os locais usados para armazenar os chains e conjunto de regras com uma determinada característica em comum. As
tabelas podem ser referenciadas com a opção -t tabela e existem 2 tabelas principais no iptables:
• filter
filter - Esta é a tabela padrão, contém 3 chains padrões:
– INPUT - Consultado para dados que chegam a máquina
– OUTPUT - Consultado para dados que saem da máquina
– FORWARD - Consultado para dados que são redirecionados para outra interface de rede ou outra máquina.
Os chains INPUT e OUTPUT somente são atravessados por conexões indo/se originando de localhost.
OBS: Para conexões locais, somente os chains INPUT e OUTPUT são consultados na tabela filter.
• nat
nat - Usada para dados que gera outra conexão (masquerading, source nat, destination nat, port forwarding, proxy transparente
são alguns exemplos). Possui 3 chains padrões:
– PREROUTING - Consultado quando os pacotes precisam ser modificados logo que chegam. É o chain ideal para realização de
DNAT e redirecionamento de portas.
– OUTPUT - Consultado quando os pacotes gerados localmente precisam ser modificados antes de serem roteados. Este chain
somente é consultado para conexões que se originam de IPs de interfaces locais.
– POSTROUTING - Consultado quando os pacotes precisam ser modificados após o tratamento de roteamento. É o chain ideal
para realização de SNAT e IP Masquerading.
Manipulando Chains
O iptables trabalha com uma tabela de regras que é analisada uma a uma até que a última seja processada. Por padrão, se uma
Adicionando regras
Como exemplo vamos criar uma regra que bloqueia o acesso a máquina 192.168.99.2. Primeiro daremos um ping para verificar
seu funcionamento:
ping 192.168.99.2
PING 192.168.99.2(192.168.99.2): 56 data bytes
64 bytes from 192.168.99.2: icmp_seq=0 ttl=255 time=0.6 ms
64 bytes from 192.168.99.2: icmp_seq=1 ttl=255 time=0.5 ms
--- 192.168.99.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.5/0.5/0.6 ms
Ok, a máquina responde, agora vamos incluir uma regra no chain INPUT (-A INPUT) que bloqueie (-j DROP) qualquer acesso
indo ao endereço 192.168.99.2 (-d 192.168.99.2):
iptables -t filter -A INPUT -d 192.168.99.2 -j DROP
Agora verificamos um novo ping:
#ping 192.168.99.2
PING 192.168.99.2 (192.168.99.2): 56 data bytes
--- 192.168.99.2 ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss
Desta vez a máquina 192.168.99.2 não respondeu, pois todos os pacotes com o destino 192.168.99.2 (-d 192.168.99.2 ) são
rejeitados (-j DROP). A opção -A é usada para adicionar novas regras no final do chain. Além de -j DROP que serve para rejeitar os
pacotes, podemos também usar -j ACCEPT para aceitar pacotes. A opção -j é chamada de alvo da regra ou somente alvo pois define o
destino do pacote que atravessa a regra.
OBS2: - A tabela filter será usada como padrão caso nenhuma tabela seja especificada através da opção -t.
Listando regras – L
A seguinte sintaxe é usada para listar as regras criadas:
iptables [-t tabela] -L [chain] [opções]
Onde:
tabela - É uma das tabelas usadas pelo iptables. Se a tabela não for especificada, a tabela filter será usada como padrão.
Chain - Um dos chains disponíveis na tabela acima. Caso o chain não seja especificado, todos os chains da tabela serão
mostrados.
opções As seguintes opções podem ser usadas para listar o conteúdo de chains:
• -v - Exibe mais detalhes sobre as regras criadas nos chains.
• -n - Exibe endereços de máquinas/portas como números ao invés de tentar a resolução DNS e consulta ao /etc/services. A
resolução de nomes pode tomar muito tempo dependendo da quantidade de regras que suas tabelas possuem e velocidade de
sua conexão.
• -x - Exibe números exatos ao invés de números redondos. Também mostra a faixa de portas de uma regra de firewall.
• --line-numbers - Exibe o número da posição da regra na primeira coluna da listagem.
Para listar a regra criada anteriormente usamos o comando:
O comando iptables -L INPUT -n tem o mesmo efeito, a diferença é que são mostrados números ao invés de nomes:
#iptables -L INPUT -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 0.0.0.0/0 192.168.99.2
#iptables -L INPUT -n -v
Chain INPUT (policy ACCEPT 78 packets, 5820 bytes)
pkts bytes target prot opt in out source destination
2 194 DROP icmp -- * * 0.0.0.0/0 192.168.99.2
Após este comando, temos a regra inserida na primeira posição do chain (repare no número 1 após OUTPUT) e a antiga regra
número 1 passa a ser a número 2. Desta forma a regra acima será consultada, se a máquina de destino for 192.168.99.2 então o tráfego
estará garantido, caso contrário o tráfego será bloqueado na regra seguinte.
Onde:
tabela - Tabela que contém o chain que desejamos zerar.
Chain - Chain que desejamos limpar. Caso um chain não seja especificado, todos os chains da tabela serão limpos.
iptables -t filter -F INPUT
iptables -t filter -F
NOTA: Os policiamentos PERMISSIVOS (ACCEPT) normalmente são usados em conjunto com regras restritivas no chain
correspondentes (tudo é bloqueado e o que sobrar é liberado) e policiamentos RESTRITIVOS (DROP) são usados em conjunto com
regras permissivas no chain correspondente (tudo é liberado e o que sobrar é bloqueado pelo policiamento padrão).
O sinal de “+” funciona como um coringa, assim a regra terá efeito em qualquer interface de eth0 a ppp9. As interfaces ativas no
momento podem ser listadas com o comando ifconfig, mas é permitido especificar uma regra que faz referência a uma interface que
ainda não existe, isto é interessante para conexões intermitentes como o PPP. Para bloquear qualquer tráfego local para a Internet:
iptables -A OUTPUT -o eth0 -j DROP
Para bloquear a passagem de tráfego da interface eth0 para a interface eth1 (de uma de nossas redes internas):
iptables -A FORWARD -i eth0 -o eth1 -j DROP
Especificando um protocolo
A opção -p (ou –protocol) é usada para especificar protocolos no iptables. Podem ser especificados os protocolos tcp, udp e
icmp. Por exemplo, para rejeitar todos os pacotes UDP vindos de 200.200.200.200:
iptables -A INPUT -s 200.200.200.200 -p udp -j DROP
OBS1: Tanto faz especificar os nomes de protocolos em maiúsculas ou minúsculas.
Caso a PortaOrigem de uma faixa de portas não seja especificada, 0 é assumida como padrão, caso a Porta Destino não seja
especificada, 65535 é assumida como padrão. Caso precise especificar diversas regras que envolvam o tratamento de portas diferentes,
recomendo da uma olhada em ‘Especificando múltiplas portas de origem/destino’, antes de criar um grande número de regras.
OBS1: Não bloqueie mensagens do tipo “host-unreachable” e “source-quench”, pois terá sérios problemas no controle de suas
conexões. A primeira diz que o destino está inalcançavel e a segunda que o host está sobrecarregado, assim os pacotes devem ser
enviados mais lentamente.
A regra acima bloqueia (-j DROP) qualquer tentativa de conexão (–syn) vindas da interface eth0 ao telnet (–dport 23) da
máquina local, conexões já efetuadas ão são afetadas por esta regra. A opção –syn somente pode ser especificada para o protocolo tcp.
ATENÇÃO: - A situação de passagem de pacotes durante deve ser levada em conta durante a inicialização do firewall, bloqueando a
passagem de pacotes durante o processo de configuração, criando regras que bloqueiam a passagem de pacotes (exceto para a interface
loopback) até que a configuração do firewall esteja completa, pode ser uma solução eficiente.
Outra alternativa segura é configurar as regras de firewall antes das interfaces de rede se tornarem ativas (usando a opção “pre-
up comando_firewall” no arquivo de configuração /etc/network/interfaces em sistemas Debian.
Especificando fragmentos
A opção “-f” (ou –fragment) permite especificar regras que confiram com fragmentos. Fragmentos são simplesmente um pacote
maior dividido em pedaços para poder ser transmitido via rede TCP/IP para remontagem do pacote pela máquina de destino.
Somente o primeiro fragmento possui detalhes de cabeçalho para ser processado, os segundos e seguintes somente possuem
alguns cabeçalhos necessários para dar continuidade ao processo de remontagem do pacote no destino.
Uma regra como:
iptables -A INPUT -s 200.200.200.1 -f -j DROP
derrubará os fragmentos de 200.200.200.1 derrubará o segundo pacote e pacotes seguintes enviados por 200.200.200.1 até nós.
OBS1: Note que se o cabeçalho do pacote não tiver detalhes suficientes para checagem de regras no iptables, a regra
simplesmente não ira conferir.
OBS2: Não é preciso especificar a opção “-f” para conexões NAT, pois os pacotes são remontados antes de entrarem no código
de filtragem.
OBS3: A opção “-f” também pode ser usada para evitar o flood por fragmentos (bomba de fragmentos) que, dependendo da
intensidade, podem até travar a máquina.
Diz para rejeitar todos os pacotes EXCETO os que vem do endereço 200.200.200.10.
iptables -A INPUT -p tcp ! --syn -s 200.200.200.10 ! -i eth0 -j DROP
Diz para bloquear todos os pacotes EXCETO os que iniciam conexões (! –syn), EXCETO para pacotes vindos pela interface
eth0 (! -i eth0).
iptables -A INPUT -s 200.200.200.10 ! -p tcp -j DROP
Caso seja necessário especificar mais de uma opções estas devem ser separadas por vírgulas.
iptables -A INPUT -m state --state NEW -i eth0 -j DROP
Permitirá que a regra acima confira apenas 5 vezes por minuto (–limit 2/s). Este limite pode ser facilmente adaptado para uma
regra de log que confere constantemente não causar uma avalanche em seus logs. O valor padrão é 3/h.
--limit-burst num - Especifica o número inicial máximo de pacotes que irão conferir, este número é aumentado por 1 a cada vez
que o parâmetro –limit acima não for atingido. O valor padrão é 5.
A regra acima limita em 1 vez por segundo (–limit 1/s) a passagem de pings (echo requests) para a máquina Linux.
Esta regra limita o atendimento de requisições de conexões a 2 por segundo. No entanto, devemos utilizar estas opções com
cautela em servidores que possuem um grande número de acessos para não ter problemas que afetem seu clientes.
Bloqueia todos os pacotes vindo de eth0 para as portas 21 (ftp), 23 (telnet), 25 (smtp), 80(www), 110 (pop3), 113 (ident), 6667
(irc).
Confere com a máquina com endereço ethernet igual a 00:80:AD:B2:60:0B e IP de origem 192.168.99.101
Como deve ter notado, é possível fazer a associação com diversas especificações de módulos, bastando apenas especificar uma
opção "-m" para cada módulo adicional:
Especificando um alvo
O alvo (-j) é o destino que um pacote terá quando conferir com as condições de uma regra, um alvo pode
dizer para bloquear a passagem do pacote (-j DROP), aceitar a passagem do pacote (-j ACCEPT), registrar o
pacote no sistema de log (-j LOG), rejeitar o pacote (-j REJECT), redirecionar um pacote -j REDIRECT,
retornar ao chain anterior sem completar o processamento no chain atual (-j RETURN), passar para
processamento de programas externos (-j QUEUE), fazer source nat (-j SNAT), destination nat (-j DNAT), etc.
Podem existir mais alvos, pois o iptables é modularizável, e módulos que acrescentam mais funções podem ser
carregados em adição aos já existentes no kernel.
Nos exemplos anteriores vimos o uso de diversos alvos como o DROP e o ACCEPT. Apenas farei uma
breve referência sobre os alvos mais usados em operações comuns dos chains. Os alvos REDIRECT, SNAT e
DNAT serão explicados em uma seção seguinte:
ACCEPT O pacote é ACEITO e o processamento das regras daquele chains é concluído. Pode ser usado
como alvo em todos os chains de todas as tabelas do iptables e também pode ser especificado no policiamento
padrão das regras do firewall.
DROP Rejeita o pacote e o processamento das regras daquele chain é concluído. Pode ser usado como
alvo em todos os chains de todas as tabelas do iptables e também pode ser especificado no policiamento padrão
das regras do firewall.
REJECT Este é um módulo opcional que faz a mesma função do alvo DROP com a diferença de que
uma mensagem ICMP do tipo “icmp-port-unreachable” (TCP/UDP) ou “host-unreachable” (ICMP) é retornada
para a máquina de origem. Pode ser usado como alvo somente nos chains da tabela (não como policiamento
padrão).
LOG Este módulo envia uma mensagem ao syslog caso a regra confira, o processamento continua
normalmente para a próxima regra (o pacote não é nem considerado ACEITO ou REJEITADO).
RETURN Retorna o processamento do chain anterior sem processar o resto do chain atual.
QUEUE Passa o processamento para um programa a nível de usuário.
Alvo REJECT
Este alvo rejeita o pacote (como o DROP) e envia uma mensagem ICMP do tipo “icmp-portunreachable”
como padrão para a máquina de origem. É um alvo interessante para bloqueio de portas TCP, pois em alguns
casos da a impressão que a máquina não dispõe de um sistema de firewall (o alvo DROP causa uma parada de
muito tempo em alguns portscanners e tentativas de conexão de serviços, revelando imediatamente o uso de um
sistema de firewall pela máquina). O alvo REJECT somente pode ser usado na tabela filter. Quando um pacote
confere, ele é rejeitado com a mensagem ICMP do tipo “port unreachable”, é possível especificar outro tipo de
mensagem ICMP com a opção –reject-with tipo_icmp.
OBS: REJECT pode ser usado somente como alvo na tabela filter e não é possível especifica-lo como
policiamento padrão do chain filter (como acontecia no ipchains. Uma forma alternativa é inserir como última
regra uma que pegue todos os pacotes restantes daquele chain e tenha como alvo REJECT (como iptables -A
INPUT -j REJECT), desta forma ele nunca atingirá o policiamento padrão do chain.
# Rejeita pacotes vindos de 200.200.200.1 pela interface eth0:
iptables -A INPUT -s 200.200.200.1 -i eth0 -j REJECT
Alvo LOG
Este alvo é usado para registrar a passagem de pacotes no syslog do sistema. É um alvo muito
Note que no exemplo anterior a regra que registra o pacote (-j LOG) deve aparecer antes da regra que REJEITA (-j REJECT),
caso contrário a regra de LOG nunca funcionará. A regra que REJEITA poderia também ser trocada por uma regra que ACEITA, caso
queira registrar um pacote que deve ser aceito (se o policiamento padrão do seu firewall for restritivo (-P DROP).
A única coisa que muda nas regras de log é o alvo da regra, isto facilita a implementação de grandes
conjuntos de regras de firewall.
A regra acima mostrará a seguinte saída no syslog do sistema:
Jan 25 09:31:43 supertux kernel: IN=eth0 OUT= MAC=00:08:54:07:45:38:00:06:4f:33:58:e0:08:00
SRC=89.250.7.25 DST=200.210.10.10 LEN=48 TOS=0x00 PREC=0x00 TTL=109 ID=55199 DF
PROTO=TCP SPT=3368 DPT=6588 WINDOW=65535 RES=0x00 SYN URGP=0
Os campos possuem o seguinte significado:
Jan 25 09:31:43 Mês, dia e hora do registro do pacote.
supertux Nome do computador que registrou o pacote.
kernel: Daemon que registrou a mensagem, no caso o iptables faz parte do próprio kernel.
IN=eth0 Especifica a interface de entrada (de onde o pacote veio).
OUT= Especifica a interface de saída (para onde o pacote foi).
MAC= 00:08:54:07:45:38:00:06:4f:33:58:e0:08:00 Endereço mac da interface de rede (pode ser obtido com arp
interface).
SRC=89.250.7.25 Endereço de origem do pacote.
DST=200.210.10.10 Endereço de destino do pacote.
SEQ=234234343 Número de seqüência da recepção. É ativado com a opção –log-tcp-sequence.
LEN=48 Tamanho em bytes do pacote IP.
TOS=0x00 Prioridade do cabeçalho TOS (Tipo).
PREC=0x00 Prioridade do cabeçalho TOS (Precedência).
TTL=109 Tempo de vida do pacote. No exemplo, 64 roteadores (hops).
ID=55199 Identificação única destes datagrama. Esta identificação também é usada pelos fragmentos seguintes deste pacote.
DF Opção “Don’t fragment” (não fragmentar) do pacote. Usada quando o pacote é pequeno o bastante para não precisar ser
fragmentado. MF Opção “More Fragments” (mais fragmentos) estão para ser recebidos.
PROTO=TCP Nome do protocolo. Pode ser TCP, UDP ou ICMP
SPT=3368 Porta de origem da requisição.
DPT=6588 Porta de destino da requisição.
WINDOW=Tamanho do buffer de dados alocado na máquina que enviou os dados
SYN Campo SYN no pacote TCP ativado
O log acima mostra uma varredura de portas para nossa máquina (INPUT) de 89.250.7.25 para
200.210.10.10. O problema é que em um grande número de regras será difícil saber qual regra conferiu (pois
teríamos que analisar o endereço/porta origem/destino) e o destino do pacote (se ele foi ACEITO ou
BLOQUEADO) pois você pode ter regras para ambas as situações. Por este motivo existem algumas opções
úteis que podemos usar com o alvo LOG:
–log-prefix “descrição”
Permite especificar uma descrição para a regra do firewall de até 29 caracteres. Caso tiver espaços, devem ser usadas “aspas”.
–log-level nível
Especifica o nível da mensagem no syslog.
–log-tcp-options
Registra campos do cabeçalho TCP nos logs do sistema.
–log-ip-options
Registra campos do cabeçalho IP nos logs do sistema
–log-tcp-sequence
Agora você sabe o que aconteceu com o pacote (Rejeitado). A padronização de mensagens de firewall é também importante para
a criação de scripts de análise que poderão fazer a análise dos logs do seu firewall (para criação de estatísticas que podem servir como
base para a criação de novas regras de firewall ou eliminação de outras).
NAT
A tabela nat serve para controlar a tradução dos endereços que atravessam o código de roteamento da
máquina Linux. Existem 3 chains na tabela nat: PREROUTING, OUTPUT e POSTROUTING.
A tradução de endereços tem inúmeras utilidades, uma delas é o Masquerading, onde máquinas de uma
rede interna podem acessar a Internet através de uma máquina Linux, redirecionamento de porta, proxy
transparente, etc. Esta seção abordará os tipos de NAT, exemplos de como criar rapidamente uma conexão IP
masquerading e entender como a tradução de endereços funciona no iptables.
MASQUERADE
O IP Masquerading é usado para conectar a sua rede interna a internet quando você recebe um único IP
de seu provedor (como em conexões ppp). Todas as operações de IP Masquerading são realizadas no chain
POSTROUTING.
Para fazer IP Masquerading de uma máquina com o IP 192.168.1.2 para ter acesso a Internet, use o
comando:
iptables -t nat -A POSTROUTING -s 192.168.1.2/32 -o eth0 -j MASQUERADE
O comando acima faz IP Masquerading de todo o tráfego de 192.168.99.2 indo para a interface eth0: O endereço IP dos pacotes
vindos de 192.168.1.2 são substituídos pelo IP oferecido pelo seu provedor de acesso no momento da conexão, quando a resposta é
retornada a operação inversa é realizada para garantir que a resposta chegue ao destino. Nenhuma máquina da internet poderá ter acesso
direto a sua máquina conectada via Masquerading. Observe que nos comandos em que usamos a tabela NAT especificamos
naturalmente que estamos usando a tabela “-t nat ”.
Para fazer o IP Masquerading de todas as máquinas da rede 192.168.99.0:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
DNAT
DNAT (Destination nat - nat no endereço de destino) consiste em modificar o endereço de destino das
Redirecionamento de portas
O redirecionamento de portas permite a você repassar conexões com destino a uma porta para outra porta
na mesma máquina. O alvo REDIRECT é usado para fazer esta operação, junto com o argumento –to-port
especificando a porta que será redirecionada. Este é o método DNAT específico para se para fazer proxy
transparente (para redirecionamento de endereços/portas). Todas as operações de redirecionamento de portas é
realizada no chain PREROUTING e OUTPUT da tabela nat.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Redireciona as conexões indo para a porta 80 para a porta 3128 (rodando squid) no firewall.
Um outro uso interessante para o DNAT é o redirecionamento de portas para uma máquina específica de
nossa rede. Ex.: redirecionar todas as conexões oriundas da internet na porta 80 de nosso firewall para a
máquina 192.168.99.3.
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 192.168.99.3
Observe que especificamos que só irão os pacotes TCP, com destino a porta 80 e que entraram no
firewall pela interface eth0. Podemos especificar também a porta de destino na máquina interna. Por exemplo:
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 4325 -j DNAT –to-destination 192.168.99.3:5900
Fizemos com que as conexões da internet para o nosso firewall na porta TCP 4325 fossem redirecionadas
para a máquina 192.168.99.3 na porta 5900.
Bom, esse conteúdo, é somente de exemplo de arquivo. Um firewall mais completo iremos ver na seção
a seguir. Por enquanto, basta dizer que colocando todas as nossas regras neste arquivo, basta torná-lo
executável com “chmod +x /sbin/firewall.sh” e execultar a cada vez que você mudar suas regras no firewall.
OBS.: Esse arquivo serve para agrupar todos os comandos que manipulam o firewall. Alterando o
arquivo não quer dizer que você esteja alterando o firewall que esta sendo executado. As regras somente terão
resultado após executado o arquivo.
#tudo o que não seja aceito por INPUT vai ser bloqueado pela politica DROP
#porém vamos fazer LOG antes
iptables -A INPUT -j LOG --log-prefix " INPUT_DROP "
#tudo o que não seja aceito por FORWARD vai ser bloqueado pela politica DROP
#porém vamos fazer LOG antes
iptables -A FORWARD -j LOG --log-prefix " FORWARD_DROP "
#Tabela NAT
#fazer MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o eth0 -j MASQUERADE
#redirecionar pacotes para o nosso squid
iptables -t nat -A PREROUTING -p tcp --dport 80 -s 192.168.99.0/24 -i eth1 -j REDIRECT --to-ports 3128