Author Archives: simple

Nuevo Balanceador de Carga a nivel de Aplicación en AWS

En la primavera de 2009 AWS pone en marcha el servicio Elastic Load Balancing (ELB) de AWS en la primavera de 2009 (puede ver en este enlace el anuncio de aquel momento). Elastic Load Balancing se ha convertido en un componente clave de la arquitectura para muchas aplicaciones que funcionan con AWS. En paralelo con Auto Scaling , Elastic Load Balancing simplifica en gran medida la tarea de la creación de aplicaciones y permite escalar hacia arriba y abajo mientras se mantiene una alta disponibilidad.

En el nivel
En el conocido modelo de red OSI, los equilibradores de carga se ejecutan habitualmente en la capa 4 (transporte) o en la capa 7 (aplicación).

Un equilibrador de carga de capa 4 funciona en el nivel de protocolo de red y no conoce el contenido de los paquetes de red, desconoce las características específicas de HTTP y HTTPS. En otras palabras, se equilibra la carga sin necesidad de saber mucho sobre ella.

Un equilibrador de carga de la capa 7 es más sofisticado y más potente. Se inspeccionan los paquetes, tiene acceso a las cabeceras HTTP y HTTPS, y (con más información) puede hacer un trabajo más inteligente de repartir la carga.

Equilibrado de carga a nivel de Aplicación de AWS

Este nuevo equilibrador de carga se ejecuta en la capa 7 y es compatible con una serie de características avanzadas. La opción inicial (que ahora se llama “balanceador de carga clásico”) está todavía disponible y continúa ofreciendo balanceado en las capas 4 y 7.

Los balanceadores de carga a nivel de aplicación, soportan aplicaciones que se ejecutan en contenedores. Soportan dos protocolos standar en la industria (WebSocket y HTTP/2) y además proporcionan visibilidad adicional sobre las intancias y contenedores destino. Sitios Web y aplicaciones móviles, que se ejecutan en contenedores o instancias EC2, pueden beneficiarse del uso de Balanceadores de carga a nivel de Aplicación.

A continuación vamos a ver más en detalle cada una de estas características y después crearemos un nuevo Balanceador de carga a nivel de aplicación.

Enrutado basado en contenido

Un balanceador de carga a nivel de aplicación tiene acceso a las cabeceras HTTP y permite enrutar peticiones a diferentes servicios adecuadamente. Por ejemplo, podemos querer enviar peticiones que incluyan “/api” en el path del URL a un grupo de servidores (que llamaremos grupo destino) y aquellas peticiones que contengan “/mobile” a otros. Enrutar peticiones de esta manera permite construir aplicaciones que se componen de múltiples microservicios que pueden ejecutarse y escalarse de forma independiente.

Como veremos, cada Balanceador de Carga a nivel de Aplicación permite definir hasta 10 reglas basadas en URL para enrutar peticiones a un grupo de servidores objetivo. Más adelante, AWS prevee dar acceso a otros métodos de enrutado.

Soporte para aplicaciones basadas en contenedores

Muchos usuarios de AWS están empaquetando sus microservicios en contenedores y alojandolos en Amazon EC2 Container Service. Esto permite a una única instancia de EC2 ejecutar uno o más servicios, pero puede presentar algunos desafíos interesantes para los balanceadores de carga tradicionales respecto al mapeo de puertos y a la comprobación de estado de funcionamiento.

El balanceador de carga a nivel de Aplicación conoce y soporta las aplicaciones basadas en contenedores. Esto permite a una instancia alojar diferentes contenedores que escuchan on diferentes puertos detrá del mismo grupo destino y además una comprobación más fina de la comprobación del correcto funcionamiento de los puertos.


Mejores métricas

En los balanceadores de carga de nivel de aplicación es posible obtener métricas de cada uno de los micro-servicios. Esta es una de las consecuencias de poder ejecutar cada uno de los micro-servicios en su propio grupo de servidores. Este incremento de visibilidad permite un mejor trabajo de escalado y reducción en respuesta a servicios individuales.

Los balanceadores de carga a nivel de aplicación proporcionan nuevos métricas CloudWatch incluyendo tráfico general (GB), número de conexiones activas, y la tasa de conexión por hora.


Soporte para protocolos adicionales y cargas de trabajo

El balanceador de carga a nivel de aplicación soporta dos protocolos adicionales: WebSocket y HTTP/2
WebSocket permite crear conexiones de largos periodos de espera entre el cliente y el servidor. Esta es una alternativa más eficiente al método de la “vieja escuela” que usaba conexiones HTTP que permanecían abiertas por largos periodos de tiempo. Los WebSocket son adecuados para dispositivos móbiles y pueden ser utilizados para enviar información dinámica minimizando el consumo de energía. Los ALB (Balanceadores de Carga a nivel de Aplicación) proporcionan soporte nativo para WebSocket a través de los protocolos ws:// y wss://.

HTTP/2 supone una mejora significativa del original HTTP 1.1. El nuevo protocolo soporta peticiones multiplexadas a través de una única conexió lo que reduce considerablemente el tráfico de red.


Creando un balanceador de carga a nivel de aplicación

Vamos a crear un ALB y a configurarlo para procesar tráfico.

La consola de Elastic Load Balancing permite crear dos tipos de balanceadores

alb_con_splash_1

alb_config_top_1

alb_config_butt_1

alb_pick_cert_1

alb_set_sec_group_1

elb_set_target_1

alb_register_targets_1

alb_review_1

alb_my_alb_active_1

alb_create_target_1

alb_add_rule_1

Referencias

1. New – AWS Application Load Balancer

2. Multiplexing: TCP vs HTTP2

3. New Features for Amazon EC2: Elastic Load Balancing, Auto Scaling, and Amazon CloudWatch

Acceso mediante VNC a instancias Linux de AWS

Poder acceder a un ordenador con sistema operativo linux de forma gráfica puede ser interesante en muchos casos. Nos planteamos, por ejemplo el análisis de una red de nodos con la herramienta Gephi.  Para poder ejecutar este software en una instancia de AWS realizaremos los siguientes pasos. El grupo de seguridad debe permitir el acceso a los puertos 22 (SSH) y 5901 (VNC).

1. Conectaremos con la instancia mediante SSH.

2. Instalaremos los paquetes necesarios para el entorno gráfico, incluyendo el servidor VNC.

sudo apt-get update
sudo apt-get install ubuntu-desktop
sudo apt-get install vnc4server

3. Descargaremos el cliente VNC de la siguiente dirección

https://www.realvnc.com/download/

4. Lanzaremos el servidor SVNC

Podemos cambiar la geometría y el número de colores con los parámetros “-gometry  ” y “-depth”. Tenga en cuenta que a mayor definición de color y a mayor tamaño de pantalla la comunicación será algo más lenta.

vncserver -depth 24 -geometry 1366x768 :1

