sábado, 14 de julio de 2007

Instalar VMware server en Ubuntu Feisty

Me ha costado, pero al final me ha salido.

He usado estas dos direcciones:
1. http://ubuntuforums.org/showthread.php?t=338305&page=2&highlight=vmware+feisty

2. http://ubuntuforums.org/showthread.php?t=493367

El resumen:

Paso 1: Instalar los módulos necesarios

sudo apt-get install vmware-server-kernel-modules vmware-tools-kernel-modules xinetd


Paso 2: Descargar una versión de vmware server de http://www.vmware.com/download/server/

Paso 3: Descomprimir el fichero descargado:

tar -xzvf VMware-server-1.0.1-29996.tar.gz


Paso 4: Instalación fallida (necesario)
Las opciones por defecto están bien... basta pulsar mucho "enter", "q" cuando te muestre la licencia y "yes" cuando te pregunte si la aceptas

cd vmware-server-distrib/
./vmware-install.pl


Paso 5: "Parchear" /usr/bin/vmware-config.pl y /etc/init.d/vmware

sudo sed -i -e "s/\/sbin\/insmod -s -f \"\/lib\/modules\/\`uname -r\`\/misc\/\$1.o\"/modprobe -s -f \$1/" /etc/init.d/vmware
sudo sed -i -e "s/sub configure_module {/sub configure_module {\n return 'yes';/" /usr/bin/vmware-config.pl


Paso 6: Reconfigurar vmware

sudo vmware-config.pl


Paso 7: Serial number
Al final del paso anterior nos solicita un serial number. VMware los da gratuitamente en http://register.vmware.com/content/registration.html

Paso 8: A correr
En el menú Aplicaciones -> Herramientas de sistema aparece el "VMware Server Console"; nos conectamos al servidor local y ala, ya está.

miércoles, 7 de febrero de 2007

Compilando el kernel en Ubuntu Linux

Magnífica guía rápida (¡a la primera! ¡no tengo nada que añadir, quitar o cometar!):

lunes, 5 de febrero de 2007

Instalando el lector de tarjetas inteligentes LTC31 en Ubuntu linux

Quiero instalar un lector de tarjetas inteligentes LTC31 en cuya caja se afirma que es compatible con Linux (sin más). Existen dos versiones de éste lector, yo tengo la más antigua (se supone que con la nueva no hay que hacer todo lo que cuento a continuación).

Siguiendo las instrucciones de instalación para linux me encuentro que sólo funciona para kernels 2.4; si tienes un 2.6 tienes que aplicar un parche al código del kernel y recompilarlo. Ya empezamos.

El parche hay que solicitárselo al departamento técnico. Yo ya lo he solicitado, pero no se han puesto en contacto conmigo ni para decirme que habían recibido mi solicitud. Buscando por ahí me he encontrado el parche para la versión 2.6.11 pero yo tengo la 2.6.17 (y subiendo). Al intentar aplicar el parche, cómo no, me sale un error.

El siguiente paso fué intentar aplicar el parche manualmente. El fichero a editar era drivers/usb/host/uhci-hcd.c y tras mucho buscar no encontré dónde aplicar el parche. Al final lo encontré, en otro fichero: drivers/usb/host/uhci-q.c. Supongo que el fichero uhci-hcd.c ha sido divido dos o más partes, y éste trozo de código ha acabado en éste fichero.

El código que hay que cambiar es éste:
/* Can't have low-speed bulk transfers */
if (urb->dev->speed == USB_SPEED_LOW)
return -EINVAL;

por éste otro:
ret = uhci_submit_common(uhci, urb, eurb, uhci->skel_bulk_qh);
if (ret == -EINPROGRESS)
uhci_inc_fsbr(uhci, urb);
Por supuesto, ésto lo he visto en el parche para la 2.6.11. Ahora toca recompilar el kernel y probar... ERROR. No podía ser tan fácil. Tras toquetear un poco la función la dejé así:
int ret;

/* Inicio parche LTC31 */
qh->skel = uhci->skel_bulk_qh;
ret = uhci_submit_common(uhci, urb, qh);
if (ret == -EINPROGRESS)
uhci_inc_fsbr(uhci, urb);
/* Fin parche LTC31 */

//qh->skel = uhci->skel_bulk_qh;
// ret = uhci_submit_common(uhci, urb, qh);
if (ret == 0)
uhci_inc_fsbr(uhci, urb);
return ret;
y... ¡me ha compilado! Ahora a ver si funciona.

