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, 2009Algumas 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, 2009ZPH (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, 2009O 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.
Lista de idéias para o FreeBSD 9.0
September 18, 2009Durante 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.
ZFS considerado pronto para produção no FreeBSD 8
September 15, 2009O 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.
Alterando o Splash da inicialização do Ubuntu
September 10, 2009A 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.
Kernel Linux agora suporta até 64TB de memória
August 31, 2009O 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.
IPFW com ALTQ
August 18, 2009O 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
Priorização de pacotes que passam pelo Squid
August 17, 2009Tive 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