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:

Livro: Curso de Shell Script - Julio C. Neves

Dica Rápida:

A Revista Linux Magazine liberou gratuitamente as onze partes do curso de shell script "Papo de Botequim", do Julio Cezar Neves, autor de um excelente livro sobre o assunto, "Programação Shell Linux". O material está em formato PDF e não é necessário cadastro para realiza o download. O endereço é esse:

http://www.linuxnewmedia.com.br/lm/noticia/baixe_o_curso_de_shell_script_do_julio_cezar_neves

Para ver outros artigos sobre programação na Linux Magazine, acesse o seguinte endereço (alguns artigos precisam ser comprados).

http://www.linuxmagazine.com.br/lm/categories/19

Para acessar o site do autor, http://wiki.softwarelivre.org/bin/view/TWikiBar/WebHome (e se você resolver comprar/alugar a casa dele à venda em Arraial do Cabo, não se esqueça de me convidar para um fim de semana !!!)

Desabilitando o SELinux

O SELinux (Security-Enhanced Linux) é uma implementação de uma camada de segurança para o Linux, desenvolvido basicamente pela NSA (National Security Agency), a Agência Nacional de Segurança dos Estados Unidos. Ele vem habilitado por padrão na distribuição CentOS. O problema é que, sem configuração específica, ele impede a atualização/transferência de zonas DNS pelo bind/named.

Para verificar se o selinux está habilitado em seu sistema, execute o seguinte comando
selinuxenabled; echo $?
Caso o resultado seja 0, o SELinux está habilitado. Se o resultado for 1, então está desabilitado.

Para desabilitar o SELinux, faça o seguinte:

Edite o arquivo /etc/selinux/config. Localize a linha
SELINUX=enforcing
e troque por
SELINUX=disabled
Isso vai desabilitar o SELinux no próximo reboot. Para desabilitar imediatamente, execute o seguinte comando:
setenforce 0
Isso vai desabilitar o SELinux até o proximo reboot.

Console de Recuperação do Windows XP

Introdução:
Existem algumas situações em o Windows 2000 ou XP não entra, sendo então necessário executar o CHKDSK (utilitário de verificação de disco). Porém, o mesmo só pode ser executado à partir do Windows. Cria-se então um paradoxo: é necessário executar o CHKDSK para entrar no Windows, e é necessário entrar no Windows para poder executar o CHKDSK. Existem diversas soluções para esse problema (algumas inclusive utilizando linux e softwares livres), mas a maneira mais simples de solucioná-lo é tendo previamente  instalado o Console de Recuperação do Windows antes do problema aparecer.

Instalando o Console de Recuperação
  • Com o CD do Windows XP no drive, vá em Iniciar -> Executar.
  • Digite na caixa de diálogo o seguinte comando:
d:\i386\winnt32.exe /cmdcons
  • Pressione Sim (ou Yes) na janela que vai surgir, e acompanhe normalmente a instalação até o final.
  • Para testar, reinicie o computador. Deverá aparecer um menu, com as opções de iniciar o Windows ou o Console de recuperação. 
 Mais informações
KB 307654 - Knowledge Base da Microsoft sobre o assunto

Como habilitar alta resolução no console (framebuffer)

Introdução:
Por razões históricas (herança dos antigos terminais burros), o console do Linux possui a resolução padrão de  80 colunas X 24 linhas. No entanto é possível aumentar a resolução do terminal para resoluções maiores, como 1024x768 (ou maoires ainda). Isso facilita na hora de utilizar algumas ferramentas de rede, como iftop, iptraf ou o próprio iptables, além de permitir o algumas tarefas que normalmente só seriam executadas em modo gráfico, como visualizar imagens com o cacaview (pacote Debian: caca-utils), navegar na intenet com o links2 (utilizar a opção "-g") ou ainda ver filmes com o mplayer, tudo isso em modo texto!



Itens necessários:
  • Uma placa de vídeo compatível (atualmente todas são, mesmo as on-board).
  • Um monitor que suporte a resolução desejada.
  • Suporte habilitado no kernel (normalmente já vem habilitado na maioria das distribuições)
