domingo, 22 de marzo de 2009

OSSEC 2.0 un buen analizador de logs para Linux

OSSEC es un IDS Open Source, analiza los logs del sistema, la integridad de archivos, con políticas de supervisión, detección de rootkit, alerta en tiempo real y respuesta activa.

Funciona en los siguientes sistemas operativos:
  • GNU/Linux (todas las distribuciones, incluyendo RHEL, Ubuntu, Slackware, Debian, etc)
  • Windows XP,2000,2003,Vista,2008
  • VMWare ESX 3.0,3.5 (incluyendo CIS checks)
  • FreeBSD (Todas las versiones)
  • OpenBSD (Todas las versiones)
  • NetBSD (Todas las versiones)
  • Solaris 2.7,2.8,2.9 y 10
  • AIX 5.3 y 5.3
  • HP-UX 10, 11, 11i
  • MacOSX 10
Soporta los siguientes dispositivos a través de syslog remoto
  • Cisco PIX, ASA and FWSM (Todas las versiones)
  • Cisco IOS routers (Todas las versiones)
  • Juniper Netscreen (Todas las versiones)
  • SonicWall firewall (Todas las versiones)
  • Checkpoint firewall (Todas las versiones)
  • Cisco IOS IDS/IPS module (Todas las versiones)
  • Sourcefire (Snort) IDS/IPS (Todas las versiones)
  • Dragon NIDS (Todas las versiones)
  • Checkpoint Smart Defense (Todas las versiones)
  • McAfee VirusScan Enterprise (v8 y v8.5)
  • Bluecoat proxy (all versions)
  • Cisco VPN concentrators (Todas las versiones)
Monitorización de bases de datos:
  • MySQL (Todas las versiones)
  • PostgreSQL (Todas las versiones)
  • Oracle, MSSQL (Muy pronto)
Y otros formatos de logs
  • Unix solo:
    • Unix Pam
    • sshd (OpenSSH)
    • Solaris telnetd
    • Samba
    • Su
    • Sudo
    • Xinetd
    • Adduser/deluser/etc
    • Cron/Crontab
    • Solaris BSM Auditing
    • Dpkg (Debian package) logs
    • Yum logs
  • Servidores FTP:
    • Proftpd
    • Pure-ftpd
    • vsftpd
    • wu-ftpd
    • Microsoft FTP server
    • Solaris ftpd
    • Mac OS FTP server
  • Servidores de correo:
    • Imapd and pop3d
    • Postfix
    • Sendmail
    • vpopmail
    • Microsoft Exchange
    • Courier imapd/pop3d/pop3-ssl
    • vm-pop3d
    • SMF-SAV (Sendmail Sender Address Validator)
    • Procmail
    • Mailscanner
  • Servidores Web:
    • Apache web server (logs de acceso y error)
    • IIS 5/6 web server (NSCA y W3C extentido)
    • Zeus web server
  • Aplicaciones Web:
    • Horde imp
    • Modsecurity
  • Firewalls:
    • Iptables firewall
    • Shorewall (iptables-based) firewall
    • Solaris ipfilter firewall
    • AIX ipsec/firewall
    • Netscreen firewall
    • Windows firewall
    • Cisco PIX/ASA/FWSM
    • SonicWall firewall
    • Checkpoint firewall
  • Bases de datos:
    • MySQL
    • PostgreSQL
  • NIDS:
    • Cisco IOS IDS/IPS module
    • Snort IDS
    • Dragon NIDS
    • Checkpoint Smart defense
  • Aplicaciones de seguridad:
    • Symantec Anti Virus
    • Symantec Web Security
    • Nmap
    • Arpwatch
    • McAfee VirusScan Enterprise (v8 and v8.5)
  • Otros:
    • Named (bind)
    • Squid proxy
    • Bluecoat proxy
    • Cisco VPN Concentrator
    • Cisco IOS routers
    • Asterisk
    • Vmware ESX
  • Windows event logs
  • Windows Routing y Remote Access logs
  • Generic unix authentiction (adduser, logins, etc)
Consume muy pocos recursos y envía avisos a través de correo electrónico de las alertas y sus niveles, todo esto es configurable, la instalación es muy sencilla.

Después de descargar OSSEC 2.0 y descomprimir el archivo, con privilegios de root se debe ejecutar "./install.sh"

Después ejecutar el siguiente comando para arrancarlo:

/var/ossec/bin/ossec-control start

Hay mucha información y muy detallada de su funcionamiento en la página oficial de Ossec, la seguridad total es imposible de conseguir, pero con esta herramienta podemos estar algo más tranquilos.

domingo, 8 de marzo de 2009

Bloquear IP en Linux (Fedora 10)

Es muy útil bloquear puntualmente a ciertas IPs molestas, que por ejemplo no paran de hacer ataques de denegación de servicio cuando tenemos el emule, o cualquier tipo de ip molestas con actividades molestas.

Sin necesidad de utilizar IPTABLES directamente, de una forma más sencilla podemos hacerlo con el archivo rc.firewall.blocked situado en /etc/rc.d y una lista de ips plana como la siguiente.

Este es un ejemplo de rc.firewall.blocked:
111.222.333.111 # Comentario sobre la ip
444.555.666.777 # algún comentario más
# Es recomendable anotar el motivo de cada denegación.

Paso 1
Crear el archivo rc.firewall.blocked ( touch /etc/rc.d/rc.firewall.blocked ) y dentro anotar todas las ips que queramos bloquear.

