LinuxSeptember 21, 2009 7:53 pm

Hace tiempo detecté que los ataques por fuerza bruta podían estar configurados para parar y continuar, esto es, tenía configurado fail2ban para banear una IP durante 5 minutos, tiempo aceptable y lo que detecté es que habían conseguido quedarse en el banquillo esos 5 minutos y continuar después. Así que no tuve piedad y los mandé al banquillo durante una semana. Creo que ninguna botnet puede permitirse el lujo de probar 3 contraseñas esperar una semana y volver a intentarlo.

El problema aparece cuando el que se va al banquillo soy yo! OMG. Para solucionar esta contrariedad, hacemos lo siguiente como root:

iptables -L --line-number
# Identificamos la línea (número) de nuestra IP dentro de las reglas fail2ban-ssh
iptables -D fail2ban-ssh < número >

Y listo, la restricción desaparece y ya podremos hacer ssh a nuestra máquina. Pongamos un ejemplo:


# iptables -L --line-number
[...]
Chain fail2ban-ssh (1 references)
num target prot opt source destination
1 DROP all -- 91-198-202-80.net.resurs.se anywhere
2 DROP all -- 111.222.333.444.user.ono.com
3 RETURN all -- anywhere anywhere
[...]
# iptables -D fail2ban-ssh 2

No se borra del conocimiento de fail2ban, pero como se supone que somos nosotros podemos hacerlo con seguridad. Si tienes una IP dinámica sólo tienes que reiniciar el router. Yo tengo que hacer todo esto.

Linux 7:18 pm

Es común que a base de descargar P2P, quememos nuestras tarjetas de red y tengamos que sustituirlas por otras, hasta aquí, todo bien, pero Linux tomará la interfaz como la siguiente, esto es, si se rompió la interfaz eth0, la que pongamos ahora será la eth1, lo cual está bien, si no tenemos nada apuntando a eth0, en ese caso tendríamos que editar todo lo que hace referencia a la interfaz perdida.

Para que esto no pase, hacemos uso del paquete ifrename, que nos permitirá fijar el nombre de la interfaz en función de su MAC.

La instalación en Debian es sencilla:

apt-get install ifrename

Una vez instalado, editamos el archivo de configuración /etc/iftab que tiene el siguiente formato:

nombre mac MAC

Donde:

  1. Nombre: Nombre que le queremos poner a la interfaz (Sí podemos llamarla como queramos)
  2. mac: mac
  3. MAC: Dirección física de la NIC, 11:22:33:44:55:66

Así quedaría el archivo de ejemplo,

eth0 mac 00:11:22:33:44:55

¿Para qué es útil esto? Bueno, a parte de tener un nombre fijo para la NIC a pesar de que cambie por alguna razón, si implementamos un firewall con iptables podemos llamar a las interfaces con nombres descriptivos como, por ejemplo, ilan, iwan, iwifi, … Lo que se nos ocurra.

LinuxSeptember 7, 2009 6:26 pm

En el despacho llevo liado con el asunto del Servidor de Directorio unos tres meses. Cuando llegué existía una arquitectura de Dominio de Windows 2003 Server, pero el tiempo, la falta de mantenimiento y mi poca experiencia en máquinas Windows han ido degradando el servidor hasta hacerlo muy inestable. Fue cuando convencí a mi jefe de que podríamos intentar desplegar un Servidor de Directorio basado en Linux.

Dicho y hecho, me puse a investigar el asunto para cubrir las necesidades que un usuario de mi LAN necesita cubrir, estas son:

  1. Poder iniciar sesión en cualquier máquina del dominio: LDAP
  2. Capacidad de utilizar las impresoras y plotters que disponemos en la ETSA: CUPS
  3. Posibilidad de compartir archivos en la red desde máquinas Windows XP: Samba

Estos son los tres puntos básicos y esenciales que necesitaba cubrir, tecnología históricamente ligada al mundo Linux y ampliamente soportoda.

Fue así como di con el proyecto Mandriva Directory Server (MDS). MDS es una distribución basada en Mandriva que lleva de serie todas estas tecnologías para que el administrador sólo tenga que preocuparse de la configuración y abstraerse de la instalación.

Pero como todo buen administrador, me gusta ensuciarme y meterme en el fregado, siguiendo esta guia he ido instalando y configurando paquete a paquete, todo el sistema sobre una Lenny.

La valoración en este momento es muy positiva, me he encontrado con un sistema sumamente racional, donde todo está por una razón, todo es transparente y claro (obvio, es Linux xD). En mi opinión nada que envidiar al producto comercial de Microsoft, Active Directory. La administración se realiza mediante una interface web, aunque siempre puedes editar los archivos a mano. Con la cantidad de software que dispones en Debian puedes añadir nuevas características al servidor como la capacidad de limitar el ancho de banda de tus usuarios (ver webHTB).