Para parar el servidor ejecutaremos

vncserver -kill :1

5. Configuración del cliente VNC

Para conseguir la misma calidad de color en el cliente debemos modificar una de las opciones de nivel experto.  Ejecutaremos VNC Viewer y haremos clic en el botón “Opciones“, a continuación haremos clic en la opción “Avanzadas…“. En la pestaña “Experto“, modificaremos la opción “ColorLevel” que cambiaremos a “full“.

2

Aceptaremos los cambios y en la ventana principal indicaremos el nombre de nuestro servidor añadiendo al final “:1″ y en cifrado seleccionaremos la opción “Dejar que VNC Server elija“.

1

Al intentar conectar utilizaremos el usuario por defecto de la instancia de AWS. Es importante que lancemos el servidor con este mismo usuario (en nuestro caso el usuario “Ubuntu“).  Es importante revisar los logs del servidor VNC para detectar posibles errores. Al conectar con el cliente VNC utilizaremos el password que introducimos durante la instalación de VNC. Si todo funcionó correctamente deberíamos ver una ventana “xterm” como esta.

2_1

6. Instalación del entorno gráfico xfce4
Si queremos además de esta ventana simple, poder acceder a un escritorio completo, utilizaremos en gestor de ventanas xfce4. Debido a un bug en gnome-session utilizando VNC hemos optado por instalar este gestor de ventanas algo más ligero. Puede consultar una guía completa de instalación de Xfce en esta dirección. Para instalar Xfce seguiremos los siguientes pasos.

sudo apt-get install xrdp
sudo apt-get install xfce4

A continuación, editaremos el fichero .vnc/xstartup y comentaremos la última linea y para añadir esta

# x-window-manager &
xfce4-session &

7. Instalación de Gephi

Para instalar Gephi, podemos utilizar la conexión ssh. Necesitaremos instalar java para lo que seguiremos los siguientes pasos:

java -version
sudo apt-get update
sudo apt-get install default-jre
sudo apt-get install default-jdk

Ahora podemos reiniciar el servidor VNC y volver a conectar con nuestro cliente. Si no hemos encontrado en el camino algún error, deberíamos poder acceder al gestor de ventanas de Xfce4 y descargar Gephi desde su página oficial y descomprimirlo utilizando una ventana “Xterm”. A continuación ejecutaremos “gephi” desde la carpeta “bin”.

3

Ahora que ya tenemos nuestro cliente y servidor configurados correctamente, podemos crear una imagen AMI que podremos utilizar cada vez que queramos trabajar con Gephi o cualquier otro software gráfico en Linux.

Referencias:

1. Ubuntu 13.10 – How to install xrdp in Ubuntu 13.10
http://c-nergy.be/blog/?p=4448

2. Wrong colours with a 16 depth
https://www.realvnc.com/pipermail/vnc-list/2000-March/012794.html

3. [SOLVED] Ubuntu Server VNC Server – Gray Screen
http://ubuntuforums.org/archive/index.php/t-1707906.html

4. Using VNC to Operate a Desktop on Ubuntu 12.04
https://www.linode.com/docs/applications/remote-desktop/using-vnc-to-operate-a-desktop-on-ubuntu-12-04

5. Setting Up VNC on Ubuntu in Amazon EC2 – Page 3 Page 3
http://www.serverwatch.com/server-tutorials/setting-up-vnc-on-ubuntu-in-the-amazon-ec2-Page-3.html

 

Instalación del servidor AI Challenge 2011 en una instancia de AWS

Seguiremos las instrucciones que el usuario “pixel8r” dejó en el foro oficial de la competición. Hemos podido comprobar que faltan algunas instrucciones que son importantes, sobre todo cuando se producen errores en la instalación (algo muy habitual) y hay que empezar de nuevo. En estos casos, hemos añadido ordenes que eliminan todos los usuarios y borran el directorio de instalación de chroot. Una cuestión importante es que este servidor utiliza virtualización ligera a través de schroot. Podemos encontrar más información sobre schroot en este enlace.

Es importante destacar que en el momento en el que se escribe este post no hemos conseguido que el servidor comienza a jugar partidas. En el hilo “Duplicating the aichallenge website locally” del  foro oficial de la competición se comenta que es necesario modificar dos ficheros (ver paso 18) y disponer de unos 20 usuarios con sus bots compilados y preparados para competir. Cualquier ayuda al respecto será bienvenida!

Ahora comenzaremos con los pasos seguidos para la instalación del servidor.

1. Lanzar una instancia en AWS utilizando las imágenes preconfiguradas de Ubuntu.
https://uec-images.ubuntu.com/releases/natty/release/
Elegir la opción “ebs”

eu-west-1
64-bit
ebs
Launch ami-7914170d
ec2-run-instances ami-7914170d -t t1.micro --region eu-west-1 --key ${EC2_KEYPAIR_EU_WEST_1}

2. Modificar los repositorios para incluir aquellos que permiten instalar paquetes de versiones anteriores de Ubuntu.
editar el fichero /etc/apt/sources.list dejar solo las siguientes lineas

deb http://old-releases.ubuntu.com/ubuntu/ natty main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ natty main restricted
deb http://old-releases.ubuntu.com/ubuntu/ natty-updates main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ natty-updates main restricted
deb http://old-releases.ubuntu.com/ubuntu/ natty universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ natty universe multiverse
deb http://old-releases.ubuntu.com/ubuntu natty-security main restricted
deb-src http://old-releases.ubuntu.com/ubuntu natty-security main restricted

3. Actualizar apt-get

apt-get update

4. Instalar git

apt-get install git

5. Crear usuario contest

sudo useradd -d /home/contest -m -s /bin/bash contest
passwd contest

El password será contest

6. Convertir al usuario contest en administrador
Ejecutar

sudo visudo

y añadir la siguiente linea al final de fichero

contest ALL=(ALL) ALL

7. Editar el fichero /etc/hosts
Añadiremos las siguientes lineas. sustituiremos <ip> por la IP asignada por AWS.

127.0.0.1 ec2-<ip>.eu-west-1.compute.amazonaws.com
127.0.0.1 aichallenge

8. Cambiar el nombre del host a aichallenge

sudo hostname aichallenge

9. Clonar el repositorio git de aichallenge

sudo su - contest
git clone https://github.com/aichallenge/aichallenge.git

9. Añadir módulos y actualizaciones

cd aichallenge
git submodule init
git submodule update

10. Eliminar lenguajes de programación no necesarios

Algunos lenguajes de programación no se instalan correctamente (por ejemplo Ruby) . Si no
necesita los lenguajes de programación adicionales, elimine todos lo que aparece en el fichero setup/retrieve_languages.py en la linea “sources=” y entre “[" y "]“. Deje aquellas lineas que necesite realmente.

editar el fichero setup/retrieve_languages.py
y eliminar todas las lineas que hay dentro de sources = []

