O paradoxo do Exterminador do Futuro

November 4, 2009

Quase não consegui dormir essa noite pensando sobre o que James Cameron quis fazer na série O Exterminador do Futuro, não sei se ele não tem a menor noção dos paradoxos de viagens no tempo ou se ele sabia o que estava fazendo. Mas bem, considerando que ele sabia o que estava fazendo, fui obrigado a fazer diagramas essa noite tentando colocar no papel a origem “dos” John Connor que viriam a existir no futuro. Encontrei esse excelente artigo sobre o problema, deixei minha opnião como um comentário do artigo. Vocês também devem ter ficado bitolados com o fato de o filme dizer que o John Connor enviou Kyle Reese de volta no tempo para proteger sua mãe e esse veio a ser o seu pai. Mas, se John Connor o enviou no tempo, indiretamente para ser o seu pai, como diabos ele já existia no futuro??? Leiam o artigo, é uma boa teoria do que se passa na série.


Novidades do Bash 4

September 29, 2009

Algumas novidades na nova versão do Bash me deixaram empolgado.

Vetores associativos

Esse recurso permite criar “dicionários” em bash, para ativá-lo use declare -A <nome_do_vetor>, exemplo:

declare -A lista
lista['nome']=”Danilo Egea”
lista['idade']=21
lista['sexo']=”nao lembro quando foi a ultima vez”

Para recuperar os valores use ${lista['nome']}, exemplo:

echo ${lista['sexo']}
nao lembro quando foi a ultima vez

Conversão de maiúsculo para minúsculo e vice versa

O Bash agora permite usar algumas expansões de variáveis novas, são elas: “,”,  “,,”, “^” e “^^”.

Para converter a primeira letra para maiúsculo use:

nome=”danilo”
echo ${nome^}
Danilo

Para converter todas as letras para maiúsculo:

nome=”danilo”
echo ${nome^^}
DANILO

Para converter a primeira letra para minúsculo:

nome=”DANILO”
echo ${nome,}
dANILO

Para converter todas as letras para minúsculo:

nome=”DANILO”
echo ${nome,,}
danilo

Usando ** para listar arquivos

Use ** para listar todos os arquivos dentro de todos os diretórios de onde você está no momento, ** expande para uma lista de todos os arquivos, exemplo:

ls **

FONTE: Linux Magazine edição 58.


Squid com ZPH

September 19, 2009

ZPH (Zero Penalty Hit) é um recurso do squid que permite a marcação de pacotes originados de algo que está em cache. Ele é usado principalmente em sistemas onde há controle de banda. Quando você faz a limitação de tráfego no servidor, os objetos que estiverem em cache também serão limitados quando solicidatos. Com o ZPH você consegue saber o que não deve passar pelo controle de banda. No seu squid.conf coloque as seguintes linhas:

zph_mode tos
zph_local 0×02

Assim o Squid irá marcar os pacotes com a flag 0×02, agora no seu firewall (IPFW no meu caso) adicione uma regra permitindo o tráfego marcado antes das suas regras de controle de banda:

ipfw -q add 50 allow ip from any to any iptos mincost

default:
 set log Phase Chat LCP IPCP CCP tun command
 set device /dev/cuaU0
# set speed 236800
 set speed sync
 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT \
           OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"

claro:
 set authname claro
 set authkey claro
 set phone *99***1\#
 set login "TIMEOUT 10 \"\" \"\" \ CAUSE ERROR PLEASE NO CHANGE!
      gin:--gin: \\U word: \\P"
 set timeout 1
 set ifaddr 10.0.0.1/0 127.0.0.1/0 255.255.255.0 0.0.0.0
 #set ifaddr 10.0.0.1/0
# add default HISADDR
 enable dns
default:
 shell logger "LABEL down (up UPTIME): OCTETSIN received, OCTETSOUT sent"

claro:
 shell route delete default
claro:
 shell route delete default
 shell route add default -interface INTERFACE

Rotacionando os logs do Squid com o Newsyslog no FreeBSD

September 19, 2009

O Newsyslog é uma ferramenta do FreeBSD criada para manutenção de logs, ela é usada pelo sistema para rotacionar logs como o /var/log/messages, /var/log/auth.log e etc. O link abaixo mostra como usá-la para rotacionar e compactar os logs do Squid, não se esqueça de colocar “logfile_rotate 0” no seu squid.conf.

REFERÊNCIA


Lista de idéias para o FreeBSD 9.0

September 18, 2009

Durante uma sessão de brainstorm entre os desenvolvedores do FreeBSD, algumas coisas interessantíssimas sairam daquelas mentes, como suporte a Xen dom0, melhorias para o VirtualBox e mais um monte de coisas.

REFERÊNCIA


ZFS considerado pronto para produção no FreeBSD 8

September 15, 2009

O ZFS agora é considerado pronto para produção no FreeBSD 8 segundo seus desenvolvedores. Isso realmente foi uma boa notícia, agora é só esperar o FreeBSD 8-RELEASE ficar pronto.

REFERÊNCIA 1REFERÊNCIA 2


Alterando o Splash da inicialização do Ubuntu

September 10, 2009