Configurando:

1) Reinicie seu computador. Na tela de seleção de kernel para boot, selecione o kernel desejado e pressione a tecla "E"


2) Agora você está em modo de edição. Selecione a linha que inicia com a palavra "kernel" e pressione a tecla "E" novamente.

3) Você está editando a linha de comando do kernel. Acrescente ao final da linha a opção vga=xxx, onde xxx é o valor desejado obtido na tabela (e já convertido para decimal). Após acabar de inserir o texto, pressione Enter.


4) Retornamos à tela anterior, já com a alteração efetivada. Se precisar alterar alguma coisa, retorne ao passo 2. Para efetuar boot com essa configuração, pressione "B".


Caso a imagem "suma" e apareça uma mensagem semelhante a essa abaixo (a mensagem específica vai depender do modelo e fabricante do seu monitor), você selecionou um modo de vídeo não suportado pelo seu monitor. Reinicie o computador e tente novamente com uma resolução menor.



Após encontrar uma freqüência que efetivamente funcione no seu hardware, fixe a configuração no seu gerenciador de boot. No caso do grub, a configuração fica no arquivo /boot/grub/menu.lst

Referências
http://www.mjmwired.net/kernel/Documentation/fb/vesafb.txt (linha 55. Observe que esta tabela está em hexadecimal, e é necessário converter seus valores para decimal)
http://en.wikipedia.org/wiki/VESA_BIOS_Extensions#Linux_video_mode_numbers

Como saber quais cartões de memória sua câmera Sony aceita

Introdução
Quem  possui uma câmera digital Sony (como é o meu caso) fica sempre na dúvida na hora de comprar um cartão de memória: será que minha câmera aceita esse modelo/ de cartão? Os manuais normalmente contém essa informação (embora a cada dia que passa mais me convenço de que ninguém mais além de mim lê manual ...), mas ela costuma estar incorreta, pois contém os dados disponíveis na época da impressão do manual (ou seja, após a impressão do manual foi lançado um modelo de cartão com mais capacidade, e sua câmera suporta, mas o manual traz uma informação contrária a essa).

Tabela
Para saber quais modelos e capacidades de memory stick (cartão de memória) são compatíveis com sua câmera Cyber Shot (série DSC-XXX) acesse o seguinte link: http://esupport.sony.com/perl/support-info.pl?&info_id=12

