jueves, 4 de noviembre de 2010

Shell Script

Ok ahora veamos como hacer un ciclo o bucle en shell, al igual que en programación tenemos la sentencia WHILE , veamos acerca de ella.

el while tiene una condicionante que funciona parecido al if, en ella podemos utilizar evaluaciones echas con el test, veamos la sintaxis

while [ condición ]
do
comandos
done

el comando se repetirá hasta que la condición sea verdadera .

veamos un ejemplo sencillo

echo " indtroduzca numero"
read x
while test $x != 20
do
echo " introduzca el numero correcto"
echo " intente de nuevo"
read x

done

esto lo hará hasta que sea el numero que se ingrese sea 20

también podemos redirecciona información

veamos un pequeño ejemplo

ls -la | while read w x y z
do
echo $w , $x , $y , $z.
done


las letras se convertirán en cada columna y se cortaran en cada espacio vació.


ls | while read x
do
if [ -d "$x" ]
then
echo $x es directorio
break
elif [ -e $x ]
then
echo $x es archivo
continue
fi

done

este script identifica si la listado es archivo o directorio . si es directorio rompe el ciclo


como evaluar expresiones matemáticas en el shell utilizamos expr

veamos un ejemplo

# expr 2 \* 3

este comando puede ejecutar múltiples operaciones matemáticas , es recomendable que vean el manual completo

ahora veremos la sentencia for .

la sentencia for sirve para hace ciclos al igual que el while . veamos como es la sintaxis

# for x in argumentos do comandos done

veamos un ejemplo pequeño, re nombremos todos los archivos de un directorio .

# for x in *.conf; do y=${x/.conf/.old}; mv $x $y; done

veamos otro ejempo de como hacer un contador con el for

# for ((i=0;$i<100;i= `expr $i + 2`)) do echo $i; done;


como notaron , utilice un tipo de comillas para denotar la expresión, esto permite utilizar comandos en las lineas de ejecución . veamos otro ejemplo

miércoles, 3 de noviembre de 2010

Shell Script

Muchas ocasiones nos toca hacer un pequeño script en pantalla para ejecutar alguna operación que puede ser automatizada , el editor "vi"

No voy a entrar mucho a detalle en esto pero daré algunas tips que pueden ayudarnos

1. en el editor vi , en ocasiones es necesario realizar búsquedas se hacen con la /
2. Para ejecutar algún comando de sistema operativo son salir se realiza con !
3. para ejecutar el mismo comando sin repetir la instrucción !!
4. Para hacer referencia al nombre del script utilizamos %
5. si queremos correr el script sin salirmos hacemos lo siguiente !%
6. Para grabar utilizamo la w
7. para grabar y salir usarmos x
8. para moverte al principio del archivo es con 1G
9. Para moverte al final del archivo es G
10. Para moverte al principio de la linea es 0
11. Para moverte al final de la linea es $
12. Para hacer un UNDO es con la letra u
13. Para remplazar caracteres utilizamos la r o R
14. Con dd, borras toda la linea , con D borras el resto de la linea a partir del cursor.

Con esos basicos pasos podemos hacer uso eficiente te nuestro editor.

Uso de variables, el sistema tiene variables de ambiente que no debemos cambiar , pero podemos, estas las podemos consultar

# env

para asignar un valor a una variable lo hacemos de la sig manera

# hola="hola Mundo"
# echo $hola

estas variables solo se pueden usar en el script que se realiza , para que puedan ser utilizadas por diferentes aplicaciones tendremos que exportarlas

# export hola

Podemos agrupar la ejecucion de comandos utilizando paréntesis

# (
> ls
> df
> who
> )



Control de ejecución de comandos , para esto utilizaremos

# ls; df; who;

esto ejecutara un comando despues de otro .

una ejecución de comandos la podemos dividir con \

# ls ; \
> df; \
> who

existe también el re direccionamiento de resultados .

# ls &

manda el comando a back ground

Para redireccionar el resultado de un comando utilizamo |

# ps axu | grep sendmail

este comando redirecciona el resultado del ps al grep para ser filtrados

# ps axu > resultado

redirecciona el resultado del ps a un archivo llamado resultado

# ps axu >> resultado

redirecciona el resultado y lo concatena con el resultado ya existente en el archivo

# ps axu >/dev/null 2>&1

redirecciona el resultado a la nada (el resultado y el error ) &1 significa que utilizara el mismo archivo .


el argumento 2> redirecciona los errores así que podemos dividirlo

# ps aux > resultado 2> errores



tenemos también las condicionantes para ejecución de comandos que utilizaremos && y ||

tenemos el siguiente ejemplo

# mv file.txt file2.txt && echo " Si se armo"

el resultado es , si el comando fue ejecutado correctamente y con status 0 , enviara el mensaje "Si se armo" en caso contrario enviara el error y no correrá el segundo comando

# mv file.txt file2.txt || echo " ya lo habias echo "

este enviara el mensaje si al ejecutar el primer comando se ejecuta correctamente pero su estatus es diferente de 0 o con error .

haa pero surge la pregunta como saber si es un 0 o 1 , cuando se ejecuta un comando el sistema guarda en la variable $? el estatus de la ejecución del comando anterior

ejemplo

# ls a
# echo $?


Sentencia condicional if

la estructura es

if comando
then
comando
comando
comando
elif comando
then
comando
else
comando

fi


un ejemplo sencillo de esto

if ls usuarios.txt > /dev/null 2>&1
then
echo " Ya existe el archivo"
elif who > usuario.txt
echo "Archivo creado
else
echo "No se pudo crear"
if


para auxiliarnos en la evaluación de expresiones utilizaremos el comando test

el comando test regresa un 1 si la evaluación es verdadera y un 0 si es falsa , este cuenta con operadores para hacer multiples evaluaciones veamos alguna de ellas

1. exp1 -a exp2 # ambas epreciones verdaderas
2. !exp # negar la expresion
3. exp1 -o exp2 # es las expresion o logica
4. -n string # si la cadena es diferente de 0
5. -z string # si la cadena es 0
6. cadena1 = cadena2 # compara 2 cadenas iguales
7. cadena1 != cadena2 # compara 2 cadenas diferentes
8. val1 -eq val2 # valores iguales
9. val1 -ge val2 # mayor o igual que
10 val1 -gt val2 # el valor es mayor que
11 val1 -le val2 # menor o igual a
12. val1 -lt val2 # menor que
13. val1 -ne val2 # no son iguales
14. archivo -ef archivo1 #
15. archivo -nt archivo1 # arvhivo es mas nuevo que
16. archivo -ot archivo1 # archivo es mas viejo que
17. -e archivo # el archivo existe
18. -d archivo # existe y es directorio
19. -f archivo # existe y es un archivo regular
20 -xwr archivo # cada una de las letras por separado indica que existe y es ejecutable , escribible, o lecura


Sentencia case para evaluar multiples

case $valor in

valor) comando ;;
valor1) comando ;;
*) valor_default ;;
esac

se utiliza como if anidados ..

miércoles, 29 de septiembre de 2010

Curso RHCT Modificacion de Modulos sin Compilar el Kernel

En esta ocacion veremos como manejar Modulos del Kernel sin necesidad de compilar el Kernel ,
en algunos casos ( no se si actualmente se haga por que ya no lo he hecho ) al instalar algunos programas como VMWARE, era necesario recompilar un Kernel , para agregar los modulos .

Cuando el Sistema operativo Linux inicia, lee el archivo /etc/rc.sysinit . el cual es el encargado de leer los modulos configurados al Kernel . este archivo no lo editaremos.

También contamos con el archivo /etc/modeprove.conf , el cual contiene los ALIAS de los modulos

===========================

alias scsi_hostadapter ata_piix
alias snd-card-0 snd-intel8x0
options snd-card-0 index=0
options snd-intel8x0 index=0
remove snd-intel8x0 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0
alias eth0 pcnet32
==========================

Los Alias estandar del sistema esta en el directorio /etc/modeprobe.d

==========================
-rw-r--r-- 1 root root 810 Sep 27 2009 blacklist
-rw-r--r-- 1 root root 833 Sep 3 2009 blacklist-compat
-rw-r--r-- 1 root root 83 Mar 17 2010 blacklist-firewire
-rw-r--r-- 1 root root 6111 Sep 3 2009 modprobe.conf.dist
=========================

el archivo modprobe.conf.dist incluye una gran cantidad de alias estandar para el sistema . que seran cargdos automaticamente , a difierencia de los archivos blacklist que no son cargado automaticamente.

Hagamos un ejemplo

el comando lsmode , nos sirve para listar los modulos que han sido cargados al kernel

# lsmod

===========================

Module Size Used by
pcnet32 35269 0
autofs4 29253 3
ipv6 267617 24
xfrm_nalgo 13381 1 ipv6
crypto_api 12609 1 xfrm_nalgo
hidp 23105 2

