Dica para teste de servidor https. Como o mesmo usa uma sessão criptografada, um simples "telnet server 80" não é possível. Eu lembrava de ter feito algo com o openssl, então , buscando na rede, encontrei a forma de fazer isso (thanks google!):
$ openssl s_client -connect www.gmail.com:443 -state -debug
GET / HTTP/1.0
Fonte: http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html
Atualizado em: Mon Jan 28 16:45:37 BRST 2013
Também utilizo bastante a forma abaixo:
(echo -e "GET / HTTP/1.0\n\n"; sleep 1) | \
openssl s_client -connect www.google.com:443 -state
Dessa forma é possível verificar se a página é carregada corretamente ou não de uma forma mais rápida.
Um link interessante sobre WPA2 e AES para autenticação com sistema de chaves assimétricas e geração de chaves aleatórias. Substitui com muito mais segurança o factível WEP. Infelizmente sua implementação não é tão fácil assim e nem todos equipamentos funcionam a contento. Mas aqui fica a referência.
Diferenças de hardware sempre existiram, mas desde que instalei o Urubuntu, digo, Ubuntu no meu iBook e tudo funcionou exatamente igual ao meu PC, não prestei mais atenção nisso. Até o momento. Brincando com uma DWL-G122, placa Wi-Fi B/G via USB, com revisão de hardware A1, que não é chipset prism e por isso mesmo estava compilando o suporte via ndiswrapper, descobri um pequeno bug na compilação:
/usr/src/modules/ndiswrapper/misc_funcs.c:865:
warning: `regparm' attribute directive ignored
/usr/src/modules/ndiswrapper/misc_funcs.c:873:
warning: `__stdcall__' attribute directive ignored
/usr/src/modules/ndiswrapper/misc_funcs.c:873:
warning: `regparm' attribute directive ignored
{standard input}: Assembler messages: {standard input}:2719: Error: Unrecognized opcode: `movl'
make[2]: *** [/usr/src/modules/ndiswrapper/misc_funcs.o] Error 1 make[1]: ***
[_module_/usr/src/modules/ndiswrapper]
Error 2 make[1]: Leaving directory `/usr/src/linux-source-2.6.12'
make: *** [default] Error 2
Buscando no arquivo misc_funcs.c, verifiquei que fazia parte da seguinte chamada:
#ifdef CONFIG_X86_64 __asm__ __volatile__("movq %%rsp, %0\n" : "=g"(i));
#else __asm__ __volatile__("movl %%esp, %0\n" : "=g"(i));
#endif return (void *)i; }
Código assembly de X86... problema. Tentei compreender o dito e buscar um equivalente. Eis que encontrei o valioso link:
Agora fica a questão: como reescrever isso para PPC???? Será que a brincadeira vale algum tempo em cima disso?
Linux xuxu 2.6.12-10-powerpc #1 Mon Jan 16 17:38:57 UTC 2006 ppc GNU/Linux
Finalmente criei coragem e instalei o Ubuntu em meu laptop, um iBook. Primeiramente fiz um teste com o live cd, que funcionou bem (basta apertar "c" durante o boot do MacOSX para selecionar boot pelo cd). Fiz o bom e velho backup (tar cvf - -C / . | ssh backupserver -l helio "dd of=/usr/local/BKP/xuxu-fullbackup-macosx.tar") e mandei ver. Apanhei um pouco com o particionamento até descobrir que a mídia do cd de instalação estava ruim. Passado por isso, tudo correu normalmente e sem sustos.
Infelizmente acabei errando a restauração do backup e apaguei tudo o que estava salvo, perdendo duas semanas de trabalho e mails, ou seja, nada preocupante. Depois de tudo instalado, atualizei o sistema para o Kubuntu, a versão do Ubuntu baseada no ambiente kde, uma vez que concordo com Linus Torvalds sobre o fato do ambiente Gnome ser extremamente espartano em relação à usabilidade.
Os resultados foram:
Esquema de configuração de switches L-3 da D-Link para OSPF. Testei em um DGS-3324SR, mas deve funcionar em toda linha.
Os passos descritos abaixo são:
1) criar uma VLAN
2) criar uma interface (ipif) para configurar um IP na VLAN
3) remover a porta que será utilizada da VLAN default e adicionar na VLAN criada
4) criar uma área OSPF e adicionar a interface criada (da VLAN) nessa área
Googleando na rede achei que o suporte ao DWL-G122 em Linux em:
http://anirudhs.chaosnet.org/blog/2005.10.23.html
DWL-G122 é uma interface Wi-Fi USB. Para utilizar em MacOSX, somente o DWL-122 com chipset Prism. O DWL-G122 funciona com um chipset da Ralink, que agora suporta Linux. Boa novidade já que a interface pode ser configurada via "iwconfig", muito menos arcaica e esdrúxula que o wlan-ng.
Alguém já tentou instalar o FreeRadius com suporte à EAP no Debian??? Tarefa hérculea. Essa aplicação tem uso em redes Wi-Fi com WPA para autenticação de usuário. Em Debian, o pacote freeradius existe, mas infelizmente vem sem o suporte ao EAP devido a problemas de restrição de licença, como pode ser visto nesse bug report. Garimpando a rede, encontrei uma alma caridosa que enfrentou o mesmo problema e criou um patch para compilar e criar o pacote necessário:freeradius-eaptls. Consegui compilar e criar o pacote com a versão 1.0.2 sem problemas.
É triste mas também é preciso admitir que Debian está se tornando inconveniente para uso como servidor. Como seu foco não é em Desktop (se for, algo está muuuuuuito errado), fico na dúvida em como classificar a distribuição. Dizer que é apenas uma distro conceitual não faz jus aos méritos de boa parte dos trabalhos realizados sobre a mesma. Dizer que não existem problemas também é hipocrisia. O que fazer? Estou utilizando Ubuntu como Desktop, mas confesso que gostaria de ver a própria Debian com esse mesmo nível de maturidade...
Script utilizado para realizar o controle de banda no sistema wi-fi da Futurecom2005. O primeiro problema encontrado foi que o sistema utilizava VLANs para dividir o tráfego enquanto que o controle de banda é somente possível em interfaces físicas. Felizmente funcionou a contento.
AP_NET="172.20.0.0/22"
MAN_NET="192.168.48.0/0"
VLAN100="201.25.199.254"
VLAN200="201.34.160.254"
VLAN300="201.34.161.254"
VLAN400="172.20.3.254"
VLAN500="192.168.48.254"
VLAN100_INTF="vlan1"
VLAN200_INTF="vlan2"
VLAN300_INTF="vlan3"
VLAN400_INTF="vlan4"
VLAN500_INTF="vlan5"
ME="{ 192.168.48.254, 201.25.199.254, 201.34.160.254, \
201.34.161.254, 172.20.3.254}"
SSH="{ 192.168.48.254, 201.25.199.254 }"
EXT="em0"
set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30, \
tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45, \
tcp.closed 90 }
set timeout { udp.first 60, udp.single 30, \
udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30, \
other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 10000, frags 5000 }
##set loginterface none
set optimization normal
#set block-policy drop
set require-order yes
set fingerprints "/etc/pf.os"
scrub in all
### bandwidth
altq on $EXT
cbq bandwidth 15Mb
queue { ots, ssh, voip, web, dhcp }
queue ots bandwidth 10% priority 0 cbq(default ecn)
queue ssh bandwidth 100Kb priority 7 cbq(borrow)
queue voip bandwidth 30% priority 5 cbq(borrow)
queue web bandwidth 60% priority 3 { http, mail, msn, dns }
queue http bandwidth 60% cbq(borrow red)
queue mail bandwidth 30% cbq(borrow red)
queue msn bandwidth 10% cbq(borrow red)
queue dns bandwidth 10% cbq(borrow red)
queue dhcp bandwidth 10% priority 5 cbq(borrow)
nat on $VLAN100_INTF from $AP_NET to any -> ($VLAN100_INTF)
block in log all
block return in on $EXT inet all queue ots
pass out all
#pass in all
pass out inet proto tcp from any to any port 80 keep state queue http
pass out on $EXT inet proto tcp from any to any port { 80, 443 } \
keep state queue http
pass out on $EXT inet proto tcp from any to any port { 25, 110, 143, \
465, 993, 995 } keep state queue mail
pass in on $EXT inet proto tcp from any to any port 1863 keep state \
queue msn
pass out on $EXT inet proto tcp from any to any port 1863 keep state \
queue msn
pass in on $EXT inet proto tcp from any to any port 22 keep state queue \
ssh
pass out on $EXT inet proto tcp from any to any port 22 keep state queue \
ssh
pass in on $EXT inet proto udp from any to any port 5060 keep state \
queue voip
pass out on $EXT inet proto udp from any to any port 5060 keep state \
queue voip
pass in on $EXT inet proto udp from any to any port 10000:20000 keep \
state queue voip
pass out on $EXT inet proto udp from any to any port 10000:20000 keep \
state queue voip
pass in on $EXT inet proto udp from any to any port 67:68 keep state \
queue dhcp
pass out on $EXT inet proto udp from any to any port 67:68 keep state \
queue dhcp
pass in on $EXT inet proto udp from any to any port 53 keep state queue \
dns
pass out on $EXT inet proto udp from any to any port 53 keep state queue \
dns
#pass in quick proto tcp from any to $SSH port 22 keep state
#block in proto tcp from any to any port 80
pass in quick proto tcp from any to $ME port 80
pass in quick proto udp from any to any port 53 keep state
pass in quick proto udp from any port 53 to any keep state
pass in quick proto { tcp, udp } from any to $ME port { 67, 68 } keep state
pass in quick proto { tcp, udp } from $AP_NET to $VLAN400 port { 67, 68 } \
keep state
pass in quick proto { tcp, udp } from any to $ME port { 67, 68 } keep state
#pass in proto { tcp, udp, icmp } from any to any
block in quick log proto { tcp, udp } from any to any port { 135, 136, 137, \
138, 139, 445, 1433, 1434 }
pass in quick proto udp from any to $ME port 161 keep
state pass in quick proto udp from any port 161 to $ME keep state
#block in log from any to $MAN_NET
#block out log from $MAN_NET to any pass out from $ME to any
#block in quick log from any to $MAN_NET
#block in quick log from $MAN_NET to any
pass in quick proto icmp from any to $ME keep state
pass out quick proto icmp from $ME to any keep state
pass out quick proto tcp from $ME to 192.168.48.0/24 keep state
pass in quick proto udp from 192.168.48.0/24 to $ME port 161 keep state
pass in from any to any
block in log from any to $ME
Configurando um DSL-500G (na verdade um Ericsson 310 ou algo assim), precisei criar algumas regras na mão, já que a interface gráfica não funcionou 100%, principalmente quanto as regras de port-redirect.
A topologia que tenho é:
- IP LAN do modem: 192.168.254.254
- IP WAN do modem: dinâmico via PPPoE
- IP do servidor Linux interno: 192.168.254.200
Para criar então um redirecionamento externo para port 22 (ssh) do servidor, adicionei a seguinte regra:
create nat rule entry ruleid 2 rdr prot tcp \
lcladdrfrom 192.168.254.200 lcladdrto 192.168.254.200 \
destportfrom num 22 destportto num 22
Mais exemplos em: http://corz.org/comms/hardware/router/bt.voyager.205_router_commands.text
De tempos em tempos é necessário fazer uma *faxina* na lista de discussão que administro, a [linux-br]. Alguns usuários saem da lista, outros ativam os famosos *anti-spam*, e coisas do gênero começam a atolar a lista em mensagens incômodas. Isso pode ser resolvido com uma pequena remoção desses usuários (assim que comunicados). Infelizmente alguns desses usuários optam por fazer a inscrição na lista com um mail qualquer, em geral gratuito como gmail, e fazem o redirecionamento do mesmo para seu mail de recebimento. O que ocorre é que as mensagens retornam com um mail não inscrito na lista. Para encontrar o dono da mensagem, criei alguns script, dois na realidade.
Uma vez que não sou administrador do servidor de listas, não consigo simplesmente conectar e buscar a base de assinantes. Preciso solicitar a quem tem acesso shell para fazer isso. Como a CIPSGA é mantida por trabalho voluntário, nem sempre isso é rápido. Então criei um script para buscar os assinantes da lista, via web, e salvar em um arquivo:
#! /bin/sh
pass_adm="senha_admin"
lynx_opts="-accept_all_cookies -cookie_file=cookie -post_data"
member_link="http://listas.cipsga.org.br/cgi-bin/mailman/admin/linux-br/members"
file_dst="/tmp/listagem"
for char in a b c d e f g h i j k l m n o p q r s t u v x y w z
do for id in 0 1 2
do echo "Char=$char and ID=$id"
echo "adminpw=$pass_adm" | \
lynx $lynx_opts "${member_link}?letter=$char&chunk=$id" | \
grep @ | grep "^.*\[" | sed 's/.*\]//' | \
grep -v "de .* para " >> $file_dst.$$
done
done
cat $file_dst.$$ | sort -u > $file_dst
Com isso cria-se a listagem de usuários.
Uma vez com a lista em mãos, falta enviar uma mensagem para cada assinante para verificar se o mesmo está ativo ou não. ?? interessante indexar o envio para saber quem é quem. O seguinte script faz o serviço:
#! /usr/bin/env python
server="mail.dominio.com.br"
port=25
mailfrom="Helio Loureiro"
rcptto="" subject="Checagem da linux-br"
import sys, smtplib
try:
file = open(sys.argv[1])
erro_f = open("/tmp/mail_err.lst","w")
except:
print "Use: %s [mails_list_file]" % sys.argv[0] sys.exit(0)
id=1
for line in file:
rcptto = line[:-1]
print "Sending for: " + rcptto + " [" + str(id) + "]"
msg = "From: " + mailfrom + "\r\n"
msg += "To: " + rcptto + "\r\n"
msg += "Subject: " + subject + "[" + str(id) + "]\r\n"
msg += """
Essa eh uma mensagem de verificacao de inscricao da linux-br.
Favor nao responder.
./helio (BOFH)
-= Developed in Python =-
"""
try:
mail = smtplib.SMTP(server,port)
mail.sendmail(mailfrom, rcptto, msg)
mail.quit()
except:
print "Error sending: " + rcptto
error_f.write(line)
error_f.flush()
id += 1
sys.exit(0)
Com isso tem-se uma forma de saber quem é quem na lista e remover os indesejados.
Finalmente encontrei uma licença livre o suficiente para utilizar nos programas que crio. Como na próxima oficina Debian estarei apresentado um material sobre VoIP e o mesmo precisa estar dentro de uma licença livre, vou usar essa.
|
Esse é o script usado para autenticar automaticamente no Speedy da Telefonica (região de São Paulo). Evita que usuários residenciais, como eu, precisem estar em frente à máquina, permitindo que a mesma volte à rede sem intervenção humana.
Instruções para Linux:
Copie o arquivo com o nome "0speedy_auth" dentro de "/etc/ppp/ip-up.d/". Isso fará com que seja executada no início de cada inicialização ppp. Para tornar o pppoe também automática, inclua a seguinte entrada em "/etc/inittab":
S1:2345:respawn:/usr/sbin/pppd nodetach call speedy
O nome "speedy" é relativo ao arquivo que deve existir em "/etc/ppp/peers/speedy" com o conteúdo semelhante à:
pty "pppoe -I eth0 -T 80 -m 1452"
noauth
defaultroute
user "This email address is being protected from spambots. You need JavaScript enabled to view it. "
usepeerdns
Instruções para FreeBSD:
Inclua o nome do arquivo (e o caminho) em "/etc/ppp/ppp.linkup".
# $Id: speedy_auth.py,v 1.1 2003/09/12 02:57:40 helio Exp $
# COPYRIGHT
#
# Copyright © 2003 Helio Loureiro
#
# Permission to use, copy, modify, distribute, and sell this software
# for any purpose is hereby granted without fee, provided that the above
# copyright notice appear in all copies and that both that copyright
# notice and this permission notice appear in supporting documentation.
# No representations are made about the suitability of this software for
# any purpose. It is provided "as is" without express or implied
# warranty.
import os, sys, time
from socket import *
print "Autenticador para speedy $Revision: 1.1 $ - versão super alfa \
\nEscrito em Python (multiplataforma :-) \
\nEnvie suas sugestões e críticas para \"helio AT loureiro DT eng DT br\""
hostfake="www.google.com.br"
web=80
host='200.171.222.97'
port=86
adsl = socket(AF_INET, SOCK_STREAM)
adsl.connect((hostfake, web))
adsl.send("""GET /intl/pt/ HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Python
Keep-Alive: 300
Connection: keep-alive\n\n
""")
adsl.recv(1024)
adsl.close()
adsl = socket(AF_INET, SOCK_STREAM)
adsl.connect((host, port))
adsl.send("""GET /speedywebapp/html/redirect.html?CPURL=http://www.google.com/intl/pt/ HTTP/1.1
Host: 200.171.222.97:86
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Python
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/pla
in;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1
Accept-Language: pt-br
Accept-Encoding: gzip, deflate, compress;q=0.9
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Mon, 08 Sep 2003 12:21:49 GMT
If-None-Match: "12bc10-4d1-7e901140"\n\n
""")
adsl.recv(1024)
adsl.close()
adsl = socket(AF_INET, SOCK_STREAM)
adsl.connect((host, port))
adsl.send("""GET /speedywebapp/servlet/logon?CPURL=http://www.google.com/intl/pt/&opcion=internet HTTP/1.1
Host: 200.171.222.97:86
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Python
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/pla
in;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1
Accept-Language: pt-br
Accept-Encoding: gzip, deflate, compress;q=0.9
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
Keep-Alive: 300
Connection: keep-alive
Referer: http://200.171.222.97:86/speedywebapp/servlet/popupView?CPURL=http://www.google.com/intl/pt/\n\n
""")
adsl.recv(1024)
adsl.close()
print "Conexão estabelecida. Divirta-se!!!"
Page 32 of 33