11. Configuración el servidor

Ejecutaremos lo siguiente y responderemos a las preguntas como se indica.

su - contest
cd ~/aichallenge
sudo python setup/server_setup.py

Are you sure you want to continue? yes
- Only install system packages? no
- Contest username [contest] – push ENTER to accept default
- Database root password? – Leave blank
- Confirm database root password? – leave blank
- Contest database username [contest] – push ENTER
- Contest database password: contest
- Confirm contest database password: contest
- Name of contest database [aichallenge] – push ENTER
- accept defaults for root dir, source repo, uploads, maps & replays
- hostname is whatever you set above ec2-<ip>.eu-west-1.compute.amazonaws.com
- Make contest site the default website? yes
- Run setup as configured above? yes

12. Probar que el servidor está funcionando

en un navegador escribir el nombre del servidor

http://ec2-<ip>.eu-west-1.compute.amazonaws.com

Si todo funciona debe aparecer la página principal de la competición.

Instalación del WORKER
Los workers (podemos ejecutar más de uno) se encargan de compilar los bots y comprobar que el resultado de la compilación ha sido correcta. Si hubiese algún error en la compilación, este se muestra en el panel del usuario.

13. Editar el fichero de configuración

Editar el fichero setup/worker_setup.py

aquí también debemos eliminar aquellos lenguajes de programación que no necesitemos del método “install_extra_distribution_languages()” y comentar aquellas lineas que no necesitemos del “install_” del método “install_extra_distribution_languages().

En el método “install_extra_distribution_languages():” además, hemos editado la lista pkg_list dejando solo ["perl"]. También eliminaremos las lineas siguientes que provocan un error en la instalación de Ruby.

install_apt_packages(pkg_list)
if not os.path.exists(“/usr/bin/ruby”):
os.symlink(“/usr/bin/ruby1.9.1″, “/usr/bin/ruby”)

En el método “install_basic_languages()” eliminaremos de la lista pkg_list “python3-dev”, quedando de esta forma:
pkg_list = ["gcc", "g++", "openjdk-6-jdk", "python-dev", "python-numpy", "python-scipy"]

Como se indica anteriormente eliminaremos las lineas siguientes:
install_clojure(download_base)
install_dart(download_base)
install_dmd(download_base)
install_golang(download_base)
install_groovy(download_base)
install_nodejs(download_base)
install_coffeescript(download_base) # must come after nodejs
install_pypy(download_base)
install_racket(download_base)
install_scala(download_base)

NOTA: Editar las variables “src_url” y “os_url” sustituyendo sus valores por estos:

“src_url”: “http://old-releases.ubuntu.com/ubuntu/”,
“os_url”: “http://old-releases.ubuntu.com/ubuntu/”,

Esto soluciona uno de los errores comentados en el foro oficial de Ai Challenge Ants 2011.

14. Lanzar el Worker

Para lanzar el worker ejecutaremos:
curl http://ec2-<ip>.eu-west-1.compute.amazonaws.com/api_server_setup.php?|sh

Esta operación tarda varios minutos y es aquí dónde se crea el entorno virtual para la ejecución de los bots. Es posible que se produzca algún fallo en esta fase, principalmente porque elegimos un lenguaje de programación que requiere de algún paquete no disponible. Tenga en cuenta que estamos intentando instalar un sistema operativo del año 2011 y que es muy posible que ciertos paquetes no estén disponibles en la misma ubicaciones. Dependiendo del momento en el que se produzca el error es posible que tengamos que eliminar los usuarios jailuser necesarios para la ejecución protegida de los bots.

deluser jailuser1;deluser jailuser2;deluser jailuser3;deluser jailuser4;deluser jailuser5;deluser jailuser6;deluser jailuser7;deluser jailuser8;deluser jailuser9;deluser jailuser10;deluser jailuser11;deluser jailuser12;deluser jailuser13;deluser jailuser14;deluser jailuser15;deluser jailuser16;deluser jailuser17;deluser jailuser18;deluser jailuser19;deluser jailuser20;deluser jailuser21;deluser jailuser22;deluser jailuser23;deluser jailuser24;deluser jailuser25;deluser jailuser26;deluser jailuser27;deluser jailuser28;deluser jailuser29;deluser jailuser30;deluser jailuser31;deluser jailuser32

También debemos borrar el directorio en el que se crea el espacio virtual

rm -fr /vsr

Después de realizar estas dos operaciones, podemos volver a lanzar el worker.

AJUSTES FINALES

15. Instalar phpMyAdmin
Instalaremos phpMyAdmin versión 3.4.3.2 (la versión del 2011, las más modernas fallan con ubuntu 11.04)

http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.4.3.2/

16. Editamos el fichero /etc/apache2/

vi /etc/apache2/sites-available/ec2-<ip>.eu-west-1.compute.amazonaws.com

Añadimos las siguientes lineas a partir de la linea 52

Alias /phpmyadmmin /home/contest/phpmyadmin
<Directory /home/contest/phpmyadmin>
Options Indexes FollowSymLinks MultiViews
AddEncoding x-gzip .replaygz
AddType application/json .replay .replaygz
AllowOverride None
Order allow,deny
Allow from all
</Directory>

ejecutamos

/etc/init.d/apache2 restart

y volvemos a ejecutar el worker

sudo -u contest /home/contest/aichallenge/worker/start_worker.sh

Accedemos a phpMyAdmin

http://ec2-<ip>.eu-west-1.compute.amazonaws.com/phpmyadmin

con el usuario contest y el password contest

17. Instalar los mapas

En la dirección http://ants.aichallenge.org/using_the_tools.php copiamos la dirección del enlaces http://ants.aichallenge.org/tools.tar.bz2

y descargamos en el servidor el fichero

wget http://ants.aichallenge.org/tools.tar.bz2

Descomprimimos el fichero

bzip2 -d tools.tar.bz2
tar xvf tools.tar

copiamos el directorio tools a /home/contest y cambiamos los permisos

chown -R contest:contest tools/

Copiamos las carpetas maze, multi_hill_maze, and random_walk folders to ~/maps

cp -r tools/maps/maze/ maps/.
cp -r tools/maps/multi_hill_maze/ maps/.
cp -r tools/maps/random_walk maps/.
cd ~/aichallenge/manager
./add_maps_to_database.py

18. Modificar los ficheros sql/2_generate_matchup.sql
y sql/opponent.sql

NOTA: Los números de lineas que aquí se indican no coinciden con las que aparecen en las instrucciones del foro. Las últimas modificaciones del repositorio de Ai Challenge Ants en Github son de febrero de 2012, sin embargo las instrucciones del foro son de octubre de 2011 por lo que suponemos que posteriores modificaciones en estas líneas provoca esta variación en las numeraciones. Hemos realizado prueba con y sin las modificaciones.

