SSH y VNC : tunelizar conexiones

Vamos a usar tuneles SSH para conectar a un servidor VNC remoto.


Presupongo que ya hay un servidor SSH y un servidor VNC en el servidor. El nombre de esta maquina es "servidorremoto", con ip 192.168.1.2 (una máquina en nuestra misma lan)

En el Servidor:
1) Nos aseguramos que en el archivo /etc/ssh/sshd_config tenemos la opción
X11Forwarding yes
2) Suponemos que el servidor VNC está escuchando la pantalla :1, que suele ser 5901 .Para arrancarlo
vncserver :1

3) Suponemos que tenemos ejecutandose el servidor ssh en el servidor:
/etc/init.d/sshd start


En el cliente:

1) Creamos un tunel local Ejecutamos el comando:
ssh -L puertolocal:localhost:puertoremoto
servidorvnc. En nuestro caso podríamos hacer lo siguiente:
ssh -L 65535:localhost:5901 dieguz2@servidorremoto
El primer puerto 65535 es puerto local (en nuestra maquina cliente), el 5901 es el puerto remoto, el del servidor al que nos queremos conectar. Hemos especificado a continuación el usuario (si lo necesitamos) y el servidor (nombre o dirección ip)

Con este comando estamos creando un túnel en nuestra máquina local, de modo que cualquier programa que se conectará a nuestro puerto local 65535 es tunelizado al puerto ssh (el puerto 22) del servidor remoto, el servidor ssh en el remoto mandara la entrada al puerto 5901.

2) Conectar con el cliente VNC. Usamos el comando:
vncviewer localhost::65535
Es decir nos conectamos a nosotros mismos (localhost). Pero como como hemos hecho un túnel en el paso anterior lo que mandemos al puerto local 65535 de nuestra máquina local se estará mandando al puerto 5901 del servidor con el vnc

Esta técnica de tunelización se puede aplicar a otros muchos puertos: ftp, smtp, pop3, http .... En todos los casos usamos un puerto local para conectarnos al puerto de un servidor remoto.

SEGURIDAD

Deberíamos definir reglas en el cortafuegos para lo siguiente:

a) En el cliente no permitir conexiones al puerto 65535 que no sean locales. Cerrar puerto 65535 en el cliente
b) Abrir el puerto 22 en el servidor para permitir conexiones SSH. Abrir el 22 en el servidor
c) En el servidor asegurarnos que el puerto 5901 esta CERRADO para conexiones externas. Dado que las conexiones se hacen a través del puerto 22 en el servidor, y el acceso al puerto 5901 es local (del servidor al servidor) debemos . Cerrar el 5901 en el cortafuegos:

Eliminar directorios .svn de forma recursiva

Para eliminar recursivamente los directorios .svn en Linux, podemos usar este comando:
rm -rf `find . -type d -name .svn`
De este modo no se dectectaran como directorio tipo SVN

Quakelive y Opensuse 11.3 : gráficos corruptos

Al ejecutar quakelive , en la pantalla de carga aparecen una letras borrosas e ilegibles. Al parecer se debe a que opensuse ya usa la libreria libpng14 y esto da problemas con quake live que necesita la 12.

Tenemos que forzar la carga de firefox con libpng12. La opcíon más rapida es editar el archivo /usr/bin/firefox y añadir al comienzo del mismo la siguiente linea:
LD_PRELOAD="/usr/lib/libpng12.so" /usr/bin/ff $*
Con esto solucionamos los problemas con los gráficos.

Visto en:
http://www.quakelive.com/forum/showthread.php?t=43859&page=6

Pure-ftp: usar sólo usuarios virtuales

Pure-ftpd es un servidor ftp que viene en distribuciones como opensuse ( y la enterpise). Con los siguientes pasos vamos a permitir el uso únicamente de usuarios virtuales ftp.

Los usuarios virtuales ,son usuarios no tienen cuenta real en el servidor ( no tienen entrada en passwd) lo que añade más seguridad a nuestro servidor, si sólo queremos habilitar el ftp y no que tengan shell.Como extra con estos usuarios pueden compartir el mismo "home" de ftp.

Como caso extra vamos a deshabilitar el ftp para usuarios del servidor, de modo que sólo los usuarios virtuales puedan realizar ftp. Todos los pasos siguientes los hacemos como root.

Suponemos que el servidor ya lo tenemos instalado y el puerto abierto (por defecto el 21) en el cortafuegos.

1- Creamos un grupo (grupoftp) y un usuario (usuarioftp) restringido en el sistema (sin shell y sin crear los archivos de home) que tenga como home (podríamos ponerle un home falso)
groupadd grupoftp
useradd -s /bin/false -G grupoftp usuarioftp -d /ftp -M

Descripcion:
- shell (-s): /bin/false. Si usasemos por ejemplo /sbin/nologin no podrá loguear ni con usuarios virtuales
- Grupo(-G): grupoftp
- Directorio del home (-d) : /ftp . También podemos poner un home no existente,, pero he apuntado al directorio donde permitiremos que se almacenen los archivos del ftp
- Opción -M indicamos que no cree el home ni sus archivos asociados (.profile, bash, public_html ...)