.
.
.
=====================================

para ver un ejemplo claro , removeremos un modulo existente cargado al kernel con el comando rmmod

# rmmod pcnet32

# lsmod

===========================

Module Size Used by
autofs4 29253 3
ipv6 267617 24
xfrm_nalgo 13381 1 ipv6
crypto_api 12609 1 xfrm_nalgo
hidp 23105 2
.
.
.
=====================================
# modeprobe pcnet32

# lsmod

===========================

Module Size Used by
pcnet32 35269 0
autofs4 29253 3
ipv6 267617 24
xfrm_nalgo 13381 1 ipv6
crypto_api 12609 1 xfrm_nalgo
hidp 23105 2
.
.
.
=====================================

los modulos son lehidos del directorio cd /lib/modules/`uname -r` donde el uname -r es la version del kernel actuamente cargado

# cd /lib/modules/`uname -r`

# ls
=====================
build modules.dep modules.pcimap updates
extra modules.ieee1394map modules.seriomap weak-updates
kernel modules.inputmap modules.symbols
modules.alias modules.isapnpmap modules.usbmap
modules.ccwmap modules.ofmap source
=========================

existen módulos que dependen de otros , el comando depmod , regenera el archivo de módulos y dependencias , modules.dep .

# depmod -a

esta opción regenerara todas las dependencias .

existen también comando que nos ayudaran a localizar módulos por dispositivos:

# lsusb

despliega información sobre los dispositivos conectados al USb

# lspci

despliega información sobre los dispositivos conectados al PCI

# lspmcia

espliega información sobre los dispositivos conectados al pmcia

lunes, 29 de marzo de 2010

Network Support Services RHCE

En esta seccion veremos algunos temas importantes de como linux realiza la resolucion de nombres .
Basicamente trabaja utilizando los siguientes metodos

1. caching y salve dns
2. nsswitch.conf
3. host.conf

el orden de la búsqueda de un equipo depende del orden que se encuentre configurado en el archivo
nsswitch.conf, en las versiones mas nueva y host.conf en las versiones antiguas , veamos a lo que nos referimos .

=====nsswitch.conf========

#hosts: db files ldap nis dns
hosts: files dns
==========================

=====host.conf===========

order hosts,bind

========================

el orden determinado por default es verificar el archivo de hosts y posterior verificar la información en el dns . en el cual explicaremos mas adelante como configurar un dns cache.

==========hosts============

127.0.0.1 localhost.localdomain localhost
10.10.1.33 spectra.dominio spectra
10.10.1.6 mail534.dominio mail534

===========================

es importante no borrar la primer linea ya que múltiples servicios verifican esta información para funciona correctamente. Si el host solicitado no es encontrado en el archivo hosts, imendiatamente toma la segunda opcion configurada en el archivo nsswitch.conf, que por default es "dns" el cual es definido en el archivo /etc/resolv.conf

======== resolv.conf =====

nameserver 192.168.1.254
nameserver 192.168.1.253

==========================

miércoles, 24 de marzo de 2010

Network Configuration and Security RHCE

Esta parte , es muy interesante ya que nos muestra la forma adecuada de configurar nuestras interfaces de red , veamos entonces .

el primer archivo importante en esta seccion es el /etc/hosts

en el cual agregaremos el nombre de nuestro nuevo sistema , y también agregaremos los hosts que se encuentran en nuestra red veamos un ejemplo

===============================
127.0.0.1 localhost.localdomain localhost

10.10.1.33 spectra.xxxxxxxxxx spectra
10.10.1.6 mail534.xxxxxxxxxx mail534
==============================

lo siguiente es definir el Fully Qualified Domain Name (FQDN) en el archivo /etc/sysconfig/network, veamos el ejemplo

============================
NETWORKING=yes
HOSTNAME=spectra.xxxxxxxxxx
==============================

lo siguiente es definir correctamente los parametros de red esto lo haremos /etc/sysconfig/network-scripts/ifcfg-ethX, para el caso de ip statica , el parámetro "USERCTL=no" indica que los usuarios podrán tener el control del dispositivo de red

=========================
DEVICE=eth0
BOOTPROTO=none
BROADCAST=10.10.1.255
HWADDR=00:1E:C9:28:CE:53
IPADDR=10.10.1.33
NETMASK=255.255.255.0
NETWORK=10.10.1.0
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes
GATEWAY=10.10.1.1
==========================

en el caso de ip dinámica quedara un archivo como el siguiente .

=======================
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
========================

el siguiente archivo a verificar es el /etc/resolv.conf en el cual colocaremos los dns .

=======================
search gateway.2wire.net
nameserver 10.10.1.254
=======================

reiniciamos el servicio de red

# serivice network restart

y verificamos la tabla de enrutamiento

#route -A inet6 -n //ipv6

# route -n

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0


agregamos la ruta correcta de la siguiente forma .


# route -A inet6 add default gw ipv6 //para ipv6
# route add default gw 10.10.1.1 eth0
# route -n

Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 10.10.1.1 0.0.0.0 UG 0 0 0 eth0


si requerimos que la ruta sea grabada podemos guárdala de la siguiente manera y al reiniciar se aplicara automáticamente

# echo 'default via 10.10.1.1 dev eth0' /etc/sysconfig/network-scripts/route-eth0

para configurar esto

teniendo listo esto , podemos permitir el forward en nuestro equipo editando el archivo /etc/sysctl.conf y cambiamos net.ipv4.ip_forward de 0 a 1 .

# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

para realizar el mismo cambio pero de forma temporal hacemos lo siguiente

# echo "1" > /proc/sys/net/ipv4/ip_forward

ahora si queremos saver el trafico que corre en nuestro sistema podemos hacerlo utilizando herramientas como

# iptraf
# tcpdump

o podemos hacerlo analizando el archivo

# watch tail /proc/net/ip_conntrack

en la parte de seguridad veremos básico como podemos hacer funciona iptables .

para ver las reglas en iptables corremos el siguiente comando

# iptables -L

o podemos ver directamente el archivo de configuraciones

# more /etc/sysconfig/iptables

para facilitar la configuración de netfilter podemos utilizar el comando

# system-config-securitylevel-tui

en el caso de control de acceso por medio de tcpwrappers , como su nombre lo dice solo esta enfocado a conexiones tipo TCP , estas las podemos encontrar en /etc/hosts.deny y /etc/hosts.allow , en este caso debemos tener cuidado ya que primero es lehido el archivo allow y despues el deny, la cual su sintaxis es de la siguiente manera

Servicio:cliente:comando

ejemplo :

in.telnetd:10.10.1.2:twits /sbin/echo

System Service Analysis RHCE

Básicamente tenemos los siguiente , al iniciar nuestro sistema , después de descomprimir el kernel, cargas los módulos y montar el sistema de archivos sigue arrancar los servicios , dependiendo el nivel de corrida , son los servicios que serán ejecutados , los niveles de corrida 0 y 6 , corresponden al shutdown y restart, veamos como funciona

Iniciamos con el archivo inittab

============================

id:3:initdefault: # en esta linea indicamos que nivel de corrida sera

# inicializacion del sistema
si::sysinit:/etc/rc.d/rc.sysinit

# estas lineas indican que servicios serán leídos en los niveles de corrida de inicio , por
# ejemplo en el nivel de corrida 3 sera cargado el contenido del folder /etc/rc3.d/

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# esta line indica que accion tomara al presinar las teclas ctr + lalt + del
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# esta linea ejecuta el shutdown cuando el UPS indica que ya esta llegando al punto de fallo

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# cancela la accion de apagado .

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# enciende las terminales disponibles para linea de comando de la f1 al f6
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# indica que la terminal 5 es para el entorno grafico
x:5:respawn:/etc/X11/prefdm -nodaemon

=================================

veamos el folder /etc.rc0.d/

=================

lrwxrwxrwx 1 root root 19 Feb 15 2008 K99readahead -> ../init.d/readahead
lrwxrwxrwx 1 root root 25 Feb 15 2008 K99readahead_early -> ../init.d/readahead_early
lrwxrwxrwx 1 root root 17 Sep 26 13:52 S00killall -> ../init.d/killall
lrwxrwxrwx 1 root root 14 Sep 26 13:52 S01halt -> ../init.d/halt

================

como vemos hay servicios que comienzan con K y otros con S , esto significa que los K no seran cargados y los S si seran ejecutados, en el nivel de corrida 0, vemos que corre el Killall y el halt , que son los procesos para apagar el sistema , lo mismo ocurren con los demas folders .

ahora podemos consultar los servicios que se ejecutaran al nivel de corrida 3

# ntsysv --level 3

si queremos ver en que niveles de corrida esta algun servicio ejecutamos lo siguiente

# chkconfig --list smb
smb 0:off 1:off 2:on 3:on 4:on 5:on 6:off

si queremos cambiar las configuración en algún nivel de corrida podemos utilizar ambas herramientas

# # chkconfig smb off --level 3
# chkconfig --list smb
smb 0:off 1:off 2:on 3:off 4:on 5:on 6:off

Si requerimos saber el estatus actual de algún servicio , podemos hacerlo de la siguiente manera

# service --status-all

o podemos hacerlo de algun servicio en especifico

# service smb status

si requerimos que algún script corra al iniciar el sistema podemos colocarlo dentro del archivo
/etc/rc.local, podemos utilizar el & para enviar la ejecucion a back ground , y pueden ser llamadas por los comando fg y bg y el respectivo job.

un ejemplo podria ser

# ejemplo.sh &

precionamos ctrl + c

hacemos la busqueda del PID

# ps axu | grep ejemplo.sh
# fg 44527

y tendremos de nuevo nuestra ejecución.


estando en el tema de ejecuciones de códigos , podemos hacer que una aplicación se ejecute al momento que un usuario se logue, esto lo podemos lograr ingresando una linea de código en el archivo /etc/profile , si es especifica la aplicación para un usuario esto lo logramos editando el archiv ~/.bash_profile .

espero les sirva la informacion que comparto hoy con ud

martes, 23 de marzo de 2010

System Monitoring and Fault Analysis RHCE

En esta capsula analizaremos algunas herramientas utilies para detectar fallas en nuestro sistema y como mitigarlas . comensaremos con el comando TOP ,

El comando "top" permite ver los procesos que estan ejecutandose en nuestro sistema en tiempo real , veamos un ejemplo :

==========================
top - 13:43:49 up 11 days, 22:59, 2 users, load average: 1.34, 1.36, 1.37
Tasks: 167 total, 1 running, 166 sleeping, 0 stopped, 0 zombie
Cpu(s): 35.4%us, 15.0%sy, 0.1%ni, 49.4%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 5057172k total, 4458716k used, 598456k free, 242416k buffers
Swap: 5144568k total, 84k used, 5144484k free, 2002092k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22362 ivan 16 0 615m 536m 14m S 38.6 10.9 11451:17 VirtualBox
29701 ivan 15 0 2332 960 708 R 1.9 0.0 0:00.02 top
1 root 15 0 2072 628 536 S 0.0 0.0 0:06.24 init
2 root RT -5 0 0 0 S 0.0 0.0 0:04.90 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.14 ksoftirqd/0
4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
5 root RT -5 0 0 0 S 0.0 0.0 0:04.69 migration/1
6 root 34 19 0 0 0 S 0.0 0.0 0:00.23 ksoftirqd/1
7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
8 root 10 -5 0 0 0 S 0.0 0.0 0:21.91 events/0
9 root 10 -5 0 0 0 S 0.0 0.0 0:00.41 events/1
10 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khelper
11 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread
15 root 10 -5 0 0 0 S 0.0 0.0 0:00.44 kblockd/0
16 root 10 -5 0 0 0 S 0.0 0.0 0:00.08 kblockd/1
17 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/0
18 root 16 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/1
==============================================

el cual muestra información importante como es el PID del proceso (PID), el dueno del proceso(USER), el comando ejecutado(COMMAND), la prioridad (PR), el valor nice (NI) entre otros
para obtener ayuda , utilizamos la letra 'h' la cual nos mostrara que comando podemos utulizar para control de nuestros procesos. tambien nos muestra la actividad que esta teniendo nuestro sistema en cada uno de los procesos ejecutandose, informacion del uso de la memoria

existe el comando ps , que muestras los procesos que estan corriendo en nuestro sistema al igual que top , la diferencia es que nos muestra la informacion al momento que se solicito y no muestra el comportamiento del mismo a medida que pasa el tiempo . ejemplo

======================

# ps axu | grep ivan
root 1808 0.0 0.0 13256 3388 ? Ss 11:39 0:00 sshd: ivan [priv]
ivan 1813 0.0 0.0 13356 2280 ? S 11:39 0:00 sshd: ivan@pts/0
ivan 1814 0.0 0.0 4540 1460 pts/0 Ss 11:39 0:00 -bash

====================


tenemos el comando pstree que nos muestra la información en forma de árbol, la cual podemos identificar el proceso padre de sus ramificaciones .

===================
# pstree | grep VirtualBox
init-+-VBoxSVC-+-VirtualBox---15*[{VirtualBox}]
|-xterm---bash---VirtualBox-+-VBoxXPCOMIPCD
| `-7*[{VirtualBox}]
===================


tenemos el comando free , que muestra la actividad de nuestra memoria en nuestro equipo . ejemplo:
======================
# free -m
total used free shared buffers cached
Mem: 4938 4412 525 0 237 1993
-/+ buffers/cache: 2182 2756
Swap: 5023 0 5023
=====================
podemos utilizar el comando watch, para mantener informacion en tiempo real


tenemos el comando vmstats, que muestra una radiografia del performance del sistema ejemplo:

# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 84 555260 242756 2041624 0 0 6 55 14 17 35 15 49 0 0


tememos el comando iostat que da una informacion basica sobre el estado del cpu y disco duros

=================

# iostat
Linux 2.6.1.xxx.xxxx.xxx (xxxxxx.xxxxxxx.xxx) 03/23/2010

avg-cpu: %user %nice %system %iowait %steal %idle
35.43 0.07 15.01 0.07 0.00 49.43

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 9.17 24.61 219.40 25477936 227129950
sda1 0.00 0.01 0.00 11774 38
sda2 9.17 24.60 219.40 25465970 227129912
dm-0 27.64 24.60 219.40 25464858 227129720
dm-1 0.00 0.00 0.00 648 192

==================

tenemos el comando mpstat que da un pequeño resumen de la informacion que arroja iostats

=================

# mpstat
Linux 2.6.1.xxx.xxxx.xxx (xxxxxx.xxxxxxx.xxx) 03/23/2010

02:20:46 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
02:20:46 PM all 35.43 0.07 14.98 0.07 0.02 0.01 0.00 49.43 1026.05

# mpstat -P ALL
Linux 2.6.1.xxx.xxxx.xxx (xxxxxx.xxxxxxx.xxx) 03/23/2010

02:21:40 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
02:21:40 PM all 35.43 0.07 14.98 0.07 0.02 0.01 0.00 49.43 1026.05
02:21:40 PM 0 34.78 0.07 14.38 0.10 0.04 0.02 0.00 50.61 1025.93
02:21:40 PM 1 36.08 0.06 15.58 0.04 0.00 0.01 0.00 48.24 0.12

=======================

el comando sar, produce infomracion general de nuestro sistema , esta informacion la recolecta de /var/log/sa , con ayuda del comando sadc, este comando es interesante, ya que muestra un histrorial de comportamiento del sistema ejemplo :

=======================

01:50:01 PM all 36.96 0.38 15.52 0.02 0.00 47.11
02:00:01 PM all 37.95 0.00 15.53 0.02 0.00 46.50
02:10:01 PM all 40.61 0.00 15.73 0.13 0.00 43.52
02:20:01 PM all 36.31 0.00 15.77 0.03 0.00 47.89
Average: all 36.79 0.07 15.49 0.02 0.00 47.63

========================


mucha de esta información puede ser vista de manera separa en el directorio /proc, el directorio /proc contiene la información de todos nuestros dispositivos instalados en el sistema y su estatus en tiempo real.

existen herramientas muy poderosas que nos pueden ayudar a analizar esta información de forma gráfica como lo es cacti, mrtg, entre otros .


detectando problemas en nuestro sistema debemos revisar nuestros logs , el sistema de logeo que es syslog , su archivo de configuracion se encuentra en /etc/syslog.conf

=============

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;local0.none;local1.none;auth.none;mail.none;news.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* -/var/log/maillog


# Log cron stuff
cron.* /var/log/cron

# Everybody gets emergency messages
*.emerg *

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log
local7.* /var/log/boot.log

#
# INN
#
news.=crit /var/log/news/news.crit

================================

en este archivo se configura la granuralidad de los logs en el sistema y los directorios que se utilizaran para el fin, asi como los tiempos de almacenista y rotación de los archivos .

domingo, 14 de marzo de 2010

Que hacer cuando el superblock falla RHCT RHCE

Ok, este error no es muy común,  pero algunos de nosotros nos ha dado este problema , el cual no nos permite montar particiones.  En particiones con sistema de archivos  EXT2/3  almacenan el superblock en diferentes partes por lo cual es posible recuperarlo .

Para hacer esto mas seguro  requeriremos entrar a nuestro sistema en modo de rescate, usando el cd 1 de instalacion.


# boot: linux rescue

esto parecera como si estubieramos instalando el sistema desde 0 pero notaremos que en titulo superior izquierdo dira Red Hat Rescue, cuando nos de el prompt, o podemos hacerlo en el sistema en init3 desmontando apropiadamente la particion . para este caso lo haremos con el sistema funcionando. ejecutaremos el siguiente comando

# dumpe2fs /dev/hda2 | grep superblock

=======================

Primary superblock at 0, Group descriptors at 1-6
Backup superblock at 43879, Group descriptors at 43879-43884
Backup superblock at 99415, Group descriptors at 99415-99421
======================

siguiente paso, revisar el superblock y repararlo utilizando un superblock de respaldo.

# fsck -b 43879 /dev/hda2


finalmente al terminar de hacer la reparación intentamos montar la partición .

mount /dev/hda2 /mnt


podemos hacerlo directamente si usar fsck


# mount sb=43879 /dev/hda2 /mnt

tenemos que hacer un respaldo inmediato ya que este error puede ser síntoma de falla de hardware .

viernes, 12 de marzo de 2010

Notas Curso RHCT

Otro punto interesante es el archivo anaconda-ks.cfg , ese archivo se guarda automáticamente al instalar nuestro sistema, el cual contiene información relacionada con todas las característica de instalación del sistema, esto nos ayudara cuando hagamos una instalación de sistema de forma no asistida .  el ejemplo puede ser el siguiente .

============


# Kickstart file automatically generated by anaconda.

install
cdrom
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp
rootpw --iscrypted $1$dxW48WPH$xBBjUMrxsAHcx9/QE.xvQ1
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone --utc America/Tijuana
bootloader --location=mbr --driveorder=hda
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --linux --drives=hda
#part /boot --fstype ext3 --size=100 --ondisk=hda
#part pv.2 --size=0 --grow --ondisk=hda
#volgroup VolGroup00 --pesize=32768 pv.2
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=1024 --grow --maxsize=2048
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow

%packages
@editors
@text-internet
@legacy-network-server
@dns-server
@dialup
@core
@base
@ftp-server
@network-server
@web-server
@smb-server
@mail-server
@server-cfg
@news-server
device-mapper-multipath
=========================

este archivo  podemos utilizarlo en nuestra instalación,  al colocar nuestro cd de instalación y seleccionar el tipo  instalación hacemos lo siguiente 

boot: linux ks=cdrom:/anaconda-ks.cfg      # en caso de cdrom
boot: linux ks=hd:hda1:/anaconda-ks.cfg    # caso disc duro
boot: linux ks=hd:fd0:/anaconda-ks.cfg     #floppy 
boot: linux ks=hd::/anaconda-ks.cfg    

También tenemos el caso de problemas al iniciar el sistema para lo cual requeriremos utilizar el disco 1 de instalación, al bootear debemos colocar lo siguiente

boot: linux rescue 

comenzara a hacer el proceso de boot como si fuera una instalación, hasta el punto donde pregunta sobre el montaje de las particiones . 

los casos mas comunes de errores al boot , son 
1. problemas con el archivo /etc/fstab
2. problemas con el archivo  vi /etc/inittab
3. problemas con algun dispocitivo instalado.
4. problemas con el disco duro  .
5. servicios mal configurados 
6. problemas con el archivo /etc/rc.sysinit
7. Errores en grub 

ok para los casos de disco duro y grub podemos hacer lo siguiente .

Disco duro , entrar en rescue mode y ejecutar el comando

# e2fsck -f /dev/hdXX

en el caso del grub , tenemos algun problema al boot podemos hacer lo siguiente ..

al iniciar el grub, en la pantalla donde muestra los kernels de boot , presionamos la tecla C

nos enviara un prompt como el siguiente

grub>

ahora buscaremos la diretiva de root .

grub> root (hd0,0)
grub> root (hd0,1)
...
grub> root (hdx,x)

en esta parte debemos asegurarnos que sea el top level en boot directory no en el directorio raiz u otro directorio , dependiendo de tu sistema de archivos podemos identificarlo.
el siguiente paso  es identificar el kernel

grub> kernel /vmlinuz-2.6.18-128.el5 ro root =/dev/VolGroup00/LogVol00

en red hat el kernel comprimido siempre comienza con vm , el ro significa que solo sera read only , y colocamos la ruta del volumen de montaje . ( podemos verla en el fstab o en el /dev)

siguiente paso es  identificar el init ram disk  en el proceso del boot este podemos identificarlo ya que inicia  con init y finaliza con .img

grub> initrd /initrd-2.6.18-128.el5.img

debemos asegurarnos que sea la misma versión del  kernel

finalizaos como

grub> boot












Creando particiones CURSO RHCT

Que tal , hace poco tome el curso de RHCT y dejo unas muy breves notas de lo que se me pego en el curso . 


Punto 1 .


Como crear LVM, con un sistema corriendo .


1. instalar el hd, correctamente   (fisico)
2. verificar que se encuentre funcionando /proc/hdX/settings
2. Utilizar la aplicaciones fdisk o parted para crear las particiones .
ejemplo de esto .


# fdisk -l /dev/hdc  
# fdisk /dev/hdc


con esto podemos crear particiones, cambiar de ID, etc. 


sfdisk -d /dev/hda | sfdisk /dev/hdb


copiamos la estructura de particiones de un disco a otro disco duro , muy importante  este comando es peligroso ya que nos modifica la estructura de nuestro disco duro 


#mkfs.ext3 /dev/hdc1 


formatea al sistema de archivos 


#mkswap /dev/hdc1


prepara una partición para formato de swap .


# parted /dev/hda 


para crear particiones , es igual que fdisk pero en mi forma personal es mas poderoso fdisk 


trabajemos con un ejemplo de modificar el tamano de un volumen 



# fdisk /dev/hdc
=============================
The number of cylinders for this disk is set to 44698.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):
n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):
2
First cylinder (1940-44698, default 1940):
Using default value 1940
Last cylinder or +size or +sizeM or +sizeK (1940-44698, default 44698):
+1000M

Command (m for help):
t
Partition number (1-4):
2
Hex code (type L to list codes):
8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help):
w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
===========================



esta  creada las particiones  ... ahora las agregamos a un volumen logico


#fdisk -l  /dev/hdc




=============================



fdisk -l /dev/hdc

Disk /dev/hdc: 23.0 GB, 23068672000 bytes
16 heads, 63 sectors/track, 44698 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1               1        1939      977224+  8e  Linux LVM
/dev/hdc2            1940        3878      977256   8e  Linux LVM


=============================

# pvcreate /dev/hdc1 /dev/hdc2

============================
  Physical volume "/dev/hdc1" successfully created
  Physical volume "/dev/hdc2" successfully created
============================

# vgcreate volumen /dev/hdc1 /dev/hdc2

  Volume group "volumen" successfully created


revisamos que este creado nuestro nuevo volumen 



# vgs

============================
  VG         #PV #LV #SN Attr   VSize  VFree
  VolGroup00   1   2   0 wz--n- 21.31G    0
  volumen      2   0   0 wz--n-  1.86G 1.86G

============================

creamos un  volumen logico nuevo

# lvcreate -L 1000M volumen -n lvolumen

==============================
  Logical volume "lvolumen" created
==============================

formateamos  la unidad logica .

 # mkfs.ext3 /dev/volumen/lvolumen

==========================
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
128000 inodes, 256000 blocks
12800 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=264241152
8 block groups
32768 blocks per group, 32768 fragments per group
16000 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
============================

revisamos nuestros volumenes logicos 

# lvs
==================================
  LV       VG         Attr   LSize    Origin Snap%  Move Log Copy%  Convert
  LogVol00 VolGroup00 -wi-ao   19.31G
  LogVol01 VolGroup00 -wi-ao    2.00G
  lvolumen volumen    -wi-a- 1000.00M
=================================

Incrementamos el espacio 

# lvresize -L 1500M /dev/volumen/lvolumen

===============================
  Extending logical volume lvolumen to 1.46 GB
  Logical volume lvolumen successfully resized
===============================

 # resize2fs /dev/volumen/lvolumen 1400M

=============================
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/volumen/lvolumen to 358400 (4k) blocks.
The filesystem on /dev/volumen/lvolumen is now 358400 blocks long.
============================

después de hacer este paso, como medida precautoria tenemos que revisar la particion .

# e2fsck -f /dev/volumen/lvolumen

===========================
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/volumen/lvolumen: 11/176000 files (9.1% non-contiguous), 10014/358400 block
===========================
revisamos como quedo nuestro volumen 
# lvs
=============================
 LV       VG         Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  LogVol00 VolGroup00 -wi-ao 19.31G
  LogVol01 VolGroup00 -wi-ao  2.00G
  lvolumen volumen    -wi-a-  1.46G
=============================

editamos el punto de montaje /etc/fstab   para montaje automatico al arranque o podemos hacer uso del auto.misc .. como mejor les parezca .





lunes, 8 de marzo de 2010

De nuevo "Logran romper cifrado RSA de 1024 bits"

Un nuevo hito ha sido alcanzado en lo que refiere a vencer sistemas criptográficos de clave pública, ya que se ha logrado quebrar un cifrado RSA de 1024 bits.

RSA (que viene de Rivest, Shamir y Adleman, que lo publicaron por primera vez) es un sistema criptográfico de clave pública desarrollado en 1977, y que aún es el primer y más utilizado algoritmo de este tipo y es válido tanto para cifrar como para firmar digitalmente. La última vez que había sido crackeado fue el 7 de enero de 2010, y aquella vez la base era de 768 bits.


El nuevo hito fue alcanzado por Valeria Bertacco, Todd Austin y Andrea Pellegrini. Esto se logró variando los niveles de tensión enviados al destinatario para generar cifrados defectuoso. Esto les ayudó a recrear la clave privada mediante la combinación de una serie de fragmentos obtenidos en el proceso. La operación tomó nada más y nada menos que 100 horas. Esto significa que un algoritmo que debería resistir ataques de fuerza bruta no duró más de 4 días.

Esto hace tambalear uno de los pilares del RSA, y en mayor o menor medida nos afecta a todos, pues es el sistema utilizado para cifrar la mayoría de las conexiones seguras en línea, desde comercio electrónico a la forma en la que ingresamos a nuestro webmail. Y aunque la longitud de la clave determine el nivel de seguridad, esta grieta es independiente de la misma, y se desmorona ante un método bastante básico y fácil de volver a implementar.

Se espera que se realicen cambios en la aplicación de RSA en poco tiempo; hasta entonces, no tenemos nada más que hacer que esperar.

fuente aqui

miércoles, 3 de marzo de 2010

SELinux

ahora vamos a hablar un poquito de SELinux, Security Enhnaced Linux,

SELinux proporciona un sistema flexible de control de acceso mandatorio (mandatory access control, MAC) incorporado en el kernel. Bajo Linux estándar se utiliza el control de acceso a discrecional (discretionary access control, DAC), en el que un proceso o aplicación ejectutándose como un usuario (UID o SUID) tiene los permisos y de ese usuario en los objetos, archivos y otros procesos. Al ejecutar un kernel SELinux MAC se protege al sistema de aplicaciones maliciosas que pueden perjudicar o destruir el sistema. SELinux define el acceso y los derechos de transición de cada usuario, aplicación, proceso y archivo en el sistema. SELinux gobierna la interacción de estos sujetos y objectos usando una política de seguridad que especifica cuán estricta o indulgente una instalación de Red Hat Enterprise Linux dada debería de ser.


En su mayor parte, SELinux es casi invisible para la mayoría de los usuarios. Solamente los administradores de sistemas se deben de preocupar sobre lo estricto que debe ser una política a implementar en sus entorno de servidores. La política puede ser tan estricta o tan indulgente como se requiera, y es bastante detallada. Este detalle le dá al kernel SELinux un control total y granular sobre el sistema completo.


Cuando un sujeto, tal como una aplicación, intenta acceder a un objeto tal como a un archivo, el servidor de aplicación de políticas verifica un caché de vector de acceso (AVC), donde se registran los permisos de objeto y del sujeto. Si no se puede tomar una decisión basado en los datos en el AVAC, la petición continua al servidor de seguridad, el cual busca el contexto de seguridad de la aplicación y del archivo en una matriz. Los permisos son entonces otorgados o negados, con un mensaje de avc: denied detallado en /var/log/messages. Los sujetos y objetos reciben su contexto de seguridad a partir de la política instalada, que también proporciona información para llenar la matriz de seguridad del servidor.

Además de ejecutarse en un modo impositivo, SELinux puede ejecutarse en un modo permisivo, donde el AVC esverificado y se registran los rechazos, pero SELinux no hace cumplir esta política.


veamos algo basico de SELinux

el archivo de configuración principal de selinux se encuenta /etc/sysconfig/selinux, donde podemos definir el nivel de seguridad que aplicara SELinux

SELINUX=(enforcing|permissive|disabled) (impositivo,advierte pero no impone, deshabilidado).
SELINUXTYPE=(targeted|strict) ( solo servicios especificos, todo )

para activar boleanos de manera grafica podemos utilizar "system-config-securitylevel" otras herramientas que nos pueden servir son "/usr/bin/setenforce (1|0)" el cual habilita y deshabilita SELinux, el comando "/usr/bin/sestatus -v" verificara el estado de SELinux, "/sbin/fixfiles" verifica y corrige errores en políticas en los archivos.


Veamos un ejemplo, para nfs, en modo targeted, habilitaremos "use_nfs_home_dirs"

# ls /selinux/booleans/ | grep nfs
========================

allow_ftpd_use_nfs
allow_nfsd_anon_write
httpd_use_nfs
nfsd_disable_trans
nfs_export_all_ro
nfs_export_all_rw
qemu_use_nfs
samba_share_nfs
use_nfs_home_dirs
virt_use_nfs

=======================

al tener localizado el boleano necesario ejecutamos

# setsebool -P use_nfs_home_dirs 1

y habilitaremos la regla en se linux, lo difícil de esto es saber que regla tenemos que habilitar o desactivar que ponga en riesgo nuestro.

ahora en los directorios también se manejan LABELS , para esto tenemos el comando "chcon", el cual tiene usuario: rol : tipo . veamos un ejemplo

# ls -Z /var

=====================
user : rol : tipo
drwxr-xr-x root root system_u:object_r:var_spool_t spool
drwxrwxrwt root root system_u:object_r:tmp_t tmp
drwx------ root root system_u:object_r:var_t tux
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t www
drwxr-xr-x root root system_u:object_r:var_yp_t yp

====================

para cambiar estas características ejecutamos chcon con las opciones (u,r,t) el comando tiene mas opciones les recomiendo echarles una revisada .

crearemos otro folder para web con los mismos labels igual al /var/www/html

# mkdir /var/web
# chcon -R -u system_u -r object_r -t httpd_sys_content_t /var/web
# ls -Z /var/web

debe ser exactamente igual al www .

Muchas veces requeriremos hacer cambios en los puertos y que SELinux nos permita conectarnos a dichos puertos a requerir un servicio, en este caso seguiremos con el servidor web, antes de esto debemos modificar nuestros demonios y nuestro firewall.

# semanage port -a -t http_port_t -p tcp 81

hacemos un listado de los puertos permitidos por SELinux

# semanage port -l


Muchas ocasiones nos encontraremos con algunos problemas con SELinux, los problemas mas comunes son :

archivos con Label erronea
procesos corriendo bajo una directiva incorrecta
un bug en la política aplicada, o políticas que sobreponen a otra
Intento de intrusion.

Para solucionarlas hay que poner especial atencion a los logs que se estan generado, los logs por default son generados /var/log/audit/audit.log o en algunos casos /var/log/messages, los logs son etiquetados con "AVC" por lo cual son faciles de filtrar de otros mensajes. esitesn herramientas que peden hacernos la vida mas sencilla ejemplos

# sealert -b

o si requerimos un archivo para anlizar en forma de texto ..

# sealert -a /var/log/audit/audit.log > /my/archivo.txt




espero les sirva esta pequeña explicación de SELinux

martes, 23 de febrero de 2010

Amanda Centos 5

En este manual veremos como controlar nuestros respaldos remotamente con amanda.
en mi caso tengo 2 servidores importantes que tengo información la cual la guardare en 3ro para evitar perdida de información por algún incidente de seguridad .

Paso1 instalar amanda .
como lo hemos venido haciendo utilizaremos yum para instalarlo

# yum -y install amanda*

paso 2

habilitamos amanda, este paquete se agrega en el xinetd.d asi que tendremos que cambiar el parametro Disable = yes a Disable = no


# vi /etc/xinetd.d/amanda
# vi /etc/xinetd.d/amandaidx
# vi /etc/xinetd.d/amidxtape

paso 4:

Copiamos los archivos /etc/amanda/DailySet1 a /etc/amanda/intra

# cp -r /etc/amanda/DailySet1 /etc/amanda/intra


editamos el archivo de configuración para hacerlo en tapes virtuales


# vi /etc/amanda/intra/amanda.conf

en este archivo los parametros que debemos modificar son los siguientes

======================

org "Configuration name"
mailto "email"
netusage 600 Kbps

dumpcycle 1 weeks # semanas para hacer full bk
runspercycle 10
tapecycle 15 tapes

tpchanger "chg-disk" #

changerfile "/etc/amanda/intra/changer"


tapedev "file:/backup/intra/slots" # especifica donde se guardara el bk

tapetype HARDDISK
define tapetype HARDDISK {
comment “Backup to Virtual Tape”
length 3072 mbytes # each tape is 3 Gigs
}

amrecover_changer "changer"


infofile "/var/log/amanda/intra/curinfo" # database DIRECTORY
logdir "/var/log/amanda/intra" # log directory
indexdir "/var/log/amanda/intra/index" # index directory

===========================

editamos el archivo de /etc/amanda/intra/disklist y agrrgamos el listado de directorios que requerimos respladar ( borramos la linea localhost /etc al final del archivo )

# vi /etc/amanda/intra/disklist

==========================

macro /usr/macropro/EMP01 comp-amanda-tar
macro /usr/macropro/EMP02 comp-amanda-tar
macro /usr/macrorpo/EMP03 comp-amanda-tar
macro /usr/local/PeticionesMPLinea comp-amanda-tar
web /var/www comp-amanda-tar
========================


creamos el directorio de respaldo

# mkdir -p -m 770 /backup/intra/slots
# chown -R amanda:disk /backup


creamos la lista de cintas

# touch /etc/amanda/intra/tapelist
# chown –R amanda:disk /etc/amanda/intra

entramos al usuario de amanda

# su -l amanda

creamos los directorios de cintas virtuales

# cd /backup/intra/slots
# for ((i=1; $i<=15; i++)); do mkdir slot$i; done
# ln -s slot1 data

hacemos una prueba de las cintas virtuales de respaldo

# /usr/sbin/ammt -f file:/backup/intra/slots status
file:/backup/intra/slots status: ONLINE

etiquetamos las cintas virtuales

# for ((i=1; $i<=15; i++)); do /usr/sbin/amlabel intra intra-$i slot $i; done

changer: got exit: 0 str: 1 file:/backup/intra/slots
labeling tape in slot 1 (file:/backup/intra/slots):
rewinding, reading label, not an amanda tape (Read 0 bytes)
rewinding, writing label intra-1, checking label, done.

reseteamos las cintas

# /usr/sbin/amtape intra reset

changer: got exit: 0 str: 1
amtape: changer is reset, slot 1 is loaded.

editamos el archivo /var/lib/amanda/.amandahosts para permitir comunicacion a los clientes y agregamos los nombres que configuramos en el hosts

#vi /var/lib/amanda/.amandahosts

salimos del usuario amanda y reiniciamos el xinetd

# exit
# service xinetd restart

verificamos que el proceso este corriendo

# lsof | grep amanda

xinetd 27247 root 5u IPv4 20076390 UDP *:amanda
xinetd 27247 root 6u IPv4 20076391 TCP *:amandaidx

con esto tenemos configurado el servidor .. ahora configuraremos el cliente


descargamos la aplicacion cliente en nuestro cliente utilizando yum

# yum -y install amanda-client

editamos el archivo de acceso al cliente /var/lib/amanda/.amandahosts

# vi /var/lib/amanda/.amandahosts

=======================
servidor amanda
=======================

habilitamos amandan en el xinetd.d

# vi /etc/xinetd.d/amanda

=====================
service amanda
{
socket_type = dgram
protocol = udp
wait = yes
user = amanda
group = disk
server = /usr/lib64/amanda/amandad
disable = no
}

=====================

reiniciamos el servicio o verificamos que este funcionando amanda

# service xinetd start
# lsof | grep amanda

xinetd 24713 root 5u IPv4 58195223 UDP *:amanda

agregamos al cron los respaldos a la hora que requerimos que se realizen

vi /etc/crontab

======================

0 16 * * 1-5 amanda /usr/sbin/amcheck -m intra
45 0 * * 2-6 amanda /usr/sbin/amdump intra

======================


recuperamos información de amanda

preparamos la cinta a ser leida

# cd /tmp
# /usr/sbin/amtape intra slot 1
# /usr/sbin/ammt -t file:/backup/intra/slots rewind

para restaurar todo lo respaldado ejecutamos lo siguiente

# /usr/sbin/amrestore file:/backup/intra/slots

para restaurar solo una parte en especifico

# /usr/sbin/amrestore file:/backup/intra/slots web /var/www

domingo, 7 de febrero de 2010

Analizar Vulnerabilidades con Openvas

Open vas es un escaner de vulnerabilidades de red, es muy util cuando estamos realizando un análisis de riesgo , dentro de los analisis de riesgo tenemos que incluir  las debilidades logicas .

paso 1 :  instalar  Openvas

para instalar openvas podemos bajar el taz.gz directo del sitio oficial o ayudarnos de algún repositorio oficial reconocido por el sitio, en nuestro caso lo instalaremos via repositorio, ya que en mi persepcion los paquetes deben tener 1 sola forma de administrarse, en el caso que no exista  algún repositorio oficial recomiendo nosotros mismos construir nuesto rpm, el cual no es el objetivo de este manual.


Instalamos la PGP del sitio autorizado.

# rpm --import http://www.atomicrocketturtle.com/RPM-GPG-KEY.art.txt

instalamos  los archivos del deposito .


# lynx -source http://www.atomicorp.com/installers/atomic.sh | sh
============================
Atomic Archive installer, version 1.1
Configuring the [atomic] yum archive for this system

Installing the Atomic GPG key: OK
Downloading atomic-release-1.0-11.el5.art.noarch.rpm: OK

Would you like to add the Plesk yum repository to the system?

Enable Plesk repository? (y/n) [Default: n]: y

Plesk 8.6 and 9.2 repositories are available:
NOTE: Plesk 9 repos are only available for rhel/centos 4 and 5

Enable Plesk 8.6 or 9.2? (8/9) [Default: 8]: 9


The Atomic Rocket Turtle archive has now been installed and configured for your system
The following channels are available:
  atomic          - [ACTIVATED] - contains the stable tree of ART packages
  atomic-testing  - [DISABLED]  - contains the testing tree of ART packages
  atomic-bleeding - [DISABLED]  - contains the development tree of ART packages
================================

Instalamos los paquetes necesarios para openvas.

# yum -y install openvas-libraries openvas-libnasl openvas-server openvas-plugins openvas-client openvas-scanner

al  terminar la instalacion , corremos el siguiente comando.

# openvas-mkcert

===========================================
-------------------------------------------------------------------------------
                        Creation of the OpenVAS SSL Certificate
-------------------------------------------------------------------------------

This script will now ask you the relevant information to create the SSL certificate of OpenVAS.
Note that this information will *NOT* be sent to anybody (everything stays local), but anyone with the ability to connect to your OpenVAS daemon will be able to retrieve this information.


CA certificate life time in days [1460]:
Server certificate life time in days [365]:
Your country (two letter code) [DE]: mx
Your state or province name [none]: bc
Your location (e.g. town) [Berlin]: ens
Your organization [OpenVAS Users United]: na

-------------------------------------------------------------------------------
                        Creation of the OpenVAS SSL Certificate
-------------------------------------------------------------------------------

Congratulations. Your server certificate was properly created.

/etc/openvas/openvassd.conf updated
The following files were created:

. Certification authority:
   Certificate = /var/lib/openvas/CA/cacert.pem
   Private key = /var/lib/openvas/private/CA/cakey.pem

. OpenVAS Server :
    Certificate = /var/lib/openvas/CA/servercert.pem
    Private key = /var/lib/openvas/private/CA/serverkey.pem

Press [ENTER] to exit

===========================================

Agregamos un usuario  para nuestro analizador 

# openvas-adduser

Nota:  para agregar reglas a los usuarios podemos leer el manual  con
# man openvas-adduser


=============================
Using /var/tmp as a temporary file holder.

Add a new openvassd user
---------------------------------


Login : enduser
Authentication (pass/cert) [pass] : pass
Login password :
Login password (again) :
Passwords do not match!
Login password :
Login password (again) :

User rules
---------------
openvassd has a rules system which allows you to restrict the hosts that enduser has the right to test.
For instance, you may want him to be able to scan his own host only.

Please see the openvas-adduser(8) man page for the rules syntax.

Enter the rules for this user, and hit ctrl-D once you are done:
(the user can have an empty rules set)
Login             : enduser
Password          : ***********

Rules             :


Is that ok? (y/n) [y] y
user added.

===========================

El siguiente paso es actualizar los plugins, correrá un alista muy grande. así que tengan paciencia  

# openvas-nvt-sync
===========================
sent 514645 bytes  received 66691961 bytes  327039.45 bytes/sec
total size is 64891003  speedup is 0.97
[i] Checking dir: ok
[i] Checking MD5 checksum: ok
===========================

Ya actualizados todos los plugins , procedemos a correr el server de openvas

# openvassd
All plugins loaded

este proceso puede demorar algunos segundos dependiendo de la capacidad del equipo.

y el paso final . correr el cliente .

entramos en una terminarl vnc o podemos utilizar xterm para correr sesiones remotas .

# OpenVAS-Client

y comenzamos a trabajar .. 

lunes, 1 de febrero de 2010

Como Configurar VirtualBox en centos 5

Virtual box es un desarrollo para virtualizaciones en paralelo desarrollada por SunMicrositem ( creo que ahora es oracle ) por fortuna para todos nosotros esta en un constante evolución, asi que tendremos que estar al pendiente de las  versiones mas recientes .

Para tener mayor domino de Virtualbox recomiendo leer el manual de sitio, virtualbox es un producto similar a Xen, así que yo lo recomiendo como una alternativa sencilla de utilizar en fase experimental, no con fines de virtualizar servidores de misión critica. Sin embargo es mi opinion personal, pero sin duda es una aplicacion tan robusta  como  la antes mencionada

entrando ya en materia podemos visitar el sitio oficial para verificar la ultima versión.

Paso 1:

descargar la firma digital de la aplicacion e instalarla

# rpm --import http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc

Descargamos el deposito destinado para nuestra distribución.

# cd /etc/yum.repo.d/
# wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo

Instalamos la paqueria necesaria para que Virtualbox modifique la informacion del Kernel .

# yum -y update gcc glibc-devel kernel kernel-devel SDL qt

Nota: en este paso debemos asegurarnos que los fuentes y el Kernel sean las mismas versiones, existen versiones PAE, en el cual tenemos que cambiar la linea de comando

# yum -y update gcc glibc-devel kernel kernel-PAE-devel SDL qt

En una instalación me toco el caso que no encontraba las fuentes y me di cuenta que habia una diferencia en el folder y lo solucione escribiendo lo siguiente.

#export KERN_DIR=/usr/src/kernels/`uname -r`-i686

existen algunos casos mas graves que deberan seguir las siguientes instrucciones . y resarle a su mejor santo

Instalamos VirtualBox

# yum -y VirtualBox-3.1

cada vez que se actualiza el Kernel debemos de  bajar los devel , y recompilar de nuevo ( también me ocurría   con VMWare asi que ya estarán algunos acostumbrados  ).  Para hacer este proceso,  debemos correr el siguiente comando.

# /etc/init.d/vboxdrv setup

el sistema devolvera algo como esto

==========================

Stopping VirtualBox kernel module                          [  OK  ]
Recompiling VirtualBox kernel module                     [  OK  ]
Starting VirtualBox kernel module                            [  OK  ]
=========================

Paso 2:

Instalar nuestro sistema operativo huesped. Podemos hacer uso de vnc  para instalar  en una xterm ejecutamos el comando .

# VirtualBox

correra un wizard sencillo de instalación de nuestro sistema operativo huesped.

o podemos utilizar comandos para instalarlo de modo texto

# VBoxManage createvm --name "Windows8k" --register
# VBoxManage modifyvm "Windows8k" --memory 1024 --acpi on --boot1 dvd --nic1 bridged --bridgeadapter1 eth0
# VBoxManage createhd --filename /home/user/Windows8k.vdi --size 20000 --register
# VBoxManage storagectl "Windows8k" --name "IDE Controller" --add ide
# VBoxManage storageattach "Windows8k" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium Windows8k.vdi
# VBoxManage storageattach "Windows8k" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium /home/user/W8k.iso

Nota para hacer un iso apartir de un cd o dvd hacemos lo siguiente

# dd if=/dev/hdX of=/home/user/W8k.iso

Paso 3: la red

En el wizard tenemos la opcion de instalar interfaz de red con nuestra maquina virtual .  la cual se muestran de la sig manera .

# ifconfig

==================


vboxnet0  Link encap:Ethernet  HWaddr 0A:00:27:00:00:00
          inet addr:10.10.1.34  Bcast:10.10.1.255  Mask:255.255.255.0
          inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:5606 (5.4 KiB)

===================

y con esto podemos tener acceso , a nuestro sistema huesped de cualquier parte de nuestra red .

paso 4: Autostart

en muchas ocasiones es necesario poner nuestro sistema huesped en producion y que este no tenga ninguna intervención humana para correr ,  para virtualbox he visto varias formas de hacer que esto ocurra ( como en las matemáticas muchos métodos pueden llegar a el mismo resultado) la forma mas sencilla es coloconado un comando en los rc.local

editamos el archivo rc.local

#vi  /etc/rc.local

=================================

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
VBoxManage startvm "Nombre de la secion" -type vrdp
============================

pero aqui les comparto una liga donde indica como hacer funcionar mas de 1 maquina virtual con virtualbox

martes, 19 de enero de 2010

Gobierno, Riesgo, Cumplimiento: Gestión de Políticas de Métodos y Herramientas

Que tal haciendo mi trabajo encontre el siguiente documento que me parecio interesante y quiero compartir con ud. el unico pero que le pongo es que esta orientado hacia una marca .
Sponsored by Symantec.



  • Identificar vulnerabilidades.
  • Implementar controles para mitigar las amenazas .
  • Cumplimiento regulario para nuestras organizaciones.
para leer mas al respecto  presiona aqui

Liga de Interes

Que tal, hace tiempo instale asterisk para suplir un equipo cisco y venderlo .. bueno el equipo nunca se vendió pero conocí la potencia de asterisk en una parte ya que no hemos adquirido las tarjetas para usarlo como conmutador pero nos ha sido de utilidad para realizar llamadas entre las distintas sucursales con alta calidad .

estos días me di la tarea de actualizar la aplicación y me encontré con un sitio provisto de mucha información interesante acerca de asterisk . les comparto la liga y espero que sea de utilidad .

http://www.voztovoice.org/

lunes, 18 de enero de 2010

Servidor de mensajeria instantanea Open Fire en Centos

Openfire es un real time collaboration (RTC) server bajo la licencia Open Source GPL. Es usado y ampliamente aceptado para mensajería instantánea utilizando protocolo XMPP ( también llamado JABERD) OpenFire es una suite fácil de administrar e instalar . Recomendada para empresas que desean tener seguridad en sus comunicaciones.

Para instalar openfire requerimos de la paqueteria de Java SE Development Kit , que se puede descargar del sitio oficial.

# wget http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-6u18-linux-i586.bin

la versión que ese esta utilizando es la 6u18, pero continuamente las estan cambiand .asi que se recomienda revisar el sitio.

cambiamos los permisos de ejecución del archivo descargado e instalamos

# chmod 777 jdk-6u18-linux-i586.bin
# ./jdk-6u18-linux-i586.bin

============================================

For inquiries please contact: Sun Microsystems, Inc., 4150
Network Circle, Santa Clara, California 95054, U.S.A.


Do you agree to the above license terms? [yes or no]

yes

.
.
.

For more information on what data Registration collects and
how it is managed and used, see:
http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html

Press Enter to continue.....
Done.

============================================

verificamos que java este corriendo

# java -version

deberá devolver la versión que esta corriendo de java

descargamos la version mas reciente de openfire

# wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire-3.6.4-1.i386.rpm

instalamos el rpm descargado

# rpm -ivh openfire-3.6.4-1.i386.rpm

verificamos si tenemos instalado MySql

# rpm -qa | grep mysql

si tenemos resultado no hay mas que preocuparse en caso contrario .

# yum -y install mysql mysql-server mysql-devel


arrancamos MySql

# service Mysql start

asignamos password al usuario root en mysql ( en caso que sea instalacion nueva)

# mysql -u root

mysql mysql> SET PASSWORD FOR root@localhost=PASSWORD('root_password');
>Query OK, 0 rows affected (0.25 sec)
mysql> create database openfire;
>Query OK, 1 row affected (0.01 sec)
mysql> grant INSERT,SELECT on root.* to openfire@localhost;
>Query OK, 0 rows affected (0.02 sec)
mysql> SET PASSWORD FOR openfire@localhost=PASSWORD('tu_pass');
>Query OK, 0 rows affected (0.25 sec)
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on openfire.* to openfire@localhost;
>Query OK, 0 rows affected (0.02 sec)
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on openfire.* to openfire;
>Query OK, 0 rows affected (0.02 sec)
mysql> exit
>Bye

agregamos las tablas necesarias para trabajar con openfire

# mysql openfire < /opt/openfire/resources/database/openfire_mysql.sql -u openfire -p

abrimos los puertos necesarios para que permita trabajar openfire en mi caso utilizo shorewall

# vi /etc/shorewall/rules

========================================

ACCEPT all all tcp 5223,9090,9091
=======================================

# shorewall restart
# service iptables save

y entramos a la pantalla de adminitracion en un navegador

http://localhost:9091

y configuramos los para metros deseados

Usuarios Facebook entran a cuentas ajenas por error

Un madre y sus dos hijas en el estado de Georgia se conectaron a Facebook con sus teléfonos celulares el fin de semana pasado y terminaron en un lugar inesperado: las cuentas de extraños, en las que tenían acceso completo a gran cantidad de información privada.

Causada por un problema de tráfico de comunicaciones de la compañía de celulares de la familia, AT&T, la falla puso en evidencia un problema de seguridad que puede tener consecuencias muy amplias para todos los que usan internet y no sólo los usuarios de esa red social.

Lo que sucedió fue que internet perdió el control sobre quién era quién y mandó a las mujeres a cuentas ajenas. No parece que ellas podrían haber hecho nada para cambiar la situación.

El problema vuelve más serias las advertencias de los investigadores de que hay muchas maneras en que la información puesta en la red se puede usar de manera perjudicial.

Varios expertos en seguridad en línea dijeron que nunca habían oído de casos similares y no está claro si éstos son infrecuentes o la gente simplemente no los denuncia. Pero los especialistas advirtieron que lo mismo podría suceder con cuentas de correo electrónico o que también podría ocurrir en una computadora y no sólo en un teléfono.

"El hecho de que sucedió prueba que podría suceder de nuevo y con algo mucho más importante que Facebook", dijo Nathan Hamiel, fundador del grupo de investigación Hexagon Security Group.

Candace Sawyer, de 26 años, dijo que sospechó que algo andaba mal cuando intentó entrar a su página de Facebook la mañana del sábado y su teléfono Nokia la mandó al sitio sin pedirle nombre de usuario ni contraseña. La cuenta a la que entró no parecía la suya hasta que encontró la foto del dueño de la página.

"El es blanco, yo no", dijo riendo.

Se desconectó y les pidió a su hermana Mari, de 31 años, y su madre Fran, de 57, que intentaran lo mismo en sus teléfonos. Las dos ingresaron a cuentas de extraños.

El problema no era de los teléfonos sino de la infraestructura que los conecta con internet, por lo que el problema se vuelve más grave.

sábado, 16 de enero de 2010

¿Cuáles son las tres principales técnicas de intrusión de red utilizados por los hackers para ocultar sus huellas?

Las tres principales técnicas utilizadas por los HACKERS para cubrir sus huellas después de una intrucion a una red son el borrado de Logs, usar metodos de encriptacion para datos robados de la organización e instalación de rootkits. Todo esto para no llamar la atencion sobre ellos. Muchos de los ataques conocidos en las noticias recientemente se han identificados por el uso de dichas tecnologías por los atacantes.

El borrado de los logs ayuda a los atacantes cubrir sus huellas y haces mas difícil la investigación forense para identificar por donde y que han accesado los atacantes.El uso de tenicas de encriptamiento de datos para enviar datos fuera de la organización por ejemplo usar conexiones SSL sobre el puerto 443 permite a los atacantes ocultar sus actividades incluso de los detectores de intrusos, el trafico saliente de la red se disimula y pasa desapercibido para la mayoría de las protecciones instaladas haciendo que el robo de los datos probablemente pase sin ser detectada y sea desconocido los datos robados. La instalación de Rootkits ayuda a los hakers evitar ser detectados cuando estan realizando actividades ilícitas o a evitar que sean detectado la forma que ingresaron al equipo local. Los rootkits son dicenados para ser indetectables, permiten al atacante inspeccionar tranquilamente el sistema y explotar alguna vunerabilidad en el.


Los expertos en seguridad pueden combatir este tipo de técnicas usando logs review, centralizando el sistema de logs, usando patrones de comportamiento en las redes para detectar comportamientos anormales, y utilizar software para monitorear al integridad de nuestros archivos importantes. Estas son algunas de las tecnicas usadas para detectar actividad no deseada en nuestros sistemas pero regularmente no siempre es correctamente administrada. Desarrollar una adecuada estrategia de revicion de logs, puede ayudarnos a prevenir y detectas cuando nuestro equipo este siendo comprometido por un agente atacante. El centralizado de los logs o mecanismos que prevengan la manipulacion de los logs evita que que un atacante borre su actividad dentro de nuestro sistema. Mantener los horarios de nuestros equipos sincronizados puede ayudarnos a manter un track de las actividades realizadas en caso de que se comprometieron diversos dispositivos en nuestra red.

Network-based anomaly detection (NBAD), identifica cuando un sistema comprometido se comunica con otro sistema no autorizado o desconocido ( patrones de trafico ). Esta tecnología puede identificar una intrucion incluso en tiempo real , por ejemplo si en nuestro patrón detectamos que nuestro sistema se esta comunicando con otro equipo a travez de internet por un medio encriptado SSL, nuestro sistema estara informando que se esta realizando una actividad que no es normal en nuestro sistema, El uso de monitores de integridad de archivos pueden ayudarnos a detectar cuando un archivo ha sido comprometido y detectar si puede estar siendo parte del rootkit y enviar información privilegiada a nuestro atacante, un ejemplo de esto puede ser cuando un atacante obtuvo acceso a nuestro sistema y realizo un alias del comando su -, al ser utilizado el sistema envia el mensaje al atacante con las credenciales de root y asi ganara privilegios en nuestro sistema . lo mismo puede ocurrir con bases de datos o aplicaciones criticas de nuestra empresa .

Microsoft combate la pornografía infantil mediante nueva tecnología

Comparto esta noticia con ud, es algo en la cual debemos trabajar todos para erradicar este cáncer de la sociedad. Yo no soy muy afecto a usar productos de Microsoft, pero con acciones como esta estoy seguro que adquiriré un producto de ellos ( solo 1 ).

Microsoft ha creado y donado una nueva tecnología que tiene el potencial de marcar una diferencia drástica en la lucha contra la distribución de pornografía infantil por Internet.

La mayoría de la gente nunca estará expuesta a fotografías de niños que están siendo abusados sexualmente por depredadores, pero las imágenes de esos abusos se pueden encontrar en los oscuros rincones del mundo en línea, donde las redes de violadores de niños y de consumidores de pornografía infantil producen y distribuyen fotografías de niños victimizados.



El pasado 15 de diciembre Microsoft donó una nueva tecnología al Centro Nacional para Menores Desaparecidos y Explotados (NCMEC) Estados Unidos, que tiene el potencial de marcar una diferencia drástica en la lucha contra la distribución de pornografía infantil por el Internet.

Christian Linacre, Gerente de Seguridad y Privacidad para Microsoft Latinoamérica, explica que los proveedores de servicios en línea están obligados por ley a reportar dichas imágenes cuando las encuentran. “Pero sólo algunos proveedores las buscan activamente en sus servicios en parte debido a los retos tecnológicos que representa identificar dichas imágenes de forma confiable de entre los millones de fotografías que se comparten cada día, y debido a que las fotografías se vuelven difíciles de identificar cuando se alteran incluso de la manera más sencilla".

Para resolver este problema, Microsoft Research creó una tecnología llamada PhotoDNA que permite calcular la firma digital única. “PhotoDNA permite calcular el “ADN", por así decirlo, de cualquier imagen y después hacer coincidir dicha firma con la de otras fotografías", explica Linacre. “La técnica de “hashing robusto" de PhotoDNA es diferente a otras tecnologías hashing comunes ya que no requiere que las características de la imagen sean totalmente idénticas para encontrar imágenes que coincidan, permitiendo ser identificadas incluso cuando las fotografías han cambiado de tamaño o han sido alteradas".

La tecnología PhotoDNA, fue creada en un principio por Microsoft Research y más tarde perfeccionada por Hany Farid, experto en imágenes digitales y profesor de ciencias de la computación en Dartmouth College, para ayudar al NCMEC en sus esfuerzos de encontrar copias ocultas de las peores imágenes de explotación sexual infantil conocidas hasta la fecha.

Ernie Allen, presidente y CEO del NCMEC, afirma que el problema de la pornografía infantil había quedado resuelto a finales de los años 80, ya que el Tribunal Superior de E.U.A. declaró que no se trataba de libertad de expresión, sino que constituía abuso infantil. Las autoridades ya habían desarticulado su distribución e importación. Pero entonces llegó el Internet.

“Hace 20 años pensábamos que este problema había desaparecido", dice Allen. “Aunque maravilloso y poderoso, el Internet ha creado una oportunidad para que las personas se relacionen con otras que comparten sus mismos intereses y accedan, en la privacidad de sus hogares, a contenido que antes representaba un riesgo salir a las calles a comprar".

En la actualidad, comenta Allen, el problema se está agravando. Desde el 2003, el NCMEC ha revisado y analizados unos 30 millones de imágenes y videos de pornografía infantil. Dichas fotografías de abuso sexual se confiscan de pedófilos que venden las imágenes ilegales y forman comunidades que refuerzan su interés común en los niños.

Allen afirma que la línea cibernética de denuncias del NCMEC ha atendido 750,000 informes de explotación sexual infantil y pornografía infantil recibidos del público y de proveedores de servicios de Internet. “Revisamos 250,000 imágenes a la semana", dice Allen. “Eso significa que se trata de un problema masivo".

NCMEC ha trabajado con las autoridades para identificar muchas de las peores imágenes de abuso y explotación sexual infantil. Conforme pasan de pedófilo en pedófilo, muchas de esas imágenes surgen en repetidas ocasiones durante las investigaciones de pornografía infantil. “Nuestro objetivo es detener la victimización", comenta Allen. “Con PhotoDNA podremos comparar esas imágenes y trabajar con los proveedores de servicios de Internet de todo el país para detener la redistribución de las fotografías".

Fuente: Microsoft.