Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

sábado, 25 de agosto de 2012

Mejorando transferencia de ssh/rsync

Buscando la forma de mejorar la transferencia de backups (realizados con rsync, pero sobre un tunel de SSH), encontré que la velocidad de transferencia puede variar mucho dependiendo del cipher usado para crear la conexión con SSH.

En una primera búsqueda encontré unos tests que reproduje en mi ambiente. Las pruebas que hice consiste en copiar un archivo con contenidos aleatorios (generado desde /dev/urandom), de 512MB, sobre una conección Gigabit Ethernet, estando el archivo de origen y el de destino en el directorio /dev/shm (esto nos permite asegurarnos que el acceso a disco no influya en nuestros tests):


Warm up... Copiando con cipher por default...
random                           100%  512MB  42.7MB/s   00:12    

Copiando con cipher: 3des-cbc
random                           100%  512MB  16.5MB/s   00:31    

Copiando con cipher: aes128-cbc
random                           100%  512MB  85.3MB/s   00:06    

Copiando con cipher: aes192-cbc
random                           100%  512MB  73.1MB/s   00:07    

Copiando con cipher: aes256-cbc
random                           100%  512MB  64.0MB/s   00:08    

Copiando con cipher: aes128-ctr
random                           100%  512MB  42.7MB/s   00:12    

Copiando con cipher: aes192-ctr
random                           100%  512MB  34.1MB/s   00:15    

Copiando con cipher: aes256-ctr
random                           100%  512MB  32.0MB/s   00:16    

Copiando con cipher: arcfour128
random                           100%  512MB 102.4MB/s   00:05    

Copiando con cipher: arcfour256
random                           100%  512MB 102.4MB/s   00:05    

Copiando con cipher: arcfour
random                           100%  512MB 102.4MB/s   00:05    

Copiando con cipher: blowfish-cbc
random                           100%  512MB  56.9MB/s   00:09    

Copiando con cipher: cast128-cbc
random                           100%  512MB  51.2MB/s   00:10    

Luego probé copiar a "localhost":

Warm up... Copiando con cipher por default...
random                               100%  512MB  56.9MB/s   00:09    

Copiando con cipher: 3des-cbc
random                               100%  512MB  20.5MB/s   00:25    

Copiando con cipher: aes128-cbc
random                               100%  512MB 170.7MB/s   00:03    

Copiando con cipher: aes192-cbc
random                               100%  512MB 170.7MB/s   00:03    

Copiando con cipher: aes256-cbc
random                               100%  512MB 170.7MB/s   00:03    

Copiando con cipher: aes128-ctr
random                               100%  512MB  64.0MB/s   00:08    

Copiando con cipher: aes192-ctr
random                               100%  512MB  51.2MB/s   00:10    

Copiando con cipher: aes256-ctr
random                               100%  512MB  46.6MB/s   00:11    

Copiando con cipher: arcfour128
random                               100%  512MB 256.0MB/s   00:02    

Copiando con cipher: arcfour256
random                               100%  512MB 256.0MB/s   00:02    

Copiando con cipher: arcfour
random                               100%  512MB 170.7MB/s   00:03    

Copiando con cipher: blowfish-cbc
random                               100%  512MB  64.0MB/s   00:08    

Copiando con cipher: cast128-cbc
random                               100%  512MB  56.9MB/s   00:09    

El ganador en velocidad, es por mucho arcfour, pero por lo que he visto, no es recomendable usarlo cuando la seguridad es un factor crítico. El cipher aes128 es algo más lerdo, pero la taza de transferencia es de más del doble comparada al cipher por default.

Para usar un cipher específico con rsync + ssh, el comando a usar tendría la forma:

$ rsync -e 'ssh -c arcfour256' ......

El script que usé lo subí a un gist de GitHub.

martes, 12 de junio de 2012

Servicios IPv6 y firewalls

Hace tiempo las distintas distribuciones de Linux poseen soporte para IPv6, lo que incluye generar interfaces de red con direcciones IPv6 y servicios escuchando en dichas direcciones.

Por ejemplo, usando netstat podemos revisar los servicios TCP y UDP escuchando en IPv6:


$ sudo netstat -6nlptu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::139                  :::*                    LISTEN      1140/smbd       
tcp6       0      0 fe80::bc47:21ff:fe67:53 :::*                    LISTEN      1509/dnsmasq    
tcp6       0      0 :::22                   :::*                    LISTEN      1142/sshd       
tcp6       0      0 ::1:631                 :::*                    LISTEN      1219/cupsd      
tcp6       0      0 ::1:25                  :::*                    LISTEN      2275/exim4      
tcp6       0      0 :::445                  :::*                    LISTEN      1140/smbd       
tcp6       0      0 :::12865                :::*                    LISTEN      2305/netserver  
udp6       0      0 fe80::bc47:21ff:fe67:53 :::*                                1509/dnsmasq    
udp6       0      0 :::55594                :::*                                1188/avahi-daemon: 
udp6       0      0 :::5353                 :::*                                1188/avahi-daemon: 

Otra forma sería realizar un escaneo de puertos. Por ejemplo:

$ sudo nmap -6 -P0 ::1
Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-12 10:26 ART
Nmap scan report for ip6-localhost (::1)
Host is up (0.00026s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds


Esto puede resultar en un gran problema de seguridad si no fue tenido en cuenta al configurar los firewalls, sobre todo si hablamos de servidores conectados a internet.

Una forma de revisar si las reglas firewall para IPv6 están siendo cargadas es:

$ sudo chkconfig --list ip6tables

ip6tables       0:off   1:off   2:on    3:on    4:on    5:on    6:off


En este caso vemos que el servicio está activado. Si no fuera así, puede activarse con:

$ sudo chkconfig ip6tables on

El siguiente paso es revisar qué reglas de firewall hay configuradas para IPv6:

sudo ip6tables -n -L -v

Si las reglas cargadas son correctas y proveen una protección para el equipo, aquí terminó nuestro trabajo (aunque sería bueno reiniciar el servidor para asegurarnos que todo quedó correctamente configurado). Además, si el equipo es un servidor, y hay otros administradores, puede ser que haya reglas cargadas, sean correctas, pero hayan sido cargadas "a mano", y se pierdan al reiniciar el equipo.

Si no hay reglas cargadas, una forma rápida de realizar una configuración "de emergencia" para que el kernel ignore todos los paquetes IPv6 que lleguen es:

$ sudo ip6tables -P INPUT DROP
$ sudo ip6tables -P FORWARD DROP



Esta configuración eliminará todos los paquetes, inclusive las conexiones creadas localmente (lo que pude causar problemas... para realizar una correcta configuración, hay que aprender a usar iptables!) y los paquetes de respuesta de conexiones IPv6 creadas a otros equipos...

Estas modificaciones que introdujimos al firewall se perderán al reiniciar el equipo. Para guardarlas, de manera que se apliquen automáticamente al arrancar el equipo, debemos ejecutar:

$ sudo service ip6tables save
$ sudo service ip6tables restart

Aceleración de consultas de DNS reverso

Las consultas de DNS reveso (Reverse DNS lookup) pueden hacer que cualquier proceso que las utilice (por ejemplo, servidores SMTP) se torne lerdo en responder, sobre todo si se realizan consultas por IPs privadas, y los DNS no están configurados con las zonas reversas correspondientes.

Para solucionarlo, una opción es desactivar las consultas reversas, pero éstas pueden proveer información útil (generalmente son realizadas para loguear el nombre asociado a los IP que crea la conexión), sobre todo cuando las conexiones son originadas en Internet. Además, esta solución implica modificar cada uno de los servicios en cada servidor.

La solución correcta es crear una zona en nuestros DNSs que respondan a estas consultas. En el caso de Bind, y suponiendo que nuestra lan utiliza las direcciones 192.168.*.*, esto se puede lograr de la siguiente manera:

En /etc/named.conf, agregar las siguientes líneas:

 zone "168.192.in-addr.arpa" {
         type master;
         file "/etc/named.192.168.reverse";
 };

El contenido del archivo /etc/named.192.168.reverse debe ser parecido a:

$TTL 2d
$ORIGIN 168.192.IN-ADDR.ARPA.
@             IN      SOA   ns1.example.com. hostmaster.example.com. (
                              200001011 ; serial number
                              3h         ; refresh
                              15m        ; update retry
                              3w         ; expiry
                              3h         ; nx = nxdomain ttl
                              )
              IN      NS      ns1.example.com.
              IN      NS      ns2.example.com.

(digo "parecido a" porque habría que ajustar "ns1.example.com", "hostmaster.example.com" y los NS).

martes, 13 de marzo de 2012

Hoy descubrí: fuser

El comando lista los procesos que poseen un archivo, socket o filesystem. Su funcionalidad es parecida a lsof, pero tiene más opciones. Por ejemplo, para ver los procesos que poseen archivos abiertos en el filesystem del dispositivo "/dev/mapper/seguro":

$ fuser -v -m /dev/mapper/seguro

                     USER        PID ACCESS COMMAND
/dev/dm-5:           root     kernel swap  /dev/sda6
                     root     kernel mount /dev
                     horacio    2472 f.... startkde
                     horacio    2524 f.... unclutter
                     horacio    2950 F.... pulseaudio
                     horacio    3037 F.... gvfs-fuse-daemo
                     (...)
                     horacio    3047 F.... gvfs-gphoto2-vo
                     horacio    3063 F.... gvfs-afc-volume
                     horacio    3761 f.... chromium-browse
                     horacio    7684 F.... java





viernes, 1 de julio de 2011

Cómo usar dispositivos USB desde KVM

Quiero usar mi pendrive desde un guest KVM (gestionado por libvirt). El dispositivo USB es el marcado con negrita:

acer| ~$ lsusb
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 004: ID 0930:6545 Toshiba Corp. Kingston DataTraveler 102 flash drive

Primera opción: usando vendor id + product id

Editamos el XML usando "virsh edit", y agregamos lo siguiente en el elemento devices:



Esta opción asocia un "tipo de dispositivo" (en este caso, el pendrive Kingston) al guest KVM, sin importar en qué puerto se conecte.

Segunda opcióni: usando bus + device

Editamos el XML usando "virsh edit", y agregamos lo siguiente en el elemento devices:



Esta opción asocia un puerto USB al guest, sin importar qué tipo de dispositivo se conecte.

jueves, 9 de junio de 2011

Cómo compilar cliente spice

Seguiendo los pasos para instalar Spice (un nuevo protocolo para comunicarse con guests KVM/QEMU/etc.) me surgieron unos errores, no muy complicados de resolver.

En general, segui las instrucciones de http://spice-space.org/page/Building_Instructions.
La instalación la hice en /usr/local/slice, asi que reemplace "INST_ROOT" por "/usr/local/slice".


Para compilar e instalar el cliente, en un momento hay que ejecutar:

~$ cd $SRC_ROOT/spice
~$ ./autogen.sh --prefix=$INST_ROOT

Pero este ultimo comando me generó un error:


----------------------------------------
(...)
checking for PROTOCOL... no
configure: error: Package requirements (spice-protocol >= 0.6.0) were not met:
No package 'spice-protocol' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables PROTOCOL_CFLAGS
and PROTOCOL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
----------------------------------------

Esto se solucione usando:

~$ export PKG_CONFIG_PATH="/usr/local/spice/share/pkgconfig:/usr/local/spice/lib/pkgconfig"
~$ ./autogen.sh --prefix=/usr/local/spice
~$ cd client
~$ make install

Y... no funcionó...

----------------------------------------
make[1]: *** No rule to make target `../common/libspice-common.la', needed by `spicec'. Stop.
make[1]: Leaving directory `/mnt/sin_encriptar/src/spice-client-src/spice/client'
make: *** [install] Error 2

----------------------------------------

Pero, compilando manualmente lo del directorio "common", luego lo de "cliente" funciona:

~$ cd ..
~$ cd common
~$ make install
~$ cd ..
~$ cd client
~$ make install

Y ahora sí!

sábado, 30 de abril de 2011

Como tomar screenshots automáticamente y convertirlos en video

Primer paso: crear la secuencia de screenshots, usando la utilidad "scrot":

  • s=1; while /bin/true ; do scrot -q 80 "${s}.png" -e "convert -crop 800x600+0+24 ${s}.png ${s}.jpg" ; let s=s+1 ; sleep 1 ; done
Atención! Este comando sobrescribirá cualquier archivo preexistente! Para continuar una secuencia pre-existente, se puede cambiar el valor inicial de "s". Por ejemplo, si ya tenemos desde el archivo 1.png hasta el 71.png, podemos usar s=72:
  • s=72; while /bin/true ; do scrot -q 80 "${s}.png" -e "convert -crop 800x600+0+24 ${s}.png ${s}.jpg" ; let s=s+1 ; sleep 1 ; done
Segundo paso: generar un video con dicha secuencia de archivos, usando "ffmpeg":
  • ffmpeg -r 4 -b 512k -i %d.jpg OUTPUT.avi
Actualización: para que ffmpeg funcione, los nombres de los archivos deben ser secuenciales, y sin ningún archivo faltante. Por lo tanto, si antes de generar el video queremos borrar algunos archivos, vamos a tener problemas. Pero hay una forma muy fácil de crear una secuencia de archivos, arreglando los 'faltantes':
  • max=1000 ; ren=1 ;  for f in `seq 1 $max` ; do [ -e $f.jpg ] && { [ $f -ne $ren ] && { echo mv -i $f.jpg $ren.jpg ; } ; let ren=ren+1 ; } ; done
Ese pequeño script generará por pantalla todos los 'mv' que hace falta ejecutar para arreglar la secuencia. Si quitamos el 'echo', el script ejecutará directamente el comando 'mv'. Ajustar 'max' al número más grande dentro de la secuencia.

miércoles, 22 de julio de 2009

"ip addr" en vez de alias

Luego de renegar un poco con Ubuntu 9.04 al configurar un alias de la eth0 (me usaba el IP del alias para realizar las conexiones salientes!), encontré que hay otras maneras de armar los alias, usando el comando ip.

ip addr add 192.168.5.101/24 brd + dev eth0 label "eth0:2"


Y para que se configure automáticamente, se puede agregar en /etc/network/interfaces:

post-up /sbin/ip addr add 192.168.5.101/24 brd + dev eth0 label "eth0:2" || true

Más información aquí.

miércoles, 24 de junio de 2009

Alternativa a lomount

Parece que lomount no está en Ubuntu (al menos Ubuntu 9.04 p/AMD64), pero existe un truco para montar particiones "internas" de una imagen de un disco.

Yo necesité montar la 1er partición de la imagen de un disco de un dominio virtualizado. Aunque el disco (para el dominio virtualizado) en realidad estaba provisto por un volumen lógico (LVM) todo funcionó perfectamente.

Pasos a seguir (en ingles): http://community.livejournal.com/debian/340887.html

miércoles, 3 de junio de 2009

Virtualización con KVM

Investigando para implementar KVM encontré varios artículos interesantes:

Guías
- Virtualization With KVM On Ubuntu 9.04
- Virtualization With KVM On Ubuntu 8.10
- Installing KVM Guests With virt-install On Ubuntu 8.10 Server (agregado el 5 de jun)

En sitio de KVM
- Setting guest network
- Setting up NAT with KVM in Ubuntu

En sitio de Ubuntu (administrada a través de libvirt)
- Installation
- Networking
- CreateGuests
- Managing

Y para gestionar el tráfico de red, además del clásico iptables, es interesante tener en cuenta ebtables.

domingo, 3 de mayo de 2009

sábado, 28 de febrero de 2009

Problemas de teclado con Ubuntu 8.10 + VMPlayer

Por alguna cuestión VMPlayer no reconoce algunas teclas en Ubuntu (o sea, las teclas en Ubuntu funcionan bien, pero no "llegan" al sistema operativo ejecutando en VMPlayer). La solución es sencilla: hay que agregar la siguiente línea al archivo de configuración ubicado en ~/.vmware/config

nokeycodeMap = true


viernes, 23 de enero de 2009

Instalación fácil de librerias en Wine

Encontré un script para instalar de manera fácil las librerias más comunes necesarias para ejecutar con Wine los programas para Windows: "winetricks is a quick and dirty script to download and install various redistributable runtime libraries sometimes needed to run programs in Wine"

http://wiki.winehq.org/winetricks

miércoles, 28 de noviembre de 2007

Cómo configurar Gnome para que parezca MacOSX

Encontré un HOWTO muy detallado sobre como configurar todos los aspectos de tu linux para que parezca MacOSX (incluyendo sonidos, temas de firefox, splash de gnome y grub, etc.).

http://www.howtoforge.com/mac4lin_make_linux_look_like_a_mac

jueves, 8 de noviembre de 2007

La NSA accede a productos y redes de Windows

"Los amplios rangos de IP publicados por Cryptome son utilizados por la NSA, por contratistas del sector privado que trabajan con la NSA y por agencias gubernamentales no estadounidenses amigas de la NSA para acceder tanto a sistemas independientes como a redes ejecutando productos de Microsoft. Esto incluye el espionaje de "smart phones" ejecutando Microsoft Mobile."

Cada vez existen más razones para pasarse a Linux!!!!

Artículo completo

miércoles, 12 de septiembre de 2007

Tomcat, Apache y "All threads (200) are currently busy"

Por alguna cuestión cuyo origen no he podido detectar, me ha traido muchos problemas un apache que se conecta a Tomcat (JBoss 4) utilizando AJP. Luego de unos días, Tomcat empezó a generar estos mensajes de error:

ERROR [org.apache.tomcat.util.threads.ThreadPool] All threads (200) are currently busy, waiting. Increase maxThreads (200) or check the servlet status

Pero definitivamente el problema no está en la cantidad de threads necesarios para servir el sitio, sino que por alguna razón las conexiónes quedaban "ocupadas", y en la página de status de Tomcat aparecían todos los threads como en "Stage KeepAlive"...
La solución es bastante sencilla, sólo hace falta configurar el timeout (connectionTimeout) en el contector AJP:

<!-- A AJP 1.3 Connector on port 8009 -->
<Connector port="8009" address="${jboss.bind.address}" emptysessionpath="true" enablelookups="false" redirectport="8443" protocol="AJP/1.3" connectiontimeout="60000">
</Connector>


Seteando el timeout en 60 segundos solucioné el problema.

viernes, 24 de agosto de 2007

2007 Desktop Linux Survey

Ya se publicaron los resultados de la encuesta DesktopLinux.com. En resumen, los resultados son:

Distribuciones
30% Ubuntu (incluyendo Kubuntu, Xubuntu, Edubuntu)
21% Suse
14% Debian (y otras distribuciones basadas en Debian)
9% Fedora/Red Hat

Entorno de escritorio
45% Gnome
35% KDE

Navegador
60% Firefox
14% Konqueror
12% Opera

Cliente de email
37% Thunderbird
32% Evolution

Producto usado para correr aplicaciones Windows
44% Wine
27% VMWare

En la encuesta participaron 38.500 personas.



martes, 21 de agosto de 2007

Autenticacion de usuarios con Squid

Necesitaba autenticar a los usuarios que navegan (utilizando Squid) de tal forma que se puedan reutilizar los usuarios y passwords de nuestra intranet. Investigando descubrí que Squid está totalmente preparado para estas situaciones!

Para lograrlo hace falta desarrollar un script que chequee los permisos contra la Intranet (directamente en la BD, a través de XML-RPC, etc.). Yo preferí hacerlo con python, el script pueden encontrarlo aqui.

El script es bastante sencillo, sólo deberán modificar el último "if" de manera que realice la consulta adecuada para chequear si el usuario y password recibido es válido.

Por el lado de Squid, hay que agregar las siguientes líneas (donde corresponda) en el archivo de configuración squid.conf:


auth_param basic program /dir/to/script/nombre_script.py
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server

acl auth_customizada proxy_auth REQUIRED

http_access deny !auth_customizada


Y listo!!!

Si Ud. necesita soporte para realizar esta u otras tareas de administración de servidores Linux, contáctenos!

viernes, 3 de agosto de 2007

Guía rápida de comandos Unix/Linux

Para aquellos que están aprendiendo Linux, esta guía rápida les puede ser de mucha utilidad. Algunos comandos incluidos son: ls, cat, more, head, tail, ps, top, kill, chmod, ssh, du, df, tar, gzip, dig... Disponible en inglés y español.

miércoles, 1 de agosto de 2007

Imágenes de Linux listas para usar con Xen

Encontré un sitio donde se pueden bajar "imágenes" de Linux ya listos para utilizar como "dom U" bajo Xen: http://www.jailtime.org/
The filesystems on this site have already been tweaked to deal with Xen’s idiosyncracies, and are also designed to be lightweight and minimally divergent from the original distribution.