Por ejemplo pongamos una serie de ips a bloquear.
89.254.45.9 # Web de Cracker prioridad 01.
87.231.11.5 # Web Spam prioridad 5.
#84.34.144.4 # Temporalmente desactivada, verificar el log.
Con las anotaciones podemos recordar porque se denego y que futuras acciones se deben tomar con ips sospechosas.

Paso 2
Una vez que se ha creado el archivo rc.firewall.blocked es hora de darle permisos y cambiar el propietario a root.

Para hacer este archivo ejecutable y cambiarle los permisos y el propietario ejecutar los siguientes comandos:

[root@nexus7 /]# chmod 644 /etc/rc.d/rc.firewall.blocked
[root@nexus7 /]# chown 0.0 /etc/rc.d/rc.firewall.blocked

sábado, 28 de febrero de 2009

Terminal en dolphin de KDE4.2

El otro día me comentó un amigo el problema que tuvo en su linux, para ser mas exactos en su escritorio KDE 4.2, más que un problema fue una mala pata.


Actualmente en el escritorio KDE existe una funcionalidad muy útil para acceder a un terminal bajo dolphin, es cómodo porque permite situarte en cualquier carpeta con solo seleccionar la ruta en el arbol de directorios de forma grafica.

Ahora vamos a hacer la prueba:
  1. Abrir un explorador de archivos dolphin 2. Pulsar F4, se abrirá en la parte inferior de la ventana un terminal.
  2. En el terminal seleccionar una carpeta para introducir el siguiente comando (mkdir prueba).
  3. Escribir en el terminal (rm -rf ).
  4. Pulsar en la parte gráfica la nueva carpeta creada. (Atención solo pulsar en la carpeta que acabamos de crear llamada Prueba.)


Como puede ver se auto rellena el comando a medio construir con la ruta pulsada y elimina la carpeta.

Imagínese si por casualidad pulsa en una partición donde tiene datos importantes, quien sabe el ratón es algo enigmático en ocasiones.

Mucho cuidado todo puede pasar.

viernes, 20 de febrero de 2009

Cómo crear, eliminar y modificar una partición LVM en linux

LVM es una implementación de un administrador de volúmenes lógicos para el kernel Linux, permite una forma sencilla para repartir los espacios de disco y posteriormente redimensionarlos.

Añadir un nuevo volumen:

[root@nexus7]# vgcreate nombre_grupo_volumenes /dev/sda1

Para añadir a un volumen lógico existente un nuevo disco duro, bastaría con ejecutar el siguiente comando "vgextend":

[root@nexus7]# vgextend GrupoDeVolumenes /dev/sdb1

Para eliminar el espacio de un disco físico del volumen lógico. Visualizar el contenido del volumen con "pvdisplay" y eliminarlo con "vgreduce":

[root@nexus7 ]# pvdisplay
File descriptor 4 left open

File descriptor 9 left open

File descriptor 10 left open

File descriptor 11 left open

File descriptor 13 left open

File descriptor 14 left open

File descriptor 15 left open

--- Physical volume ---
PV Name /dev/sda2

VG Name
GrupoDeVolumenes
PV Size 232,69 GB / not usable 4,58 MB
Allocatable yes
PE Size (KByte) 32768
Total
PE 7446
Free PE 1 Allocated
PE 7445
PV UUID x13nkz-9Ztw-2P08-1dNp-yZ3L-T4O6-fRsQjK

[root@nexus7 ]# vgreduce GrupoDeVolumenes /dev/sda2

Para eliminar el volumen lógico del sistema se utiliza el comando "lvremove" de la siguiente forma:

[root@nexus7]# umount /dev/GrupoDeVolumenes/volumen_para_home
[root@nexus7]# lvremove /dev/GrupoDeVolumenes/volumen_para_home
lvremove -- do you really want to remove "/dev/
GrupoDeVolumenes/volumen_para_home"? [y/n]: y
lvremove -- doing automatic backup of volume group "
GrupoDeVolumenes"
lvremove -- logical volume "/dev/
GrupoDeVolumenes/volumen_para_home" successfully removed

Disminuir o aumentar la dimensión del volumen, desde un sistema de archivos ext2 o ext3, se desmonta la unidad y con el comando "e2fsadm" se aplica los cambios deseados. En este caso se reduce el tamaño en 1Gb del volumen "/dev/GrupoDeVolumenes/volumen_para_home".

[root@nexus7]# umount /home
[root@nexus7]# e2fsadm -L -1000M /dev/GrupoDeVolumenes/volumen_para_home
[root@nexus7]#
mount /home
[root@nexus7 ]# pvdisplay
[root@nexus7 ]# mount /home
  • -L -1000M: reduce el tamaño del volumen 1GB, se utiliza tanto el signo "-" como el signo "+" para aumentar o disminuir el tamaño. Para asignar de una forma sencilla la dimensión se usa M - Megas, G - Gigas, T - Teras.
Después de todo, los pasos para crear un volumen serían los siguientes:

[root@nexus7]# pvcreate /dev/sda
pvcreate — physical volume “/dev/sda” successfully created

[root@nexus7]#
vgextend GrupoDeVolumenes /dev/sda
vgextend — INFO: maximum logical volume size is 1023.97 Gigabyte

vgextend — doing automatic backup of volume group “GrupoDeVolumenes″
vgextend — volume group “GrupoDeVolumenes″ successfully extended


[root@nexus7]#
lvcreate -L 400M -n volumen1 GrupoDeVolumenes
lvcreate — doing automatic backup of “GrupoDeVolumenes″

lvcreate — logical volume “/dev/GrupoDeVolumenes/volumen1″ successfully created