Pues va a ser que si. Al elegir en el Grub arrancar con el kernel recién generado ha funcionado el lector de tarjetas.

domingo, 4 de febrero de 2007

Creando certificados y claves privadas con openssl

Creando certificados y claves privadas con openssl:

Cómo instalar openssl: "sudo apt-get install openssl"

Cómo crear un certificado de CA:
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
Edita el fichero "vars" y cambia la configuración de KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, y KEY_EMAIL. También he tenido que poner KEY_DIR. Luego ejecuta:
source vars
sudo ./clean-all
sudo ./build-ca
Y en el directorio "keys" podremos encontrar "ca.crt" (el certificado) y "ca.key" (la clave privada del certificado).

Esta clave es la más importante de toda la infraestructura PKI y sólo es necesaria para generar nuevos certificados de cliente o servidor. Por lo tanto, esta clave no tiene porqué estar en una máquina accesible.

Cómo crear un certificado y clave privada de servidor:
Ejecutamos:
sudo ./build-key-server nombre_del_servidor
Y en el directorio "keys" encontramos nombre_del_servidor.csr, nombre_del_servidor.crt y nombre_del_servidor.key y 01.pem (que contiene el certificado y la clave privada protegidas por la contraseña que se ha especificado durante la ejecución de build_key_server). El .csr lo podemos borrar y la clave (.key) sólo debe estar accesible a aquellos servicios (p.ej apache2, openvpn...) que la usen para firmar.

Cómo crear un certificado y clave privada de cliente:
Ejecutamos:
sudo ./buildkey cliente
Y en el directorio "keys" encontramos 02.pem, cliente.csr, cliente.crt y cliente.key. El cliente debe tener el fichero 02.pem y conocer la contraseña.

Instalando openVPN

Quiero instalarme una VPN en mi servidor para poder acceder a él. Había pensado en instalar PPTP pero he leído que PPTP no es del todo seguro, así que voy a probar con openVPN.

Para instalar y configurar openvpn he seguido el "OpenVPN 2.0 HOWTO" de openvpn.net y el "Cómo de openVpn en Linux" de www.ubuntu-es.org.

Instalar el paquete "openvpn":
sudo apt-get install openvpn
Crear el certificado de la CA y el certificado y clave privada del servidor y clientes: Si no tenemos los certificados de la CA y el servidor y la clave privada del certificado de servidor o queremos crealos para un nuevo cliente, tendremos que crealos usando openssl.

Crear un fichero de configuración de openVPN, p.ej /etc/openvpn/tunel.conf (podemos copiar el que hay en )con un contenido similar a éste:
#################################################
# Ejemplo para crear una red con multiples #
# clientes #
#################################################

# En que ip local escucha
;local a.b.c.d

# Puerto en el que escucha
# Se pueden levantar varias VPNs en puertos distintos
port 1194

# protocolo TCP o UDP?
proto tcp
;proto udp

# "dev tun" => tunel IP
# "dev tap" => tunel ethernet
dev tun
;dev tap

# ca - certificado de la CA
# cert - certificado del servidor
# key - clave asociada al certificado del servidor
ca /usr/share/doc/openvpn/examples/easy-rsa/keys/ca/ca.crt
cert /usr/share/doc/openvpn/examples/easy-rsa/keys/servidor/servidor.crt
key /usr/share/doc/openvpn/examples/easy-rsa/keys/servidor/servidor.key # Mantener en secreto

# Parametros Diffie hellman
# Se pueden generar asi:
# openssl dhparam -out dh1024.pem 1024
dh /usr/share/doc/openvpn/examples/easy-rsa/keys/dh1024.pem

# Red a la que se asignan los clientes => 192.168.10.0/255.255.255.0
# El servidor será 192.168.10.1
server 192.168.10.0 255.255.255.0

# Mantiene una lista de ip-ip_virual que permite reconectar clientes a la misma IP
ifconfig-pool-persist ipp.txt

# Metemos una ruta para que los clientes puedan llegar a la red 192.168.1.0/255.255.255.0
push "route 192.168.1.0 255.255.255.0"

# Permite hacer de gateway (y redirigir todo el tráfico del cliente al servidor, p.ej. tráfico web)
;push "redirect-gateway"