Para descobrir o modelo de sua câmera, procure uma etiqueta na parte inferior da mesma. O modelo é algo parecido com DSC-XXXX. Minha câmera por exemplo é uma DSC-S500. Veja essa foto, de um modelo DSC-H2 (http://upload.wikimedia.org/wikipedia/commons/e/e8/Sony_DSC-H2_Bottom.jpg):





Com o modelo da câmera em mãos, procure (CTRL + F) o mesmo na tabela. Note que para alguns modelos de cartões será necessário o uso de um adaptador.

Entendendo a saída do comando ifconfig

Vamos analisar a saída do comando ifconfig abaixo:


# ifconfig
eth0      Link encap 10Mbps Ethernet  HWaddr 00:00:C0:90:B3:42
          inet addr 172.16.1.2 Bcast 172.16.1.255 Mask 255.255.255.0
          UP BROADCAST RUNNING  MTU 1500  Metric 0
          RX packets 3136 errors 217 dropped 7 overrun 26
          TX packets 1752 errors 25 dropped 0 overrun 0

ppp0      Link encap:Point-to-Point Protocol
          inet addr:187.15.72.157  P-t-P:200.200.200.200  Mask:255.255.255.255
          UP POINTOPOINT RUNNING MULTICAST  MTU:1400  Metric:1
          RX packets:1504239 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1155539 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:1905349557 (1.7 GiB)  TX bytes:81721536 (77.9 MiB)

imq0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP RUNNING NOARP  MTU:1500  Metric:1
          RX packets:2647959 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2647730 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:30
          RX bytes:1987468198 (1.8 GiB)  TX bytes:1987198741 (1.8 GiB)
Descrição dos campos:
Link encap: Tipo de conexão do link (ethernet, ponto-a-ponto, etc)
HWAddr: Endereço de hardware (MAC Address) da interface. Nem todas as interfaces possuem. Nesse caso, pode aparecer como 00-00-00- ... ou simplesmente não aparecer.
UP BROADCAST RUNNING  MTU 1500  Metric 0: Indica as características da interface de rede:
  • UP/RUNNING: indica que a inteface está ativa.
  • BROADCAST/MULTICAST: indica que a interface suporta esta modalidade de tráfego (broadcast / unicast)
  • MTU: Quantidade máxima de bytes que a interface pode transmitir/receber a cada operação.
  • Metric: Não é utilizado.
  • NOARP: Indica que a interface não suporta operações com endereços de hardware (MAC)
inet addr: endereço IPv4 da interface (não é orbigatório).
inet6 addr: endereço IPv6 da interface (não é orbigatório).
P-t-P: Indica o endereço da "outra ponta" da conexão (apenas para conexões ponto-a-ponto).
Bcast: Endereço de Broadcast da interface (apenas se houver um endereço IPv4 configurado).
Mask: Máscara de rede  da interface (apenas se houver um endereço IPv4 configurado).
RX e TX: Contabiliza os pacotes recebidos (RX) e enviados (TX), bem como os descartados por motivos diversos na transmissão e recepção.
errors: pacotes que não puderam ser transmitidos/recebidos devido a erros (nos próprios pacotes).
dropped: normalmente indica erros de configuração/comunicação. Ex: um equpamento está operando em half-duplex, enquanto o outro está em full-duplex.
overruns: a interface possui duas filas (ou buffers), uma de transmisão e outra de recepção, com um determinado tamanho. Quando essa fila "enche", os pacotes excedentes são descartados como overruns. Em suma: a interface de rede está tentando receber/transmitir mais pacotes/segundo do que o sistema como um todo (interfaces de rede, processador, etc) suporta.
frame: quadros (frames) mal formados.
carrier: erro no link físico. Má fiação, cabos de rede e energia juntos, etc.
collisions: Colisões de rede. Comuns em ambientes com HUBS. Não deveriam ocorrer em ambientes com switches. Se for o caso, cheque a configuração dos equipamentos no tocante ao modo DUPLEX (HALF/FULL) utilizado.
txqueuelen: tamanho da fila (buffer) de transmissão. Normalmente não é necessário alterar o valor padrão.
RX bytes / TX bytes: quantidade de bytes recebidos / transmitidos. (medido em Mebibytes/Gibibytes - http://en.wikipedia.org/wiki/Mebibyte)

Derrubando Conexões já estabelecidas no Squid

O Problema:
Imagine a seguinte situação: você detecta (via sqstat, por exemplo) uma conexão a um site que deveria ser proibido, mas ainda não consta nas suas listas de bloqueio. Assim, você faz insere o site na lista e efetua o reload do squid (normalmente com "/etc/init.d/squid reload" OU "squid -k reconfigure"). As novas conexões são bloqueadas, mas as já existentes permanecem. Dar um restart implicaria em um downtime (ainda que apenas de 1 minuto) na rede toda.

A Solução: Bloquear via negação de rota

1) Descobrir o endereço IP do host de destino:

ping mediafarm02.cdn.embratel.net.br
PING mediafarm02.cdn.embratel.net.br (200.214.220.66) 56(84) bytes of data.
64 bytes from 200.214.220.66: icmp_seq=1 ttl=246 time=2.10 ms

2) Rejeitar a rota para o host desejado.
route add -host 200.214.220.66 reject

3) Checando com o comando route. Perceba que não há indicação de roteador nem interface para o destino selecionado, e que há um sinal de exclamação mostrando que a rota foi rejeitada.


Alguns segundos após a criação da rota, a conexão dá timeout e é finalizada. Posteriormente, essa rota pode ser removida, pois novas conexões serão tratadas diretamente pelo squid.

