iperf - medindo a performance da sua rede


Introdução:
O iperf é um comando que permite mensurar de forma simples e direta a taxa de transmissão da sua rede.
São necessários dois computadores, um operando em modo servidor e outro em modo cliente.

Instalação:
O programa está disponível na forma de pacotes para as distribuições Debian e Ubuntu (e possivelmente para as distros da família Red Hat, como Cent OS e Fedora), bastando utilizar o comando
apt-get install iperf
Sintaxe:
iperf [opções]

Resumo das principais opções (para todas as outras, veja a página de manual - man iperf)

-p define a porta de trabalho ao invés da porta padrão (5001).

-u Envia pacotes UDP ao invés de TCP (ambas as máquinas precisam trabalhar com o mesmo tipo de pacotes)

-f X
Define a unidade a ser exibida, onde pode ser:
k: kbits
m: megabits
K: KBytes
M: MBytes

-m Exibe o MTU do segmento

-C permite que cliente e servidor sejam de versões diferentes (modo de compatibilidade)

Opções específicas do modo cliente
-c Executa em modo cliente

Opções específicas do modo servidor
-s Executa em modo servidor

Uso:
Para utilizar, basta executar o programa no modo servidor em uma máquina:

e na outra em modo cliente (informando o endereço IP da máquina servidora):

O teste dura aproximadamente 10 segundos. Durante esse tempo, o programa tenta enviar a maior quantidade de bytes possíveis, e exibe um relatório como o da imagem anterior em seguida (em ambas as máquinas). No caso, foram transferidos 207 MB, e a taxa de transferência calculada foi de 174 MBits/s.

Pacotes para Desktop: remmina