A pedidos de um cliente, precisei alterar o Splash da inicialização do Ubuntu para colocar o logo da empresa dele (“afff”, eu sei), o link no final do texto resolveu o meu problema. Basta converter a imagem que você quer usar para PNG, eu deixei com uma resolução de 1024×768 e 256 cores. Bem, baixe um splash de exemplo (compativel com o Splashy (vide link)), descompacte e altere o arquivo XML que está dentro dele, é possível alterar todas as características do Splash (cor da barra de progresso, tamanho e etc).

Não é necessário baixar o Splashy como descrito no texto, ele já está nos repositórios do ubuntu, instale via aptitude.

LINK NO FINAL DO TEXTO


Kernel Linux agora suporta até 64TB de memória

August 31, 2009

O desenvolvedor Rik van Riel adicionou um patch no Kernel Linux que fez com que o suporte a memória passasse de 16TB (2^44) para 64TB (2^46) em arquiteturas 64 bits.

REFERÊNCIA


IPFW com ALTQ

August 18, 2009

O ALTQ (Alternate Queueing) é um sistema de enfileiramento de pacotes amplamente usado para implementação de QoS. Muitos administradores de redes que trabalham com *BSD estão acostumados a com a utilização do PF para implementação do ALTQ. Mas também é possível a utilização dele com o IPFW. Vamos ver:

O primeiro passo é compilar o kernel do seu BSD (FreeBSD no meu caso) com as opções necessárias, precisaremos usar o PF para a configuração inicial do ALTQ (se alguém conhecer uma ferramenta específica para gerenciamento das filas, comentários serão bem vindos). Bem, adicione as seguintes linhas no arquivo de configurações do seu kernel:

#PF
device          pf

#ALTQ
options        ALTQ
options        ALTQ_RED
options        ALTQ_RIO
options        ALTQ_CBQ
options        ALTQ_CDNR
options        ALTQ_PRIQ
options        ALTQ_HFSC
options        ALTQ_NOPCC # se você usa sistemas SMP

# IPFIREWALL
options        IPFIREWALL
options        IPFIREWALL_VERBOSE
options        IPFIREWALL_FORWARD
options        IPFIREWALL_NAT
options        IPFIREWALL_DEFAULT_TO_ACCEPT
options        LIBALIAS
options        IPSTEALTH
options        DUMMYNET
options        IPDIVERT

Fiz uma regra de exemplo do ALTQ com subfilas e uso dos algoritmos de detecção e controle de congestionamento para demonstrar que é possível utilizá-lo no IPFW da mesma maneira como seria usado no PF. No seu pf.conf:

altq on nfe0 cbq bandwidth 100Mb queue { http, msn, resto }
.     queue http bandwidth 10% cbq(rio,default)
.     queue msn  bandwidth 10%
.     queue resto bandwidth 80% cbq(borrow, red) { smtp, pop }
.         queue smtp bandwidth 50%
.         queue pop  bandwidth 50% cbq(ecn)

Ative o PF e carregue as regras: pfctl -e -f /etc/pf.conf

Para mandar o tráfego do IPFW para o ALTQ, ative-o com o comando: ipfw enable altq

A regra abaixo envia para fila filha smtp todo o tráfego que sai na interface nfe0 pela porta 25:

ipfw add 50 allow altq smtp tcp from any to any 25 via nfe0 out

Você pode verificar o tráfego nas filas com o comando: pfctl -vvsq

REFERÊNCIA


Priorização de pacotes que passam pelo Squid

August 17, 2009

Tive um problema com priorização de tráfego quando precisei priorizar os pacotes vindos de uma determinada maquina na rede que passavam pelo Squid. Acontece que quando o tráfego passava pelo Squid, ele passava a ser local e não da máquina que o enviou originalmente. Sendo assim, não casava com a regra do firewall que enviava os pacotes da máquina interna para a fila de priorização. Bem, o Squid possui uma opção chamada tcp_outgoing_tos que serve para marcar com uma determinada flag o campo Type of Service do pacote. Foi com essa opção que consegui resolver o problema, marquei todos os pacotes que saiam do Squid vindos da máquina da rede interna e posteriormente usei a verificação de ToS do IPFW para mandar esses pacotes para a fila de priorização. Mão na massa.

Adicionei as seguintes opções no meu squid.conf:

acl barba src 172.16.1.100/32
tcp_outgoing_tos 0×02 barba

Você pode usar o tcpdump verificar se os pacotes estão sendo marcados de fato:
barba# tcpdump -nXi vr0 dst port 80


0×0000:  4502 003c e59f 4000 4006 fb0e c0a8…
0×0010:  4593 5326 30f0 0050 9322 93f3 0000…
0×0020:  a002 ffff adf7 0000 0204 05b4 0103…
0×0030:  0402 080a 00bd e6e8 0000 0000…

O segundo par de 4 bits do cabeçalho IP é o campo ToS, podemos verificar no fragmento do dump acima que ele está marcado com a flag que indicamos no Squid (IPTOS_MINCOST).

Muito bem, a regra do IPFW que vai enviar os pacotes com a marcação para o ALTQ (estou usando ALTQ para priorização, será o próximo artigo que vou escrever) ficará parecida com a regra abaixo:

ipfw -q add 160 allow altq p_altissima \
ip from any to any 80 via vr0 out iptos \
mincost keep-state