Modificar la linea 169 del fichero 2_generate_matchup.sql y
cambiar la linea select min(g.game_count) por select avg(g.game_count) * 1.1 + 1
guardar y salir.

mysql -u contest -p -D aichallenge < 2_generate_matchup.sql

a continuación modificar la linea 205 del fichero opponent.sql

cambiar la linea select min(g.game_count) por select avg(g.game_count) * 1.1 + 1
guardar y salir

mysql -u contest -p -D aichallenge < opponent.sql

19. Ejecutar update_visualizer

cd ~/aichallenge/setup
sudo ./update_visualizer.sh

http://ec2-<ip>.eu-west-1.compute.amazonaws.com/api_get_task.php?api_key=490c55f4e6002cab90695cdc688f8c64

Si todo funcionó correctamente, debemos poder ver como cada vez que se añade un nuevo código, el worker lo compilará mostrando posibles errores.

Auto escalado y balanceo de carga con AWS

Los grupos de auto escalado de AWS (http://aws.amazon.com/es/autoscaling/) van a permitir escalar horizontalmente un servidor web o cualquier otro servicio. En AWS podremos definir reglas que permitirán que el número de servidores que ofrecen un servicio se adapten de forma automática a las necesidades de los usuarios del servicio. En el ejemplo que vamos a ver a continuación crearemos un grupo de autoescalado para un servidor web.

Lo primero que haremos será instalar una herramienta que permita poner a prueba nuestro servidor. Podemos encontrar diferentes tipos de Herramientas de pruebas para servidores web si buscamos en Google la cadena “stress test tool http”  podemos encontrar algunos ejemplos. De entre ellos utilizaremos Siege que es una herramienta muy sencilla y que nos servirá para poner a prueba nuestro servicio web.

 

1. Crear el balanceador de carga.

load_balancer_1  load_balancer_2_2  load_balancer_3_2 load_balancer_4 load_balancer_5 load_balancer_6 load_balancer_7

2. Crear una configuración de lanzado (Launch Configuration)

auto_scaling_1 auto_scaling_2 auto_scaling_3 auto_scaling_4 auto_scaling_5 auto_scaling_6 auto_scaling_7 auto_scaling_8 auto_scaling_9 auto_scaling_10 auto_scaling_11 auto_scaling_12

3. Configuración del cliente Siege

auto_scaling_grp_29 auto_scaling_grp_30 auto_scaling_grp_31

3.2 Conexión con la instancia utilizando Putty

auto_scaling_grp_32 auto_scaling_grp_33 auto_scaling_grp_34 auto_scaling_grp_35 auto_scaling_grp_36 auto_scaling_grp_37 auto_scaling_grp_38 auto_scaling_grp_39 auto_scaling_grp_40 auto_scaling_grp_41 auto_scaling_grp_42 auto_scaling_grp_43

3.1 Instalación de Siege

auto_scaling_grp_44 auto_scaling_grp_45 auto_scaling_grp_46 auto_scaling_grp_47 auto_scaling_grp_48 auto_scaling_grp_49 auto_scaling_grp_50 auto_scaling_grp_51 auto_scaling_grp_52 auto_scaling_grp_53 auto_scaling_grp_54 auto_scaling_grp_55

4. Preparación del cliente para las pruebas de estres

http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2

C:\aws>python ez_setup.py

Código para programa php

<HTML>
<HEAD>
</HEAD>
<BODY>
<?php
$max = $_GET['max'];

for ($x = 0; $x <= $max; $x++) {
 echo "The number is: $x <br>";
} 
?>
</BODY>
</HTML>

 

Referencias

1. Set Up a Scaled and Load-Balanced Application
http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-register-lbs-with-asg.html

2. Elastic Load Balancing in Amazon EC2-Classic
https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/UserScenariosForEC2.html

 

Instalar AWS CLI en Windows 7

AWS CLI (Command Line Interface) es un interfaz unificado para acceder a los diferentes servicios de Amazon en la nube. Podemos encontrar más información sobre AWS CLI en los siguientes enlaces:

Para poder ejecutar comandos de AWS CLI necesitamos instalar previamente Python.

PASO 1: Instalar Python

Por cuestiones de compatibilidad recomendamos instalar la versión 2.7

Para descargarlo: https://www.python.org/downloads/

En nuestro caso seleccionaremos la versión Windows X86-64 MSI Installer ya que nuestro sistema operativo es de 64 bits.

PASO 1.2: Conocer el tipo de sistema
Para saber si nuestro sistema es o no de 64 bits, haremos clic con el botón izquierdo sobre inicio derecho del ratón sobre el menú Inicio -> Equipo 
inicio_windows  y después haremos clic con el botón derecho sobre el menú Equipo. Posteriormente clic con el botón izquierdo sobre el submenú Propiedades.

submenu_propiedades2

Aparecerá la siguiente información. En la sección Tipo de sistema, podremos ver si nuestro sistema es de 64 o de 32 bits.

propiedades_64bits

Para instalar Python, simplemente debemos hacer clic primero en Ejecutar y después en Next hasta completar la instalación.

python_install_1 python_install_2 python_install_3 python_install_4 python_install_5python_install_7

Una vez completada la instalación, debemos añadir la ruta de Python al “Path” del sistema para que podamos ejecutar Python desde cualquier directorio.

PASO 1.3: Añadir Python a la variable de entorno “PATH”

Para añadir este cambio de forma permanente, debemos volver a acceder a las propiedades del equipo de la misma forma que lo hicimos en el PASO 1.2: Conocer el tipo de sistema, pero esta vez seleccionaremos la opción “Configuración avanzada del sistema” a continuación haremos clic sobre “Variables de entorno”.

cambiar_path2

 

cambiar_path4cambiar_path5

En la ventana de “Variables de entorno” editaremos la variable “Path” haciendo clic en el botón Editar. Añadiremos los siguiente: “;C:\Python27;C:\Python27\Scripts” a continuación de la cadena que tuviésemos previamente. Si no hubiese ningún texto eliminaremos el “;” de inicio de la cadena.

PASO 1.4 Abrir una ventana de comandos de Windows

Una vez realizado este cambio comprobaremos Python está instalado, haciendo clic sobre el botón de inicio de Windows inicio_windows y escribiendo “cmd” en la casilla etiquetada como “Buscar programas y archivos”.

cmd2

En la ventana de comando escribiremos python. Si todo es correcto debe aparecer el siguiente mensaje:

Python 2.7.8 (default, Jun 30 2014, 16:08:48) [MSC v.1500 64 bit (AMD64)] on win32

Type "help", "copyright", "credits" or "license" for more information.
>>>

Para salir de esta ventana escribiremos “Ctrl+z”, después pulsaremos la tecla “Enter” y a continuación escribiremos “exit” y “Enter” o bien haremos clic sobre el símbolo “x” de la esquina superior derecha de la ventana.

cmd_python

PASO 2. Instalación de Python Package Index (Pip)

Pip es una herramienta que nos permite instalar paquetes en Python facilmente. Crearemos el directorio c:\aws para guardar los ficheros necesarios para la instalación de AWS CLI.
A continuación descargaremos el fichero “ez_setup” de la siguiente dirección
https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
y lo guardaremos en c:\aws

A continuación ejecutaremos desde una ventana de comandos de windows

C:\aws>python ez_setup.py

a continuación ejecutaremos

C:\aws>pip install awscli

PASO 3: Configuración de AWS CLI

Para configurar AWS CLI necesitamos nuestra “AWS Access Key ID” y “AWS Secret Access Key“, además de la región a la que deseamos acceder (por ejemplo: eu-west-1).

La forma más sencilla de configurar AWS CLI es escribiendo lo siguiente en una ventana de comandos de windows

c:\aws\aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: eu-west-1
Default output format [None]: text

 

Una vez configurado escribiremos lo siguiente para probar que la configuración es correcta:

c:\aws\aws ec2 describe-instances --output table --region eu-west-1

Si todo es correcto, el sistema mostrará una tabla similar a esta:

-------------------
|DescribeInstances|
+-----------------+
$ aws ec2 describe-instances --output table --region us-west-1
-------------------
|DescribeInstances|
+-----------------+
$ aws ec2 describe-instances --output table --region us-west-2
------------------------------------------------------------------------------
|                              DescribeInstances                             |
+----------------------------------------------------------------------------+
||                               Reservations                               ||
|+-------------------------------------+------------------------------------+|
||  OwnerId                            |  012345678901                      ||
||  ReservationId                      |  r-abcdefgh                        ||
|+-------------------------------------+------------------------------------+|
|||                                Instances                               |||
||+------------------------+-----------------------------------------------+||
|||  AmiLaunchIndex        |  0                                            |||
|||  Architecture          |  x86_64                                       |||

Referencias:

AWS Command Line Interface

http://docs.aws.amazon.com/cli/latest/userguide/installing.html

Configuring the AWS Command Line Interface

http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

Aprendiendo a construir drones (Primera parte)

Esta entrada del blog está dirigida a aquellos que desean introducirse en el desarrollo de aplicaciones para los Vehículos Aéreos no Tripulados (VANT). Utilizaremos con frecuencia las siglas inglesas UAV (Unmanned Aerial Vehicles) o simplemente Drone,  palabra que en inglés hace referencia al sonido que hacen algunos insectos al volar. Este post guarda relación con el Máster que se impartirá el próximo curso en la Universidad de Huelva con el título Máster universitario en Sistemas Aéreos Pilotados de forma Remota en el que Simple Lab participa tratando la fusión de datos en RPAS (Remotely Piloted Aircraft Systems). Puede encontrar más información sobre el Master en http://uhu.es/masterRPAS/ Con la idea de iniciarnos en el mundo de los RPAS construiremos nuestro propia plataforma de desarrollo de aplicaciones AUV. Si desea hacernos alguna sugerencia puede enviar a simple.uhu@gmail.com.

El objetivo de esta entrada y las siguientes de esta serie, será guiar en la construcción de una plataforma de desarrollo de AUV’s que nos permita poner el foco en los elementos software del sistema y sus aplicaciones en sectores como la agricultura, la industria química, la minería, el turismo o la pesca. Sin más, pasaremos a describir las características de nuestra plataforma de desarrollo AUV. El sistema estará compuesto por:

  • Un aeromodelo resistente, fácil de tripular que nos permita hacer nuestras primeras pruebas de vuelo radio controlado.
  • Una electrónica de control
  • Un software de control

Hay muchos ejemplos de sistemas de bajo coste o totalmente gratuitos que han tenido gran repercusión el avance de la sociedad. Baste citar como ejemplo el sistema operativo Linux, el servidor web Apache o la plataforma de aprendizaje Arduino. Por otro lado, según la Comisión Europea la tecnología de los RPAS “ofrecerán un amplio rango de aplicaciones civiles que beneficiarán tanto a los ciudadanos como a los negocios en Europa”.   Con el ánimo de facilitar el camino a cuantos quieran aportar su esfuerzo al desarrollo de esta tecnología pretendemos construir una plataforma de desarrollo de aplicaciones para UAVs con un coste por debajo de los 200€.  

Objetivos del proyecto:

  • Conocer las fuentes de información de referencia en AUVs
  • Conocer algunos UAVs comerciales
  • Conocer los diferentes aeromodelos que pueden servirnos como base para nuestro AUV
  • Conocer diferentes sistemas electrónicos que permitan controlar nuestro AUV
  • Conocer los diferentes sistemas software que permitirán controlar nuestro prototipo
  • Construir un sistema que nos permita practicar con un sistema AUV
  • Realizar una aplicación que permita realizar un modelo en 3D de un terreno.

Fuentes de información de referencia en la construcción de AUV

Empezaremos por revisar algunas fuentes de información que nos ayudarán en el proceso de construcción de nuestro drone. El campo de los Vehículos Aéreos no Tripulados se encuentra en un momento de constante expansión. Aparecen con frecuencia nuevos sistemas tanto software como hardware y existen comunidades en Internet muy activas que comparten información sobre este campo. Es en estos foros donde encontramos información actualizada sobre la construcción de AUVs. Unos de los más destacados es el foro DIY Drones (http://diydrones.com/) dedicado a la plataforma ArduPilot basada en Arduino (http://www.arduino.cc), la popular plataforma didáctica electrónica. Trataremos ArduPilot en la sección “Sistemas electrónicos de control del AUV”. A continuación citamos algunos de estos foros: Do it Yourself Drones http://diydrones.com/ Posiblemente la mayor comunidad no profesional de UAV. Este sitio está especializado ArduPilot, la plataforma universal para aviones, multicópteros y vehículos terrestres. Actualmente la nueva versión denominada Pixhawk y la anterior APM 2.6 ejecutan gran cantidad de software libre y abierto para UAV incluyendo a ArduCopter, ArduPlane y ArduRover. FPV labhttp://fpvlab.com/forums/    Otra gran comunidad de aficionados a los FPV (First Person View). Los FPV permiten a los pilotos utilizando unas gafas con una pantalla y una cámara instalada en el aeromodelo tener la sensación de estar pilotando en primera persona. Estos sistemas suelen ser ideales como base para crear un AUV ya que suelen estar diseñados para poder situar un sistema de visión remota. En nuestro caso podemos utilizar el espacio para situar una cámara o cualquier otro tipo de sensor siempre que no supere lo que se denomina en el mundo de los Drones como “carga de pago” (en inglés Payload), que es el peso máximo extra que admite el modelo.   Hobby UAV UAV Drones for the Hobbyist http://hobbyuav.com/     UAV comerciales Encontramos también UAV comerciales con diferentes características, desde los que se utilizan en un ámbito militar hasta los más recientes de uso civil y de coste mucho más moderado que los primeros. En nuestro caso nos centraremos en aquellos modelos de uso civil y de precio que oscila entre los 600€ y los 12.500€. Esta lista no es completa pero esperamos que esta lista sea suficientemente representativa del sector de los AUV comerciales de uso civil. Si lo desea, puede enviarnos sus sugerencias a simple.uhu@gmail.com Zephyr 2 UAV

  • Precio: 2.000 €
  • Autonomía: 40Km
  • Carga de pago máxima: 500 grms.

http://www.marcusuav.com/zephyruav/

Zephyr UAV img

Zephyr UAV

Tienda donde podrá encontrar accesorios para Zephyr: http://team-blacksheep.com/ Sensefly eBee

  • Precio: 7.800 €
  • Autonomía: 45 minutos
  • Carga de pago máxima: 150 grms.

https://www.sensefly.com/drones/ebee.html

eBee Sensefly img

eBee Sensefly

Lehmann Aviation

  • Precio: 600€ – 5.900€
  • Autonomía: 0.3 a 15 km dependiendo de la versión
  • Carga de pago máxima: 2.4 kg

http://www.lehmannaviation.com/

Lehmann Aviation

Lehmann Aviation

Penguin B UAV platform http://www.uavfactory.com/product/46

  • Precio: 12.500 €
  • Autonomía: más de 20 horas
  • Carga de pago máxima: 10kg
Penguin B UAV platform img

Penguin B UAV platform 

Droidworx Skyjib Airframe

  • Precio: 2.300 €
  • Autonomía: 15 minutos
  • Carga de pago máxima: 4kg

http://aeronavics.com/

Droidworx Skyjib Airframe img

Droidworx Skyjib Airframe

Trimble UX5

  • Precio: 37.500 €
  • Autonomía: 60Km
  • Carga de pago máxima: 500 grms
  • Otras características: Cámara digital Sony NEX5R 16.1MP

http://uas.trimble.com/ux5

Trimble UX5 img

Trimble UX5

Aibot X6

  • Precio: 27.500 €
  • Autonomía: 30 minutos
  • Carga de pago máxima: 3 Kg

http://www.aibotix.es/aibot-x6.html

Aibot X6

Aibot X6

Plataformas para montar tu propio UAV Tras revisar algunos de los modelos comerciales y dado el límite de presupuesto marcado de 200€, creemos que lo más adecuado sería utilizar una plataforma con un único motor y un “ala volante” similar a los modelos Trimble UX5, Lehmann Aviation, SenseFly eBee o Zephyr . Esto nos lleva a descartas los quadcópteros que son muy útiles en aplicaciones que requieran mayor maniobrabilidad, sin embargo el coste es superior al necesitar multiplicar por cuatro el número de motores y reguladores. Aplazamos esta interesante opción para tratarla en futuros proyectos.

Easy Star 2 img

Multiplex Easy Star 2

Además de la citada estructura de “ala volante” encontramos con frecuencia otros aeromodelos como base de AUVs como el Multiplex Easy Star II o algunos similares. Tras analizar esta opción llegamos a la conclusión de que este tipo de plataformas añaden una complejidad extra (mayor número de servos) y por lo general, menor solidez. Creemos que esta opción también puede ser muy interesantes, sin embargo, dada nuestra restricción de presupuesto nos inclinamos por la opción de un modelo con “ala volante”. Plataformas de Ala Volante para nuestro Drone El mercado del aeromodelismo ofrece multitud de opciones para conseguir una plataforma de “Ala Volante” para nuestro AUV a buen precio. Casi todas las tiendas especializadas en aeromodelismo tienen secciones dedicadas a las “Alas Volantes”. También encontramos estos aeromodelos bajo la denominación de FPV (First Person View). Como hemos podido ver estas plataformas no permiten cargas de pago elavadas (unos 500 grms máximo) sin embargo tienen una autonomía aceptable (varios kms) lo que lo hacen útiles para múltiples aplicaciones. En contra tienen la maniobrabilidad ya que no están destinados a moverse con precisión en espacios reducidos. Dada la simplicidad de las alas volante, es fácil encontrar en Internet numerosos tutoriales que explican como construirlo. Con frecuencia encontramos solo la estructura del modelo realizada en EPP (Expanded polypropylene) un material ligero y muy resistente a los golpes. También podemos encontrar los kits con todos los elementos (motor, regulador, alas, pegamento y complementos) necesarios para construir nuestro avión. A continuación mostramos algunos de los modelos de ala volante disponibles en el mercado. Darkwing FPV Drone Precio: 155.48 € http://www.hobbyking.com/hobbyking/store/uh_viewitem.asp?idproduct=29940

Darkwing FPV Drone img

Darkwing FPV Drone

Skywalker X-8 Precio: 101.19 € http://www.hobbyking.com/hobbyking/store/uh_viewitem.asp?idproduct=27132 Skywalker X-8 img Skywalker X-8 http://www.aeromodelismoserpa.com/alas-volantes-c-1_323_150.html MS Swift Precio: 45.90 € – 75€ (Maxi Swift)

MS Swift

MS Swift

http://www.aeromodelismoserpa.com/swift-airbrush-line-flag-p-10841.html http://www.aeromodelismoserpa.com/swift-airbrush-line-racing-time-combo-p-10849.html http://www.todohobby.net/es/aviones-electricos/21435-avion-el-swift-ii-red-dart–2427713000376.html Hacker Sky Carver Precio: 99€

Hacker Sky Carver

Hacker Sky Carver

http://www.tableracer.de/Hacker-Sky-Carver-Combo-Hacker-team-Design-10949310_1 Jamara 020065 – Pirol EPP Precio: 49€

Jamara 020065 - Pirol EPP

Jamara 020065 – Pirol EPP

 http://www.cmc-versand.de/Jamara/020065-Pirol-EPP-arnr-30-020065.html  Contruye tu mismo tu Ala Voladora En el sitio web My Geek Show (http://www.mygeekshow.com/) [4,5,6] creado por Trent y Nick, encontramos multitud de vídeos e información necesaria (planos del modelo, etc) para construir nuestro propio drone por poco dinero. El UAV descrito recibe el nombre de Raptor y encontramos una entrada en el portral DIYDrones.com [4] sobre el proyecto. Incluimos a continuación el mensaje que detalla las características del Raptor y detalles de sus componentes:

After two months of research, testing, designing, building and just all out airplane slavery, I’ve finally completed the Raptor 140 – the next generation of the Raptor flying wing family, which is the next performance step in my USA trip next summer.   Check it out!   Improvements over original Raptor: Four times the battery capacity (2.2Ah to 8.8Ah) Two times the motor power output (300W to 600W) Better servos (9g cheap analog to 11g digital) Better air flow (exposed to embedded electronics with canopy) Better water proofing (plastic wrapped to embedded and sealed equipment) Folding prop (8×4 fixed plastic to 10×6 folding carbon fiber) Add current sensor (provides live, in flight Volts and Amp draw) Seperate GPS & Compass (instead of mounted to APM, improves sensor clarity) Improved Crash Damage Reduction (Batteries secured safely) Larger and additional Carbon Fiber spars And more… Estimated performance: Weight: 16000   gm Flight Time: 40min – 50min Stall Speed: 25kph Cruise Speed: 60kph Max Speed: 120kph Radio Range: 1.5km This is the equipment that will go on it: Autopilot: APM2.6 https://store.3drobotics.com/products/apm-2-6-kit-1 FPV/Onboard Camera: http://www.foxtechfpv.com/horyzonhd-full-hd-1080p-fpv-camera-v3-p-8… Radio Tx: ParkeFlyer Turnigy 9x Tx: http://parkeflyer.com/ Reciever: 6ch FlySky http://www.hobbypartz.com/79p-r6b-receiver.html Telemtry: 915mhz 100mW 3DR http://store.3drobotics.com/products/3dr-radio-telemetry-kit-915-mhz Battery: 4.4Ah 30C Sky Lipo: http://www.hobbypartz.com/77p-sl4400-3s1p-30c-3333.html ESC: 60A Brushless http://www.hobbypartz.com/proton60aair.html Motor: 3542 1450kv brushless http://hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=38700 Prop: 10×6 Carbon Fiber Folding http://www.hobby-lobby.com/10x6_carbon_fiber_cam_blade_797_prd1.htm Servos: 11g digital http://hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=42620 UBEC (for FPV camera): 3A http://hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=4319 -Trent Learn More: Raptor Details: http://www.mygeekshow.com/theairplanes/Raptor.html USA Trip Details: http://www.mygeekshow.com/usatrip/ Follow the Show: Website: http://www.mygeekshow.com Facebook: http://www.facebook.com/MyGeekShow Twitter: http://twitter.com/mygeekshow Google+:http://plus.google.com/116950154481685699344 Skype: MyGeekShow UStream: http://www.ustream.tv/channel/mygeekshow Filmed, Edited, Produced and Published by Trent in Arkansas, USA

En sucesiva entregas de esta serie explicaremos como podemos construir nuestro propia Ala Volante por un precio reducido. Emisora y receptor de Radio control Como introducción a la sección de electrónica necesaria para nuestro UAV, presentamos una emisora que puede servirnos para realizar pruebas con nuestro aero-modelo antes de comenzar con la programación. Esta emisora podemos encontrarlas en diferentes proyectos en la red [4,10,12] y puesto que nuestro objetivo es volar sin necesidad de mando de control, consideramos que esta conjunto receptor y emisor [9,11] puede ser interesante si no disponemos ya de uno de similares características. Emisora FS-CT6B 2.4G 6CH de bajo coste utilizada en varios proyectos de radio control incluyendo el Raptor 140 Precio: 33 €

FS-CT6B 2.4G 6CH

FS-CT6B 2.4G 6CH

FS-CT6B Raptor

FS-CT6B Raptor

Algunas abreviaturas utilizadas en el ámbito de los Drones

  • UAV – Unmanned Aerial Vehicle
  • FPV – First Person View
  • VANT- Vehículo Aéreo no Tripulado
  • RPASRemotely Piloted Aircraft Systems 
  • AH - These include Autonomous Harvesting
  • UAS - Unmanned Air Systems 
  • UCAS – Unmanned Combat Aircraft Systems 
  • UGV - Unmanned Ground Vehicles 
  • ROV - Remotely Operated Vehicles 
  • UMS - Unmanned Maritime Systems 
  • UUV - Unmanned Underwater Vehicles 
  • AUV - Autonomous Underwater Vehicles 
  • ASV - Autonomous Surface Vehicles 
  • UGV - Unmanned Ground Systems 
  • USV - Unmanned Surface Vehicles

Referencias

  1. European Commission Remotely Piloted Aircraft Systems (RPAS) http://ec.europa.eu/enterprise/sectors/aerospace/uas/
  2. Galapagos UAV: Ingeniería aplicada a la convervación
    http://www.galapagosuav.org/
  3. MS Composite. Fabricande de Alas Volantes EPP
    http://www.mscomposit.cz/
  4. MyGeekShow Completes the Raptor 140 http://diydrones.com/profiles/blogs/mygeekshow-completes-the-raptor-140
  5. Maximum Radio Range Tests
    http://www.youtube.com/watch?v=6CPP_g5QP2E
  6. The Raptor 140 is DONE!!
    http://www.youtube.com/watch?v=WGq7r3HwSAw
  7. Geotronics. Empresas relacionada con UAV en España http://geotronics.es/productos/aeronaves-no-tripuladas/trimble-ux5
  8. Búsqueda en Google sobre “UAV Airframes”
    https://www.google.es/search?q=UAV+Airframes
  9. FS-CT6B 2.4G 6CH
    http://www.ebay.com/itm/FS-CT6B-2-4G-6CH-R-C-Receptor-Transmisor-Radio-aeroplano-modelo-Heli-Glid-/121280052942?pt=LH_DefaultDomain_186&hash=item1c3cdabece
  10. MikeysRC 450 Heli Cheapest T-Rex Clone Build Series
    https://www.youtube.com/playlist?list=PL18C3065DA3A05A3C
  11. Low cost ($60) 2.4 G Computer Transmitter with Dual Receiver antenna http://diydrones.com/profiles/blogs/low-cost-60-24-g-computer
  12.  Episode 55 – Successful Raptor Maiden Flight! http://www.youtube.com/watch?v=NIp7tkD2Zlc#t=480
  13. [13] EPP TBRC Wing Build – By Yuvski – Part 1/8
    http://www.youtube.com/watch?v=v8hIV-Ve9VQ

 

 

Iptables: Seguridad en servidores linux

Ser el administrador de un servidor conectado a Internet de forma permanente, ya sea sirviendo páginas web u ofreciendo cualquier otro servicio requiere de un mantenimiento continuo.  Es habitual que usuarios desde lugares remotos en la red intenten acceder a nuestro servidor ya sea por un simple reto personal como “hacker” aficionado, como forma de acceder a información restringida, bien como puerta que nos de acceso a otros sistemas, hacer que un determinado servicio deje de funcionar, etc.

Sea cual sea el motivo, lo cierto es que un administrador de sistemas debería comprobar si hay algún intento de acceso por alguna de las puertas abiertas en nuestro sistema.

Si nuestro sistema es un servidor Web, es posible que hayamos configurado el firewall para que quede abierto el puerto 80 tcp a todos los usuarios y el puerto 22 tcp (ssh) para poder acceder de forma remota. Una de las formas de comprobar si alguien está intentando entrar por alguna de estas puertas consiste en comprobar el fichero dónde se guardan los avisos de seguridad.

door_unsafe

/var/log/secure

Jun 15 03:31:08 simple sshd[22236]: Received disconnect from xxx.xxx.xxx.xxx: 11: Normal Shutdown, Thank you for playing
Jun 15 03:31:39 simple unix_chkpwd[22248]: password check failed for user (root)
Jun 15 03:31:39 simple sshd[22246]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=xxx.xxx.xxx.xxx user=root
Jun 15 03:31:41 simple sshd[22246]: Failed password for root from xxx.xxx.xxx.xxx port 16418 ssh2
Jun 15 03:31:41 simple sshd[22247]: Received disconnect from xxx.xxx.xxx.xxx: 11: Normal Shutdown, Thank you for playing
Jun 15 03:32:12 simple unix_chkpwd[22251]: password check failed for user (root)

Los mensajes indican un intento de acceso desde una máquina remota con el usuario “root”. Veamos como prevenir estos accesos de dos modos distintos: 1) impidiendo que el usuario root acceda mediante ssh y 2) añadiendo reglas al firewall que impidan accesos desde determinadas IPs.