Remmina (http://remmina.sf.net) é um gerenciador de conexões remotas para desktop. Ele suporta os principais protocolos de conexões remotas:

  • VNC (modo cliente e servidor)
  • RDP (Remote Desktop, utilizado em Servidores Windows)
  • SSH 
  • NX (No Machine - http://nomachine.com )
  • SFTP (transferencia de arquivos segura, parecida com o SCP do protocolo SSH)
  • XDMCP (Terminal X Remoto)
O Remmina funciona através de um sistema de Plugins, facilitando a inclusão de novos protocolos. O software está disponível na forma de pacotes para as principais distribuições (Debian, Ubuntu, Fedora, etc). 

Para o Debian Wheezy, você provavelmente vai querer instalar os seguintes pacotes:
  • remmina: pacote principal
  • remmina-plugin-gnome: plugin de integração com Gnome (permite salvasr as senhas no sistema de Gerenciamento de Senhas do Gnome)
  • remmina-plugin-vnc: plugin para o protocolo VNC
  • remmina-plugin-rdp: plugin para o protocolo Remote Desktop
  • remmina-plugin-xdmcp: plugin para o protocolo XDMCP
Algumas screenshots da interface do programa:
Janela Principal

Opções de conexão do protocolo RDP

Conectado a um servidor Windows 2003


Comandos da família APT: apt-file

O comando apt-file permite pesquisar qual pacote (mesmo entre os ainda não instalados) possui determinado arquivo. Por exemplo, suponha que ao tentar executar determinada aplicação baixada da Internet você receba o seguinte erro:
error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory
Isso significa que a aplicação depende da biblioteca libGL.so.1, mas não conseguiu encontrar essa biblioteca em seu sistema.

Obs: Se a aplicação tivesse sido instalada via sistema de gerenciamento de pacotes (apt-get / aptitude), o erro não ocorreria, pois o sistema de gerenciamento de dependências baixaria todos os pacotes necessários para a instalação. Para esse exemplo, considere que está sendo instalado um software externo à distribuição. No meu caso foi um arquivo .tar.gz com o Opera Browser.

Continuando, basta instalar o pacote com o comando:
apt-get install apt-file
Em seguida é necessário atualizar as bases de dados do apt-file, com o comando:
apt-file update
E está pronto! Agora podemos realizar as pesquisas, como por exemplo:
Qual pacote possui o schema LDAP do samba (samba.schema) ?
apt-file search samba.schema
Resultado:
debian-edu-config: /etc/ldap/schema/samba.schema
samba: /usr/share/doc/samba/examples/LDAP/samba.schema.at.IBM-DS.gz
samba: /usr/share/doc/samba/examples/LDAP/samba.schema.gz
samba: /usr/share/doc/samba/examples/LDAP/samba.schema.oc.IBM-DS
samba-doc: /usr/share/doc/samba-doc/examples/LDAP/samba.schema.at.IBM-DS.gz
samba-doc: /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz
samba-doc: /usr/share/doc/samba-doc/examples/LDAP/samba.schema.oc.IBM-DS
Ou seja: os pacotes debian-edu-config, samba e samba-doc possuem um arquivo com o termo pesquisado (samba.schema) no nome.


OpenLDAP: Program version 5.1 doesn't match environment version 4.8

O problema:
Ao atualizar um servidor Debian Squeeze (6.0) para a nova versão stable Wheezy (7.0), tudo ocorreu normalmente (como de costume) exceto pelo serviço OpenLDAP. O serviço simplesmente não subia, e não exibia nenhum erro. Tentei executar um slapcat para exportar a base e subí-la novamente. O comando slapcat reportava o seguinte erro (posteriormente vi que o erro também aparece no arquivo /var/log/syslog):
Program version 5.1 doesn't match environment version 4.8
Pesquisando na web, cheguei a essa página do próprio projeto Debian, que sugere a seguinte solução:
  1. Instalar o pacote db4.8-util
  2. Trocar para o diretório onde ficam as bases de dados do LDAP.
  3. Executar alguns comandos para atualizar a versão da base de dados.
Comandos:
Obs: Recomendo que seja feito antes um backup de todo o diretório /var/lib/ldap para outro diretório, por segurança.
apt-get install db4.8-util
cd /var/lib/ldap
db4.8_checkpoint -1
db4.8_recover
Após executar os comandos, verifique (ls -l) se todos os arquivos do diretório pertencem ao usuário que executa o servidor slapd (openldap, no Debian). Caso algum arquivo não pertença a esse usuário, corrija as permissões com o seguinte comando (ainda no diretório /var/lib/ldap):
chown openldap:openldap *
Após isso, basta iniciar o serviço:
/etc/init.d/slapd start

Erro amavisd too many links lost connection


O problema:
A fila de mensagens do servidor de email (postfix, no meu caso) cresce, e as mensagens não são entregues. O comando mailq exibe erros parecidos com esse:
delivery temporarily suspended: lost connection with 127.0.0.1[127.0.0.1] while sending MAIL FROM
O log de erros de email (/var/log/mail.err) mostra as seguintes mensagens:
TROUBLE in process_request: Can't create directory /var/lib/amavis/tmp/amavis-20111221T160623-06971: Too many links at /usr/sbin/amavisd-new line 5081, <GEN28> line 4
A causa:
A mensagem 'Too many links' indica que o limite de subdiretórios do diretório /var/lib/amavis/tmp/ foi alcançado (em sistemas de arquivo ext3 esse limite é de aproximadamente 32.000 itens por diretorio). Assim, o antispam não consegue criar mais subdiretórios e deixa de entregar as mensagens.

Solução:
  1. Exclusão dos diretórios mais antigos que 1 dia e  com nome de  .spamassassin* que ficam no hd mesmo apos terem sido utilizados.
  2. Restart do serviço do amavis.
Comandos:
cd /var/lib/amavis/tmp
find -mtime +1 -name .spamassassin\* | xargs rm -r
/etc/init.d/amavis restart
Pode-se forçar o inicio da entrega das mensagens com o comando "postfix flush", ou aguardar que o próprio servidor recomece as tentativas de envio

Seções do Manual Linux

O manual online do Linux (que pode ser acessado através do comando man) tem seu conteúdo separado em categorias ou seções , conforme abaixo:

Obs: talvez nem todas as páginas de manual citadas na coluna de exemplos estejam presentes na sua máquina!

SeçãoNomeDescriçãoExemplos
1Comandos de UsuárioComandos disponíveis a todos os usuáriosls,bash,vim
2Chamadas de SistemaRotinas do Kernel. Normalmente utilizadas por programas, as páginas são de pouca utilidade para usuários comunschdir,chown
3Funções de BibliotecasContém a documentação para uso das bibliotecas do sistema. Normalmente é interessante apenas a programadoresalloc,getloadavg
4Arquivos EspeciaisDocumentação dos arquivos de dispositivos do diretório /devhda,sda,zero,radeon
5Formatos de ArquivosContém a descrição do formato de arquivos do sistemapasswd,shadow,group,fstab
6JogosJogos e comandos divertidosfortune,rafkill,0verkill
7Convenções e MiscelâniaDiversos assuntos, protocolos, etcggz,icmp,irda
8Administração e Comandos PrivilegiadosComandos que necessitam de privilégios especiais (root) para serem executados.iptables,fdisk,mkfs


Gerador de sources.list para Debian/Ubuntu

Dica rápida:
Está em dúvida sobre como criar seu arquivo source.list para o Debian? Acesse o site http://debgen.simplylinux.ch/, preencha alguns parâmetros e o site cria um sources.list para você. Você pode inclusive adicionar alguns repositórios adicionais (como o do navegador Google Chrome ou do gerenciador de Imagens Picasa, ambos do Google). Há também uma versão disponível para Ubuntu em http://repogen.simplylinux.ch/

Uma configuração mínima para um sistema Debian seria como a imagem abaixo (clique para ampliar):


Após selecionar todos os parâmetros desejados, basta clicar no botão "Generate sources.list". Selecione o texto que vai aparecer, recorte e cole dentro do seu /etc/apt/sources.list. Agora basta executar um "apt-get update" e está pronto pra utilizar.


Questionário para Vaga de Suporte em Provedor


Remexendo uns emails antigos, encontrei esse questionário para uma vaga de suporte, que me foi enviado há alguns anos atrás. É interessante, porque lembro que algumas perguntas como AS, vlans e switch camada 3 eu não fazia a menor idéia do que era, e hoje já sei. Em compensação outras (como hldc e limpar estatísticas de interface, ambos em cisco) eu não sabia e continuo sem saber, :-) . De qualquer forma, achei o nível da maioria das perguntas válido para testar os conhecimentos em Linux e redes em geral. Coloco as respostas depois. (não vale colar!)


Redes

1 – Qual o seu nível de tcp/ip? Descreva alguns protocolos usados para vpn com suas portas.

2 – Você usaria tcp ou udp para uma vídeo conferência? Por quê?

3 – O que é um socket?

4 – Quais são os tipos de icmp mais utilizados além do 0 e 8? Cite 3.

5 – Quantos  hosts e subredes podem existir na máscara 255.255.248.0?

6 – Já trabalhou com redes altamente segmentadas (diversas subredes pequenas e grandes)?

7 – Qual a diferença entre rede infraestrutura e ad-hoc?

8 – O que é um AS?

9 – O que é uma bridge?

Linux

1 – Qual o seu nível de linux? Descreva os serviços e deamons que já instalou e configurou.

2 – Conhece shell scripts? Já utilizou os comandos cat, echo, grep, sed, awk, cut e etc?

3 – Sabe configurar virtual hosts no apache?

4 – Qual comando para se verificar as conexões ativas em uma máquina?

5 – Quais os comandos para se verificar as rotas de uma máquina?

6 – Está familiar com o tcpdump? Qual opção do tcpdump se usa para mostrar os pacotes de uma determinada máquina?

7 – Conhece algum software de monitoramento de tráfego de links, nms e ids (um de cada)?

8 – Qual seu nível de sql? Select, update e etc.

9 -  Que opção em uma regra do iptables especifíca conexões estabelecidas?

10 – O que deve ser configurado no /proc para que o linux faça forward de pacotes?

11 – Quais distros já administrou?


Ativos de rede (roteadores , switches e etc)

1 – Qual o seu nível de ativos de rede? Fale sobre os equipamentos que já administrou e configurou.

2 – Já utilizou vlan com switches de camada 3?

3 – É possível utilizar o protocolo ppp em um roteador cisco? E o hdlc?

4 – Qual comando mostras as estatísticas de uma interface?

5 – Qual comando limpa as estatísticas de uma interface?


Firewall Linux - iptables - Parte 3


Comandos, opções e módulos

Comandos:
Toda regra iptables tem obrigatoriamente um comando e opcionalmente um ou mais parâmetros.

Comandos (são sempre em letras maiúsculas). A maioria dos comandos exige o nome de uma chain, em outros isso é opcional, e finalmente para alguns utiliza-se apenas o comando em si.

Observação: dados entre chaves ( [xxx] ) especificam um valor opcional. Dados entre sinais de maior e menor ( <xxx> ) especificam um valor obrigatório. Acostume-se com esse padrão, pois ele é utilizado nas páginas de manual.


-A <chain>: Acrescenta uma regra ao final de uma chain.

-I <chain> [posição]: Insere uma regra em uma posição específica da chain. Caso a posição não seja informada, a regra será criada na posição 1.

-D <chain> [posição]: Deleta uma regra em uma chain. Existem duas formas de deleção: Repetindo o comando de inserção e trocando o -A/-I por -D ou deletando pelo número da regra na chain. Ex: "iptables -D INPUT 1" apaga a primeira regra da chain INPUT da tabela filter.

-L [chain]: Lista as regras. Se for informada uma chain específica, é listada apenas as regras daquela chain. Caso contrário, todas as chains são listadas. Para listar o número (ou posição) da regra dentro da chain, acrescente a opção "--line-numbers". Esse número é utilizado como referencia para as opções -I, -D e -R

-R <chain> <posição>: permite trocar uma regra com uma já existente na posição informada. Informa-se a regra atual através do nome da chain em que ela se encontra e sua posição dentro da chain (obtida com -L CHAIN --line-numbers) e a nova definição da regra.

-F <chain>: Esvazia a chain informada (apaga todas as suas regras). Caso não seja informada uma chain, todas as chains da tabela são esvaziadas.

-N <nova_chain>: Cria uma nova chain. Deve ser informado um nome que ainda não esteja em uso.

-X <nome_chain>: Apaga uma chain criada pelo usuário (com o comando -N). A chain precisa estar vazia e não ser referenciada por nenhuma regra.

-Z [chain]: Zera os contadores de pacotes e bytes de todas as chains, apenas da chain informada ou apenas de uma regra específica (informada pelo número) dentro de uma chain. Caso seja utilizado junto com -L o contador é zerado e exibido em seguida.

-P <chain> <política>: altera a política (POLICY) padrão de uma chain.

-E <nome_atual> <nome_novo>: renomeia uma chain criada com o comando -N

Opções/parametros:
Observações:
  • De um modo geral, a ordem das opções não importa. No entanto, é comum escrever os comandos no formato dos exemplos desse artigo, pois facilita a leitura e compreensão da regra.
  • Regras que não contém a opção "-j" não fazem nada com um pacote que combine com suas opções, mas contabilizam a sua passagem e podem servir para contabilidade de dados (geração de gráficos e relatórios, por exemplo).
  • As opções -i, -o, -s, -d, --dport, e --sport (e possivelmente outras, confira a página de manual!) podem ser precedidas de um sinal de exclamação (!), que inverte seu significado.
Sempre que um pacote combina com uma regra que define uma ação (opção "-j"), seu processamento é interrompido na chain atual. A excessão é a ação LOG, que faz com que o pacote seja logado nos logs do firewall (via syslog) e continua para ser processado.

-t <tabela> : Especifica em qual tabela (filter, nat ou mangle) o comando (que pode ser de criação/edição/exclusão/listagem de regras ou chains) será executado. Caso essa opção não seja informada, o comando é executado na tabela filter

Ex:

iptables -t nat -A PREROUTING ... # Cria uma regra na chain PREROUTING da tabela nat

iptables -t filter -A FORWARD ... # Cria uma regra na chain FORWARD da tabela FILTER

iptables -A FORWARD ...           # Faz a mesma coisa que a regra anterior, observe para a tabela filter o "-t filter" é opcional.

iptables -t nat -L  ...           # Visualiza as regras em todas as chains da tabela nat



-n : não resolve endereços IP para nomes, acelerando a exibição dos dados na tela. Normalmente utilizado com o comando -L.

-v : modo verboso, aumenta a exibição de detalhes. Normalmente utilizado com o comando -L.

-x : não utiliza letras (abreviações) na contagem de bytes e pacotes. Normalmente utilizado com o comando -L.

Ex:
observe a saída do seguinte comando, primeiro sem a opção -x:

root:~ # iptables -nvL FORWARD | head -1

Chain FORWARD (policy DROP 6752K packets, 407M bytes)

root:~ # iptables -nvxL FORWARD | head -1

Chain FORWARD (policy DROP 6745998 packets, 407067635 bytes)

A contagem de bytes é a mesma, mas a saída sem -x é mais fácil de visualizar. Por outro lado, utilizando-se o -x facilita a criação de scripts para contabilidade de pacotes.

-p : permite especificar o protocolo desejado. O protocolo pode ser citado pelo nome ou pelo número. Veja a relação de nomes e números de protocolos no arquivo /etc/protocols. Para criar uma regra que bata com qualquer protocolo, coloque "all".

Ex:

iptables -A FORWARD -p udp ...            # Cria uma regra utilizando o protocolo UDP na chain FORWARD da tabela filter

iptables -t nat -A PREROUTING -p tcp ...  # Cria uma regra utilizando o protocolo TCP na chain PREROUTING da tabela nat

iptables -t nat -A POSTROUTING -p all ... # Cria uma regra combinando com qualquer protocolo na chain POSTROUTING da tabela nat

Observação:


  • Ao utilizar "-p all", não se informa número de portas de origem/destino, porque nem todo protocolo utiliza o conceito de porta.
  • Procure evitar ao máximo o uso indiscriminado de "-p all", pois acaba tornando seu firewall permissivo demais. Quando você não souber quais portas/endereços precisa liberar para que determinado serviço funcione, faça uma análise do tráfego com um analisador como o tcpdump (modo texto) ou o wireshark (modo gráfico).
  • -s : permite especificar o endereço IP de origem. Se o valor for o endereço de um equipamento, basta colocar o endereço IP. Caso seja o endereço de uma rede, é necessário informar também a máscara de rede.  Para especificar uma regra que bata com qualquer valor no endereço de origem, coloque 0/0. Para especificar uma regra que não bata com determinado endereço de origem, utilize a exclamação (!).

Ex:
iptables -A FORWARD -p udp -s 192.168.1.0/255.255.255.0 # Tabela filter, chain FORWARD, protocolo UDP, toda a rede 192.168.1.0 ...

iptables -A FORWARD -p udp -s 192.168.1.0/24            # Outra maneira de escrever a regra anterior

iptables -t nat -A  PREROUTING -p tcp -s 192.168.1.213

iptables -A FORWARD -p tcp -s !192.168.5.220 ... # essa regra bate com qualquer endereço de origem, exceto o 192.168.5.220.

-d : Semelhante ao -s, porém especifica o endereço IP de destino.

Ex:

iptables -A FORWARD -p udp -d 192.168.1.0/255.255.255.0 # Tabela filter, chain FORWARD, protocolo UDP, toda a rede 192.168.1.0 ...

--sport : permite especificar a porta (tcp/udp) de origem.

Ex:

iptables -A FORWARD -p udp -d 192.168.1.0/24 --sport 25 ...

iptables -A FORWARD -p tcp -s 192.168.1.23 --sport 25 ...


--dport : permite especificar a porta (tcp/udp) de destino.

iptables -A FORWARD -p udp -d 192.168.1.0/24 --dport 25 ...

iptables -A FORWARD -p tcp -s 192.168.1.23 --dport 25 ...


-i : define a interface de rede por onde o pacote vai entrar.

Obs: só pode ser utiliza em chains relativas a entrada de pacotes na máquina, como INPUT, PREROUTING e FORWARD.

-o : define a interface de rede por onde o pacote vai sair.

Obs: só pode ser utiliza em chains relativas a saída de pacotes da máquina, como OUTPUT, POSTROUTING e FORWARD.

-j : Especifica para o TARGET (alvo) da regra, ou seja o que vai ser feito com o pacote que combine com a regra definida.

-m : permite o uso dos "match modules", que são modulos que extendem as funcionalidades do iptables. O iptables costuma já vir com um conjunto de módulos pré-instalados, e é possível instalar mais módulos, recompilando o iptables E o kernel. Abaixo uma lista com os principais módulos. Para ver quais sua distribuição possui, bem como a forma de utilização, veja a página de manual do iptables (man iptables):


  • multiport: permite criar regras que combinam com mais de uma porta de origem ou destino. Nesse caso utiliza-se --sports ou --dports, respectivamente. As portas podem ser informadas no formato lista (por exemplo "--dports 22,23,25,110", que englobaria apenas para as portas citadas) ou no formato range (faixa de portas, "--sport 1:1023", que englobaria todas as portas entre 1 e 1023)
  • mac: analisa o endereço de hardware (MAC address) de origem do pacote. Apenas pode ser utilizado em CHAINS de entrada (INPUT, FORWARDING, PREROUTING, etc).
  • state: permite classificar a conexão quanto ao estado (NEW, INVALID, RELATED, ESTABLISHED, entre outros).
  • limit: permite criar regras que trabalham baseadas em quantidade X tempo (1 por segundo, 5 por minuto, etc).
  • iprange: permite informar um range de endereços IP de origem ou destino.
  • string: procura por uma string (texto) dentro do pacote.
  • time: cria regras com base na data/hora de chegada do pacote (a regra só é valida dentro do período de tempo especificado).
  • tos: analisa o campo TOS (Type Of Service) do cabeçalho IP (normalmente utilizado para QOS).
  • addrtype: analisa pacotes segundo o tipo (UNICAST, BROADCAST, LOCAL, etc).
  • ah: combina com pacotes AH (authentication header) do IPsec.
  • esp: combina com pacotes ESP do IPsec.
  • comment: permite inserir comentários de até 256 caracteres em uma regra.
  • connlimit: permite restringir a quantidade de conexões paralelas/simultâneas a um servidor por endereço IP ou range de endereços.

Comprimindo os Logs do JBOSS sem logrotate

Administro alguns servidores JBOSS que realizam o rotacionamento de logs sozinhos, porém eles não fazem a compressão dos arquivos de log. Como o próprio JBOSS cuida do rotacionamento, não encontrei um método de fazer o tratamento através do logrotate, como é feito normalmente. Ao invés disso, optei simplesmente por comprimir os arquivos.

Crie um arquivo com um nome sugestivo (ex: comprime_logs_jboss) dentro do diretório "/etc/cron.daily" com o seguinte conteúdo:


#!/bin/bash
#Fabiano Pires
#Caminho com os arquivos de log do JBOSS
CAMINHO="/opt/jboss-GA/server/default/log"

# Comprime arquivos server.log.*, exceto os que possuem a extensao ".gz"
find ${CAMINHO} \( -name 'server.log.*' -a -not -name '*.gz' \) | xargs gzip -9

Esse comando find enconrtra todos os arquivos server.log rotacionados (os meus ficam no padrão server.log.ANO-MES-DIA (ex: server.log.2011-11-29), exceto os que possuem a extensão ".gz" (que já foram comprimidos) e os envia para compressão com o comando gzip.

Ajuste a variável CAMINHO para apontar para o local onde ficam os arquivos de log do seu JBOSS. E não se esqueça de tornar o arquivo executável, com o comando chmod a+x comprime_logs_jboss.

Sistemas de arquivo em Linux embarcado

O Sérgio Prado publicou em seu site (http://sergioprado.org) dois artigos sobre sistemas de arquivos. Embora o artigo (assim como o próprio site) seja voltado para Sistemas Linux Embarcados, os artigos fazem uma boa cobertura sobre diversos sistemas de arquivos, além de tratar sobre assuntos como journaling, memórias flash e mais. Vale a leitura tanto para o iniciante em Linux como para o administrador experiente.

Links:

Parte 1: http://sergioprado.org/2012/02/22/sistemas-de-arquivo-em-linux-embarcado-parte-1/
Parte 2: http://sergioprado.org/2012/03/04/sistemas-de-arquivo-em-linux-embarcado-parte-2/

P.S.: Não sabe o que é Linux Embarcado? Basicamente são computadores com processadores ARM (semelhantes aos dos celulares), porém pequenos em tamanho e consumo de energia. Normalmente são voltados para aplicações específicas. Para maiores informações, vale dar uma olhadinha nesses sites:

Mini2440 (US$ 90,00)
http://www.evertonfreitas.com/?p=60

BeagleBoard (US$ 130,00)
http://beagleboard.org/hardware

BifferBoard, uma placa com processador x86 (US$ 50,00)
http://bifferos.co.uk/

Raspberry Pi, do tamanho de um cartão de crédito (US$ 25,00 - Aceito um de presente ;-)  )
http://www.raspberrypi.org/

Firewall Linux - iptables - Parte 2


Conceitos: Tabelas, Chains, Targets e Política Padrão.

Tabelas:
No iptables, o tratamento dos pacotes é realizado em tabelas. Cada tabela realiza basicamente um tipo operação nos pacotes, conforme vemos a seguir:

1) Tabela filter: Filtragem de pacotes (quem pode acessar o quê, e sob quais condições)
2) Tabela nat: Modificações nos endereços e/ou portas de origem e de destino dos pacotes.
3) Tabela mangle: Alterações avançadas no pacote: inserção de marcas (tags), alteração da prioridade do pacote na "fila" de envio da placa de rede, etc (não vai ser coberta aqui.)