2- Creamos el directorio (si no existe) y le asignamos los permisos adecuados:
mkdir /ftp
chown -R usuarioftp.grupoftp /ftp

3- Creamos uno o varios usuarios virtuales de ftp, les asignamos password (nos lo pide alcrearlos) y ejecutamos mkdb para almacenar los cambios y generar el archivo pureftpd.pdb
pure-pw useradd usuario1 -u usuarioftp -g grupoftp -d /ftp
pure-pw useradd usuario2 -u usuarioftp -g grupoftp -d /ftp
pure-pw useradd usuario3 -u usuarioftp -g grupoftp -d /ftp
pure-pw mkdb
Para borrarlos (si lo necesitamos) usaremos los comandos:
pure-pw userdell usuario3
pure-pw mkdb

4- Habilitamos la autenticación de usuarios virtuales. Editamos el archivo /etc/pure-ftpd/pure-ftpd.conf . Descomentamos la linea:
PureDB /etc/pure-ftpd/pureftpd.pdb

Tras estos pasos deberíamos poder conectarnos a nuestro ftp
ftp usuario1@localhost

5- Como paso adicional vamos a prohibir que cualquiera de todos los usuarios de nuestro sistema se puedan conectar por ftp. Vamos a prohibir la autenticacion mendiante PAM, por lo que no podrán loguearse. Volvemos a editar el archivo /etc/pure-ftpd/pure-ftpd.conf . Comentamos la linea:
#PAMAuthentication yes

Si solo queremos que unos determinados usuarios no puedan conectarse por ftp y el resto si dejaremos descomentada la autenticación por pam (es decir permitimos la autenticacion por pam). Si miramos el archivo /etc/pam.d/pure-ftpd veremos que hay una lista de usuarios a los que no se les permite la conexion por ftp en el archivo /etc/ftpusers . Los usuarios del sistema a los que no queramos permitirle el acceso los añadiremos a este último archivo

Por último algunas opciones en el archivo /etc/pure-ftpd/pure-ftpd.conf:
ChrootEveryone YES
# para hacer chroot de los usuarios y que no puedan salir del home
Bind 127.0.0.1, 3021
# para cambiar el puerto por defecto a otro (en este ejemplo al 3021 )

Apache: quitar el server signature ( firma)

Para elimiar el server signature en Suse editamos el archivo /etc/sysconfig/apache2 y cambiamos dos variables a los valores siguientes:
APACHE_SERVERTOKENS="Prod"
APACHE_SERVERSIGNATURE="off"

De este modo en las páginas (por ejemplo las 403 cuando no encuentra un archivo html) aparecerá en la parte inferior :
Server: Apache

Y no una descripcion de la versión del servidor web o del sistema operativo del servidor.Cuanto menos información se proporciona a un posible atacante mejor.

Al realizar estos cambios en sysconfig y al reiniciar el server ( /etc/init.d/apache2 restart ) los cambios se reflejarán en /etc/apache2/sysconfig.d/global.conf

Para otros valores :
http://httpd.apache.org/docs/2.0/mod/core.html#servertokens

Conectar a Terminal Services desde linux

Para poder conectar desde linux al Escritorio remoto de un windows server ( u otra versión de windows) usaremos el programa rdesktop que viene incluido en muchas distribuciones. Este programa actua como cliente de de Terminal Server y nos permite usar el protocolo RDP ( Remote Desktop Protocol ) .

Si lo queremos instalar en Opensuse ejecutaremos:
sudo zypper in rdesktop

La sintaxis más sencilla de conexión es ejecutar desde el terminal
rdesktop [maquina a conectar]
donde maquina a conectar puede ser una ip o un nombre de maquina
por ejemplo:
rdesktop mimaquina.com
Si necesitamos interfaz gráfica podemos usar e instalar tsclient, peor necesitamos tener instalado rdesktop para el acceso a Terminal Server:
sudo zypper in tsclient tsclient-lang
que nos permite manejar varias conexiones como se puede apreciar en la imagen (Terminal Service, VNC, SSH ...):


En la siguiente imagen algunas opciones de configuración de la parte de Terminal Server:

Linux: loguear como otro usuario

Para loguear dentro de un entorno gráfico (gnome, kde ...) como otro usuario, si usamos el comando login nos saldrá un error como este:
FATAL: no es posible cambiar los permisos de TTY: Operación no permitida

Para cambiar de usuario tenemos que usar el comando su:
su -l otrousuario

CakePHP: instalación en public_html bajo Opensuse 11.2

El objetivo es intalar el framework CakePhp en el directorio public_html de un usuario en concreto, para que este usuario pueda usar dicho framework. Presuponemos instalado y funcionando apache2 y php5, bajo una máquina opensuse 11.2. Presuponemos que esta con los valores por defecto ( con la directiva UserDir habilitada) de modo que el usuario puede acceder a su web con la siguiente URL:
http://localhost/~usuario