1) Impedir que el usuario root acceda mediante ssh tiene diferentes ventajas desde el punto de vista de la seguridad. El usuario root lo encontramos en casi todos los sistema unix/linux. Si permitimos el acceso mediante ssh al usuario root estamos facilitando el trabajo a nuestros potenciales atacantes. Esto sería similar a que las puertas de todos las casas fuesen del mismo fabricante. Los ladrones ya tendrían información sobre los puntos débiles de nuestra cerradura. Pues bien, pues denegando el acceso a nuestro sistema del usuario root, el atacante tendrá que averiguar además del password, el nombre del usuario para poder acceder al sistema, lo que hará que atacantes poco expertos puedan desistir y busquen algún servidor más fácil de atacar.

[root@localhost root]# adduser pepe
[root@localhost root]# passwd pepe
Changing password for user pepe.
New password:

Una vez introducido el password dos veces debemos permitir que el nuevo usuario pueda adquirir privelegios de super usuario. En otro caso no podremos realizar tareas como administrador en el servidor. Para permitirlo editaremos el fichero /etc/sudoers. Este fichero tiene un formato especial y para su edición utilizaremos el comando visudo.

[root@localhost root]# visudo

## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
pepe ALL=(ALL) ALL

Añadiremos a continuación de la linea root ALL=(ALL) ALL otra con el nombre del usuario que hará las funciones de administrador. Una vez completada la edición el sistema debería permitir ejecutar sudo su una vez que nos autentifiquemos como el usuario pepe.