Chains (cadeias, no sentido de correntes ou fluxos):
São contêineres para as regras. O iptables vem com um grupo padrão de chains em cada tabela, e os usuários podem criar chains adicionais, para facilitar a gerência das regras. As chains padrão são (nem todas as tabelas possuem todas as chains):

INPUT: trata os pacotes que estão entrando na máquina e não vão sair, ou seja, o destino final do pacote é a própria máquina firewall.

OUTPUT: trata dos pacotes que foram criados na própria máquina e vão sair dela.

FORWARD: trata os pacotes que atravessam a máquina (entram por uma placa de rede e saem por outra. Ex: pacotes com origem na rede local com destino à Internet ou vice-versa).

PREROUTING: trata os pacotes antes (PRE) da decisão de roteamento (ROUTING). É utilizada para alterar o DESTINO dos pacotes (DNAT) na tabela nat.

POSTROUTING: trata os pacotes após (POST) a decisão de roteamento (ROUTING). É utilizada para alterar a ORIGEM dos pacotes (SNAT) na tabela nat.

Observação: o nome das chains padrão sempre é em letras maiusculas.

Targets (ou alvos):
Define o que é feito com o pacote que combine com a regra. Alguns targets (os que fazem alterações nos pacotes) só podem ser utilizados na tabela NAT.