MDS incluye de serie los siguientes servicios:

  1. LDAP: Autentificación
  2. DHCP: Configuración de hosts dinámica
  3. DNS: Nombres de dominio
  4. Postfix: Correo electrónico
  5. SpamAssassin: Filtro de spam
  6. Amavis: Antivirus
  7. Squid: Proxy Web
  8. CUPS: Servidor de impresión
  9. Samba: Compartición de redes heterogéneas

Sólo empiezo a saborear el potencial que tiene este proyecto, en la batalla por el Free Software, este es uno de los pilares, Active Directory es la joya de la corona de los de Redmond, con estas iniciativas se fomenta y demuestra que es posible desvincularse de Windows para desplegar toda una arquitectura de Servidor de Directorio, básica en cualquier LAN corporativa.

Linux ScriptJune 27, 2009 8:41 pm

Últimamente me encuentro que muchas películas que descargo vienen en dos cd’s (normalmente CD1 y CD2 o similar). Desde que uso DVD’s o el disco externo, es algo que no me gusta, así que las unía usando el software de Avidemux. Pero es un software gráfico que hace de unir vídeos un proceso casi artesanal.

Me he puesto a investigar cómo hacer para unir dos vídeos en la línea de comandos y hay una solución apoyada en cat y mencoder. El primero es standard de GNU/Linux, el segundo viene con el paquete MPlayer. Personalmente, la mejor opción de vídeo en GNU/Linux.

Para unir dos archivos de video hacemos:


$ cat video1.avi video2.avi > video_concatenado.avi
$ mencoder -ovc copy -oac copy -forceidx -o video_concatenado.avi video_final.avi

Pero ir haciendo esto vídeo a vídeo es también lento, muy parecido al proceso artesanal anterior, como ya sabemos de los ordenadores, si podemos hacerlo una vez, podemos hacerlo n veces, presento un pequeño script que resuelve este problema.

El principal tema a resolver era identificar el CD1 del CD2 pero pensándolo un poco, lo resolví.

El código fuente, como siempre, en pastie

LinuxJune 26, 2009 7:44 pm

Es una tarea básica de administración de sistemas, tener monitorizados los servicios que ofrecemos a los clientes. Existen muchas herramientas para esta tarea, más sofisticadas, una de mis favoritas es Cacti. Pero voy a comentar algunas herramientas de línea de comandos para monitorizar ficheros y la salida de comandos.

Para monitorizar un fichero, por ejemplo un log, podemos usar el comando tail -f o su versión en implantación en alto nivel tailf. El comando tail sin argumentos muestra las 10 últimas líneas de un fichero. tailf muestra siempre las 10 últimas líneas de un fichero y con cada nueva línea que se incorpora la va mostrando. Con el parámetro -n N mostramos N líneas.

La diferencia principal entre usar tail -f y tailf es que este último no accede al fichero mientras este no cambie. Esto significa que el tiempo de acceso no cambia, lo que se traduce en menos accesos al disco duro.

Si queremos controlar varios archivos en una sola consola, podemos usar multitail. Este comando dividirá la pantalla y mostrará en cada una de ellas la monitorización de un archivo, con una barra informativa de la última actualización. Este comando merece un post aparte.

¿Pero qué pasa si lo que queremos es monitorizar la salida de un comando? Podemos hacerlo de tres maneras.

La primera es colocar el comando en un tarea Cron, por ejemplo de 5 minutos, redirigir la salida a un archivo, y con tailf ir monitorizando los cambios. WTF!??

La segunda, es más artesanal, podemos hacer un script como este:


$ while true; do ; sleep TIME; done;

Es un poco más elegante, pero no deja de ser una chapuza. Hay que añadir que comando ejecutar y el intervalo de tiempo entre ejecuciones.

Pero es obvio que este problema es antiguo, así que alguien ya le ha dado solución y creó el comando watch. watch ejecuta un programa periódicamente y muestra la salida a pantalla completa. Que es lo que veníamos haciendo en las soluciones anteriores pero con simplemente.

watch comando

Lo cual no da pie a discusiones de cual es la mejor.

Algunos parámetros interesantes son:

  • -d –differences: Que muestra los cambios entre cada actualización.
  • -n –interval: El intervalo de tiempo entre actualizaciones, por defecto, 2 segundos.
  • -t –no-title: Ocultara la cabecera en la presentación de los datos.

En la página de manual, encontramos algunos ejemplos del uso:

  1. Detectar cambios en un directorio:
  2. watch -d ls -l

  3. Detectar cambios en un directorio hecho por joe:
  4. watch -d 'ls -l | fgrep joe'

  5. Controlar si tu administrador ha instalado el último kernel:
  6. watch uname -r

Seguimos observando la capacidad que tiene GNU/Linux para resolver problemas de muchas maneras y como las cuestiones más elementales se han ido incorporando a la larga lista de comandos.