# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

pfSense: Firewall Open Source basado en FreeBSD

Estos días hemos estado probando a nivel local la distribución pfSense, firewall Open Source basado en FreeBSD y que en su día comenzó siendo un fork del proyecto m0n0wall.

La principal función de pfSense es la de ser usado a modo de firewall o router, pero si vamos más allá descubrimos que cumple a la perfección con otras funciones como la de conectividad VPN (IPsec, OpenVPN, PPTP), balanceo de carga, NAT, tabla de estado, posible configuración de failover entre dos nodos físicos pfSense, Dynamic DNS, informacíon vía RRD a tiempo real con gráficas, servidor DHCP y Relay, etc.

Si no disponéis del presupuesto necesario para la adquisición de un buen firewall comercial, dadle una oportunidad a esta distribución. Los requerimientos mínimos son 128 MB de RAM y una de 100 MHz Pentium.

Toda la información sobre pfSense en el sitio web oficial.

pfSense Firewall

ifup e ifdown en FreeBSD

Para aquellos que estéis acostumbrados a trabajar con servidores Linux y de vez en cuando tengáis que lidiar con algún FreeBSD es posible que llegado el momento no encontréis la forma de arrancar o parar las interfaces de red.

En FreeBSD no encontraréis los comandos ifup o ifdown. En su lugar, podéis utilizar netif:

# /etc/rc.d/netif
Usage: /etc/rc.d/netif [fast|force|one](start|stop|restart|rcvar|cloneup|clonedown)

La propia ayuda del comando os indica como gestionar las interfaces de red, básicamente es ejecutar el comando seguido de la opción y seguido de la interfaz a gestionar.

Arrancar la interfaz bce0

#  /etc/rc.d/netif start bce0

Parar la interfaz bce0

# /etc/rc.d/netif stop bce0

Y así con el resto de opciones.

FreeBSD: comando PS no muestra todas las columnas

El otro día me encontré con un problema que me pareció realmente curioso y al cual no le encontraba ninguna explicación. En una máquina FreeBSD ejecutaba el comando ps para buscar unos procesos php y según el tamaño de la ventana de la terminal mostraba todos o no.

Con la terminal en tamaño estandar, se mostraba lo siguiente:

$ ps aux | grep php
user      4482  0.0  0.0   3352   812 pts/0    S+   19:12   0:00 grep php

En cambio, maximizando la terminal sí que aparecía el proceso correspondiente:

$ ps aux | grep php
user       2607  6.4  1.3  26176 14396 ?        S    19:15   0:03 php /home/user/script.php
user      4482  0.0  0.0   3352   812 pts/0    S+   19:12   0:00 grep php

Bueno, el problema tenía como origen en que si no le pasamos el parámetro “w” al comando ps, el número de columnas a mostrar se adecuaba al tamaño de la ventana, mientras que con w utiliza el valor por defecto de columnas, 132. En la página man encontramos lo siguiente:

     -w      Use 132 columns to display information, instead of the default
             which is your window size.  If the -w option is specified more
             than once, ps will use as many columns as necessary without
             regard for your window size.

Así que la solución, ps auxw

FreeBSD: Cambiar localización, idioma

Normalmente prefiero tener todo el sistema de localización, idioma, etc en inglés, cuestión de gustos. Hoy me he visto en la obligación por requerimientos ajenos a cambiar la localización e idioma de un usuario en un servidor FreeBSD a español.

Todo esto puede ser modificado a través de un fichero de configuración en nuestra home, el fichero ha de llamarse ~/.login_conf. A continuación os muestro un ejemplo de cambio de localización y cotejamiento de caracteres a español:

# cat ~/.login_conf
me:\
    :charset=es_ES.ISO8859-15:\
    :lang=es_ES.ISO8859-15:

Básicamente solo es necesario exportar el valor del nombre de la “locale” como LANG en el intérprete de órdenes de la sesión. Podemos hacerlo tanto en el fichero especificado anteriormente (~/.login_conf del usuario), como en el fichero de inicio del intérprete de órdenes del usuario (~/.profile, ~/.bashrc , ~/.cshrc).

Tendréis que aseguraros que los locales que configuráis se encuentran instalados en vuestro sistema, debéis buscarlos en /usr/share/locale:

ls -l /usr/share/locale/ | more
total 310
drwxr-xr-x  2 root  wheel  512 29 nov  2007 UTF-8
drwxr-xr-x  2 root  wheel  512 29 nov  2007 af_ZA.ISO8859-1
drwxr-xr-x  2 root  wheel  512 29 nov  2007 af_ZA.ISO8859-15
drwxr-xr-x  2 root  wheel  512 29 nov  2007 af_ZA.UTF-8
drwxr-xr-x  2 root  wheel  512 29 nov  2007 am_ET.UTF-8
drwxr-xr-x  2 root  wheel  512 29 nov  2007 be_BY.CP1131
drwxr-xr-x  2 root  wheel  512 29 nov  2007 be_BY.CP1251
drwxr-xr-x  2 root  wheel  512 29 nov  2007 be_BY.ISO8859-5
drwxr-xr-x  2 root  wheel  512 29 nov  2007 be_BY.UTF-8
drwxr-xr-x  2 root  wheel  512 29 nov  2007 bg_BG.CP1251
drwxr-xr-x  2 root  wheel  512 29 nov  2007 bg_BG.UTF-8
drwxr-xr-x  2 root  wheel  512 29 nov  2007 ca_ES.ISO8859-1
drwxr-xr-x  2 root  wheel  512 29 nov  2007 ca_ES.ISO8859-15
...
...