Colorindo o modo texto: vim

Colorindo o modo texto: vim 
Uma das funcionalidades que eu mais gosto no editor de texto vim é o syntax highlighting: cada palavra ou trecho do arquivo fica colorido com um padrão de acordo com o significado dele no contexto do arquivo. Por exemplo, em um arquivo de configuração, o nome das opções (se estiver correto) fica em verde, o valor da opção fica amarelo. Comentários ficam em azul claro e palavras não reconhecidas ficam na cor "tradicional" (branco). O programa também destaca os parênteses/aspas/colchetes, diminuindo a chance de você abrir um bloco de texto e esquecer de fechar, ou se perder em quando há varios blocos aninhados (programadores sabem do que eu estou falando ;-) ). Isso facilita o trabalho e diminui a chance de erros de sintaxe nos arquivos. Uma verdadeira mão na roda para administradores e programadores.

Habilitando
Para habilitar o suporte a cores, edite o arquivo de configuração do vim (/etc/vim/vimrc). Procure pelas linhas
"syntax on
"set background=dark
e apague as aspas ( " ) no começo de cada linha (no arquivo de configuração do vim, aspas são o sinal de comentários). Salve o arquivo e agora os arquivos dos mais diversos formatos estarão coloridos, seguindo um padrão lógico de cores e facilitando a edição.

Veja aqui dois exemplos. O mesmo trecho de um arquivo, primeiramente sem o syntax highlight habilitado e depois o mesmo trecho com as cores habilitadas.




Expandindo:
O vim já vem com uma grande quantidade de arquivos de definição de sintaxe (você pode ver todos eles no diretório  /usr/share/vim/vim71/syntax/ ). Mesmo assim, caso você necessite de algum modelo que não esteja lá, existe no próprio site do vim um repositório de arquivos de sintaxe, no endereço http://www.vim.org/scripts/ . Obviamente, você também pode desenvolver seu próprio modelo. Nesse caso, envie-o para o site para que outros também possam se beneficiar.

Obs:
Ao tentar editar um arquivo você pode receber a seguinte mensagem:
Error detected while processing /usr/share/vim/vimrc:
line   20:
E319: Sorry, the command is not available in this version: syntax on
Press ENTER or type command to continue
Em seguida o vim abre, mas o arquivo não está colorido. A razão disso é que o Debian por padrão vem com o editor vim-tiny instalado. O editor vim-tiny é uma versão reduzida do vim (tiny significa muito pequeno, minúsculo), que vem com algumas características a menos, incluindo aí o suporte a cores. Para ter suporte a cores, instale o pacote vim (apt-get install vim), que fornece o vim completo.

Bloqueando Programas de Bate-Papo: Google Talk

Bloqueando Programas de Bate-Papo: Google Talk
Para bloquear o acesso aos seus programas de bate-papo, o google disponibiliza algumas URLs a serem bloqueadas papExistem duas versões do Google Talk: a versão aplicativo de desktop (que precisa ser instalada), e a versão web (disponível no Orkut, iGoogle e Gmail)


Gadget Web (dentro do GMail)
Basta bloquear as seguintes URLs:
chatenabled.mail.google.com
mail.google.com/mail/channel/bind
Obs: O bloqueio deste endereço não interfere no funcionamento normal do Gmail.


Gadget Web (Orkut e iGoogle)
Nesse caso, bloqueie a seguinte URL:
talkgadget.google.com/talkgadget/popout?hl=pt-BR
Programa Google Talk
Para o programa de desktop as URLs são as seguintes:
talk.google.comtalkx.l.google.com
Referência:
http://www.google.com/support/chat/bin/answer.py?hl=pt-BR&answer=161980

Colorindo o modo texto: grep

Colorindo o modo texto: grep
Quando estamos utilizando o grep, as vezes fica dificil distinguir em uma listagem muito grande qual foi o trecho de determinada linha que "bateu" com a expressão utilizada do grep. Para resolver isso, utilize a opção --color do grep. Veja as seguintes imagens: ambas são o mesmo comando "squid -v | grep diskd" (que verifica se o squid foi compilado com suporte à diskd):

Sem a opção --color:

Com a opção --color:


Para habilitar de forma permanente o comando existem duas possibilidades, ambas são configuradas no arquivo ~/.bashrc (inclua apenas UMA das linhas abaixo no arquivo):

1) alias grep='grep --color'
2) export GREP_OPTIONS="--color"