[root@nexus7]# mkfs -t ext3 -m 1 -v /dev/GrupoDeVolumenes/volumen1
[root@nexus7]# tune2fs -l /dev/GrupoDeVolumenes/volumen1
[root@nexus7]#
mkdir /mnt/nuevofs
[root@nexus7]#
mount -t ext3 /dev/GrupoDeVolumenes/volumen1 /mnt/nuevofs

martes, 10 de febrero de 2009

Optimización de red TCP / IP en linux

Con los siguientes datos es posible mejorar el rendimiento de las redes TCP / IP de linux. Hay que tener en cuenta que me refiero a las funciones disponibles dentro de la instalación del sistema Linux.

Sólo muestro los parámetros que pueden ser usados para optimizar el protocolo TCP / IP. Todas las sugerencias que hago en esta sección son válidas para todo tipo de equipos, la única diferencia es la cantidad de MB de RAM de la máquina.

La mayoría de los cambios funciona bien con equipos con >= 512 MB de RAM y un mínimo de 256 MB de RAM. Por debajo de esta cantidad de memoria es mejor usar la configuración predeterminada.

Este truco hace menor el tiempo para la conexión TCP / IP, consiguiendo más conexiones. Con lo siguiente se reducirá la cantidad de tiempo que la máquina Linux utilizará para cerrar una conexión.
  • net.ipv4.tcp_window_scaling , TCP/IP normalmente permite ventanas de hasta 65535 bytes. En redes muy rápidas esto podría no ser suficiente. Las opciones de escalado permiten ventanas de hasta casi un gigabyte, lo cual es bueno para productos con gran ancho de banda y mucho retraso.
  • net.ipv4.tcp_keepalive_time, Frecuencia con que TCP envía mensajes keepalive cuando se activa keepalive. Por defecto: 2 horas.
  • net.ipv4.tcp_sack, Usar ACK Selectivo que puede servir para comprobar si se están perdiendo paquetes específicos (por tanto, ayuda a una recuperación rápida).
  • net.ipv4.tcp_timestamps, Los registros de tiempo se usan, entre otras cosas, para protegerse contra números de secuencia que se solapen. Es concebible que un enlace de 1 gigabit reencuentre un número de secuencia previo con un valor fuera de línea, porque fue de una generación previa. El registro de tiempo ayudará a reconocer este "paquete antiguo".
Estos cambios se deben hacer en el siguiente archivo de configuración del sistema:

vim /etc/sysctl.conf

# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Turn off the tcp_window_scaling
net.ipv4.tcp_window_scaling = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0

Recuerda que se debe reiniciar la red

[root@nexus7 /]# /etc/init.d/network restart


Referencias:
http://www.gulic.org/almacen/03_www/

viernes, 6 de febrero de 2009

Asegurar el arranque de servicios en linux ( /etc/init.d )

Reasignar los permisos de los ficheros que son responsables de iniciar y detener todos los procesos que necesita ejecutar en el momento del arranque.

Para arreglar los permisos de los archivos, utilizar el siguiente comando:
[nexus7@nexus7 /] # chmod-R 700 /etc/init.d/*

Con esto se consigue que sólo al super-usuario "root" se le permita leer, escribir y ejecutar scripts en los archivos de este directorio.

¿Es normal que los usuarios normales del sistema se enteren del código interno de los scripts?, pues no.

Si instala un nuevo programa o actualización que utilice el script de inicio System V ubicado en en directorio /etc/rc.d/init.d/ , no se olvide de cambiar o comprobar la autorización de este archivo de nuevo.

miércoles, 4 de febrero de 2009

KDE 4.2 beta 1

Ya queda menos para recibir la nueva versión 4.2 de KDE, voy a detallar algunas de las nuevas funcionalidades y ajustes de la nueva versión.
  • Los efectos de escritorio se activan cuando el hardware es soportado.
  • Se añaden nuevos efectos de escritorio como la lámpara mágica, efecto de minimizado, commutadores de escritorio Cubo y Esfera. Otros, como el panel de escritorios, se han mejorado. Todos los efectos han sido pulidos y se hacen más naturales, gracias a la utilización dinámica de movimiento. También se ha modificado la interfaz de usuario para la elección de los efectos y así facilitar la selección de los efectos más comúnmente utilizados.

  • Modificaciones para el uso del escritorio, incluyen agrupar varias filas y nuevo diseño en la barra de tareas, ocultar los iconos de la bandeja del sistema, notificaciones y seguimiento a través de plasma.
  • Nuevos Applets de Plasma, dejar mensajes en una pantalla bloqueada, vista previa de archivos, seguimiento de noticias, servicios públicos como el pastebin applet, calendario, temporizador, selector de carácter especial, QuickLaunch, monitor de sistema y muchos otros más.
  • KRunner, el "comando Ejecutar ..." de diálogo se ha extendido a través de la funcionalidad de varios de los nuevos complementos, incluyendo la corrección ortográfica, navegador konqueror, control de la gestión a través de PowerDevil, sitios KDE, documentos recientes, y la capacidad de iniciar sesiones específicas del editor Kate, Konqueror y Konsole. El plugin de conversor ahora también soporta la conversión de unidades de velocidad, masa y distancias.
  • Plasma ya puede cargar Google Gadgets. Los applets de plasma puedes ser escritos en Ruby y Python. Apoyo para los applets escritos en JavaScript y los widgets de Mac OS.
  • Los fondos de pantalla ahora son plugins, los desarrolladores pueden escribir fácilmente fondos de pantalla personalizados para KDE 4.2. Los fondos de pantalla también serán plugins y pueden visualizarse como diapositivas, fractales de Mandelbrot y por supuesto las imágenes estáticas de siempre.
  • Mejoras en la Barra de tareas, lanzador de aplicaciones, en la bandeja del sistema y la mayoría de los otros componentes de plasma su aspecto ahora es más racional y coherente. El nuevo módulo de configuración del sistema, Desktop Theme, da al usuario control sobre cada uno de los elementos de los diversos temas de plasma.
  • Multi-pantalla de apoyo, se ha mejorado a través de la biblioteca Kephal, por el que se solucionan muchos errores al ejecutar KDE en más de un monitor.