Observação: é possível a criação de regras sem target. Um pacote que combine com essas regras apenas incrementa a contagem de bytes e pacotes da regra (útil para contabilidade de pacotes.) Para visualizar a contagem de pacotes das

ACCEPT: Aceita os pacotes que batam com a descrição da regra

REJECT: Rejeita os pacotes que batam com a regra. É enviada uma mensagem de rejeição ao emissor do pacote.

DROP: Ignora os pacotes que batam com a regra. É semelhante ao REJECT, porém não é enviada nenhuma mensagem ao emissor.

RETURN: Cancela o processamento do pacote na chain atual e o envia de volta à chain onde estava anteriormente.

SNAT: Altera o campo de origem (source) do pacote IP, podendo alterar também a porta de origem.

DNAT: Altera o campo de destino (destination) do pacote IP, podendo alterar também a porta de destino.

REDIRECT: Faz um DNAT onde apenas a porta de destino pode ser escolhida. O endereço IP de destino sempre é o da própria máquina firewall. Utilizado para proxy tranparente.

MASQUERADE: Mascaramento de IP. Tipo especial de SNAT, utilizado principalmente para compartilhar conexões com IPs dinâmicos, como conexões dial-up (internet discada) e ADSL (Velox, por exemplo).

MARK: "Marca" o pacote com uma etiqueta, para processamento posterior (inclusive por outros programas que não o iptables). A "marca" existe apenas no próprio firewall (programas em outras máquinas não conseguem visualizar a marcação).

TCPMSS: Permite alterar o tamanho máximo do pacote, para solucionar (ou prevenir) problemas de transmissão de dados. Só pode ser utilizada com o protocolo TCP (opção -p tcp)

TOS: Permite alterar o campo TOS (Type Of Service) do cabeçalho IP.

QUEUE/NFQUEUE: Permite enviar o pacote para programas compilados com suporte a biblioteca libipq. Os programas podem manipular o pacote e devolvê-lo ao iptables.