Para trocar a cor da letra (o padrão é vermelho em negrito) , utilize o comando export GREP_COLOR="NN;XX" (para que a alteração seja permanente, insira essa linha no arquivo .bashrc no diretório home do usuário. Os números seguem a mesma tabela de cores do comando dircolors, conforme abaixo:

Atributos:
00=nenhum 01=negrito 04=sublinhado 05=piscar 07=invertido (inverte a cor de fundo com a cor da letra) 08=oculto (?)

Cor do Texto:
30=preto 31=vermelho 32=verde 33=amarelo 34=azul 35=magenta 36=ciano 37=branco

Cor de Fundo:
40=preto 41=vermelho 42=verde 43=amarelo 44=azul 45=magenta 46=ciano 47=branco

Por exemplo, o comando export GREP_COLOR="32" configuraria a cor verde. Já o comando export GREP_COLOR="04;37;44" criaria uma letra branca sublinhada e com fundo azul.

Colorindo o modo Texto: ls

Habilitando as cores:
Para habilitar o comando ls com cores, basta adicionar a opção --color=auto. Para não ter de ficar digitando-se isso a toda hora, normalmente criamos um alias com esse comando no arquivo de configuração do bash, o .bashrc. Descomente (ou crie) as seguintes linhas no arquivo ~/.bashrc:
 export LS_OPTIONS='--color=auto'
 eval "`dircolors`"
Editando as cores
O comando ls já vem com um padrão de cores pré-definido, porém nada impede que você crie seu próprio padrão, alterando as cores ou acrescentando novas extensões. Para editar as cores, execute:
dircolors --print-database > cores.txt
Será gerado o arquivo cores.txt, que contém as definições padrão de cores do sistema. Edite esse arquivo em seu editor favorito.

Notas sobre o formato do arquivo:
  • Itens em maiúsculas representam tipos especiais de arquivos (FIFO, SOCK, DIR, LINK, etc).
  • Também podemos alterar as cores atribuídas às extensões, colocando as extensões no formato ".xxx"
  • Os números significam cor da letra, cor de fundo e efeitos visuais, conforme a tabela abaixo:
Atributos:
00=nenhum 01=negrito 04=sublinhado 05=piscar 07=invertido (inverte a cor de fundo com a cor da letra) 08=oculto

Cor do Texto:
30=preto 31=vermelho 32=verde 33=amarelo 34=azul 35=magenta 36=ciano 37=branco

Cor de Fundo:
40=preto 41=vermelho 42=verde 43=amarelo 44=azul 45=magenta 46=ciano 47=branco

Após deixar o arquivo conforme desejado, edite o arquivo ~/.bashrc e altere a linha
eval "`dircolors`"
para
eval "`dircolors cores.txt`"
Por fim, é necessário processar novamente o arquivo ~/.bashrc. Isso pode ser feito de duas formas: efetuando logout e login novamente ou com o comando
source ~/.bashrc .

Configurando o squid e iptables para proxy transparente


Introdução:
Proxy transparente é uma forma de se implementar um proxy em uma rede sem que haja a necessidade de configurá-lo nos aplicativos clientes. Na verdade, na maioria das vezes o cliente nem se dá conta de que há um proxy na rede, a menos que haja algum controle limitando acesso. Embora alguns (a maoiria?) dos profissionais não goste do proxy transparente (e eu me incluo nessa turma), algumas vezes é um mal necessário.

Funcionamento:
No modo normal de proxy, os equipamentos são configurados explicitamente para enviar os dados para o proxy. No proxy transparente, os equipamentos não sabem da existência do proxy. Assim, eles enviam os dados para o gateway da rede, que intercepta os dados e os envia para o proxy.

Observação:
Devido ao fato do cliente não saber da presença do proxy, não é possível utilizar autenticação no squid com proxy transparente (o cliente não tem como enviar os dados para um equipamento que ele não sabe que está lá ...). Existem porém outras alternativas como o NoCat.net/ .

Habilitando:
São necessárias duas configurações: habilitar o squid para trabalhar em modo transparente e realizar o desvio dos dados no firewall/gateway (aqui veremos a configuração do iptables). 

Configurando o squid:
Existem duas formas de realizar a configuração, dependendo da sua versão do squid. Todas as configurações são realizadas no arquivo de configuração do squid (normalmente em /etc/squid/squid.conf)

Versão 2.6 (e anteriores):
http_port 3128
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
Versão 2.7 em diante:

http_port 3128 transparent # (beeem mais simples, não é?)

Configurando o IP Tables (independente da versão do squid):

Considerações:
O endereço IP do servidor com o squid é 10.10.14.2, o squid está rodando na porta 3128 e a interface de rede do firewall conectada à rede local é a eth0.

1) Se o squid ficar na mesma máquina que o FW (não recomendável por questões de segurança)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
2) Se o squid ficar em uma máquina diferente (recomendado)
iptables -t nat -A PREROUTING -i eth0 -p tcp -s !10.10.14.2 --dport 80 -j DNAT --to-destination 10.10.14.2:3128