Fuente original: Kde

domingo, 1 de febrero de 2009

Nuevas funcionalidades en Fedora 11

Algunas mejoras para la nueva versión, marco los porcentajes de desarrollo en los que están actualmente:

Arranque en 20 segundos (10%)
El objetivo es mejorar el tiempo hasta los 20 segundos en el proceso de arranque del sistema, identificando las tareas pesadas y utilizando menos lecturas y escrituras de disco.

DNSSEC (80%)
(DNS de Seguridad) es un mecanismo que puede proporcionar la integridad y autenticidad de los datos DNS. Aumentó su importancia después de los ataques DNS Kaminsky a principios de 2008.

EXT4 (90%)
Por fin el esperado sistema de archivos ext4 por defecto en el nuevo fedora 11.

Fingerprints Reader (Lectores de huellas digitales) (99%)
Fedora quiere añadir los lectores de huellas digitales como opción secundaria de autentificación.

KDE 4.2 (33%)
Tras varias versiones inestables, que supongo que lanzarlas en producción habrá servido para meter caña a los desarrolladores, aparece la versión 4.2 que esperemos sea la definitiva, y definitiva me refiero a lo que se puede llamar como versión en producción, porque es emocionante recibir nuevas versiones y cambios en KDE.
  • KDE 4.2
  • PolicyKit-KDE
  • Network Manager Plasma applet
  • PowerDevil
  • KOffice 2 Make KDE startup faster
  • Continue work on Fedora branding effort
Gnome 2.26 (5%)
Fedora esta haciendo grades esfuerzos para incluir en la versión 11, gnome 2.26.

KVM Asignación de dispositivos PCI (60%)
Los usuarios de fedora podrán asignar las tarjetas de red PCI, controladoras de disco duro, tarjetas de línea telefónica etc... a sus máquinas virtuales.

Multiseat (10%)
Hace más fácil la configuración de un sistema multiusuario, cuando dos o más usuarios tienen cada uno su propio teclado, monitor y ratón, podrán trabajar de forma independiente el uno del otro, con su hardware preferido.

El sistema Multiseat es útil en escuelas, oficinas, bibliotecas, cibercafés, etc.

Presto (95%)
El plugin para yum presto añade soporte para la descarga deltarpms, si se añade este plugin por defecto se puede optimizar la cantidad de datos que tienen que ser descargados por los usuarios para actualizaciones.

Python 2.6 (85%)
Existen en fedora muchas aplicaciones desarrolladas en Python, como por ejemplo, Yum, system-config-*, anaconda.

System Security Services Daemon (SSSD) (25%)
Este proyecto proporcionará una serie de demonios para administrar el acceso remoto a los directorios y los mecanismos de autenticación, que proporciona una interfaz de NSS y PAM hacia el sistema y conectar un sistema de backend, para conectarse a múltiples fuentes de forma diferente. También es la base de clientes para proporcionar servicios de auditoria y de política para los proyectos como FreeIPA.

TightVNC (95%)
No ha habido actualizaciones para RealVNC desde mayo 18 de 2006, ademas Tight ha aplicado con éxito un protocolo de mejoras que ahorra ancho de banda, se va a implantar como vnc por defecto en fedora.

VolumeControl (80%)
Seguro que agradeceremos el nuevo funcionamiento del control de volumen. Adjunto algunas pantallas.


Proyecto MinGW (64%)
El objetivo es minimizar las necesidades por parte de un desarrollador de aplicaciones windows de compilar sus aplicaciones en ese entorno, de esta forma se elimina la duplicidad en el trabajo, proporcionando una serie de bibliotecas y herramientas de desarrollo que ya han sido portados al cross-compiler environment. Esto significa que los desarrolladores no tendrán que recompilar la aplicación, sino que puede concentrarse sólo en los cambios necesarios para su propia aplicación.

Xfce 4.6 (75%)
Llevan trabajando bastante tiempo en la versión 4.6, actualmente tienen la versión beta 2, esta prevista la versión final para el 6 de febrero de 2009, debería dar tiempo a pulir bugs e integrar con fedora 11.

viernes, 30 de enero de 2009

Histórico de comandos en linux ( Shell logging )

La lista de comandos que memoriza linux hace que sea más fácil recuperar hasta más de 500 comandos del archivo de historico (~/.bash_history).
Cada usuario que tiene una cuenta en el sistema contiene este archivo, donde se almacenan no solo comandos, sino por ejemplo una contraseña fallida, estos datos permanecen en .bash_history durante bastante tiempo.

Es posible ajustar la dimensión del archivo para todos los usuarios del sistema modificando el parámetro HISTSIZE del archivos de configuración situado en (/etc/profile), es recomendable un máximo de 10 comandos.

[nexus7@nexus7 ~]$ vim /etc/profile

HISTSIZE=500

modificar a

HISTSIZE=10

