FreeBSD

  • Un sistema de archivos típicamente se llena porque no quedan bloques disponibles (espacio en disco, efectivamente). Aunque también se puede "llenar" porque, a pesar de haber bloques disponibles, no hay inodos libres. Recordemos que los inodos conforman la estructura de datos que representa a un archivo en disco en los sistemas de archivos Unix. Por supuesto esta estructura de metadatos ocupa su propio espacio en disco, que se "pierde" (o invierte, mejor dicho) al momento de dar formato a un dispositivo o partición.

  • Hoy tuve la necesidad de obtener los nombres de host asociados a todas las direcciones IPv4 de una red clase C (ejecutando consultas inversas a los servidores de nombre). Por lo tanto decidí implementar un pequeño script que realice dicha tarea utilizando la shell tcsh, intérprete de comandos por defecto en sistemas FreeBSD. Aunque luego lo traduje a Bash, para compartirlo con aquellos usuarios de GNU/Linux.

  • En sistemas FreeBSD, la herramienta nfsstat muestra estadísticas de la actividad de clientes y servidores NFS. Esta herramienta puede ser útil para el monitoreo de la carga en un servidor NFS y detectar posibles cuellos de botella.

  • Cuando se implementa un firewall utilizando ipfw en sistemas FreeBSD, ocurre que se cierran todas las conexiones establecidas cada vez que se reinicia el firewall. Esto se debe a que el servicio ejecuta ipfw flush, eliminando así todas las reglas existentes, para luego crearlas nuevamente.

  • Este breve artículo demuestra cómo formatear y montar un disco o partición (slice) en sistemas FreeBSD.

  • Hace un tiempo tuve que compilar manualmente el port ffmpeg con soporte para lame, ya que la versión de paquete de FreeBSD no incluye dicho codec (por cuestiones de patente). Pero luego de actualizar el sistema en reiteradas oportunidades, pkg trajo una versión superior a la compilada por mí, con lo cual perdí el soporte para lame y debí volver a compilar el port con las opciones personalizadas. Veamos entonces cómo indicarle al gestor de paquetes pkg que no actualice un port que ha sido compilado con opciones personalizadas, con el objetivo de mantener la funcionalidad deseada.

  • Este artículo explica cómo configurar un servidor Web Nginx de forma segura, que acepte pedidos sólo a través de TLS (redireccionando de forma automática todos los pedidos HTTP a HTTPS), de forma que todo el tráfico entre los clientes y el servidor sea encriptado utilizando sólo los protocolos TLS más fuertes. Para ello se deshabilitará la compresión SSL para evitar el ataque CRIME, también SSLv3 e inferiores debido a sus vulnerabilidades, y se configurará una suite de cifrado fuerte que permita Perfect Forward Secrecy (PFS) cuando sea posible.

  • Este artículo resume un conjunto de configuraciones que permiten mejorar la seguridad de sistemas FreeBSD, para alcanzar un nivel de seguridad similar al que ofrecen los sistemas OpenBSD.

  • En este artículo presento las principales herramientas que dispone FreeBSD para monitorear el consumo o utilización de memoria.

  • FreeBSD incluye tres firewalls diferentes en el sistema base (¡In your face Linux!): PF, IPFW e IPFILTER (también conocido como IPF). Cada firewall utiliza reglas para controlar el acceso de paquetes desde y hacia el sistema FreeBSD, aunque cada uno lo hace de diferente forma y con diferentes reglas. Además FreeBSD provee dos traffic shapers para controlar el uso de ancho de banda: altq y dummynet. Tradicionalmente ALTQ está fuertemente ligado a PF, mientras que dummynet a IPFW.

    FreeBSD provee múltiples firewalls para cumplir los diferentes requerimientos y preferencias de una amplia variedad de usuarios (de esto se trata la libertad de elección, lo mismo que ha hecho la comunidad GNU/Linux con systemd). Por ende cada usuario debe evaluar qué firewall se adopta mejor a sus necesidades.

    En este artículo se explica cómo implementar traffic shaping en FreeBSD utilizando dummynet e IPFW. No voy a hacer una introducción ni a explicar el funcionamiento de IPFW porque un firewall es un mundo, se necesitan varios artículos para cubrir cada aspecto de un firewall (y más uno tan completo que hasta incluye packet shaping entre sus funcionalidades). Notarán que este artículo es bastante extenso y apenas es una introducción a una de sus características. Para más información acerca de IPFW acceder a su página en el Handbook de FreeBSD o directamente a la página de manual (man ipfw).

  • Anteriormente demostré cómo era posible implementar un acceso SSH como root, a pesar de que estuviera deshabilitada la opción PermitRootLogin en la configuración del demonio. Ahora voy a demostrar cómo es posible lograr el mismo comportamiento en sistemas FreeBSD y OpenBSD utilizando doas en vez de sudo.

  • La versión de sed que incluyen las distribuciones GNU/Linux permite reemplazar cualquier cadena por saltos de línea (enter) utilizando la secuencia de escape \n. Sin embargo, la versión BSD no soporta estas secuencias de escape al momento de reemplazar (sí al momento de buscar, parte izquierda de la secuencia de sustitución).

    En este breve artículo explico cómo lograrlo en FreeBSD y OpenBSD.

  • Tuve la necesidad de escanear en búsqueda de virus unos archivos antes de transferirlos a un sistema con Windows, con lo cual decidí instalar ClamAV (el conocido antivirus open source) en mi estación de trabajo corriendo FreeBSD 11.1.

  • Hace algunos meses expliqué detalladamente cómo instalar y configurar Nginx con PHP-FPM en Debian. En este artículo voy a explicar cómo llevar a cabo al misma tarea, pero esta vez sobre un servidor FreeBSD. A pesar de que las configuraciones son casi idénticas, la instalación de paquetes desde la colección de ports de FreeBSD es algo diferente a Debian y derivados, y a su vez se utiliza un sistema de archivos ZFS como base para el directorio de trabajo del servidor HTTP (donde se alojarán los archivos de los diferentes sitios Web).

  • ZFS, The Z File System, es un sistema de archivos avanzado diseñado para superar las limitaciones de los sistemas de archivos más comunes. Originalmente fue diseñado por Sun, y actualmente es un proyecto open source desarrollado por OpenZFS Project.

    ZFS es significativamente diferente del resto de los sistemas de archivos, debido a que es más que sólo un sistema de archivos. Combina los roles tradicionalmente separados de gestor de volúmenes lógicos y sistema de archivos para obtener ventajas únicas. De esta forma, el sistema de archivos es consciente de la estructura de discos subyacente. Los sistemas de archivos tradicionales pueden ser creados sólo en un único disco (si se poseen dos discos, se necesitarán dos sistemas de archivos separados e independientes).

    En las configuraciones de RAID por hardware tradicionales, este problema se resuelve presentando al sistema operativo un disco local simple construido con el espacio provisto por un número de discos físicos, sobre el cual el sistema operativo inicializa un filesystem. Incluso utilizando soluciones de RAID por software, como GEOM, el sistema de archivos cree que está trabajando sobre un dispositivo simple.

    La combinación de gestor de volúmenes y sistema de archivos que posee ZFS permite crear múltiples sistemas de archivos compartiendo un mismo pool de almacenamiento disponible. Una de las grandes ventajas de conocer y gestionar la estructura de discos, es que los sistemas de archivos existentes pueden expandirse automáticamente cuando nuevos dispositivos de disco se agregan al pool. Utilizando otras tecnologías esto no es posible. Por ejemplo si gestionamos el espacio de almacenamiento con LVM en Linux y aumentamos el tamaño de un volúmen, luego será necesario redimensionar el filesystem (o incluso tabla de particiones) que usa tal volumen. Esto en ZFS no es necesario ya que es transparente: si se agrega espacio de almacenamiento al pool, los filesystems lo ven automátcamente. Además ZFS posee otras características adicionales interesantes que pueden ser aplicadas a cada sistema de archivos de forma individual, como compresión, deduplicación y snapshots.

  • Este artículo presenta la configuración y uso de jails, la tecnología de virtualización a nivel sistema operativo (comúnmente conocida como contenedores, containers) provista por FreeBSD.

    Esta tecnología permite particionar a un sistema FreeBSD en varios mini-sistemas independientes (instancias de espacios de usuario aisladas unas de otras) llamados "jails". En el mundo Linux existen tecnologías similares como LXC y Docker.

    Los jails se implementan sobre el concepto de chroot, creando un entorno seguro y aislado del resto del sistema. Así, los procesos creados en este entorno, no pueden acceder a archivos o recursos fuera del mismo. De esta forma, si se compromete un servicio corriendo en un entorno chroot, el atacante no tiene acceso al resto del sistema.

    En un entorno chroot tradicional, los procesos sólo están limitados a la parte del sistema de archivos que pueden acceder. Los jails expanden este modelo virtualizando el acceso al sistema de archivos, al conjunto de usuarios, y al subsistema de red.

    Cada jail está caracterizado por cuatro elementos: un subárbol de directorio (directorio raíz donde se hace chroot), una vez dentro del jail, un proceso no puede salir de este subárbol; un nombre de host (que será utilizado para identificar al jail); una dirección IP (asignada al jail y correspondiente con el nombre de host; y un comando (ruta, relativa al subárbol, a un ejecutable a lanzar dentro del jail).

    Los jails cuentan con su propio conjunto de usuarios y usuario root (limitado al entorno del jail, no puede realizar operaciones fuera del mismo).

    Típicamente existen jails "completos" (que contienen un sistema FreeBSD completo) y de servicio (dedicados a un único servicio o aplicación).

    Este artículo explica cómo crear y utilizar jails en FreeBSD 10, pero va un paso más allá con el objetivo de optimizar el uso de disco y simplificar la administración de los mismos, a partir de la configuración que se encuentra en el artículo Updating Multiple Jails incluido en el Handbook.

  • En sistemas operativos de la familia Unix, el comando rev permite invertir cada linea de un archivo. No confundir con el comando tac, el cual invierte el orden de las líneas, rev invierte los caracteres de cada línea de forma independiente.

  • A la hora de listar los puertos TCP abiertos (IPv4), además del tradicional netstat, FreeBSD incluye la herramienta sockstat.

  • Algo que me quedaba pendiente luego de instalar FreeBSD 10.1 con KDE en mi workstation era mejorar el renderizado de fuentes.

  • En el artículo Jails en FreeBSD presenté un esquema de jails a partir del cual sería posible actualizar el sistema base de todos los Jails en una única operación. Este se basaba en separar el filesystem de los jails en dos partes: una compartida de sólo lectura (sistema base) y otra privada de lectura/escritura (configuraciones, paquetes y directorios de trabajo). En este artículo voy a detallar el proceso de upgrade de un host con múltiples jails.