# Hay que descomentar la linea siguiente para que los clientes puedan verse entre sí
;client-to-client

# Hay que descomentar la linea siguiente para que un mismo cliente puede abrir varias conexiones
duplicate-cn

# El primer parametro indica cada cuanto tiempo probar la conexion (en segundos)
# El segundo, el tiempo transcurrido sin respuesta hasta que se corta la conexion con el cliente
keepalive 10 120

# Permitir compresion
comp-lzo

# Numero maximo de clientes concurrentes
max-clients 25

# Quitamos privilegios al demonio
user nobody
group nobody

# The persist options will try to avoid
# accessing certain resources on restart
# that may no longer be accessible because
# of the privilege downgrade.
persist-key
persist-tun

# configuracion del log
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 4

Crear los parámetros de Diffie-Hellman: si no lo has hecho ya, ejecuta:
sudo openssl dhparam -out dh1024.pem 1024Y te creará dh1024.pem.

Reinicia openvpn: sudo /etc/init.d/openvpn restart

Si surge algún error, comprueba los logs en /etc/log/openvpn/openvpn.log.
Asegúrate de tener bien todas las rutas a ficheros en el fichero de configuración.

Para configurar el cliente:
Instala openvpn en la máquina cliente y copia los ficheros cliente.crt, cliente.key y ca.crt
a /etc/openvpn/keys/

Copia el fichero de configuración de ejemplo que hay en /usr/share/doc/openvpn/examples/sample-config-files/cliente.conf
a /etc/openvpn y edítalo manualmente. Reinicia openvpn y si hay algún problema, mira los logs.

sábado, 3 de febrero de 2007

Configurando el firewal ipchains con webmin

Configurando el firewall ipchains con webmin:

  1. Nos aseguramos de que ipchains está instalado con "sudo apt-get install ipchains"
  2. Accedemos a la dirección del webmin a través de un navegador, p.ej. https://servidor:10000/
  3. Vamos a red -> cortafuegos linux
  4. Elegimos "bloquear trafico de red en la interfaz externa" y "habilitar firewall al arrancar" y pulsamos "configurar firewall"
  5. Denegar conexiones entrantes por defecto: En la sección "paquetes entrantes" pulsamos "añadir", que nos lleva a pantalla "Añadir regla" de "paquetes entrantes"
    1. En "Rule comment" ponemos "Por defecto"
    2. En "Acción a ejecutar" elegimos "denegar"
    3. Pulsamos el botón "Crear"
  6. Para abrir puertos (por ejemplo para el webmin), hay que añadir otra regla en "paquetes entrantes"
    1. En "Rule comment" ponemos un comentario (p.ej. "webmin")
    2. En "Acción a ejecutar" elegimos "aceptar"
    3. En "Protocolo red" elegimos "igual a" y el protocolo del servicio a admitir (en este caso "TCP")
    4. En "Puerto TCP o UDP destino" elegimos "igual a" y escribimos el puerto de destino (en este caso 10000)
    5. Si queremos restringir el acceso a dicho puerto a una IP o subred determinada, en el campo "IP o red de origen" elegimos "igual a" y la IP o red (p.ej. 192.168.1.0/24)
    6. Pulsamos el botón "crear"
    7. Pulsando el icono de la flecha hacia arriba en la regla recién creada, la subimos por encima de creada anteriormente (denegar entrantes por defecto)
  7. Una vez hayamos terminado de configrar el cortafuegos, pulsamos el botón "aplicar configuración"
  8. Si queremos abrir puertos por linea de comandos, podemos usar: "/sbin/ipchains -A input -p $protocol --dport $port -s $localaddress -j ACCEPT" cambiando
    1. $protocol por el protocolo "tcp" o "udp"
    2. $port por el puerto de destino (o puertos), p.ej. 3306 para mysql, 80 para apache, 8080 para tomcat, ...
    3. $localaddress por la dirección IP (o subred), p.ej. 192.168.1.0/24
  9. Si queremos denegar conexiones entrantes a un puerto desde un interfaz determinado por linea de comandos, podemos usar "/sbin/ipchains -A input -p $protocol --dport $port -i $interfaz -j DENY" cambiando
    1. $protocol y $port como en el punto 8
    2. $interfaz por el interfaz a restringir (p.ej. eth0, wlan0, etc...)

Instalando LAMP (Linux Apache Mysql PHP)