Para terminar con la limitación del acceso al usuario root mediante ssh editaremos el fichero /etc/ssh/sshd_config y añadiremos la siguiente linea:

PermitRootLogin no

Reiniciamos el servidor ssh con el siguiente comando:

[root@localhost root]#  service sshd restart

2) Añadir reglas al firewall con iptables que impidan accesos desde determinadas IPs.

Para gestionar las reglas de seguridad encontramos herramientas gráficas y herramientas en modo texto como system-config-firewall-tui. Estas utilidades pueden ser de utilidad en muchos casos, pero es habitual que estar herramientas gráficas no permitan todas las opciones de edición que permite iptables. Iptables es el comando que permite gestionar todas las reglas de un firewall en los sistemas unix/linux.

system_hacked

En nuestro caso debemos poder acceder al servidor desde diferentes IPs con lo que no nos bastará con una regla que solo permita el acceso desde una IP. En cambio, una forma de proteger el sistema es crear reglas que impidan el acceso a IPs potencialmente peligrosas. Podemos añadir las Ips de aquellas máquinas que se muestran en el fichero /var/log/secure con reiterados intentos de acceso no autorizado. A continuación se muestran algunos de los comandos más comunes para añadir reglas de seguridad con iptables.

Listar las reglas definidas en iptables

iptables -L

Bloquear una IP por completo

iptables -A INPUT -s xx.xx.xx.xx -j DROP
service iptables save

Bloquear un determinado puerto a una ip

iptables -A INPUT -s xx.xx.xx.xx -p tcp --destination-port yy -j DROP

Bloquear un rango de Ips

iptables -A INPUT -s xx.xx.xx.xx/n -j DROP

En este caso n se refiere a la máscara que determina el rango de ips y podrá ser 8/16/24. En [5] encontramos una herramienta para calcular la máscara para un determinado rango.

Desbloquear una IP

iptables -D INPUT -s xx.xxx.xx.xx -j DROP
service iptables save

Por último, para eliminar todas las reglas escribiremos el comando

iptables -F

bank door

Resumiendo:

Hemos aprendido como denegar el acceso mediante ssh al usuario root y como permitir que un usuario adquiera privilegios de administrador modificando el fichero sudoers. Además hemos mostrado como añadir reglas de seguridad con el comando iptables. A modo de resumen citaremos algunas prácticas recomendables para mantener nuestro sistema seguro:

1) Comprobar con frecuencia los ficheros de log /var/log/secure y ejecutar el comando last que muestra los lugares desde dónde se produjeron los últimos accesos

2) Realizar copias de seguridad de los ficheros importantes y del sistema completo con frecuencia.