De esta forma cualquier curioso solo podrá hurgar en un histórico de 10 comandos, reduciendo el riesgo de contraseñas mal introducidas.

También y como otra medida de seguridad es posible que ese histórico se elimine cada vez que salimos del sistema, así nadie podrá visualizar el histórico de un usuario que esta desconectado del sistema.

HISTFILESIZE=0

jueves, 29 de enero de 2009

Crear alias en Linux

Con tanto comando, los alias nos hacen la vida más fácil, cada usuario puede tener sus alias personalizados.

Para crearlo se usa el comando (alias):

[nexus7@nexus7 ~]$ alias test="echo Hola Mundo"

y para eliminarlo se utiliza (unalias):

[nexus7@nexus7 ~]$ unalias test

Los alias que hemos creado no son permanentes. Para que los cambios sigan en cada arranque del equipo nos basta con editar el archivo (~/.bashrc) situado en el directorio raíz del usuario.

[nexus7@nexus7 ~]$ cd /home/nexus7
[nexus7@nexus7 ~]$ vim .bashrc

este es el formato del archivo:

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi


# User specific aliases and functions


alias nolacie='eject /media/LaCie/'

algunos ejemplos:

alias sshmiequipo1='ssh nexus7@192.168.2.99'
alias vncmiequipo2='vncviewer 192.168.2.99:5'

alias editarAlias='vim .bashrc'

alias grep='grep --color=auto'
alias home='cd /home/nexus7'
alias cls='clear'

alias hora='date "+%nHora: %H:%M:%S%n"'

alias hoy='date ''+%nFecha: %A, %d / %B / %y%n''
'
alias pow='poweroff'


El comando 'df' siempre nos presenta los datos en un formato difícilmente legible, (-h human readable) lo hace más fácil de leer.

alias df='df -h'

También nos permite aumentar la seguridad, el comando (rm) elimina archivos y carpetas de forma irrecuperable, se puede hacer interactivo de la siguiente forma.

alias rm='rm -i'


Después de añadir los alias que necesitemos, para habilitarlos sin necesidad de ejecutarlos en el terminal uno a uno, ejecutamos el siguiente comando.

[nexus7@nexus7 ~]$ bash

Por último si se necesita visualizar los alias configurados, basta con ejecutar (alias).

[nexus7@nexus7 ~]$ alias

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias nolacie='eject /media/LaCie/'

alias sshnexus7='ssh nexus7@192.168.9.58'
alias sshnexus8='ssh nexus8@192.168.9.12'

alias vi='vim'

alias vncnexus7='vncviewer 192.168.9.58:2'

alias vncnexus8='vncviewer 192.168.9.12:2'

alias vncyoli='vncviewer 192.168.9.67'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

domingo, 25 de enero de 2009

Como protegernos en la red con linux (2)

Habilitando IP spoofing protection

Evita una técnica de ataque que obtiene acceso no autorizado, el atacante envía paquetes a un ordenador, modificando los encabezados de los paquetes utilizando datos de un host fiable. Esto protege únicamente nuestra red interna.

1.Editar el archivo de configuración del sistema (vim /etc/sysctl.conf) y añadir las siguientes lineas:

#Habilitar IP spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
#net.ipv4.conf.eth1.rp_filter = 1 (Si se tiene un segundo interface de red)
net.ipv4.conf.default.rp_filter = 1


2.Reiniciar la red manualmente el sistema usando el siguiente comando:

[root@nexus7 /]# /etc/init.d/network restart
Setting network parameters [OK]
Bringing up interface lo [OK]
Bringing up interface eth0 [OK]
Bringing up interface eth1 [OK]


Habilitar Source Routed, Log Spoofed y redireccionar paquetes

Este cambio enviará al log los Spoofed Packets y Source Routed Packets, debe configurarse para todas las interfaces de red.

#Habilitar Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.lo.log_martians = 1
net.ipv4.conf.eth0.log_martians = 1
net.ipv4.conf.eth1.log_martians = 1
net.ipv4.conf.default.log_martians = 1


Como simpre hay que reiniciar la red después de efectuar estos cambios (/etc/init.d/network restart).

viernes, 23 de enero de 2009

Como protegernos en la red con linux (1)

Evitar que nuestro sistema responda a un ping es una muy buena forma de ocultarse, porque nadie sabe que estamos ahí.

1.Editar el archivo de configuración del sistema (vim /etc/sysctl.conf) y añadir la siguiente linea:

#Desabilitar la respuesta a un ping
net.ipv4.icmp_echo_ignore_all = 1


2.Reiniciar la red manualmente el sistema usando el siguiente comando:

[root@nexus7 /]# /etc/init.d/network restart
Setting network parameters [OK]
Bringing up interface lo [OK]
Bringing up interface eth0 [OK]
Bringing up interface eth1 [OK]


Rechazar solicitud de respuesta de difusión (broadcast), evitar ataques de Denegación de servicio (DOS)

Cuando un paquete es entregado a la dirección de difusión de nuestra red local, por ejemplo 192.168.1.255, ese paquete es entregado a todas las máquinas de nuestra red, todas responden a esa solicitud de eco ICMP produciendo una congestión o cortes en la red (Denegación de servicio)

1.Editar el archivo de configuración del sistema (vim /etc/sysctl.conf) y añadir la siguiente linea:

#Rechazar solicitud de respuesta de difusión (broadcast)
net.ipv4.icmp_echo_ignore_broadcasts = 1


2.Reiniciar la red manualmente el sistema usando el siguiente comando:

[root@nexus7 /]# /etc/init.d/network restart
Setting network parameters [OK]
Bringing up interface lo [OK]
Bringing up interface eth0 [OK]
Bringing up interface eth1 [OK]


El enrutamiento y los protocolos de enrutamiento pueden crear varios problemas. En el enrutamiento de origen cuando un paquete IP contiene detalles de la ruta, es peligroso porque el host de destino debe responder por el mismo camino. Si el atacante envía una serie de paquetes de enrutamiento a la red sería capaz de interceptar las respuestas, de esta forma podría pensar que se está comunicando con un host de confianza y no es así.

El archivo que hay que editar es (vim /etc/sysctl.conf) y se debe reiniciar la red (/etc/init.d/network restart).

# Desabilitar IP source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.eth1.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0


Habilitar la protección (TCP SYN Cookie)

Un "SYN Attack" es un ataque Denial of Service (DoS), este tipo de ataque consume todos los recursos de la máquina forzando su reinicio, aumentan el tráfico de red hasta que la máquina no puede responder a tantas solicitudes, no es un ataque peligroso pero si bastante molesto, se puede evitar de la siguiente forma.

El archivo que hay que editar es (vim /etc/sysctl.conf) y se debe reiniciar la red (/etc/init.d/network restart).

# Habilitar la protección (TCP SYN Cookie)
net.ipv4.tcp_syncookies = 1

sábado, 17 de enero de 2009

Inicio de múltiples procesos en Linux (Multitarea en Linux)

Se puede iniciar la ejecución de un programa simplemente escribiendo el nombre en la linea de comandos y luego pulsando enter. Ese programa deja una huella en el sistema mientras está en ejecución, linux le asigna un PID, para poder gestionarlo.

ps -A
PID TTY TIME CMD
1 ? 00:00:00 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 migration/1


Un proceso es un programa en ejecución y es distinto a un programa. Un programa es un conjunto de instrucciones, mientras que un proceso es dinámico porque usa los recursos del sistema. También un programa puede ejecutar varios procesos.

Los siguientes comandos son de multiusuario y multitarea.

at --> Ejecuta un comando cuando lo necesites, es un tiempo determinado
bach --> Ejecuta el comando cuando puede el sistema
kill --> Mata procesos
nice --> Ajusta la prioridad de un proceso antes de que empiece
cron --> Ejecuta comandos de forma planificada
nohup --> Permite que un proceso que se esta ejecutando, siga cuando desconectes.
renice --> Ajusta la prioridad del proceso mientras se ejecuta
ps --> Informa sobre el proceso


Para ejecutar un programa en segundo plano basta con colocarle el signo '&' detrás del nombre o los argumentos si tuviera.

lp miarchvo.txt &
[1] 690

Así inmediatamente después de ejecutar el programa, linux informa del PID del proceso para mantenerse informado sobre él, poder finalizarlo, cambiarle la prioridad, etc.

Otra forma de iniciar múltiples procesos es usar conducciones, este comando ejecuta tres procesos independientes a la vez y se hace separando los comandos por la barra vertical '|'.

dd if=/dev/sda2 of=/dev/sdb2 | find -name *.txt | lp

Se puede planificar un comando usando el comando 'at', cuando llegue el momento se ejecutará.

at 1:45 (enter)
at> rm archivo.txt (enter)

at>
(ctrl-D)
job 1 at 2009-01-18 01:45

Las tareas con 'batch' hacen que la carga del sistema esté más repartida, el proceso se ejecuta cuando la carga del sistema no es demasiado alta, el sistema decide cuando. Ctrl-D representa el 'fin de archivo'.

batch (enter)
at> rm ProgramadePuntosDIC.pdf
(enter)
at>
(ctrl-D)
job 5 at 2009-01-18 01:55


Como es normal, cuando un proceso padre es terminado, los procesos hijos finalizan, pero 'nohup' permite ejecutar el proceso aunque salga de su sesión. El proceso durará lo que sea necesario hasta que se ejecute y para ir monitorizando como se comporta el proceso lo haremos con el log que genera 'nohup.out'

nohup sort archivo.txt &
[1] 9286
nohup: ignoring input and appending output to «nohup.out»


Para asignar una prioridad 'nice' o reasignar prioridad 'renice', la prioridad predeterminada es 10 hasta un máximo de 19 y un mínimo de -20. El siguiente comando aplicaría la máxima prioridad.

nice -n 19 sort texto.dat &


Estos comandos ejecutan programas en el momento en el que nosotros se lo decimos a través de la linea de comandos, pero si necesitamos que los procesos sean repetitivos utilizaremos 'cron' y 'crontab' no entraré en el uso de estos archivos de momento.

Por último debemos conocer 'kill', es útil para terminar un programa que usa demasiado tiempo de CPU, lleva demasiado tiempo y no produce una salida, bloquea un terminal, no es necesario, etc...

El programa 'ps -A' visualiza todos los procesos que se están ejecutando en ese momento, es útil para localizar ese proceso que ya no necesitamos, y después:

kill PID

viernes, 16 de enero de 2009

Crear una magen del disco duro en linux y enviarlo por SSH

El comando de Linux 'dd' no puede faltar en nuestra caja de herramientas, se puede usar para hacer copias de seguridad, crear imágenes del disco duro entero o parte, siempre que el disco destino tenga la misma geometría.

Hay que tener cuidado con el orden de 'if' y 'of', en los siguientes ejemplos se quiere copiar sda a sdb. Copia del disco duro.