LOG: Cria uma entrada de LOG do pacote que combina com a regra. A entrada é registrada através do SYSLOG. Após ser registrado no sistema de log, o pacote continua seguindo pela chain, para ser processado por outras regras.

ULOG: Uma mistura de QUEUE com LOG, onde o pacote é enviado para um programa para fins de LOG. Isso permite, por exemplo, logar pacotes em bancos de dados (como o MySQL) para facilitar a geração de relatórios.

Caso especial: nome de uma chain personalizada. Faz com que o pacote que bata com aquela regra seja redirecionado para uma chain personalizada (criada pelo usuário) para ser tratado pelas regras desta chain.

Policy (política padrão):
Por mais completas que sejam, suas regras de firewall nunca irão cobrir todas as possibilidades. Por isso, alteramos a POLICY (política padrão) da chain. Um pacote que atravesse toda uma CHAIN sem combinar com nenhuma REGRA é tratado pela POLICY padrão da chain. As POLICY são ACCEPT, REJECT e DROP, e têm o mesmo comportamento dos TARGETS definidos anteriormente. A POLICY padrão das CHAINS é ACCEPT (se um pacote não bater com nenhuma regra ele é aceito)  Normalmente, coloca-se a política padrão de chains como INPUT e FORWARD como DROP. Com isso, tudo o que não for explícitamente liberado será bloqueado.

Firewall Linux - iptables - Parte 1


Introdução

Historia do Firewall Linux:
Kernel 2.0 (Jan/1999): ipfwadm
Kernel 2.2 (Dez/1999): ipchains, stateless, dependia de programas externos para realizar NAT
Kernel 2.4 (Jan/2001) e
Kernel 2.6 (Dez/2003): iptables, stateful, realiza nat independente de programas externos.

Statefull X Stateless:
Uma conexão normalmente é composta de diversos pacotes. O firewall statefull associa o primeiro pacote da conexão aos demais, e consegue distinguir qual a relação desse pacote com os demais (ex: se o pacote é de uma conexão nova (NEW) ou já estabelecida (ESTABLISHED), entre outros tipos). Isso facilita as regras e checagens, além de permitir maior controle sobre operações como geração de LOGs.

Iptables ou Netfilter?
Algumas vezes vemos escrito que o firewall do Linux é o iptables. Outras vezes, que é o netfilter. Afinal, qual o correto? Na verdade, ambas as definições estão corretas:

Netfilter é a tecnologia de firewall integrada ao kernel.
Iptables é a ferramenta (programa) que configura essa tecnologia.

Outras ferramentas:
O iptables é parte de uma "família" de ferramentas que configuram diferentes protocolos de rede:
iptables: protocolo IPv4.
ip6tables: protocolo IPv6.
arptables: protocolo ARP.
ebtables: protocolo ethernet (utilizado em bridges).

SSH Forwarding

Uma das funções  freqüentemente negligenciadas do protocolo SSH é o encaminhamento (ou forwarding ou ainda tunelamento) de conexões.
Exemplos de uso:
  • Administração remota de serviços que só permitem acesso através do endereço localhost (127.0.0.1). Dois serviços com esse comportamento por padrão são o Webmin e o CUPS. (redirecionamento local -> remoto)
  • Acesso seguro a serviços que normalmente não suportam criptografia, como o VNC (redirecionamento remoto-> local).
  • Acesso seguro (criptografado) a emails e sites através de redes públicas e não criptografadas. (redirecionamento local -> remoto)
  • Permitir o acesso de máquinas remotas à sua rede. (redirecionamento remoto-> local)
  • Exibir a tela de um programa gráfico em outra estação. (redirecionamento X11)

Caso 1: Redirecionamento local -> remoto

Nesse caso, vamos especificar uma porta TCP local (na máquina onde é executado o cliente ssh). Todo o tráfego que atingir essa porta será encaminhado pelo túnel SSH para um endereço na rede remota. Esse endereço pode ser a própria máquina onde roda o servidor SSH ou outra, desde que acessível pelo servidor SSH. A porta local precisa estar disponível. Para fechar o túnel, encerra-se a conexão.

A sintaxe do comando SSH para esse caso é:


ssh -L [endereço local]:porta local:host remoto:porta remota servidor_ssh

Onde:
Endereço Local: Endereço IP que será associado a essa conexão. Esse parâmetro é opcional. Se for omitido, a conexão será criada em todos os endereços/interfaces de rede do computador. Se for informado um endereço IP diferente de 127.0.0.1 (ou localhost), outras máquinas poderão utilizar-se do túnel. Caso  seja informado o endereço 127.0.0.1 o túnel ficará disponível apenas para a própria máquina cliente.
Porta Local: Porta TCP que receberá as conexões na máquina cliente e as encaminhará para a máquina remota. Esta porta precisa estar disponível.
Host Remoto: Endereço na rede do servidor SSH  para onde as requisições serão encaminhadas.
Porta Remota: Porta no Host Remoto para onde as conexões serão encaminhadas.
Servidor SSH: Endereço ou nome do servidor SSH que receberá as conexões.
Obs: outros parâmetros (como nome de usuário, porta SSH, etc) podem ser informados normalmente.

Exemplos:
acessando remotamente a administração de impressoras do CUPS (porta 631):
Vamos direcionar o trafego na porta local 5555 para a porta 631 do servidor 192.168.0.12, através de uma conexão SSH nesse mesmo servidor:

ssh -L 5555:192.168.0.12:631 192.168.0.12

Caso fosse necessário utilizar um usuário específico (por exemplo: joao), o comando ficaria assim:

ssh -L 5555:192.168.0.12:631 joao@192.168.0.12

Caso o servidor SSH estivesse em uma porta diferente da padrão (22), digamos porta 2222, faríamos dessa maneira:

ssh -p 2222 -L 5555:192.168.0.12:631 joao@192.168.0.12

Caso você deseje que as máquinas que se conectarem à sua estação possam utilizar o tunel, o comando seria (supondo que o IP de sua estação seja 10.0.0.28):
ssh -p 2222 -L 10.0.0.28:5555:192.168.0.12:631 joao@192.168.0.12

Com a conexão estabelecia, bastaria abrir o navegador web e acessar o endereço
http://localhost:631 (ou http://10.0.0.28:631 no caso de outras máquinas) para realizar o acesso.

Outro exemplo prático: Suponhamos que você está com seu notebook em um CyberCafe, com conexão WiFi Open (sem criptografia) e deseja acessar os emails no servidor POP de sua empresa de forma segura. Para isso, você precisaria ter acesso SSH a um dos equipamentos da empresa, como um firewall ou outro servidor. Supondo-se que que dados de conexão sejam:
Firewall (com acesso SSH na porta 7788): 200.200.200.200
Servidor de Email (rodando POP na porta 110) : 172.16.100.50
Usuário para acesso SSH: antonio

o comando seria: 

ssh -p 7788 -L 110:172.16.100.50: antonio@200.200.200.200

Agora, basta configurar seu cliente de email para acessar o servidor POP-3 no endereço 127.0.0.1, porta 110 e acessar suas mensagens de forma criptografada.

