Feb 27, 2010

Instalación del servidor Zabbix a partir del código fuente

Zabbix es bajo mi punto de vista, el mejor sistema de monitorización existente en el mundo del software libre. Las mejores introducidas a partir de la versión 1.8 han sido bastante importantes.

A veces vamos a tener la necesidad de instalar Zabbix a partir de su código fuente, debido por ejemplo a que los repositorios de nuestra distribución Linux no dispongan de la última versión, o que por ejemplo, al compilarlo directamente en nuestro sistema queramos ganar en optimización y rendimiento, o habilitar alguna configuración que no venga a través del paquete base.

A continuación voy a mostrar cómo instalar Zabbix a partir de sus ficheros fuente. Para ello voy a utilizar una distribución CentOS 5.4 de 64 bits y una versión 1.8.1 de Zabbix.

Lo primero que vamos a hacer es instalar RPMForge, con el objetivo de agregar repositorios adicionales a las listas que por defecto trae CentOS. También actualizaremos el sistema.

[root@centos ~]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

[root@centos ~]# rpm -Uhv rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

[root@centos ~]# yum update -y

A continuación instalaremos los paquetes adicionales que requiere Zabbix, como por ejemplo PHP y el servidor web Apache, y una base de datos, en nuestro caso elegiremos MySQL.

[root@centos ~]# yum install -y gcc mysql-server mysql-devel curl-devel httpd php php-mysql php-bcmath php-gd php-xml php-mbstring net-snmp-devel fping e2fsprogs-devel zlib-devel libgssapi-devel krb5-devel openssl-devel libidn-devel iksemel-devel

Después lanzaremos MySQL y haremos que el servicio de base de datos y Apache se inicien automáticamente al arrancar el sistema operativo. También ejecutaremos la aplicación mysql_secure_installation con el objetivo de establecer el password para el usuario 'root', remover el usuario 'anonymous' y eliminar la base de datos test.

[root@centos ~]# service mysqld start

[root@centos ~]# chkconfig mysqld on ; chkconfig httpd on

[root@centos ~]# mysql_secure_installation

Ahora bajaremos el código fuente de Zabbix y los descomprimiremos. Sólo nos quedará por compilarlo y generar los binarios correspondientes.

[root@centos ~]# wget http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/1.8.1/zabbix-1.8.1.tar.gz?use_mirror=switch

[root@centos ~]# tar xvzf zabbix-1.8.1.tar.gz ; cd zabbix-1.8.1

[root@centos zabbix-1.8.1]# ./configure --enable-agent --enable-ipv6 --enable-proxy --enable-server --with-mysql --with-libcurl --with-net-snmp --with-jabber

[root@centos zabbix-1.8.1]# make ; make install

El siguiente paso consistirá en crear todos los directorios necesarios para Zabbix, añadir un usuario denominado 'zabbix' al sistema y copiar los archivos de arranque y configuración a sus respectivos directorios.

[root@centos zabbix-1.8.1]# mkdir -p /etc/zabbix/alert.d /etc/zabbix/externalscripts /var/log/zabbix-server /var/log/zabbix-agent /var/run/zabbix-server /var/run/zabbix-agent /usr/local/share/zabbix

[root@centos zabbix-1.8.1]# adduser -r -d /var/run/zabbix-server -s /sbin/nologin zabbix

[root@centos zabbix-1.8.1]# cp -a misc/conf/zabbix_server.conf misc/conf/zabbix_agentd.conf /etc/zabbix

[root@centos zabbix-1.8.1]# cp misc/init.d/redhat/8.0/zabbix_server misc/init.d/redhat/8.0/zabbix_agentd /etc/init.d

[root@centos zabbix-1.8.1]# chown -R zabbix:zabbix /var/run/zabbix* /var/log/zabbix* /etc/zabbix

Una vez depositado cada fichero en su lugar, modificaremos ciertos parámetros que por defecto vienen en dichos archivos.

[root@centos zabbix-1.8.1]# cat /etc/zabbix/zabbix_server.conf
...
# Nombre del archivo de log
LogFile=/var/log/zabbix-server/zabbix_server.log

# Nombre del archivo de PID
PidFile=/var/run/zabbix-server/zabbix_server.pid

# Password de la base de datos
DBPassword=xxxxxx

# Ubicación de los scripts de alerta
AlertScriptsPath=/etc/zabbix/alert.d/

# Ubicación de los scripts externos
ExternalScripts=/etc/zabbix/externalscripts


[root@centos zabbix-1.8.1]# cat /etc/zabbix/zabbix_agentd.conf
...
# Nombre del archivo de log
LogFile=/var/log/zabbix-agent/zabbix_agentd.log

# Habilitar el uso de comandos remotos
EnableRemoteCommands=1

# Número máximo de segundos para el procesamiento
Timeout=10

# Nombre del host (comando hostname)
Hostname=centos.local

# Dirección IP del servidor Zabbix
Server=::ffff:127.0.0.1


[root@centos zabbix-1.8.1]# cat /etc/init.d/zabbix_server
...
# Orden de arranque y apagado
# chkconfig: - 80 30

# Ubicación del binario
progdir="/usr/local/sbin/"

# Retardo de 5 sg para el reinicio
...
restart() {
stop
sleep 5
start
...


[root@centos zabbix-1.8.1]# cat /etc/init.d/zabbix_agentd
...
# Ubicación del binario
progdir="/usr/local/sbin/"

# Retardo de 5 sg para el reinicio
...
restart() {
stop
sleep 5
start
...

También estableceremos permisos de lectura y escritura para el fichero de configuración de Zabbix sólo para el propietario (hemos definido dentro del fichero la clave de administración de bases de datos para el usuario root).

[root@centos zabbix-1.8.1]# chmod 600 /etc/zabbix/zabbix_server.conf

En el fichero /etc/services definiremos los servicios para el agente y servidor de Zabbix.

[root@centos ~]# echo "zabbix-agent    10050/tcp  Zabbix Agent"   >> /etc/services
[root@centos ~]# echo "zabbix-agent 10050/udp Zabbix Agent" >> /etc/services
[root@centos ~]# echo "zabbix-trapper 10051/tcp Zabbix Trapper" >> /etc/services
[root@centos ~]# echo "zabbix-trapper 10051/udp Zabbix Trapper" >> /etc/services

Ahora vamos a configurar la parte web:

[root@centos ~]# cp -ar frontends/php/* /usr/local/share/zabbix

[root@centos ~]# chown -R zabbix:zabbix /usr/local/share/zabbix

[root@centos ~]# echo "Alias /zabbix /usr/local/share/zabbix" > /etc/httpd/conf.d/zabbix.conf

[root@centos ~]# service httpd start

Ahora sólo nos quedará que hacer que los servicios de Zabbix se arranquen automáticamente al iniciar la máquina. Iniciaremos también el agente de Zabbix.

[root@centos ~]# chkconfig zabbix_server on ; chkconfig zabbix_agentd on

[root@centos ~]# chmod +x /etc/init.d/zabbix_server /etc/init.d/zabbix_agentd

[root@centos ~]# service zabbix_agentd start

En este momento abriremos un navegador web y pondremos la siguiente URL: http://192.168.1.10/zabbix (192.168.1.10 es la dirección IP de mi servidor).

Si tenemos activado SELinux, veremos que éste nos impide el acceso. Esto se debe a que los contextos de los archivos PHP no están correctamente establecidos; lo arreglaremos con la siguiente sentencia. A su vez, también activaremos la variable booleana httpd_can_network_connect para permitir que scripts externos se puedan conectar al servidor Apache.

[root@centos ~]# chcon -R -t httpd_sys_content_t /usr/local/share/zabbix

[root@centos ~]# setsebool -P httpd_can_network_connect on

Lo primero que aparecerá será un asistente que comprobará los pre-requisitos de la instalación. Como puede verse en la siguiente imagen, hay varios puntos que no son correctos y que afectan al fichero php.ini.


Modificaremos los valores solicitados:

[root@centos ~]# cat /etc/php.ini
...
# Cantidad máxima de memoria que un script puede consumir
memory_limit = 256M

# Tamaño máximo del archivo que se puede subir al servidor web
post_max_size = 32M

# Tiempo máximo de ejecución para cada script
max_execution_time = 600

# Zona horaria
date.timezone = Europe/Madrid

# Soporte adicional para cadenas multi-byte
mbstring.func_overload = 2


[root@centos ~]# service httpd restart

Una vez establecidos dichos valores, pulsaremos sobre el botón Retry. En la siguiente pantalla de configuración el asistente nos indica que tenemos que crear la base de datos manualmente.


Crearemos una nueva base de datos en MySQL con el nombre 'zabbix', utilizando los esquemas que generamos durante la compilación.

[root@centos ~]# (echo "CREATE DATABASE zabbix;" ; echo "USE zabbix;" ; cat create/schema/mysql.sql ; cat create/data/data.sql ; cat create/data/images_mysql.sql) | mysql -h 127.0.0.1 -u root --password=xxxxxx

Al finalizar el asistente, se grabarán los datos de conexión con la base de datos en el fichero zabbix.conf.php. Debido a que este fichero contendrá la password de la base de datos, le asignaremos permisos de lectura-escritura sólo al propietario. También iniciaremos el servidor de Zabbix.

[root@centos ~]# chmod 600 /usr/local/share/zabbix/conf/zabbix.conf.php

[root@centos ~]# service zabbix_server start

Feb 22, 2010

Enjaular usuarios (chroot) por ssh/sftp/scp con jailkit

Enjaular a un usuario dentro de un sistema Linux viene a ser lo mismo que restringirle el acceso a un determinado árbol de directorios. Por ejemplo, podemos enjaular a un determinado usuario dentro de su propio home, y que no pueda acceder al resto de directorios de la raíz (/etc, /var, /bin, etc.).

La idea es construirle un entorno con una serie de comandos básicos (ls, cp, ...) que queramos que pueda usar, así como las librerías de las que dependen dichas órdenes.

En el presente artículo vamos a construir un directorio enjaulado (/srv/jail) en el que encerraremos al usuario user1 y le daremos acceso a través de SSH, SFTP y SCP. Para ello emplearemos la aplicación jailkit, disponible en los repositorios RPMForge. Utilizaremos una distribución CentOS 5.4 de 64 bits.

[root@centos ~]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

[root@centos ~]# rpm -Uhv rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

[root@centos ~]# yum install jailkit

En primer lugar utilizaremos la herramienta jk_init para crear el directorio que definiremos como jaula y añadiremos las herramientas de conexión que se podrán utilizar. También copiaremos la shell que utilizará el usuario user1. Para ello emplearemos el comando jk_cp, ya que aparte de copiar la shell, copiará también las librerías necesarias.

[root@centos ~]# jk_init -v -j /srv/jail jk_lsh ssh sftp scp

[root@centos ~]# jk_cp -v -f /srv/jail /bin/bash

[root@centos ~]# ls -l /srv/jail/
total 48
drwxr-xr-x 2 root root 4096 feb 5 16:52 bin
drwxr-xr-x 2 root root 4096 feb 5 16:49 dev
drwxr-xr-x 3 root root 4096 feb 5 16:52 etc
drwxr-xr-x 2 root root 4096 feb 5 16:49 lib
drwxr-xr-x 2 root root 4096 feb 5 16:52 lib64
drwxr-xr-x 6 root root 4096 feb 5 16:49 usr

Después añadiremos al sistema el usuario user1 y le asignaremos una password. También será necesario añadir el registro generado en /etc/passwd dentro del fichero passwd que se habrá creado en el entorno enjaulado.

[root@centos ~]# useradd user1

[root@centos ~]# passwd user1

[root@centos ~]# cat /etc/passwd | grep user1
user1:x:501:501::/home/user1:/bin/bash

[root@centos ~]# cat /etc/passwd | grep user1 >> /srv/jail/etc/passwd

A continuación vamos a enjaular al usuario user1 dentro de la jaula. Veremos como cambia automáticamente el directorio home y la shell asignada previamente.

[root@centos ~]# jk_jailuser -m -j /srv/jail user1

[root@centos ~]# cat /etc/passwd | grep user1
user1:x:500:500::/srv/jail/./home/user1:/usr/sbin/jk_chrootsh

Por último, añadiremos la siguiente configuración al fichero jk_lsh.ini

[root@centos ~]# cat /srv/jail/etc/jailkit/jk_lsh.ini
[user1]
paths= /usr/bin, /usr/lib/
executables= /usr/bin/scp, /usr/libexec/openssh/sftp-server

Si en este momento intentamos acceder a través de una sesión SCP, veremos que tenemos varios fallos al iniciar la sesión. Esto se debe a que el cliente SCP utiliza varias herramientas (ls, groups, sh e id) que no hemos añadido a nuestro entorno enjaulado.

Para añadirlas, utilizaremos el comando jk_cp que ya vimos en los párrafos anteriores. Lo mismo para cualquier herramienta que necesitemos agregar.

[root@centos ~]# jk_cp -v -f /srv/jail /bin/ls /usr/bin/groups /bin/sh /usr/bin/id

Si sólo hubiéramos querido darle acceso al usuario user1 a través del protocolo SFTP, tendríamos que haber ejecutado las siguientes órdenes:

[root@centos ~]# jk_init -v -j /srv/jail jk_lsh sftp

[root@centos ~]# useradd user1

[root@centos ~]# passwd user1

[root@centos ~]# jk_jailuser -m -j /srv/jail user1

[root@centos ~]# cat /srv/jail/etc/jailkit/jk_lsh.ini
[user1]
paths= /usr/bin, /usr/lib/
executables= /usr/bin/scp, /usr/libexec/openssh/sftp-server

Feb 14, 2010

Arquitectura de seguridad local

Una vez analizados los principales rasgos de una arquitectura de seguridad perimetral, vamos a abordar las líneas maestras que debería seguir cualquier arquitectura de seguridad local.

En primer lugar vamos a tratar el tema de los servidores; es conveniente tener actualizados los servidores, no sólo a nivel de parches de seguridad, sino también a medida que van surgiendo nuevas actualizaciones de software, ya que de esta forma tendremos acceso a nuevas funcionalidades así como a mejoras en su rendimiento.

En entornos de producción es recomendable aplicar únicamente los parches de seguridad y de corrección de errores en el código (yum update en sistemas RHEL/Cent0S), y posponer las actualizaciones de versión a migraciones globales y planificadas de todos los sistemas.

Si se emplean versiones muy antiguas de los sistemas operativos, puede darse incluso la situación de que nos quedemos sin soporte alguno. Además es conveniente no utilizar ditintas clases de distribuciones y unificar todos los servidores en base a una única distribución, ya que esto facilitará las tareas de futuros administradores de la red.

A día de hoy, mi opinión personal es emplear la versión CentOS 5.4, ya que se trata de una distribución que a nivel binario es un clon de Red Hat Enterprise Linux, uno de los sistemas más estables y utilizados a nivel empresarial.

Con respecto a la seguridad de los servidores Linux, se debe de aprovechar todas las ventajas que ofrece este tipo de sistema operativo: NetFilter, SELinux context, TCP wrappers, Application control y SELinux boolean.

También es conveniente siempre que se pueda, paravirtualizar los distintos servicios a través de las diferentes tecnologías proporcionadas por VMware o Xen.

En la siguiente figura se muestra un ejemplo de paravirtualización de una máquina que realiza labores de FTP, DNS y SMTP. En dicha imagen puede observarse que se dispone de una única máquina física en la cual se encuentran levantados los tres servicios mencionados. Con el proceso de paravirtualización se crearían tres máquinas virtuales independientes en donde cada una de ellas albergaría un único servicio.


La paravirtualización es una generación de tecnología de virtualización que emplea un sistema más moderno y eficaz en la gestión de los recursos hardware. El sistema operativo virtualizado sabe que se ejecuta en un entorno virtualizado y se adapta a ello para aprovechar ese contexto. De esta forma se consigue que ciertas llamadas privilegiadas no tengan que pasar por la capa de virtualización. Con la paravirtualización se obtienen unas pérdidas de rendimiento de entorno a un 5%, en comparación a si se instalara un sistema operativo sin virtualizar directamente en el mismo hardware.

A continuación se exponen las principales ventajas que se consiguen con la virtualización:
  • Si alguno de los servidores es atacado y se consigue acceder al control de la máquina donde reside el servicio, el resto de servicios de la red permanecerán protegidos al estar emplazados en máquinas virtuales independientes.

  • Se puede establecer de una forma más sencilla y práctica, un sistema de Alta Disponibilidad que permita mantener la continuidad del servicio en situación de caída.

  • En caso de tener que restaurar un determinado servidor, al tenerlo virtualizado el proceso de restauración sería mucho más rápido y sencillo.

Una de las tareas más importantes a realizar por parte de cualquier administrador con el objetivo de securizar correctamente sus sistemas, es la de segmentar correctamente las distintas subredes. Es importante distinguir o delimitar las zonas de una red; de este modo se pueden aplicar diferentes directivas de seguridad que aíslen a las máquinas ante posibles ataques o infecciones.

En caso de que sea necesario configurar algún tipo de red privada virtual, se recomienda encarecidamente no utilizar PPTP. Este protocolo ha quedado obsoleto debido a sus numerosos fallos de seguridad; se recomienda la utilización del protocolo SSL a través de la aplicación OpenVPN. Además todo el tráfico que circule por las VPNs y que llegue a las redes internas, debe de pasar siempre por algún sistema de tipo All-In-One, con el objetivo de que sea previamente analizado.

Las VPNs que se utilicen nunca deben de establecerse a través de una clave compartida. Esta clase de autenticación corre el riesgo de ser rota mediante un ataque de fuerza bruta (debido a la longitud de las contraseñas). Por ello se propone también la implantación de una Autoridad de Certificación, encargada de emitir y administrar los certificados digitales empleados posteriormente para establecer los túneles privados. Los certificados digitales permiten recurrir claves de hasta 2048 bits.

También es recomendable instalar un servidor de monitorización (Zabbix) que se encargue de controlar en todo momento el estado de los servidores, tanto a nivel hardware (niveles de carga de CPU, memoria, disco, etc.) como a nivel software (estado de los distintos servicios, consumo de memoria, etc.).

Además también sería interesante el hecho de poder configurar un servidor de logs remoto, el cual recoja y almacene los logs de todos los servidores, con el objetivo de salvaguardar los eventos acaecidos ante un hipotético ataque.

Por último, decir que sería muy conveniente realizar auditorias periódicas de seguridad (Nessus Vulnerability Scanner) a los distintos sistemas que conforman nuestra infraestructura, ya que aunque una de las tareas de los administradores sea la de permanecer alerta ante cualquier tipo de vulnerabilidad publicada, siempre puede ocurrir que alguna de ellas sea pasada por alto.

Feb 9, 2010

Encriptar disco USB con TrueCrypt

Recientemente me he comprado un disco duro externo USB de 2.5", concretamente un LG XD3 de 500 GB. Se trata de un disco muy ligero y de reducidas dimensiones. El software que te viene para cifrar y hacer backups de los datos, para no variar, funciona exclusivamente bajo Windows, así que queda automáticamente descartado.

Lo que hice en primer lugar fue crear dos particiones en el disco, una pública y otra privada. Para ello emplee la herramienta GParted. Como sistema de archivos utilicé NTFS, con el objetivo de poder acceder a la parte pública tanto desde Windows como desde Linux.

Para cifrar la partición privada utilicé la aplicación de código abierto TrueCrypt, la cual se encuentra disponible para sistemas operativos de tipo Windows, Linux o Mac OS X. En mi caso instalé la versión 6.3a en una Kubuntu 9.10. Realmente no hace falta instalar TrueCrypt sobre el sistema operativo, podemos ejecutarlo como veremos al final del artículo y realizar tareas de encriptación y desencriptación de particiones/volúmenes.


A continuación voy a describir el proceso que hay que seguir para cifrar un disco con TrueCrypt.

En la pantalla principal de la aplicación pulsaremos sobre el botón Create Volume, mediante el cual accederemos a un asistente que nos irá guiando durante todo el proceso de cifrado de la partición. En esta primera pantalla del asistente (TrueCrypt Volume Creation Wizard) seleccionaremos la opción de Create a volume within a partition/drive. En la siguiente pantalla del asistente (Volume Type) escogeremos la opción de Standard TrueCrypt volume.

A continuación (Volume Location) seleccionaremos la partición privada del disco USB y en la pantalla de Encryption Options, el algoritmo de encriptación. Yo he escogido AES, ya que se trata de un algoritmo bastante robusto que ofrece buenas velocidades de encriptación y desencriptación. Como algoritmo hash he seleccionado SHA-512. En la pantalla de Volume Password estableceremos la clave para la partición privada.

La siguiente pantalla que nos mostrará TrueCrypt será Format Options, donde seleccionaremos el sistema de archivos con el que se formateará el volumen privado. Yo he seleccionado ext3, ya que el único sistema de archivos soportado nativamente por Windows y que ofrece TrueCrypt es FAT, el cual está más que obsoleto. Decir también que el ejecutable de TrueCrypt para Windows sí que permite seleccionar en este paso como sistema de archivos NTFS.

Al pulsar sobre el botón Format, TrueCrypt comenzará a darle formato al volumen.


A partir de este momento, cada vez que pinchemos el disco USB en nuestro sistema, se montará automáticamente la partición pública. Para montar la partición privada ejecutaremos TrueCrypt, seleccionaremos un slot libre y escogeremos el dispositivo a montar (Select Device). Por último pulsaremos sobre el botón Mount. En este momento, TrueCrypt nos solicitará la contraseña con la que ciframos el volumen.

Como dije al comienzo del capítulo, no hace falta instalar TrueCrypt en el sistema operativo para poder desencriptar posteriormente una partición. Yo lo que he hecho ha sido bajarme el ejecutable de TrueCrypt para Windows y para Linux y depositarlo en la partición pública.

De esta manera si alguna vez tengo que pinchar mi disco USB en una máquina Windows y tengo la necesidad de desencriptar el volumen privado, ejecutaré el TrueCrypt para Windows desde la partición pública y montaré en un slot libre el volumen privado. Y para Linux viceversa.

Feb 1, 2010

Arquitectura de seguridad perimetral

Uno de los mayores problemas de seguridad existentes en los tiempos modernos es la gran cantidad de amenazas que pueden encontrase, así como el número de dispositivos que se conectan a las distintas redes corporativas. Por esta razón, es prácticamente imposible encontrar lo que se conoce como una red "limpia" o inmune a contenido malicioso.

En la mayoría de las corporaciones, la arquitectura de seguridad perimetral está basada en un único elemento delimitador entre las redes internas y las redes externas (susceptibles de aportar contenidos dañinos) es un firewall que opera a nivel de red.

Un firewall es el modelo más básico que se tiene para proteger una red mediante el bloqueo de puertos. El principal problema de los firewalls es que sólo saben detener el tráfico destinado a un puerto o transportado mediante un protocolo concreto en base a unas determinadas reglas previamente establecidas. El problema viene cuando se tiene que permitir que circulen paquetes a través de un determinado puerto.

Un firewall examina el tráfico entrante por esos puertos abiertos, pero ese análisis se realiza a nivel de enlace o a nivel de red, es decir, en función de ciertos campos del paquete TCP/IP como por ejemplo las direcciones IP o puertos. Pero el área de datos proveniente del nivel de aplicación en ningún caso se considera, y ésta es la parte del paquete que presenta mayor riesgo de cara a la seguridad interna de una red. Además estos dispositivos tampoco disponen de la inteligencia suficiente como para poder detectar anomalías basándose en patrones de tráfico.

Por lo tanto, dichos puertos accesibles desde el exterior están sometidos a un cúmulo de importantes amenazas externas, como por ejemplo malware (virus, gusanos, troyanos, spyware) y ataques hacking (malformación de protocolos, escaneos de puertos, ataques DOS y SYN, avalanchas de tráfico, exploits, etc.). Es un error muy grave el hecho de delegar en los dispositivos finales las medidas de seguridad. Esta situación debe ser siempre una acción complementaria sumada a una correcta política de seguridad perimetral.

En la mayoría de los casos, los responsables de la seguridad informática de las compañías argumentan que es suficiente con tener un firewall a la entrada de la red, un antivirus en cada uno de los equipos y una sonda que rastree los eventos internos. En los párrafos anteriores se han expuesto los motivos por los que un simple firewall no es una medida lo adecuadamente disuasoria.

Con respecto a los antivirus, estas aplicaciones en teoría nos protegen de la mayoría de los virus existentes, basando su reconocimiento en una serie de firmas o patrones. Pero hoy en día los virus son capaces de mutar al poco tiempo de infectar la máquina, con lo que dificultan su identificación por parte de los antivirus.

En este sentido juegan un papel muy importante los sistemas IDS (Intrusion Detection System) como por ejemplo Snort, ya que son capaces de detectar cadenas anómalas dentro de los paquetes que circulan por una red, como por ejemplo virus cuyas firmas aún no han sido incorporadas al motor del antivirus.

Pero como bien ilustra el acrónimo IDS, estamos ante un sistema detector o pasivo, es decir, capaz de descubrir alguna situación que se salga fuera del marco habitual de comportamiento e informar a continuación al administrador. Pero en la mayoría de los casos, ese periodo de tiempo que transcurre desde que un ataque es detectado hasta que realmente se toman las medidas pertinentes, puede ser nefasto para los intereses de una organización. En este ámbito de riesgo expuesto toma especial relevancia el concepto de IPS (Intrusion Prevention System), que tecnológicamente viene a ser un IDS pero con la capacidad de prevención o bloqueo (sistema activo).


Por todo ello se recomienda establecer siempre una solución completa a la entrada de cualquier red corporativa (sistema All-In-One), la cual frene o mitigue la mayoría de las amenazas externas. Existen multitud de alternativas en el mercado que proveen soluciones de estas características, pero como mínimo deben cumplir siempre con las siguientes características técnicas: firewall, servidor VPN, IPS, anti-malware, anti-spam, filtrado web y filtrado de contenidos.

Por último, decir también que esta solución debe de situarse siempre en Alta Disponibilidad.