Cacti: Erro ao exibir árvore de gráficos

Introdução:
O Cacti é um sistema em PHP para a geração de diversos gráficos de performance e monitoração de ativos de rede, através de consultas SNMP. É versátil, intuitivo e expansível através de plugins.

Erro:
Ao abrir a "árvore" de gráficos (tree) não nenhum gráfico é exibido. Porém ao clicar nos links onde deveriam aparecer os gráficos,  os gráficos aparecem normalmente.



Também aparecem os seguintes erros no log de erros do apache (error.log):
ERROR: I don't understand ':27:22 To 2011/03/02 00:22:22\c' in command: 'COMMENT:From 2011/03/01 00:27:22 To 2011/03/02 00:22:22\c'.
Solução:
Indique a versão correta do pacote RRDTools instalada no seu sistema nas configurações do Cacti (é necessário efetuar o login como administrador).


No meu caso, eu tenho a versão 1.3.X instalada, mas no sistema estava configurado como 1.0.x (que deve ser o padrão).

Bloqueando Programas de Bate-Papo: MSN / Windows Live Messenger

Bloqueando Programas de Bate-Papo: MSN / Windows Live Messenger


Portas:
Por padrão, o WLM utiliza a porta 1863. No entanto, se essa porta estiver bloqueada, ele desvia o tráfego para as portas 80 e 443 (utilizadas para navegação Web).

Detecção de Rede: TCP 7001, UDP 9, 7001
WhiteBoard (Quadro Branco):  TCP 1503

URLs:
https://Login.live.com
http://Login.live.com
https://*.contacts.msn.com
https://*.storage.msn.com
http://*.storage.msn.com
http://c.msn.com
http://*.messenger.msn.com
http://g.msn.com
http://crl.microsoft.com
http://messenger.hotmail.com:1863
http://gateway.messenger.hotmail.com
http://config.messenger.msn.com
https://ows.messenger.msn.com
https://rsi.hotmail.com
http://sqm.microsoft.com
http://*.edge.messenger.live.com
http://relay.data.edge.messenger.live.com
http://rad.msn.com
http://appdirectory.messenger.msn.com
https://images.messenger.msn.com
http://spaces.live.com
http://relay.voice.messenger.msn.com
http://sup.live.com
http://sup.live.com/whatsnew/whatsnewservice.asmx
http://vp.sip.messenger.msn.com

Referência:
http://support.microsoft.com/kb/960820/en-us
http://support.microsoft.com/kb/927847/en-us
http://support.microsoft.com/kb/2027572/en-us