Caso 2: Redirecionamento remoto -> local
Esse redirecionamento é pouco usado, mas mesmo assim bastante útil. Já o utilizei algumas vezes da seguinte maneira: na empresa onde trabalhava, eu administrava algumas máquinas que ficavam dentro da rede dos clientes. Essas máquinas normalmente não tinham acesso à internet, e o processo de liberação de internet para esses equipamentos era muito burocrático, o que causava problemas na hora de fazer alguma atualização ou instalar novos programas. Minha solução foi utilizar um redirecionamento SSH remoto, permitindo que os equipamentos utilizassem o proxy da minha empresa, e saíssem para a internet através do meu link. Em um caso como esse, o comando ficaria assim:

ssh -R 3128:192.168.0.210:8080 juca@200.200.200.200

No exemplo acima, eu conectei com o usuário juca no servidor 200.200.200.200. Após conectar, basta configurar o programa para utilizar um proxy no endereço localhost, porta 3128. Tudo que a máquina remota "jogar" nesta porta será redirecionado para a porta 8080 do IP 192.168.0.210 na minha rede local.

Caso 3: Redirecionamento do X Server (X11 Forwarding)

Esse é um dos mais simples, e ao mesmo tempo mais úteis: é possível "puxar" a tela de um programa de outro servidor Linux. Nesse caso, o programa estará rodando na máquina remota e apenas as informações de mouse, teclado e tela são trafegadas via rede. É semelhante ao próprio protocolo SSH (onde é realizado um acesso a uma máquina remota, e todo o processamento ocorre na máquina acessada. Nossa máquina apenas envia e recebe informações de teclado e tela). A diferença nesse caso é que como é utilizado o protocolo X, as informações de tela são gráficas, ao invés de apenas texto. Para utilizar o redirecionamento, simplesmente abra um terminal modo texto (já dentro do ambiente gráfico) e digite:

ssh -X usuario@192.168.0.1

A opção -X faz toda a mágica para você. Agora basta rodar qualquer aplicativo gráfico, e embora a tela apareça no seu computador, todo o processamento ocorrerá na máquina remota. O aplicativo também estará acessando o hardware (discos, fitas, etc) da máquina remota. Isso é utilizado para acessar consoles de administração remota, para tarefas que seriam muito complexas (ou mesmo inviáveis) em linha de comando. Mais simples impossível!

Resumo dos principais comandos do vi/vim


Opções da linha de comando:
-R abre arquivo como somente leitura
-r/-L lista os arquivos swap no diretório atual, bem como em diretórios chave e sai.
+ começa na última linha
+numero começa na linha determinada. Ex: vim +15 arq.txt começa na linha 15 de arq.txt, ao invés da primeira
-o abre os arquivos em "janelas" (a tela fica dividida horizontalmente). Útil para comparar arquivos.
-O abre os arquivos em "janelas verticais" (a tela fica dividida verticalmente).
-X não conecta em um servidor X
Modos de operação:
O vim possui dois modos de operação:

Modo de inserção de texto:
nesse modo, o vim comporta-se como um editor de texto normal, ou seja, cada tecla pressionada exibirá seu valor na tela normalmente. Para entrar no modo de inserção de texto, pressione a tecla INSERT ou a tecla i.

Modo de comandos:
É o modo inicial do Vim. Nesse modo, cada tecla (ou combinação de teclas) possui uma função especial. Para enttrar no modo de comandos, pressione a tecla ESC.

Arquivos SWAP
Quando você abre um arquivo no vim, ele cria um arquivo oculto de swap. As alterações são registradas inicialmente nesse arquivo de swap e efetivadas no arquivo editado a cada operação de salvamento. Caso haja algum problema durante a edição do arquivo (ex: falta de energia), quando o mesmo arquivo é editado novamente, o vim detecta a presença do arquivo swap e oferece algumas opções:

Operações com arquivos:
Observação: sempre que há a troca do arquivo atual (quando há mais de uma arquivo aberto), quando um arquivo é aberto para edição ou quando o programa for encerrado, é necessário salvar o arquivo, caso o mesmo tenha sofrido alterações. Caso não se deseje salvar as alterações, deve-se acrescentar uma exclamação "!" - para forçar o fechamento/troca do arquivo, desprezando as alterações no arquivo atual.

:e arquivo
abre um arquivo para edição.

:r arquivo
insere o conteúdo de um arquivo na posição atual do cursor

:w
grava o arquivo atual e continua o trabalho.

:w arquivoNovo
salva o arquivo atual com outro nome (arquivNovo) e continua trabalhando no mesmo arquivo (ao contrário de outros editores de texto que passariam a trabalhar com o arquivo recém criado - no caso do exemplo, arquivoNovo).

:q 
sai do programa.

:q!
sai do programa descartando as alterações.

:n 
passa para o proximo arquivo aberto.

:prev
passa para o arquivo anterior

:first 
vai para o primeiro arquivo

:last
vai para o ultimo arquivo

Observação: você pode "juntar" alguns comandos, de modo a realizar duas operações juntas. Por exemplo, para gravar o arquivo e sair do programa, ao invés de executar :w e :q em separado, você pode fazer :wq. Da mesma forma, :wn grava o arquivo atual e vai para o próximo, :wprev grava o arquivo atual e vai para o anterior e assim sucessivamente. Por último, :x é um apelido para :wq (salva e sai).

Comandos para navegação dentro do Texto:

h
um caracter para a esquerda

l
um caracter para a direita


j
uma linha abaixo


k
uma linha acima

método para memorizar: a tecla J lembra uma seta pra baixo, e tem exatamente esta função. A tecla ao seu lado (K) é a seta para cima. A tecla à esquerda das duas (H) faz a seta para a esquerda. E a tecla à direita do conjunto (L) é a seta para a direita. Simples, não?

gg
:1
primeira linha

:numero
vai para a linha desejada. Por exemplo, :50 vai para a 50ª linha.

numero+G
vai para a linha desejada. Por exemplo, 10G vai para a 10ª linha.

G
vai para a última linha. Obs: G maiúsculo.

^
inicio da linha (é preciso digitar um espaço depois do símbolo)

$
final da linha.

Comandos de busca:
f+caracter
avança para a direita até a primeira ocorrência do caracter

F+caracter
retrocede para a esquerda até a primeira ocorrência do caracter

/
pesquisa por string/regex.

?
pesquisa por string/regex. Pesquisa no sentido inverso (para cima).

*
pesquisa pela palavra sobre o cursor.

#
pesquisa pela palavra sobre o cursor. pesquisa no sentido inverso (para cima).

Em quaisquer uma das pesquisas, pressione n para localizar a proxima ocorrência. Pressione N para pesquisar no sentido inverso (ocorrencia anterior - para cima).

Comandos de substituição:
:[range]s/texto\ a\ procurar/[texto a substituir]/[gc]

Onde:
[range] (opcional): range de linhas onde realizar a busca/substituição. Se não informado, faz apenas na linha atual. Caracteres especiais em range:
% - todas as linhas (arquivo todo)
$ - até o fim do arquivo

