Tag Archives: hacking

Vmware e TSO

Oggi ho finalmente scoperto che il responsabile di un fastidioso problema che avevo con vmware server è imputabile al TCP segmentation offload (TSO).

In particolare succede che con il TSO abilitato il sistema di bridging di vmware di fatto blocca i pacchetti che hanno bisogno di essere frammentati inviati tra host e guest. In effetti non capita quasi mai di dover aprire connessioni tra host e guest ma la cosa mi sembrava strana soprattutto perché vedevo passare tra le due macchine senza problemi pacchetti icmp e i pacchetti SYN di apertura della connessione. Avevo ipotizzato un problema legato alla frammentazione ma anche con pacchetti ping molto grossi non avevo problemi.

Il TSO spiega tutto soprattutto perché la frammentazione offload di default é abilitata solo per il TCP.

sudo ethtool -K eth0 tso off

E il problema è risolto.

(immagino che non mi debba aspettare un aumento di carico significativo sulla cpu…)

smaneggio-fonino


# uname -a
Darwin iPhone 9.0.0d1 Darwin Kernel Version 9.0.0d1: Fri Jun 22 00:38:56 PDT 2007; root:xnu-933.0.1.178.obj~1/RELEASE_ARM_S5L8900XRB iPhone1,1 Darwin
# mount
/dev/disk0s1 on / (hfs, local, noatime)
devfs on /dev (devfs, local)
/dev/disk0s2 on /private/var (hfs, local, noexec, noatime)
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/disk0s1 300M 191M 107M 65% /
devfs 18K 18K 0 100% /dev
/dev/disk0s2 7.3G 37M 7.3G 1% /private/var
# ls /dev
bpf0 disk0s1 ptyp2 rdisk0s2 ttyp2 uart.iap
bpf1 disk0s2 ptyp3 sdio ttyp3 urandom
btreset h5.baseband ptyp4 tty ttyp4 vn0
console klog ptyp5 tty.baseband ttyp5 vn1
cu.baseband mrvl868x0 ptyp6 tty.bluetooth ttyp6 zero
cu.bluetooth null ptyp7 tty.debug ttyp7
cu.debug ptmx random tty.iap uart.baseband
cu.iap ptyp0 rdisk0 ttyp0 uart.bluetooth
disk0 ptyp1 rdisk0s1 ttyp1 uart.debug
# ls /bin
[ cp df kill ls ps sh tcsh zsh
bash csh echo launchctl mkdir pwd sleep test
cat date expr link mv rm stty true
chmod dd hostname ln printf rmdir sync unlink
# ls /usr/bin
awk env join od sftp tail vi
banner expand less passwd simulatecrash tar vim
basename false login paste sort tee wc
bbupdater find logname pathchk split top which
chgrp fmt mesg pico srelay touch who
cksum fold minicom pr ssh tr whoami
comm grep mkfifo printenv ssh-add tsort xargs
crontab groups more readlink ssh-agent tty yes
csplit gzip nano renice ssh-keygen uname
curl head nc rsync ssh-keyscan unexpand
cut hexdump nice sar stat uniq
dirname iUnlock nl scp su uptime
ditto id nohup sed sum users
# ls /sbin
fsck fstyp ifconfig kextunload md5 mount ping route
fsck_hfs fstyp_hfs kextload launchd mknod mount_hfs reboot
# ls /usr/sbin
BTServer configd iostat notifyd screen tcpdump
BlueTool cron kextstat nvram sshd update
arp daily mDNSResponder pppd sysctl vipw
chown fdisk mediaserverd racoon syslogd vpnd
chroot ioreg netstat racoonctl system_profiler
# ifconfig -a
lo0: flags=8049 mtu 16384
inet 127.0.0.1 netmask 0xff000000
en0: flags=8863 mtu 1500
inet 10.39.2.126 netmask 0xffffff00 broadcast 10.39.2.255
ether 00:1c:b3:17:ed:e4
ip1: flags=8011 mtu 1500
ip2: flags=8011 mtu 1500
launchd% list
PID Status Label
- 0 16
- 0 com.openssh.sshd
25 - com.apple.mediaserverd
24 - com.apple.ptpd
23 - com.apple.update
22 - com.apple.syslogd
26 - com.apple.notifyd
21 - com.apple.mobile.lockdown
20 - com.apple.mDNSResponder
19 - com.apple.iapd
- 0 com.apple.daily
18 - com.apple.cron
17 - com.apple.crashreporterd
16 - com.apple.configd
172 - com.apple.SpringBoard
- 0 com.apple.DumpPanic
13 - com.apple.CommCenter
12 - com.apple.BTServer
- 0 com.apple.launchd.readconfig

Certificati SSL su E61 (symbian)

Ancora una volta ho dovuto cercare come rinnovare i certificati di apache… tra l’altro l’utility che c’era in debian per apache ora non c’è più, o meglio, è stata rimpiazzata da make-ssl-cert del pacchetto ssl-certs.

Cmq, ho preferito fare a manina:
openssl req -new -x509 -nodes -out apache2.pem -keyout apache2.pem -days 356
chmod 600 apache2.pem
ln -sf apache2.pem $(openssl x509 -hash -noout -in apache2.pem)

Cmq, ho sistemato un po’ di certificati in giro e poi mi sono posto il problema di di farli accettare al mio e61 (symbian S60v3), in particolare quelli che utilizzo per leggere la posta elettronica, per evitare il warning ogli volta che mi connetto.

Prima di tutto è necessario convertire il certificato il formato DER:
openssl x509 -in cert.pem -out cert.cer -outform DER

Dopodiché ho scoperto qui che se il certificato è non è riconosciuto come CA (CA:FALSE) come ad esempio per i certificati di picard(.linux.it) è necessario importarli dal browser web forzando il mime-type a application/x-x509-ca-cert. Se a qualcuno interessa ho messo online il certificato di picard, con il mime-type forzato appunto, per leggere la posta @linux.it:

http://fabioinvernizzi.com/certs/picard.cer

Se invece il certificato è autoprodotto è sufficiente trasferirlo via bluetooth. In entrambi i casi, una volta aperto, il file viene riconosciuto come certificato e viene avviata la procedura di importazione.

(Qui qualche screenshot della procedura di import via bluetooth su un N70)

Piccoli hack su WP

Non avevo mai toccato il codice di wordpress… negli ultimi giorni ho dovuto sistemare un paio di piccole magagne.

1. i thumbnail, così come sono sono troppo piccoli (e per questo esistono già plugin per modificare la dimensione) ma soprattutto la qualità delle jpeg generate è bassissima: ho aggiunto il parametro quality alla chiamata imagejpeg.

2. mi sono imbattuto nel bug 3886: squid usa l’HTTP/1.0 mentre wp risponde solo in HTTP/1.1 (male!).

Router bacati senza tcp window scaling

Non pensavo che su internet esistessero ancora router non compliant con il window scaling… questi router bacati azzerano i bit del window scaling

Oggi su uno dei mailserver che gestisco ho nostato che la connessione verso uno specifico mail server era lentissima e mi mandava in timeout le connessioni durante il greeting smtp… pensavo a qualche meccanismo di antispam, anche se piuttosto strano… alla fine il tecnico del server destinatario, che evidentemente aveva già avuto il segnalazioni analoghe mi ha suggerito di di limitare la finestra tcp (disabilitando di fatto il window scaling)

Per fortuna che da un paio di release del kernel è possibile impostare il parametro “window” per singola “route”:

commit 316c1592bea94ead75301cb764523661fbbcc1ca
Author: Stephen Hemminger 
Date:   Tue Aug 22 00:06:11 2006 -0700

    [TCP]: Limit window scaling if window is clamped.
    
    This small change allows for easy per-route workarounds for broken hosts or
    middleboxes that are not compliant with TCP standards for window scaling.
    Rather than having to turn off window scaling globally. This patch allows
    reducing or disabling window scaling if window clamp is present.
    
    Example: Mark Lord reported a problem with 2.6.17 kernel being unable to
    access http://www.everymac.com
    
    # ip route add 216.145.246.23/32 via 10.8.0.1 window 65535
    
    Signed-off-by: Stephen Hemminger 
    Signed-off-by: David S. Miller 

VoIP su E61

Ieri ho fatto l’upgrade del firmware dell’E61 alla 3.0633.09.04

Ho perso un po’ il controllo della situazione cmq ora finalmente riesco ad utilizzare i servizi VoIP.

Al momento ho provato con successo:
+ voipstunt (per le chiamate in uscita)
+ skypho (per il numero geografico)
+ gizmo

Ho anche altri account su FWD, ekiga che non ho ancora testato ma immagino non ci siano problemi.

Nota negativa per la nuova versione dell’applicativo “Telefono internet” che non considera le reti 3G come punti di accesso validi per il voip… per collegarsi via UMTS l’unico modo è attivare la registrazione direttamente nelle impostazioni sip.

BTW, utilizzando un po’ il telefono mi sono accorto che anche se la disponibilità dell’umts c’é più o meno sempre su Milano, quando mi collego la connessione avviene in 3G, ma poi spesso, dopo poco, il simbolino in alto a sinistra cambia, indicando che sono su rete GPRS… Da cosa dipende? Possibile che le reti umts siano sature e mi rimbalzano su quelle gprs?? Questo accade con WIND… è lo stesso con gli altri operatori?

Conversioni Video con mencoder e ffmpeg

Ho fatto un po’ di prove sulle conversioni di video in filmati FLV (flash) e 3GP (per telefonini).
Dopo un po’ di tentativi con mencoder, che cmq ha prodotto ottimi risultati, sono passato all’uso di ffmpeg… decisamente banale in confronto!

Produzione di un filmato FLV con mencoder:

 
mencoder movie.mpg -ofps 15 -o movie.flv -of lavf -oac mp3lame \\
-lameopts abr:br=64 -srate 22050 -ovc lavc \\
-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames \\
-lavcopts vcodec=flv:keyint=50:vbitrate=300:mbd=2:mv0:trell:\\
v4mv:cbp:last_pred=3 -vop scale=320:240

Stessa cosa con FFMPEG:

ffmpeg -i movie.mpg -ar 22050 movie.flv

ho dovuto modificare l’audio rate perché quello originale non è supportato dal formato flv

Conversione con FFMPEG in formato 3GPP:

ffmpeg -i movie.mpg -acodec amr_nb -s 176x144 -ar 8000 -b 80 \\
-vcodec h263 -ac 1 -y movie.3gp

NOTA: per poter vedere un video 3gp scaricandolo da un sito web bisogna aggiungere il corretto mime-type. Con apache basta aggiungere alla configurazione:
AddType video/3gpp .3gp

Parallels News

Ho scoperto qualche giorno fa’, aggiornando Parallels, che la nuova beta ha delle interessanti novità:

1. Modalità coherence
Interessante modo per far girare Windowz: le finestre vengono integrate nel desktop di OSX… molto carino ma, “purtroppo” non uso windows.

2. Boot della partizione Boot Camp
Questa è una feature che aspettavo: in questo modo è possible avviare in parallels, e quindi sotto OSX, la partizione usata con boot camp. Nel mio caso una spendida Ubuntu. All’avvio di parallels ovviamente parte un alert sul fatto che il sistema operativo emulato non è supportato ma si può continuare senza problemi… solo un paio di cosucce da sistemare:
+ al boot bisogna passare un “root=/dev/hda1” al kernel. Il disco emulato infatti è visto in parallels come il primo disco IDE mentre nativo viene visto come disco scsi e la partizione è la terza (sda3)
+ Xorg no parte: ho modificato la configurazione impostando il driver vesa (suggerito con dpkg-reconfigure -phigh xserver-xorg). Stranamente funziona anche nativo: gdm parte con uno sfarfallio, probabilmente la modalità vesa è emulata dalla scheda video.

SBL-DROP

Visto che l’ha consigliata Md di cui mi fido ciecamente ho aggiunto la lista sbl-drop (Don’t Route Or Peer) su un firewall.

Non potendo mettere mano ai router l’ho integrata banalmente in iptables sul firewall creando una catena dedicata da cui passa tutto il traffico uscente. Poi periodicamente, la ripopolo con uno scriptino a cron che prende la lista dal server, la parsa, ed esegue dei banali “iptables -A …”.

Decisamente uno strumento utile… dopo pochi minuti ho beccato un host infettato della lan che cercava di comunicare con “casina” :-)

Giornate piene…

… di cose da fare ma nel frattempo sto’ smanettando un po’ sul portatile usando e abusando di parallels. Dopo aver installato Vista ho deciso di provare anche solaris10. In effetti un po’ mi vergono di saper poco/niente di sistemi un*x proprietari ma per fortuna fin’ora sono riuscito a campare con il software libero.

In ogni caso mi sto’ documentando un po’… sto’ leggendo un redbook di ibm su aix e sto’ facendo un po’ di prove su solaris. Incredibile fare il login e trovarsi davanti il CDE… mi è sembrati di tornare ai tempi del poli e del cdcsun.

Sto’ anche cercando di far funzionare parallels su ubuntu dapper. Per riuscire a compilare i moduli bisogna installare i sorgenti del kernel, installare il pacchetto build-essentials e poi, visto che il kernel non l’ho compilato sulla macchina ho anche fatto un make scripts per compilare modpost. Al momento va’ lentissimo, impossibile da usare… sicuramente mi sono perso qualcosa.