dd if=/dev/sda of=/dev/sdb bs=4096 conv=notrunc,noerror
dd if=/dev/sda of=/path/de/imagen bs=4096 conv=notrunc,noerror
dd if=/dev/sda | gzip > /path/de/imagen.gz bs=4096 conv=notrunc,noerror


Restauración de los datos de la imagen.

dd if=/path/de/imagen of=/dev/sda bs=4096 conv=notrunc,noerror
gzip -dc /path/de/imagen.gz | dd of=/dev/sda


Para crear la imagen de un CD se usaría bs=2048 ya que los sectores de los cds tienen 2048 bytes, una vez terminada la copia se podría montar.

dd if=/dev/hdc of=/home/nexus7/micd.iso bs=2048 conv=notrunc
mount -o loop /mnt/micd


o añadirlo a fstab para que se monte al arrancar el sistema.

/home/nexus7/micd.iso /mnt/micd iso9660 rw,user,noauto 0 0
Copiar el contenido de la memoria a un archivo.
dd if=/dev/mem of=/home/nexus7/memoria.bin bs=1024


Comprimir la imagen con gzip y enviarla por ssh a otro equipo, es este ejemplo es una partición del disco.

dd if=/dev/sda2 bs=1k conv=sync,noerror | gzip -c | ssh -c blowfish nexus7@192.170.2.3 "dd of=/home/nexus7/Documentos/Copia_seguridad/particiones/imagen.gz bs=1k"

Para hacer la copia de seguridad en otro equipo sin usar compresión ni un canal seguro como es SSH, se puede usar 'netcat', un programa que viene por defecto en casi todas las distribuciones de linux. El tamaño de bs es igual a un cilindro en un disco LBA. En los siguientes ejemplos la copia se hará en origen la primera y en destino la segunda.

dd if=/dev/sda bs=16065b | netcat IP_Destino 1234
netcat -l -p 1234 | dd of=/dev/sda bs=16065b


jueves, 15 de enero de 2009

Optimizar NFS (Linux Network File System)

Después de instalar nuestra nueva unidad de red e intercambiar algunos archivos, nos planteamos seguro, si podemos acelerar esa tasa de transferencia entre nuestro equipo y la unidad de red. Con estos comandos y con paciencia podemos ajustar los valores rsize y wsize a unos valores óptimos.

El siguiente comando enviará un archivo de 256MB desde el equipo local a la carpeta compartida.

time dd if=/dev/zero of=/mnt/home/ArchivoDePrueba bs=16k count=16384

esto devolverá una salida como la siguiente, en la que se puede ver la tasa de transferencia y el tiempo que ha tardado en el proceso:

16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 85,9604 s,
3,1 MB/s

real
1m25.977s
user 0m0.007s
sys 0m0.360s


O la siguiente:

16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 40,9155 s, 6,6 MB/s

real 0m41.562s
user 0m0.003s
sys 0m0.321s

Hay que repetirlo varias veces con distintas configuraciones de rsize y wsize, los valores deben ser múltiplos de 1024 y no pueden ser mayores que el tamaño del bloque configurado en NFSSVC_MAXBLKSIZE, por supuesto montando y desmontando la unidad para que use los nuevos valores.

También se pueden usar para la misma función dos aplicaciones más complejas, bonnie++ y iOzone.

sábado, 10 de enero de 2009

Configuración de NFS

Anteriormente tenía configurado ssh para el intercambio de archivos entre los equipos de la LAN, la velocidad de transmisión de datos esta entre 3 y 4 MiB/s, es lento. NFS nos puede dar más velocidad a cambio de menos seguridad, aunque tampoco es la panacea, consiguiendo una velocidad de 9 y 10 MiB/s pero como en mi caso, para intercambiar varios gigabites es un alivio.

NFS no esta pensado para compartir archivos como en Samba o usando fish de SSH, la forma de actuar con NFS es montar una de las unidades de red del servidor en nuestro equipo.

En primer lugar y en el servidor NFS, es decir el que contendrá la carpeta que necesitamos compartir, hay que instalar varios paquetes:

yum install nfs-utils portmap

Comprobaremos si portmap y nfs están activos en el sistema, sino los arrancamos:

/etc/init.d/rpcbind status
/etc/init.d/rpcbind start (si esta inactivo)

/etc/init.d/nfs status
/etc/init.d/nfs start (si esta inactivo)

/etc/init.d/nfslock status
/etc/init.d/nfslock start
(si esta inactivo)

Si queremos que el servicio nfs este activo el siguiente arranque debemos ejecutar el siguiente comando:

/sbin/chkconfig nfs on

Configuremos la seguridad para NFS, añadiendo las siguientes lineas:

vim /etc/hosts.deny
portmap:ALL
lockd:ALL

mountd:ALL

rquotad:ALL

statd:ALL


/etc/hosts.allow
portmap:192.168.1.0/255.255.255.0
lockd:192.168.1.0/255.255.255.0

mountd:192.168.1.0/255.255.255.0

rquotad:192.168.1.0/255.255.255.0

statd:192.168.1.0/255.255.255.0


Se puede dar permisos por supuesto a una red de internet ajena a nuestra intranet, por ejemplo:

portmap:89.125.4.52

Editamos el archivo /etc/sysconfig/nfs configuramos o añadimos los siguientes parámetros:

LOCKD_TCPPORT=4000
STATD_PORT=4002
LOCKD_UDPPORT=4000
MOUNTD_PORT=4001


Abrir los puertos que anteriormente hemos seleccionado más el 111 y el 2049:

111 tpc/udp (rcp)
4000 tcp/udp
4001 tcp/udp, 4002 tcp/udp
también 2049 tcp/udp (nfs)