texto\ a\ procurar: texto que será buscado. Caracteres especiais (que têem significado devem ser protegidos (ou escapados) com "\" (sem aspas), como no exemplo. Para pesquisar por uma "\" utilize "\\".
[texto a substituir] (opcional): texto que será trocado pelo que for encontrado. Se não for informado, o texto encontrado é removido e nada é posto em seu lugar.
g: substitui todas as ocorrencias do texto encontrado. Se não estiver presente, apenas a primeira ocorrência de cada linha é substituida.
c: pede confirmação antes de fazer a substituição


Exemplos de ranges:
:%s/brasil/Brasil/        (arquivo todo)
:50,60s/brasil/Brasil/   (da linha 50 até a 60)
:20,$s/brasil/Brasil/      (da linha 20 até o fim do arquivo)



Mais exemplos:
:%s/brasil/Brasil/gc

Comandos para alteração de caracteres:
~
inverte a caixa do caracter (converte maiusculas em minusculas e vice-versa)

x
d+espaço
exclui o caracter sobre o cursor

r+caracter
troca o caracter sobre o cursor pelo digitado.

Comandos para operações com Buffer (área de transferência)
D
dd
recorta toda a linha e coloca no buffer

Y
yy
copia toda a linha para o buffer, sem removê-la do local atual.

p
cola o conteúdo do buffer na posição atual do cursor.

P
cola o conteúdo do buffer na linha acima da posição atual do cursor.

Repetição de comandos:
numero+comando
executa o comando um certo numero de vezes. Exemplos:

10x
exclui 10 caracteres (o que está sob o cursor mais nove à direita)

3yy
copia 3 linhas para o buffer (a linha atual mais duas abaixo)

5l
"anda" 3 caracteres para a direita

Mistureba (misturando comandos):
dG
recorta tudo entre a posição atual do cursor e o fim do arquivo. Mistura de d (recortar) com G (ir para o final do arquivo)

dgg
recorta tudo entre a posição atual do cursor e o começo do arquivo. Mistura de d (recortar) com gg (ir para o começo do arquivo)

:r !cmd
executa o comando cmd e insere sua saída no texto.

:wq
salva e sai

:wn
salva e avança para o próximo arquivo

:wlast
salva e avança para o último arquivo

Modos Visuais:
Permitem selecionar trechos do texto, para definir o local que será afetado pelo próximo comando (uma busca e substituição ou copiar/recortar, por exemplo).
Existem dois tipos:
Visual (ativado com a tecla v): permite selecionar trechos de linhas, linhas inteiras ou uma combinação disso (uma linha interira e um pedaço de outra abaixo ou acima, por exemplo). Após selecionar, é possível recortar (com d), copiar (com y) ou substituir por outro conteúdo (com p).
Visual Block (ativado com ctrl+v): similar ao modo visual, porém permite selecionar blocos de texto. Por exemplo, é possível selecionar apenas a primeira coluna de cada linha (útil para descomentar várias linhas de uma vez em arquivos de configuração).

Opções úteis
Obs: a maioria dessas opções pode ser colocada diretamente no arquivo de configuração do vim, /etc/vim/vimrc

:set ai
:set noai
Liga/desliga autoidentação. Normalmente é desejavel deixar a identação ligada, principalmente quando se está escrevendo programas/scripts (deixa o texto mais organizado). Porém, em algumas situações pode atrapalhar. Por exemplo, quando se cola texto no PuTTY (a partir do Windows) e essa opção está ativada, o texto fica com um aspecto de "escada" (veja imagem abaixo).

:set bg=dark
:set bg=light
Informa ao vim qual se a cor de fundo da tela é clara ou escura, para que ele possa utilizar um esquema de cores agradável. Normalmente conexões via console e SSH tem fundo escuro, enquanto que em emuladores de console dos ambientes gráficos (kterm no KDE, gterm no Gnome, etc) costumam ter o fundo claro.

:set showcmd
:set noshowcmd
Faz com que os comandos digitados, bem como os modificadores numéricos apareçam, à esquerda da informação de posição do cursor.

:set number
:set nonumber
Exibe/oculta o numero de cada linha

:help assunto
Mostra o help do vim sobre o assunto/comando informado. Será aberta uma nova "janela" (a tela ficará dividida horizontalmente em duas). Para alternar entre as janelas, pressione CTRL+W CTRL+W (duas vezes). Assim, você pode alternar entre a navegação no texto do help e no seu próprio texto. Para sair do help, pressione :q. Você voltará à edição do seu arquivo.

:! cmd
executa o comando cmd no shell dentro do vim, e mostra o resultado na tela (mas não altera o arquivo). Útil para compilar código/realizar testes durante a programação sem precisar sair do editor. Ou para trocar a permissão do arquivo sendo editado, para permitir salvar as alterações.
Ex:
:! gcc -o main main.c
:!php arquivo.php
:chmod u+w arquivo.txt

Simulados LPIC-1 e LPIC-2

Navegando na net encontrei esses simulados para as provas LPI 101 (LPIC-1) e LPI 201/202 (LPIC-2). Embora o ambiente não simule fielmente o ambiente de provas, vale pelas questões, para se ter uma noção de como são as questões da prova.
O link para os simulados é http://www.stato.blog.br/wordpress/?page_id=102

Erro fatal ao carregar o módulo it87

Problema
Ao tentar carregar o módulo it87 (com "modprobe it87" ou "insmod it87") para leitura de valores dos sensores da placa mãe (velocidade dos coolers, valores das tensões da fonte e temperaturas do processador e do sistema) ocorre o seguinte erro:
FATAL: Error inserting it87 (/lib/modules/2.6.32-5-xen-amd64/kernel/drivers/hwmon/it87.ko): Device or resource busy
Solução
Inserir a seguinte opção na linha de comando do seu kernel.
acpi_enforce_resources=lax 
O arquivo a ser editado depende da versão do grub sendo utilizada (supondo-se que você utiliza o grub, é claro)

Grub 1
Edite o arquivo /boot/grub/menu.lst, localize a linha que carrega o seu kernel (é uma das linhas que começa com kernel) e insira a opção no final da linha.

Grub2
Edite o arquivo /etc/default/grub, localize a linha
GRUB_CMDLINE_LINUX=""
E edite-a para ficar dessa maneira (COM as  aspas, dessa vez)
GRUB_CMDLINE_LINUX="acpi_enforce_resources=lax"
por fim, execute o comando update-grub.

Xen não inicializa - erro Exception starting xend: no element found

Sistema:
Xen 3.1/4.0

Problema:
após shutdown inadequado (falta de luz), o serviço Xen recusa-se a subir e exibe o seguinte erro:
Exception starting xend: no element found: line 1, column 0
Solução:
Vá até o diretório /var/lib/xend/state e exclua (ou mova para outro local) os arquivos XML do diretório state
find /var/lib/xend/state -type f -name *.xml -exec rm {} \; (para remover)
ou
find /var/lib/xend/state -type f -name *.xml -exec mv {} /root \;  (para mover para outro diretório, no caso o /root)
Após isso, inicie o serviço do Xen com /etc/init.d/xend start e o problema deve estar resolvido.

Ligando equipamentos com Wake-On-Lan (WOL)

Introdução:
Wake On Lan é uma tecnologia que pemite ligar ("acordar") um ativo de rede (micros, servidores, roteadores, switches, etc) que esteja desligado, através do envio de um pacote especial chamado MagicPacket para a placa de rede do computador.

Limitações:
* Funciona apenas em redes cabeadas, ou seja, não funciona em redes wireless.
* O equipamento que será ligado e o que vai enviar o MagicPacket precisam estar no mesmo segmento de rede. MagicPackets são pacotes de broadcast e portanto não atravessam roteadores.
* Placas de rede mais antigas (MUITO antigas)podem não ter suporte à tecnologia.

Verificando o suporte:
Verificar se sua placa de rede tem suporte a WOL é fácil: em caso de placas de rede on-board, basta acessar a BIOS do computador, procurar pela opção e colocar como "Yes" ou "Enabled". Costuma ficar na parte de gerenciamento de energia (Power Management). Procure por opções como WOL, Wake On Lan, Power On By PCI devices, Power On By PCIE devices, etc. Veja as imagens abaixo.





Caso a sua bios não mostre uma dessas opções, nem tudo está perdido (a minha por exemplo não mostra, no entanto o WOL funciona perfeitamente). Entre no Linux, e utilize o comando ethtool, que verifica e configura opções nas placas de rede.

Nota: utilizo WOL em um host Xen e percebi que a interface eth0 é uma interface virtual. A interface real é a peth0 (provavelmente o "p" é de physical (física)). Se esse for o seu caso, certifique-se de informar a interface correta (peth0).

[root@debian ~]# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Link detected: yes
A parte que nos interessa são as linhas "Supports Wake-on" e "Wake-on". "Supports Wake-on" mostra os tipos de tecnologias de WOL que a placa suporta (existem mais de uma). No caso essa placa suporta apenas o modo "g", que é justamente WOL via MagicPacket. A linha "Wake-on" mostra quais tecnologias WOL estão ativos atualmente na placa. No nosso caso, está mostrando "d", de "disabled". Ou seja, essa placa suporta WOL via MagicPacket mas atualmente a opção está desligada.

Ativando o suporte via software:
Para ativar o suporte a WOL (com MagicPacket), utilize o seguinte comando:
/sbin/ethtool -s eth0 wol g
Ao reiniciar a máquina, essa configuração é perdida. Assim é necessário acrescentar essa linha ao arquivo /etc/rc.local, para que ela seja executada a cada boot (nota: a última linha do arquivo /etc/rc.local tem de ser exit 0). Isso habilita o WOL via MagicPacket na interface selecionada (eth0) a cada boot. O problema é que durante o processo de desligamento da máquina, a interface de rede é desligada. Para evitar isso, é necessário editar o arquivo /etc/init.d/halt. Procure logo no começo do arquivo pela linha NETDOWN=yes e troque para NETDOWN=no.

Despertando
Para despertar a máquina, é necessário executar um cliente WOL em outro computador.

Linux:
instale o pacote wakeonlan (apt-get install wakeonlan)

execute o comando wakeonlan (em alguns casos o comando pode se chamar wol, mas a sintaxe é a mesma):
wakeonlan MAC-ADDRESS 
onde MAC-ADDRESS é o endereço de hardware (MAC) da máquina que se deseja ligar. Para descobrir o endereço MAC de uma interface, digite o comando ifconfig e procure por HWaddr.
Se a máquina cliente (onde o comando wakeonlan é executado) possui mais de uma interface de rede, é necessário informar o endereço de broadcast da rede à qual o micro a ser despertado pertence, com a opção -i. Nesse caso o comando ficaria:
wakeonlan -i 192.168.1.255 AA:BB:CC:11:22:33 
Supondo-se uma rede 192.168.1.0/24 e um equipamento com MAC AA:BB:CC:11:22:33.

Existe a possibilidade de informar a porta UDP a ser utilizada, com a opção -p. O padrão é 9. Minha máquina normalmente é despertada com a porta 7 (embora eu nunca tenha testado com outras), então meu comando fica assim:
wakeonlan -i 192.168.1.255 -p 7  AA:BB:CC:11:22:33
A última opção é a -f, que permite o uso de um arquivo com os endereços de diversos equipamentos a serem ligados. Útil por exemplo para ligar vários equipamentos em uma hora específica, visando algum tipo de manutenção (atualização/execução de antí-virus, por exemplo).

Existem também clientes WOL para o modo gráfico, como o GWakeOnLan (http://code.google.com/p/gwakeonlan/ ), escrito em GTK:



Roteadores com DD-WRT instalado:
Se o seu roteador possui instalada a distro DD-WRT (o meu tem, e eu recomendo), você pode cadastrar vários equipamentos na interface gráfica, e realizar o WOL a partir de lá:



Windows:
Uma busca no Google mostra que existem diversos clientes disponíveis para Windows. Infelizmente, como eu nunca utilizei nenhum, não tenho um específico para indicar. Se alguém tiver um pra sugerir, pode mandar a dica para antipragas@gmail.com, que eu atualizo o post (ou colocar nos comentários).

Uma última observação: um problema que me ocorre às vezes é quando o micro é ligado e desligado na sequência (sem que o sistema operacional seja carregado), ou quando ele é desligado sem o procedimento normal (em caso de falta de energia, por exemplo), o WOL fica indisponível até o proximo boot. Desconfio que seja devido ao fato da minha BIOS não dar suporte à tecnologia. Em casos como esse, basta ligar o equipamento normalmente (pelo botão de power) e após o shutdown/restart correto o funcionamento volta ao normal.

Criando um mirror local do debian no centos

Introdução:
É possível criar um mirror do Debian em uma equipamento rodando outras distribuições, como CentOS, RedHat e similares. Na verdade, as instruções abaixo são genéricas e em teoria servem para qualquer distribuição. Antes que alguém pergunte o porque de fazer isso eu explico: tenho um cliente que utiliza CentOS por padrão. Porém surgiu a oportunidade de utilizar alguns equipamentos da SUN. O problema é que essa arquitetura (Sparc) não é suportada pelo CentOS. Assim, fiz a instalação do Debian (que suporta a arquitetura Sparc) e resolvi criar um mirror interno para acelerar as futuras instalações/atualizações.

Instalando as dependências:
O programa debmirror é escrito em PERL. Sendo assim, precisamos instalar alguns módulos dessa linguagem para poder executar o programa. Abaixo a lista de arquivos necessários e onde localizá-los:

Arquivos/pacotes disponíveis no próprio CentOS (copiar do CD ou instalar via "yum install"):
perl-libwww-perl-5.805-1.1.1.noarch.rpm
perl-Compress-Zlib-1.42-1.fc6
perl-Digest-SHA1-2.11-1.2.1.i386.rpm
perl-Net*
rsync
bzip2
Arquivos que devem ser baixados da internet:
http://packages.sw.be/perl-Digest-MD5-M4p/perl-Digest-MD5-M4p-0.01-1.2.el5.rf.i386.rpm
http://packages.sw.be/perl-LockFile-Simple/perl-LockFile-Simple-0.206-1.el5.rf.noarch.rpm
Por fim, baixe o próprio debmirror neste endereço:
http://archive.ubuntu.com/ubuntu/pool/universe/d/debmirror/debmirror_20070123ubuntu1.tar.gz
Não coloquei aqui, mas você também precisa de um servidor web (como o apache) ou FTP (como o proftpd), para servir os arquivos aos clientes (a menos que pretenda utilizar algum outro método menos usual, como NFS).

Você pode checar a página de manual online, no seguinte endereço:
http://pwet.fr/man/linux/commandes/debmirror

com tudo instalado, basta fazer a configuração normalmente, conforme o artigo anterior: