sábado, diciembre 17, 2011

Graficar con JFreeChart

Tomado de: Crear gráficas con series con JFreeChart.


0. Índice de contenidos.


1. Introducción

Como vimos en otro tutorial es muy sencillo exportar datos a una hoja de cálculo mediante Apache POI. Sin embargo, las hojas de cálculo no son la única solución para la exportación de datos. En determinados casos puede ser muy interesante plasmar toda esa información en una gráfica.
En este tutorial vamos a ver cómo generar gráficas con series de datos con ayuda de la librería JFreeChart. Para ello vamos a aprovechar los datos del ejemplo que utilizamos en el tutorial anteriormente mencionado.

2. Entorno.

El tutorial está escrito usando el siguiente entorno:
  • Hardware: Portátil MacBook Pro 15' (2.2 Ghz Intel Core I7, 4GB DDR3).
  • Sistema Operativo: Mac OS Snow Leopard 10.6.7
  • Entorno de desarrollo: Eclipse 3.7 Indigo.
  • JFreeChart 1.0.13.

3. Diseñando la gráfica.

Como hemos dicho anteriormente, nos vamos a basar en datos de pilotos que dan vueltas de entrenamiento a un circuito para generar este ejemplo. Las características que tendrá nuestra gráfica serán las siguientes:
  • Cada serie (de tiempos por vuelta de un piloto) se representará de forma lineal.
  • El eje Y de la gráfica mostrará los tiempos en segundos en un rango de 120 a 135. El número de segundos del eje se visualizará de dos en dos (120, 122, 124...).
  • El eje X de la gráfica mostrará el número de vueltas, de la vuelta 1 a la vuelta 5.
  • Cada punto de la gráfica debe de mostrarse con un círculo (evidentemente los círculos serán unidos por la línea que representará la serie).
  • Los colores de las series deben ser distintos, así como las líneas de la gráfica que hacen de guía (líneas discontinuas que salen en el fondo de la gráfica).
  • En el pie de la gráfica debe figurar una leyenda con los nombres de los pilotos.

4. Construyendo la gráfica.

Pues bien, aquí tenemos la clase que nos generará la gráfica:
01import java.awt.Color;
02import java.io.File;
03import org.jfree.chart.ChartFactory;
04import org.jfree.chart.ChartUtilities;
05import org.jfree.chart.JFreeChart;
06import org.jfree.chart.axis.NumberAxis;
07import org.jfree.chart.axis.NumberTickUnit;
08import org.jfree.chart.plot.PlotOrientation;
09import org.jfree.chart.plot.XYPlot;
10import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
11import org.jfree.data.xy.XYSeries;
12import org.jfree.data.xy.XYSeriesCollection;
13
14public class PruebaJFreeChart {
15
16    private static Color COLOR_SERIE_1 = new Color(255, 128, 64);
17
18    private static Color COLOR_SERIE_2 = new Color(28, 84, 140);
19
20    private static Color COLOR_RECUADROS_GRAFICA = new Color(31, 87, 4);
21
22    private static Color COLOR_FONDO_GRAFICA = Color.white;
23
24    public JFreeChart crearGrafica(XYSeriesCollection dataset) {
25
26        final JFreeChart chart = ChartFactory.createXYLineChart("Tiempos de entrenamientos", "Vuelta", "Tiempo (segundos)",
27                dataset,
28                PlotOrientation.VERTICAL,
29                true, // uso de leyenda
30                false, // uso de tooltips 
31                false // uso de urls
32                );
33        // color de fondo de la gráfica
34        chart.setBackgroundPaint(COLOR_FONDO_GRAFICA);
35
36        final XYPlot plot = (XYPlot) chart.getPlot();
37        configurarPlot(plot);
38
39        final NumberAxis domainAxis = (NumberAxis)plot.getDomainAxis();
40        configurarDomainAxis(domainAxis);
41         
42        final NumberAxis rangeAxis = (NumberAxis)plot.getRangeAxis();
43        configurarRangeAxis(rangeAxis);
44
45        final XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer)plot.getRenderer();
46        configurarRendered(renderer);
47
48        return chart;
49    }
50     
51    // configuramos el contenido del gráfico (damos un color a las líneas que sirven de guía)
52    private void configurarPlot (XYPlot plot) {
53        plot.setDomainGridlinePaint(COLOR_RECUADROS_GRAFICA);
54        plot.setRangeGridlinePaint(COLOR_RECUADROS_GRAFICA);
55    }
56     
57    // configuramos el eje X de la gráfica (se muestran números enteros y de uno en uno)
58    private void configurarDomainAxis (NumberAxis domainAxis) {
59        domainAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
60        domainAxis.setTickUnit(new NumberTickUnit(1));
61    }
62     
63    // configuramos el eje y de la gráfica (números enteros de dos en dos y rango entre 120 y 135)
64    private void configurarRangeAxis (NumberAxis rangeAxis) {
65        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
66        rangeAxis.setTickUnit(new NumberTickUnit(2));
67        rangeAxis.setRange(120, 135);
68    }
69     
70    // configuramos las líneas de las series (añadimos un círculo en los puntos y asignamos el color de cada serie)
71    private void configurarRendered (XYLineAndShapeRenderer renderer) {
72        renderer.setSeriesShapesVisible(0, true);
73        renderer.setSeriesShapesVisible(1, true);
74        renderer.setSeriesPaint(0, COLOR_SERIE_1);
75        renderer.setSeriesPaint(1, COLOR_SERIE_2);
76    }
77     
78}
Bien, como vemos el método ChartFactory.createXYLineChart nos creará una gráfica de series representadas por líneas.
El método configurarPlot se ocupa de establecer el color de las líneas de fondo de la gráfica que hacen de guía. Son las líneas discontinuas verticales y horizontales que aparecen en el fondo de la gráfica.
El método configurarDomainAxis actua sobre el eje X, el eje del número de vueltas, y hace que se muestren números enteros y de uno en uno.
El método configurarRangeAxis actua sobre el eje Y, el de los tiempos, y hace que se muestren los tiempos comprendidos en el rango de 120 a 135 pero mostrando un número si, un número no.
El método configurarRndered hace que en cada punto (relación tiempo - vuelta de una serie) se muestre un círculo y que cada serie sea de un color.

5. Ejecutando el ejemplo.

Por último, nos queda cargar los datos de los pilotos (usaremos los del otro tutorial) y generar la gráfica en un fichero.
01public static final int ANCHO_GRAFICA = 400;
02
03public static final int ALTO_GRAFICA = 300;
04
05public static void main(String args[]) {
06
07    final XYSeries serie1 = new XYSeries("Fernando Alonso");
08    serie1.add(1, 131.78);
09    serie1.add(2, 129.95);
10    serie1.add(3, 128.16);
11    serie1.add(4, 125.91);
12    serie1.add(5, 130.44);
13     
14    final XYSeries serie2 = new XYSeries("Jaime Alguersuari");
15    serie2.add(1, 133.16);
16    serie2.add(2, 132.32);
17    serie2.add(3, 129.86);
18    serie2.add(4, 128.02);
19    serie2.add(5, 132.45);
20     
21    final XYSeriesCollection collection = new XYSeriesCollection();
22    collection.addSeries(serie1);
23    collection.addSeries(serie2);
24     
25    try {
26        final PruebaJFreeChart prueba = new PruebaJFreeChart();
27        final JFreeChart grafica = prueba.crearGrafica(collection);
28        ChartUtilities.saveChartAsPNG(new File("tiempos-entrenamientos.png"), grafica, ANCHO_GRAFICA, ALTO_GRAFICA);
29    } catch (Exception e) {
30        e.printStackTrace();
31    }
32
33}
Observemos que añadimos los tiempos de cada piloto en una serie llamada XYSeries. A esta serie únicamente le indicamos el nombre, que se corresponderá con el nombre del piloto, y el tiempo por vuelta. Ej: en la serie 1 hemos indicado que en la vuelta 1 el tiempo fue de 131.78 segundos, en la vuelta 2 fue de 129.95, etc...
Añadimos las gráficas a un dataset de tipo XYSeriesCollection y se lo pasamos al método crearGrafica.
Por último, con el método saveChartAsPNG de la clase ChartUtilities generamos una imagen en formato png, con el alto y ancho que queramos y que que dará como resultado una imagen llamada tiempos-entrenamiento.png. La gráfica resultante es la siguiente:

6. Referencias.


7. Conclusiones.

En este tutorial hemos visto lo sencillo que es generar gráficas de series lineales con ayuda de la librería JFreeChart.
Nótese que esta librería es capaz de generar una gran cantidad de tipos de gráficas que pueden verse en la demo de su página web.

miércoles, noviembre 16, 2011

MySQL Recuperar la contraseña de root en 5 pasos - Centos




Hoy veremos como se puede recuperar y cambiar la contraseña de root del servidor de bases de datos MySQL. Este es un rapido procedimiento el cual funciona en Linux con los siguientes cinco pasos:

MySQL: Pasos para resetear la contraseña de root

1: Detener el proceso del servidor

Antes de iniciar el proceso de recuperacion de la clave de root es necesario bajar todos los servicios de la base de datos:
root@centos:~# service mysqld stop
* Stopping MySQL database server mysqld [ OK ]
root@centos:~#

2: Iniciar el servicio/demonio (mysqld) sin contraseña

Cuando vamos a reiniciar el motor de base de datos utilizamos la opcion –skip-grant-tables asi no nos pedira la contraseña.
root@centos:~# mysqld_safe --skip-grant-tables &
[1] 10702
root@centos:~# nohup: ignoring input and redirecting stderr to stdout
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[10741]: started

3: Conectar al servidor MySQL como el usuario root

Ahora que ya hemos realizamo el paso 2, podemos conectarnos al servidor con el usuario root y no tendremos que ingresar la contraseña. Esto es un paso temporal necesario para cambiar la contraseña anterior de root.
root@centos:~# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>

4:Configure la nueva contraseña de root

En este paso ya es posible actualizar la contraseña de root por una nueva:
mysql> use mysql;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=PASSWORD("321") where User='root';
Query OK, 3 rows affected (0.03 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

5: Salir y reiniciar el servidor

Ya que hemos cambiado la contraseña, tan solo es necesario salir de la interfaz para utilizar la nueva contraseña de administrador.
mysql> quit
Bye
root@centos:~# service mysqld stop
* Stopping MySQL database server mysqld
STOPPING server from pid file /var/run/mysqld/mysqld.pid
mysqld_safe[11414]: ended
[ OK ]
[1]+  Done                    mysqld_safe --skip-grant-tables

6: Reinicio de MySQL

Y eso es todo. En este ultimo paso tan solo nos queda reiniciar el proceso de la base de datos en Linux y nuestra nueva contraseña estara cambiada.
root@centos:~# service mysqld start
* Starting MySQL database server mysqld [ OK ]
* Checking for corrupt, not cleanly closed and upgrade needing tables.

root@centos:~# mysql -u root -p

viernes, octubre 28, 2011

Tomado de: ITIL - Para un DBA


ITIL para el DBA (Administrador de base de datos)

¿Qué es ITIL?
ITIL es sinónimo de Librería de Infraestructura de Tecnología de la Información. Es un estándar del gobierno de Reino Unido que ha sido objeto de varias revisiones. La última es ITILv3.
¿En qué está centrado ITILv3?
ITIL en los acuerdos generales con los procesos relacionados a la gestión del servicio. Esto incluye cuestiones relacionadas con la gestión de incidentes, gestión de problemas, gestión de configuración, gestión de cambios, gestión de versiones.

¿Qué es la gestión de incidentes?
Cualquier evento inesperado que tiene un impacto en el sistema actual es un incidente. Esto incluye caída de la base de datos debido a diversos fallos como errores de disco, fallo del servidor. Los procesos necesarios deben formularse y seguirse para dar manejo a los incidentes. Los incidentes son desconocidos y por lo tanto es necesario tomar medidas proactivas para evitarlos, y acciones reactivas deben ser adoptadas para hacerles frente.
¿Qué es la gestión del problema?
El problema es un incidente recurrente. Es obligatoria analizar la causa raíz de un problema y dar con una solución permanente. Los registros de sucesos de bases de datos, servidores y aplicaciones pueden ser utilizados para este propósito. Un buen ejemplo es cargar en la base de datos lo necesario para ser optimizada, o evitar problemas de bloqueos, etc.
¿Qué es la Gestión de la Configuración?
Cualquier cambio realizado a la configuración del sistema. Esto puede ser cambios al servidor, base de datos y aplicación.
¿Qué es la gestión del cambio?
Cada vez que ocurre un incidente, es obligatorio generar un ticket y dependiendo de la gravedad que podría tener la prioridad SEV1, etc.
¿Qué es la gestión de la liberación?
Es obligatorio documentar la versión de parche, el número de versión del software de los componentes de la infraestructura, incluyendo servidores, base de datos. Este documento tiene que estar disponible a todo mundo para una referencia rápida. Así cuando se produce un cambio tiene que ser documentado.
¿Por qué un ITIL necesidad de DBA?
Alrededor del 40% de los mil millones de dólares de empresas de software han comenzado a adoptar ITIL. Este es un estándar que integra negocios con infraestructura. Da como resultado una mayor satisfacción del cliente. El DBA dispone de datos que es propiedad exclusiva (el corazón) de un organización. Por tanto, es obligatorio para ellos seguir los procesos y documentar sus actividades para que el sistema este levantado y funcionando en base 24×7 y abordar los problemas si se produce alguno. 

martes, octubre 25, 2011

Seguridad en Linux

Tomado de: Seguridad en Linux


Como llevo unos cuantos post filosóficos, vamos ahora con algo más técnico. Vamos a darle un pequeño repaso a algunas medidas de seguridad básicas para un linux y a su aplicación real hoy en día. Como veremos, muchas de las cosas que se venden como “seguridad en servidores linux”, han quedado obsoletas y no sirven para mucho.

Empezaremos por repasar algunos conceptos de los de toda la vida, como la búsqueda de ficheros setuidados y la deshabilitación de servicios innecesarios. Tras esto, le daremos un repaso a la importancia actual de estas medidas de seguridad en un entorno corporativo actual. Finalmente, hablaremos de las nuevas tendencias en seguridad.

Puntos de montaje

Por defecto, FEDORA va a permitir la ejecución de archivos en /tmp/. Esto no es que sea muy grave, pero lo ideal sería montar /tmp en una partición aparte teniendo cuidado de ponerle los permisos adecuados:
/dev/sda4 /tmp ext3 defaults,nodev,noexec,nosuid 1,2
Que le dice a linux que no puedan crearse dispositvos, ni ejecutables ni archivos setuidados. Hoy en día, también hay que decirlo en honor a la verdad, estas cosas han quedado un tanto obsoletas. La seguridad de servidores se centra en las aplicaciones web y las bases de datos, y no en esto.

buscar archivos con el suid y el sguid

La búsqueda la hacemos así: find / (-perm -4000 -o -perm 2000 ) -type f -exec ls {} ;
En la salida, podemos ver que algunos de estos archivos no necesitan estos permisos especiales puestos, por ejemplo:
-rwsr-xr-x 1 root root 47524 2009-12-15 14:43 /bin/umount
-rwsr-xr-x 1 root root 70348 2009-12-15 14:43 /bin/mount
-rwsr-xr-x 1 root root 36876 2009-07-26 14:22 /bin/ping6
-rwsr-xr-x 1 root root 42072 2009-07-26 14:22 /bin/ping

Permisos laxos en directorios

Debemos buscar todos los directorios que tengan permiso de escritura demasiado laxo, por ejemplo directorios con un rw para todos, y que no tengan el sticky bit. Si nos fijamos, /tmp tiene dicho bit, que sirve para que cada usuario sea propietario de sus archivos, aunque todos los usuarios tengan permiso de escritura en el directorio.
ll /|grep tmp
drwxrwxrwt 10 root root 4.0K 2010-01-27 16:35 tmp/
Podemos hacer la búsqueda de archivos con permisos de escritura para “otros” y “todos” con este comando:
find / -type d ( -perm -g+w -o -perm -o+w ) -not -perm -a+t -exec ls -lad {} ;
Cuando obtenemos un directorio con estos permisos, por ejemplo el de debajo, deberemos buscar qué usuarios están en el grupo al que pertenece el archivo y ver que es correcto confiar en que puedan escribir:
drwxrwxr-x 3 root lp 4096 2010-01-20 11:48 /var/cache/cups
En este caso, no pasa nada ya que el grupo es el usuario que se usa para imprimir, lp.
En linux es posible controlar de forma mucho más granular los permisos de los archivos usando ACLs, pero la realidad es que resulta algo incómodo de administrar cuando tienes muchos usuarios y, por lo tanto, se acaba tirando por la calle de en medio y creando unos pocos grupos en los que acaba todo el mundo.
Tipicamente, un servidor linux que tenga una aplicación corriendo de la propia empresa va a tener directorios con los permisos mal puestos. En lugar de perder nuestro tiempo buscando fallos en el sistema operativo que son muy difíciles de explotar, como lo pueda ser que el binario ping esté setuidado, es siempre mejor ir a estos directorios de la empresa e intentar sacar información útil de ellos. Seguramente encontraremos scripts ejecutados por root y con permisos 777. Es cuestión de tiempo.

logs

Lo ideal es guardar todos los logs en un servidor remoto. Pero, si esto no se hace, al menos pueden ponerse los archivos de logs como “only append”, así:
chattr +a /var/log/secure
Lo que nunca dicen en los libros, es que la rotación de logs FALLA si se hace esto. En principio parece una tontería, porque /var/log/secure tampoco ocupa tanto, pero si hacemos esto con los logs de, por ejemplo, el apache tendremos que tener cuidado de incluir en nuestros scripts las correspondientes instrucciones para quitar el +a y volverlo a poner al final.
También existe la posibilidad de hacer que sea imposible quitar el +a sin reiniciar el servidor. Para ello hay que modificar CAP_LINUX_IMMUTABLE. Puedes leer más sobre esto, por ejemplo, en este link
De todas formas, no me cansaré de insistir en que lo mejor es guardar los logs en un servidor remoto.

Permisos mínimos para cada usuario

Seguramente tendremos unos cuantos usuarios que lleven distintos componentes del servidor, por ejemplo podríamos tener uno para administrar el apache y otro para la base de datos. Pues bien, hay que intentar restringir lo más posible lo que puede hacer cada usuario. Para esto, contamos con sudo.
Por ejemplo, imaginemos que el usuario pepe necesita hacer un backup del directorio etc. En este caso, lo que haremos será incluir una linea en /etc/sudoers conteniendo exactamente el comando del backup, con todos sus parámetros.
No me meto en describir cómo funciona esto porque hay información de sobras en internet, por ejemplo.

Quitar servicios innecesarios

Deberemos ver qué servicios corren en la máquina y eliminar aquellos innecesarios. En particular, con netstat -nlp veremos qué programas están escuchando en qué puertos, lo cual permite deshabilitar aquellos que no consideremos oportunos.
Por ejemplo, seguramente querrás quitar ip6tables (salvo que tengas ipv6, que no creo), cups (salvo que des servicios de impresión), …
netstat -nlp|grep 631|grep -v 127.0.0.1
udp 0 0 0.0.0.0:631 0.0.0.0:* 864/cupsd
En Fedora, RedHat y similares, con setup accedemos a habilitar/deshabilitar servicios.
Muchas veces los admins se saltan este paso porque hay un firewall que corta todos los servicios que no escuchan, lo cual está muy bien, pero no debemos olvidar que el hecho de tener un servicio escuchando innecesariamente puede abrirnos las puertas a nuevos ataques, aunque hoy en día esto es un tanto improbable.

Chroot

Chroot es un entorno restringido para los usuarios. Digamos que un linux “mínimo” en el que ejecutamos nuestros programas. En principio, una forma muy eficiente de restringir los privilegios de un usuario, como pueda ser el del apache o una base de datos, pero en la práctica resulta un poco complicado de instalar y, sobre todo, de mantener.
Posiblemente el ejemplo más fácil de entender para chroot sea con vsftp, uno de los servidores FTP más seguros actualmente que corre bajo linux. Un usuario que haga loggin bajo chroot estará restringido a su home y no podrá navegar por los directorios y bajarse /etc/passwd, que es la metedura de pata típica al configurar un FTP bajo linux.
Para restringir un usuario en vsftp lo único que hace falta es editar vsftpd.conf y poner chroot_local_user=YES. Esto debería ser suficiente.
Dedicaremos un artículo a cómo configurar chroot para un entorno interesante, y no lo típico que uno se encuentra por la red, que es ftp o ssh.

Snort

Snort es un detector de intrusos que detecta ataques basado en patrones conocidos. Ya hemos hablado de él en numerosas ocasiones, por ejemplo aquí.
La instalación de snort y su actualización es totalmente trivial bajándose las reglas de emerging-threats, cosa que en su día explicamos en este post.
Snort tiene la ventaja de cazar eficientemente escaneos desde herramientas conocidas, como puedan serwikto o nmap, permitiendo además, combinado con otro HIDS como pueda ser ossec, bloquear la IP atacante al instante.
El problema con snort es que no se entera del tráfico que va por ssl … aparte de no servir para mucho detectando ataques sobre aplicaciones web.

HIDS/Integrity checkers

Otra parte importante de la seguridad en linux es tener un buen HIDS (Host Intrution Detection System). Entre ellos, personalmente, me gusta ossec, que corre tanto bajo linux como bajo windows.
Un HIDS tiene una serie de tareas encomendadas, como puedan ser:
- monitorizar cambios en archivos importantes de linux, como puedan ser /etc/passwd o los binarios del sistema.
- detectar, combinado con un sniffer de red, ataques desde otros HOSTs.
- controlar el uso de recursos en busca de posibles ataques por denegación de servicio.
- buscar posibles troyanos, rootkits, backdoors, …, malware en general que haya podido ser instalado por un usuario malicioso (vease la famosa herramienta chkrootkit).
- guardar los logs en un servidor remoto donde no puedan ser manipulados
[...]
El problema con los HIDS es que, hoy en día, la mayoría de veces que se entra en un servidor es vía la web y los ficheros que se modifican son los de la aplicación web. En una aplicación con varios miles de archivos asp no es fácil monitorizar la integridad.
Así pues, la instalación de HIDS en servidores, que no niego que sea necesario y que ofrezca “cierta” seguridad, realmente no significa mucho.

Modificación de banners

Otra de las cosas típicas que recomiendan en todos los libros de seguridad es modificar los banners de las aplicaciones (ftp, servidor de correo), para añadir un cierto grado de dificultad a la explotación del servicio.
Ciertos servicios, como puedan ser FTP o SSH, son muy fáciles de tocar. Por ejemplo, en vsftp tenemos la opción banner_file, que sirve exactamente para esto. Otros, como sendmail, requieren recompilar.
Este es un ejemplo de banner de POSTFIX modificado:
smtpd_banner = $myhostname ESMTP Sendmail 8.12.9
Con esto conseguiremos confundir a algunas herramientas típicas, como puedan ser nmap o amap. Pero un hacker no necesita para nada saber la versión exacta de servicio que corre … ¿acaso no es posible lanzar todos los exploits tanto para postfix como para sendmail “a ver si cuela”?
Hoy en día, al tener frameworks como metasploit, no supone ningún esfuerzo lanzar unas docenas de exploits en minutos. Así pues, la seguridad por oscuridad ayuda, pero desde luego muy poquito. No podemos confiar en cambiar los banners.
Seguramente podríamos hablar y hablar de otras medidas de seguridad “a la vieja usanza” que pueden adoptarse en un servidor linux, pero estas son suficientes para pasar al siguiente punto …

CONCLUSIONES

De acuerdo, podemos quitar paquetes innecesarios, minimizar los servicios que corren, instalar HIDS, snort, tener logs remotos, buscar backdoors y troyanos en el sistema, cambiar banners, poner los servicios en CHROOT, … Podemos hacer todo esto y más pero, ¿sirve para algo?
Todas estas medidas antes mencionadas son requisito de normas como PCI-DSS, que es obligatorio para manipular tarjetas de crédito, y, sin embargo, siguen robándose tarjetas de crédito. ¿Por qué?
La explicación es que hoy en día nadie tiene demasiado interés en instalar un troyano en un sistema o en intentar explotar una versión vieja de sendmail (cosa casi imposible en una entidad mínimamente importante). Las intrusiones vienen por la web, principalmente vía sql-injection en entornos LAMP, y los hackers no tienen ningún interés en añadir un usuario al sistema.
Lo que se busca es acceder a la base de datos y bajársela, nada más. No importa que sea un entorno chroot, ya que seguiremos podiendo hacer queries contra el mysql, que es realmente lo que necesitamos. Tampoco importa que vigilemos todo el tráfico de entrada en busca de patrones conocidos, puesto que en realidad este tráfico es muy fácil de confundir con tráfico legítimo. ¿Para que sirven los IDS/IPS?
La seguridad “tradicional” a muerto. Hoy en día lo realmente importante es securizar a nivel de aplicación.¿Afrontamos el problema o lo seguimos ignorando? 

sábado, octubre 15, 2011

Novedades de IBM Cognos 10 en el IBM Cognos Performance

Tomado de: Novedades Cognos - 10

En el IBM Cognos Performance de Barcelona se presentaron las novedades que incorpora IBM Cognos 10, la última versión de la suite de Business Intelligence de IBM.

El evento tenía como hilo principal la presentación de esta nueva versión de IBM Cognos, aunque también incluía sesiones de caracter más amplio, con temáticas como la Gestión del Rendimiento Corporativo, el análisis 'What-if' y otras soluciones propias del àrea financiera, Business Insight y Analítica predictica, y casos de estudio. Para más detalles consultar la agenda del evento.
Presentación de IBM Cognos 10

Después de la presentación inicial, se iban realizando dos sesiones en paralelo, una orientada a tecnología y otra a negocio. Había que elegir y realmente me hubiera gustado poder asistir a alguna sesión más. Concretamente, me hubiera gustado estar también en la de 'Novedades en IBM Cognos BI Authoring' y en la de Analítica Predictiva con SPSS. Si alguien pudo hacerlo le agradezco si quiere aportar alguna información o comentario.

Novedades de IBM Cognos 10

Sobre IBM Cognos 10, la sensación final que me he llevado es que realmente IBM ha hecho un importante esfuerzo de desarrollo e integración para ofrecer una solución más compacta y a la vez más abierta y usable, sobretodo para el usuario menos técnico que necesita un acceso ágil y sin dificultades tecnológicas a información de diferentes fuentes.

Con la creación del espacio de trabajo para el usuario que se ha bautizado como IBM Cognos Business Insight se proporciona al usuario de negocio una herramienta para poder seleccionar objetos de diferentes componentes de la suite, e incluso datos externos de ficheros, Excel, etc., para crearse sus propios cuadros de mando interactivos con cualquier tipo de información que maneja la herramienta. Puede utilizar informes de Report Studio, resultados analíticos de SPSS, previsiones de IBM Cognos TM1, o incluso datos locales.
Así, puede crearse su propia visión del negocio, con facilidades para el formateado, y posibilidad de profundizar en los datos enlazando al final con las interfaces propias de las herramientas de donde proviene la información.
Me parece importante también la creación de un buscador basado en tecnología Google para que el usuario pueda, aparte de navegar por el explorador de contenidos, buscar todos los objetos que puedan contener información relacionada con las palabras clave que elija.

También he aclarado un poco mis dudas sobre las nuevas opciones colaborativas. En los informes se pueden agregar comentarios, y se guarda información sobre el autor. Todo queda indexado por el buscador, y para interactuar, o saber más sobre los autores de informes o comentarios se enlaza con el entorno colaborativo de Lotus Connections, desde donde también se pueden referenciar informes de Cognos. Para mostrar información de fuentes al estilo 2.0 también se pueden utilizar servicios de mashup.

Me pareció también importante la integración con SPSS, que se puede ver en los BI workspaces de Business Insight, y en el mismo Report Studio, donde se pueden utilizar objetos de SPSS para crear informes de modelos predictivos, por ejemplo.

Presentación de IBM Cognos 10
Otras novedades que se destacaron son:
  • Apuesta por la portabilidad y utilización de Cognos con más dispositivos móbiles, creando aplicaciones específicas para poder utilizar el módulo Go Mobile también con iPhone y iPad
  • Posibilidad de creación de informes con monitorización de indicadores en tiempo real
  • Posibilidad de realizar análisis en modo desconectado mediante la creación de informes y cuadros de mando interactivos con capacidades de drill-down en ficheros de formato .mht
  • Utilidades de Linaje de datos para averiguar fácilmente de dónde proviene la información
  • Creación instantanea de escenarios 'What if' de Cognos TM1, y creación de workflows de aprobación

En cuanto a rendimiento, se anunció una respuesta de las consultas tres veces más rápida con respecto a Cognos 8, la versión anterior, según pruebas de IBM, y también la posibilidad de desplegar y utilizar la suite en Cloud Computing.

Finalmente, para facilitar los procesos de migración, se presentó la herramienta IBM Cognos Lifecycle, con un asistente que permite buscar diferencias entre informes originales y actualizados a nuevas versiones, y mostrarlos uno junto al otro para examinarlos antes de dar por válida la nueva versión. Comentaron que la migración de Cognos 8 a Cognos 10 puede ser similar en complejidad a una migración de Cognos 7 a Cognos 8, y que en las pruebas que han hecho con beta testers el 90% de los informes se pueden migrar directamente.

En definitiva, creo que IBM ha dado un gran paso con esta nueva versión, y que el cambio 'generacional' está más que justificado. Valoro sobretodo el esfuerzo de integracion realizado para poder ofrecer al usuario de negocio un espacio de trabajo con el que poder conocer, analizar, completar y organizarse él mismo toda la información que puede ayudarle a tomar mejores decisiones.

Cuadros de Mando con Cognos

Tomado de: Cognos


IBM Cognos 8 BI es una de las suites de Business Intelligence más utilizadas. Es un software bastante completo, y a la vez manejable, y uno de los líderes del mercado de BI.
Las aplicaciones principales se utilizan desde un portal web que controla el servidor de Business Intelligence, que es el corazón de la herramienta.
Este portal recibe el nombre de Cognos Connection y desde el mismo, siempre por web, se accede a opciones de administración del entorno y de los servicios, a las diferentes aplicaciones que provee Cognos, a la estructura de carpetas en que se organizan los informes, a los cuadros de mando, y a otros complementos que se pueden integrar en el portal.
Cada aplicación está orientada a cubrir un tipo de necesidades que suelen darse en entornos de este tipo. La mayoría se maneja 100% desde el explorador web, tanto para desarrollar o diseñar informes, eventos y métricas como para consultarlos o realizar tareas de análisis.
Estas son las principales herramientas que proporciona la suite:

IBM Cognos Query Studio

Es la herramienta más simple, y se podría considerar más bien como un complemento. Su objetivo es permitir al usuario realizar consultas sencillas para resolver rápidamente cuestiones puntuales que le puedan surgir.
Permite acceder a la misma estructura de datos que utilizan las otras herramientas, tanto si se trata de un modelo relacional como si la estructura es dimensional.
Con Query Studio se puede crear un informe en segundos arrastrando campos desde el explorador de datos hasta el área de diseño de informes. Permite también aplicar filtros, ordenaciones, operaciones de agrupación de datos e incluso crear gráficas. También tiene opciones de formateo, aunque bastante limitadas.
Donde está más limitado es precisamente en la aplicación de formato al informe, y en la creación de campos calculados complejos, utilización de parámetros y otras muchas opciones más avanzadas para las que se ha de utilizar Report Studio.
Creación de informes con Query Studio, de IBM Cognos BI

IBM Cognos Report Studio

Es la aplicación principal para la creación de informes. Se asemeja a Query Studio, pero es mucho más completa.
A la izquierda muestra un explorador de objetos desde el que se puede accede a la estructura de datos, y a otros objetos insertables en los informes. A la derecha se encuentra el área de diseño del informe, donde se pueden arrastrar estos objetos e ir componiendo así la estructura.
Estos objetos pueden ser de diferentes tipos: origen de datos, datos específicos del informe y herramientas de diseño. Cada objeto que se incrusta en el informe tiene sus propiedades configurables, y mediante estas se puede llegar a un nivel muy alto de personalización, tanto en los datos que se muestran como en el diseño del formato.
Se puede trabajar tanto con estructuras de datos relacionales como con estructuras dimensionales, sólo hay que tener en cuenta que en función del tipo de origen existen diferencias en cuanto a las propiedades aplicables a los datos, e incluso en cuanto al comportamiento en el área de diseño. Aunque no es obligatorio hacerlo así, para mostrar datos de estructura dimensional, lo más apropiado es utilizar informes de tipo crosstab. Se puede elegir entre varios tipos de estructura básica para los informes.
Existen diferentes tipos de gráficas, e incluso mapas que se pueden incluir en los informes, mostrar de manera individualizada o guardar para formar parte de un cuadro de mando que se mostraría en el portal.
Las opciones de utilización de parámetros y prompts son también bastante completas, aunque la manera en que se definen no es muy intuitiva y resulta un tanto engorrosa.
Como en todos estos tipos de herramientas, se pueden definir filtros, ordenar, agrupar y trabajar con agregados, crear subtotales, campos calculados, formateado condicional. También se puede habilitar el drill up, y drill down, y utilizar drill through.
Las consultas a orígenes operacionales las realiza con SQL y para los modelos dimensionales utiliza MDX. Las consultas resultantes pueden visualizarse e incluso editarse y modificarse directamente.
Diseño de un Informe con Report Studio de IBM Cognos 

IBM Cognos Analysis Studio

Análisis Studio tiene una función similar a Query Studio, pero para orígenes multidimensionales. Esta herramienta permite la navegación por estructuras multidimensionales como cubos OLAP, que no necesariamente han de ser de Cognos. También puede atacar a orígenes de datos relacionales, siempre que estén modelados dimensionalmente desde Framework Manager.
El objetivo principal de este software es permitir que el analista de negocio pueda 'navegar' por los datos cargados en las estructuras dimensionales sin depender del soporte del área de TI. Tal como anuncia el fabricante, utilizando Analysis Studio un usuario de negocio puede realizar análisis complejos y comparativas de datos para descubrir tendencias, riesgos y oportunidades.
El área de trabajo es similar a la de Query Studio y Report Studio y las opciones estandar para la creación de informes son muy similares a las de Query Studio, con aplicación de filtros, ordenaciones, operaciones de agrupación de datos, creación de gráficas, etc.
Además ofrece funcionalidades más orientadas a orígenes dimensionales, como la navegación con drill up / drill down, o la creación de filtros de contexto.
Diseño y ejecución de informes con Analysis Studio de IBM Cognos BI

IBM Cognos Event Studio

Esta es la herramienta de notificaciones y alertas de la suite.
Con Event Studio se crean agentes que van chequeando los datos o las KPI's definidas, y detectan eventos importantes para el negocio cuando se alcanzan determinados valores o se cumplen ciertas condiciones.
En ese momento la herramienta pasa a ejecutar las acciones o tareas que se hayan asociado a los eventos. Puede ejecutar o distribuir informes, generar emails, comunicarse con otras herramientas de software, ejecutar jobs u otros agentes, llamar a procedimientos almacenados de bases de datos, o incluso llamar a un Web Service.
Una vez construidos los agentes de Event Studio, con el mismo entorno de Scheduler que se utiliza para planificar la ejecución automatizada de informes, se programa y se controla la ejecución periódica de los mismos.
Creación de Eventos con Event Studio de IBM Cognos BI

IBM Cognos Metric Studio

Es la herramienta que se utiliza para la construcción de métricas y cuadros de mando.
Con Metric Studio se definen los KPI o Indicadores Clave del Rendimiento del negocio, se organizan y relacionan entre ellos, se asocian a diferentes perfiles, y se monitorizan, permitiendo así comparar en todo momento objetivos frente a rendimiento, y definir acciones automatizadas, como notificaciones en caso de desviaciones.
Con estas métricas se construyen cuadros de mando que permiten a nivel operativo monitorizar el rendimiento frente a los objetivos, y a nivel estratégico 'mapear' la estrategia corporativa y facilitar su transmisión a todos los niveles de la organización.
Las metricas se pueden construir a partir de diferentes orígenes de datos, tales como cubos OLAP, bases de datos relacionales, hojas de cálculo, ficheros de texto, e incluso valores informados manualmente, y la herramienta dispone de asistentes para facilitar la construcción de las métricas y los cuadros de mando.
Control de KPI's con Metric Studio de IBM Cognos BI

IBM Cognos Powerplay Transformer

Las herramientas mencionadas anteriormente permiten acceder a cubos OLAP como origen de datos. IBM Cognos PowerplayTransformer es la herramienta que permite construir cubos OLAP, los llamados IBM Cognos PowerCube. Aunque las herramientas de reporting de Cognos pueden trabajar en ROLAP y atacar bases de datos relacionales, para realizar tareas analíticas lo más eficiente suele ser utilizar un cubo OLAP como origen de datos, es decir, trabajar en MOLAP. Con un volumen de datos controlado los tiempos de respuesta en la utilización de los informes pueden ser mucho mejores.
Con Powerplay se definen los orígenes de datos, se modeliza la estructura multidimensional que va a conformar el cubo, se valida, y se procede a la construcción del mismo.
Esta herramienta se instala en modo cliente, no se accede por web. Se utiliza de manera independiente para generar los cubos, que es lo que atacan las otras herramientas web.
Creación de cubos OLAP con PowerPlay Transformer de IBM Cognos BI

IBM Cognos Framework Manager

Esta es la herramienta que se utiliza para la construcción de los metadatos necesarios para que todas las demás funcionen. No suele mencionarse como producto porque es la que utiliza el area técnica para crear los paquetes de metadatos que las herramientas de reporting consultan para mostrar al usuario de negocio una estructura inteligible, y permitir crear un árbol de navegación que acaba consultando los daots de los sistemas origen.
Creación de Metadatos con Framework Manager de IBM Cognos BI

Extensiones

De manera opcional, en la suite también se ofrecen otras herramientas, como IBM Cognos 8 Planning e IBM Cognos TM1, dos herramientas orientadas a la presupuestación y planificación financiera, pero cada una más adecuada para un tipo de entorno.
Destacar de TM1 que utiliza tecnología de análisis en memoria, con lo que puede conseguir unos tiempos de respuesta impresionantes.
Por último, hago mención de la versión Express de la Suite, IBM Cognos Express, que IBM ha preparado orientándola a la pequeña y mediana empresa como una opción más asequible y fácil de implementar.

Espero que este pequeño repaso a los productos de la suite de IBM Cognos BI os sea de utilidad, cualquier nueva aportación, opinión o comentario serán bienvenidos en la sección de IBM Cognos BI del Foro de Dataprix