3) Comprobar que nuestro firewall está activo y que sólo deja acceso a los puertos estrictamente necesarios.

4) Comprobar que el usuario root no tiene permitido el acceso mediante ssh.

5) Realizar las actualizaciones de seguridad, preferiblemente en un servidor gemelo de forma que nos permita comprobar que las actualizaciones no afectan de forma negativa a los servicios activos.

6) Guardar las copias de seguridad en distintas localizaciones. Para esto nos puede servir, además de disponer de un disco duro de seguridad, subir una copia a servicios de alojamiento de ficheros en la nube como Amazon S3 o Dropbox.

Como conclusión, simplemente recordar que no hay sistema cien por cien seguro, sin embargo, seguir ciertas hábitos sencillos hará que nuestro sistema tenga una nivel de seguridad aceptable.

Referencias

[1] How To Edit the Sudoers File on Ubuntu and CentOS
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file-on-ubuntu-and-centos

[2] Asegurando SSH en su sistema
http://wiki.centos.org/es/HowTos/Network/SecuringSSH

[3] Linux Tutorial: Blocking IP Addresses From Your Server
http://jadendreamer.wordpress.com/2013/04/18/linux-tutorial-blocking-ip-addresses-from-your-server/

[4] How do I find a geographical location from an IP Address
http://www.iplocation.net/index.php

[5] Ip calculator
http://jodies.de/ipcalc?host=192.168.0.0&mask1=16&mask2=

[6] How to edit iptables rules
http://fedoraproject.org/wiki/How_to_edit_iptables_rules