Una vez modificado, reiniciar la sesión será suficiente para tener cambiado el idioma en nuestra shell. Para profundizar más sobre las distintas opciones y configuraciones permitidas en este sentido podéis acceder al HandBook de FreeBSD.

FreeBSD: Activar color en la salida de LS

Para activar los colores en la salida del comando LS solamente tenéis que añadir la opción G a ls, ejemplo:

ls -G

Lo mejor es crear un alias, sería del siguiente modo:

Bash (.bashrc):

alias ls='ls –G'

Csh (.cshrc):

alias l         ls -G

En algunos casos es necesario cambiar la variable TERM a xterm-color ó xterm-color:

export TERM=xterm-color
export TERM=xterm

Instalar y configurar SUDO en FreeBSD

El programa sudo (de las siglas en inglés de superuser -o substitute user- do) es una utilidad de los sistemas operativos tipo Unix, como Linux, BSD, o Mac OS X, que permite a los usuarios ejecutar programas con los privilegios de seguridad de otro usuario (normalmente el usuario root) de manera segura. Se instala por defecto en

/usr/bin

.

Wikipedia

Para instalar SUDO en FreeBSD lo haremos desde los puertos:

cd /usr/ports/security/sudo
make install clean

Toda la configuración se encuentra en el fichero /usr/local/etc/sudoers.default que debemos mover a /usr/local/etc/sudoers para coger sus valores por defecto:

mv /usr/local/etc/sudoers.default /usr/local/etc/sudoers

Toda la información sobre este fichero la encontaréis en la ayuda man:

man sudoers

Conviene conocer lo más básico e importante:

# User privilege specification
root	ALL=(ALL) ALL

Esta es la sección de privilegios de usuarios, en la cual damos privilegios especiales a usuarios, por defecto root tiene todos los privilegios como es normal, podemos añadir a usuarios privilegios para determinados comandos, la sintaxis es la siguiente:

USER HOST= comandos

# Uncomment to allow people in group wheel to run all commands
%wheel	ALL=(ALL) ALL

Por defecto, todos los usuarios pertenecientes al grupo wheel podrán ejecutar con sudo cualquier comando, aquí podemos añadir más restricciones o permisos a otros grupos.

# Same thing without a password
 %wheel	ALL=(ALL) NOPASSWD: ALL

Con lo anterior podemos especificar qué grupos podrán usar SUDO sin tener que especificar su clave (la del propio usuario, no la de root) de usuario cada vez que ejecuten una tarea o comando ROOT.

Recordad modificar el fichero con el comando visudo porque sino puede no funcionar correctamente.

Shared object “libperl.so” not found

Tras la última actualización de cPanel en un servidor FreeBSD (11.24.4-RELEASE_33609), resulto haber un fallo en ciertos módulos de Perl, por ejemplo exim no arrancaba mostrando el siguiente error:

# /scripts/restartsrv_exim
/libexec/ld-elf.so.1: Shared object "libperl.so" not found, required by "exim"
/libexec/ld-elf.so.1: Shared object "libperl.so" not found, required by "exim"

Ni un upcp –force ni reinstalar exim solventan el fallo, es necesario realizar lo siguiente, ejecutad el script:

/usr/local/bin/perl-after-upgrade -f

Toda la información sobre este script aquí.

De este modo quedaría solucionado, podéis chequear tras dicha tarea que todo es correcto (Perl) chequeando los módulos con:

/scripts/checkperlmodules --force

Updatedb en FreeBSD y comando locate

Para actualizar la base de datos del comando locate en FreeBSD, hay que ejecutar el siguiente comando:

/usr/libexec/locate.updatedb

Definición locate:

El comando locate
locate es un comando de búsqueda de archivos, bastante parecido al comando anteriormente visto, el find. La diferencia de locate es que la búsqueda la hace en una base de datos indexada para aumentar significativamente la velocidad de respuesta. Esto quiere decir, que locate realmente no busca en el disco del sistema, sino que en un archivo con la lista de todos los archivos que existen en el GNU/Linux. Generalmente todas las distribuciones de GNU/Linux ejecutan a una hora determinada (generalmente cerca de las 4:00am, ya que tarda algún tiempo realizar esta tarea) un comando para actualizar la base de datos que utiliza locate, dicho comando se llama updatedb.