Los pasos son los siguientes:
1- Descargar CakePHP desde su página principal http://cakephp.org/ :
wget http://github.com/cakephp/cakephp1x/tarball/1.2.6

2- Descomprimimos el archivo en el directorio public_html del usuario (ej dieguz2), de modo que al hacer un ls quede así:
/home/dieguz2/public_html/app
/home/dieguz2/public_html/cake
/home/dieguz2/public_html/plugins
/home/dieguz2/public_html/vendors
/home/dieguz2/public_html/index.php
/home/dieguz2/public_html/README
Tras este paso deberiamos poder conectar al servidor y ver la página de CakePHP, nos saldrán varios errores, que corregiremos a continuación:
http://localhost/~dieguz2/index.php
Si no tenemos activado el MOD_REWRITE de apache veremos la página (sin estilos ni imágenes), con una serie de errores,en todos los casos HAY que activar el rewrite. Si lo tenemos activado tenemos que hacer los cambios explicados en el siguiente paso.

Para activar el módulo rewrite, podemos hacerlo a través de yast (servidor http /Módulos del servidor / rewrite / habilitar ) o a través de la linea de comando:
a2enmod rewrite
sudo /etc/init.d/apache2 force-reload

3- Si tenemos activado el MOD_REWRITE en apache, nos saldrá el mensaje "Objeto no encontrado", tenemos que hacer cambios en dos archivos .htaccess añadiendo la directiva RewriteBase de modo que queden así:
/home/dieguz2/public_html/.htaccess

RewriteEngine on
RewriteRule (.*) app/webroot/$1 [L]
RewriteBase /~dieguz2/

/home/dieguz2/public_html/app/webroot/.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
RewriteBase /~dieguz2/

Si tenemos algun problema adicional (como que no hace caso de los .htaccess tendremos que activar el AllowOverride en apache.

4- Cambiamos los permisos del directorio tmp para evitar que nos de errores de escritura ( CAKE Warning (512) app/tmp/cache/ is not writable [CORE/cake/libs/cache/file.php, line 263])
chmod 777 -R /home/dieguz2/public_html/app/tmp

5- Editamos el archivo:
vi /home/dieguz2/public_html/app/config/core.php
Buscamos la cadena "Security.salt" cambiamos la cadena por defecto por otros numeros y letras aleatorios. por ejemplo, podría quedar asi
Configure::write('Security.salt', 'imaqm1897dfnAsk1938ajmKnau812na2A2kajsai');

Hacemos lo mismo con la "cipherSeed", pero en este caso usamos sólo números aleatorios
Configure::write('Security.cipherSeed', '16359506657458542996042684645');

Con estos cambios evitaremos los siguientes errores:
Notice (1024): Please change the value of 'Security.salt' in app/config/core.php to a salt value specific to your application [CORE/cake/libs/debugger.php, line 674]
Notice (1024): Please change the value of 'Security.cipherSeed' in app/config/core.php to a numeric (digits only) seed value specific to your application [CORE/cake/libs/debugger.php, line 678]

6- Si no tenemos definida una zona horaria en php, podemos tener un mensaje de error como este:
[http://php.net/function.strtotime]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting

Para corregirlo editamos como root el archivo php.ini (/etc/php5/apache2/php.ini) fijando la variable a la zona horaria que queramos (listado de zonas horarias en php):
date.timezone = Europe/Madrid
7- Finalmente pasamos a editar el archivo de configuración de la base de datos. En CakePhp nos envía un archivo de ejemplo para mysql, lo copiaremos y editaremos con los valores que necesitemos (usuario,contraseña...) para conectar con nuestra base de datos (que debe estar ejecutándose):
cp /home/dieguz2/public_html/app/config/database.php.default /home/dieguz2/public_html/app/config/database.php
vi /home/dieguz2/public_html/app/config/database.php

El resultado final ( en la imagen no he configurado la BD) debe ser algo similar a esto:

Netbeans 6.8 : google app engine, instalacion del plugin

Como instalar soporte para el APP Engine en Netbeans:

Instalación de los plugin:

1- Pulsamos en Herramientas / complementos:
2- Pulsamos en la pestaña Configuración, y luego en el botón Agregar
3- Como nombre ponemos por ejemplo Google App Engine - Kenai y como URL
a) si usamos netbeans 6.7 : http://kenai.com/projects/nbappengine/downloads/download/1.0_NetBeans671
b) si usamos netbeans 6.8 : http://kenai.com/projects/nbappengine/downloads/download/Latest_NetBeans68

4- Le damos a la pestaña plugin disponibles, buscamos por "google app" ya añadimos los plugin.


Más información en el siguiente enlace :

Getting Started With Google App Engine
NetBeans support for Google App Engine
Will it play in App Engine

 


 


POR LA LIBERTAD EN LA RED






¡¡¡ NO AL CIERRE DE WEBS !!!