Configurar que carpetas vamos a exportar modificando el archivo /etc/exports

/home 192.168.1.39(rw,sync)

Con esto le notificamos al sistema que estamos compartiendo el directorio /home con permisos de lectura-escritura y escritura sincronizada a petición, si quisiéramos que fuera de solo lectura bastaría con substituir (rw) por (ro).

Cada vez que se efectue un cambio en /etc/exports hay que ejecutar el siguiente comando para que los cambios sean visibles:

exportfs -rv

Para que los cambios efectuados hasta el momento hay que reiniciar los servicios:

/etc/init.d/rpcbind restart
/etc/init.d/iptables restart
/etc/init.d/nfs restart
/etc/init.d/nfslock restart

Ahora desde la parte del cliente, vamos a comprobar que carpetas comparte el servidor y posteriormente montar la carpeta deseada. "showmount" nos presenta las carpetas compartidas y la salida seria como esta:

[root@nexus7 nexus7]# showmount -e 192.168.1.18
Export list for 192.168.1.18:

/home 192.168.1.39


Ahora procedemos a montar /home en nuestro sistema cliente, creamos una carpeta en /mnt con el nombre que queramos (mkdir /mnt/HomeNexus7).

mount -t nfs 192.168.1.18:/home /mnt/HomeNexus7/

Para que esta carpeta siga montada en cada arranque debemos añadir una nueva linea a /etc/fstab, por ejemplo:

192.168.1.18:/home /mnt/HomeNexus7 nfs rw 0 0

Podemos añadir "hard,intr", cuando servidor se cuelga el programa que accede a ese archivo también se bloquea, para evitar esto se recomienda poner en la linea de comandos de montaje:

192.168.1.18:/home /mnt/HomeNexus7 nfs rw,hard,intr, 0 0

domingo, 4 de enero de 2009

Configuración de VNC

Configuración VNC en Linux
VNC (Virtual Network Computing) es una herramienta cliente/servidor muy útil para control remoto de escritorios, VNC es libre con licencia GPL, existen versiones para casi todos los sistemas operativos.

En primer lugar hay que generar el password de acceso y almacenarlo:

vncserver -auth /home/nexus8/.Xauthority

[root@nexus7 nexus7]# vncserver -auth /home/nexus8/.Xauthority New 'nexus7:1 (nexus7)' desktop is nexus7:1 Creating default startup script /root/.vnc/xstartup Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/nexus7:1.log
[root@nexus7 nexus7]#


Desde una ventana de terminal ejecutar:

vncpasswd

Solicitará una clave que más tarde se usará para el acceso a través de vncviewer.

Editar el archivo de configuración "vi /etc/sysconfig/vncservers"
-nolisten tcp, evita conexiones via tcp
-nohttpd, evita conexiones web
-localhost, evita conexiones vnc a través de localhost excepto si es a través de un canal seguro


...
VNCSERVERS="2:nexus8"
VNCSERVERARGS[2]="-geometry 1024x768 -nolisten tcp -nohttpd"


En la primera linea, el 2 significa que del puerto configurado es el 5900+2, el 5902 es el puerto que hay que abrir en el firewall. Después de configurar este archivo, lanzar el servicio y configurar su autoarranque para la siguiente sesión:

chkconfig vncserver on
service vncserver start

editar el siguiente archivo "vi /root/.vnc/xstartup" y descomentar la segunda y tercera linea dejándolo como el ejemplo, sin más cambios:

#!/bin/sh

vncconfig -iconic &
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &


reiniciar el servidor

service vncserver restart

y finalmente para conectar desde un cliente, bastaría con esto:

vncviewer ipDestino:2

viernes, 2 de enero de 2009

Las bondades de fuser

A veces al desmontar un dispositivo, por ejemplo un usb aparece el desagradable mensaje "El dispositivo está ocupado", no hay problema, con el comando de linux "fuser" podemos saber que o quien ocupa nuestro dispositivo o puerto.

Ejecutando "fuser" desde un terminal, si el recurso esta siendo usado, nos informa de quien y que proceso lo mantiene ocupado.

-a display unused files too
-c mounted FS
-f silently ignored (for POSIX compatibility)
-i ask before killing (ignored without -k)
-k kill processes accessing the named file
-l list available signal names
-m show all processes using the named filesystems
-n SPACE search in this name space (file, udp, or tcp)
-s silent operation
-SIGNAL send this signal instead of SIGKILL
-u display user IDs
-v verbose output
-V display version information
-4 search IPv4 sockets only
-6 search IPv6 sockets only
- reset options

udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]


Al reproducir una pelicula en un disco duro externo se produce un bloqueo, ejecutando "fuser -v -m /media/Lacie".

-v salida detallada
-m todos los procesos de la ruta asignada

[nexus6@nexus6 ~]$ fuser -v -m /media/LaCie/
USER PID ACCESS COMMAND
/media/LaCie/: nexus6 24499 f.... dragon


tenemos el ID del proceso que podriamos matar con:

kill 24499

pero añadiendo -k matamos el proceso directamente:

fuser -v -k -m /media/Lacie

fuser también nos puede informar de que proceso ocupa un puerto, en este caso el puerto 22, "fuser -v-n tcp 21":

[nexus6@nexus6 ~]$ fuser -v-n tcp 21
USER PID ACCESS COMMAND
21/tcp: nexus6 4321
F. raíz ... vsftpd

Vsftpd esta utilizando el puerto 21, con la opcion -k se puede terminar con el proceso.