Instalando LAMP:
  1. Para instalar linux ver "Instalando Ubuntu Linux"
  2. Para instalar apache: sudo apt-get intall apache2
  3. Para instalar mysql: sudo apt-get install mysql-server
  4. Para instalar PHP: sudo apt-get install php5
  5. Para conectarlos
    1. sudo apt-get install libapache2-mod-php5
    2. sudo apt-get install php5-gd
    3. sudo apt-get install php5-pgsql
    4. sudo apt-get install php5-mysql
  6. Configuración:
    1. edita el archivo /etc/php5/apache2/php.ini y quita el comentario (;) de la línea ";extension=mysql.so"
    2. Si deseamos crear tablas de tipo InnoDB en mysql edita el archivo
      "/etc/mysql/my.cnf" y comenta (añade # al principo de la línea) "skip-innodb"
    3. Para que el mysql escuche en todas las interfaces de red (no sólo en la local, para poder ser accesible desde otras máquinas) en "/etc/mysql/my.cnf" hay que comentar (añadir # al principio de la línea) "bind-address 127.0.0.1".
    4. Si hay un firewall instalado, hay que abrir el puerto 3306 para el mysql(si se quiere que sea accesible desde otra máquina) y el 80 para el apache.

Instalando Webmin en Ubuntu Linux

Descargamos el paquete de webmin:
wget http://downloads.sourceforge.net/webadmin/webmin_1.320_all.deb
Y lo instalamos:
sudo dpkg -i webmin_1.320_all.deb
sudo apt-get -f install

El segundo comando es para instalar las dependencias que queden pendientes. Si se han instalado paquetes que faltaban, reiniciamos webmin:
sudo /etc/init.d/webmin restart
Y ya podemos probarlo: https://servidor:10000.

Para ponerlo en castellano, iremos a webmin -> webmin configuration -> languaje, elegiremos "spanish" y pulsaremos el botón "change language".

Configurando la red en Ubuntu Linux

Si se dispone de entorno gráfico, se puede ejecutar la herramienta para la administración de la red (Sistema -> Administración -> Red).

Si no se dispone de él, habrá que modificar manualmente los ficheros de configuración de la red:
  • /etc/network/interfaces: Configuración de cada interfaz (tarjeta) de red, p.ej.
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1
# las opciones dns no cuentan si está instalado el paquete resovl (ver resolv.conf)
dns-nameservers 192.168.1.1
  • /etc/hosts: contiene una tabla de direcciones ip - nombre máquina
  • /etc/hostname: contiene el nombre de la máquina
  • /etc/resolv.conf: contiene la lista de servidores DNS

Después de modificar alguno de éstos ficheros, para recargar la configuración habrá que ejecutar:
sudo /etc/init.d/networking restart

Actualizando los paquetes de Ubuntu Linux

Lo primero es comprobar que tenemos conexión a la red y si no la tenemos, configurarla.

Ubuntu trae incorporado un gestor de paquetes llamado "apt-get". Éste gestor permite instalar paquetes y mantenerlos actualizados descargándoselos de los repositorios (que pueden estar en cualquier sistema de ficheros: un CD, en la red, ...).

Para actualizar los paquetes instalados ejecutamos:

sudo apt-get update
sudo apt-get upgrade


Hay que poner "sudo" para ejecutar los comandos como "administrador". El primero de ellos actualiza la lista de paquetes (últimas versiones disponibles de cada paquete instalado, p.ej.) y el segundo actualiza los paquetes que lo necesiten.

Los repositorios disponibles se pueden ver y editar en el fichero "/etc/apt/sources.list". Yo suelo desactivar los repositorios del CD (activados por defecto en Ubuntu Server) y activar los los componentes "restricted", "multiverse" y "universe". Después de modifcar el fichero "sources.list" hay que ejecutar el comando
sudo apt-get update
Mi sources.list "básico" (fuentes main, restricted, universe y multiverse):
deb http://es.archive.ubuntu.com/ubuntu/ edgy main restricted universe multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ edgy main restricted
universe multiverse

deb http://es.archive.ubuntu.com/ubuntu/ edgy-updates main restricted
universe multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ edgy-updates main restricted universe multiverse

deb http://es.archive.ubuntu.com/ubuntu/ edgy-backports main restricted universe multiverse
deb-src http://es.archive.ubuntu.com/ubuntu/ edgy-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu edgy-security main restricted
universe multiverse
deb-src http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse