# 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

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.

Configurar tarjetas de Red en FreeBSD con sysinstall


Sysinstall es una utilidad de FreeBSD que podemos ejecutar en modo terminal para realizar diversas configuraciones del sistema post-instalación. Hoy vamos a ver como configurar las tarjetas de red:

En primer lugar ejecutamos sysinstall:

$ sysinstall

Sysinstall

Una vez estemos dentro, accedemos a la sección Configure, y después a Networking, donde accederemos a la configuración de las interfaces de red (Interfaces), y veremos algo similar a lo siguiente:

SysInstall, interfaces de red

Ahora seleccionaremos la interfaz que deseemos configurar. Una vez seleccionada, en primera instancia nos preguntará dos cosas:

1) ¿Queremos activar el soporte IPV6?

 User Confirmation Requested
       Do you want to try IPv6 configuration of the interface?

                              Yes   [ No ]

2) ¿ Queremos activar DHCP ?

               User Confirmation Requested
        Do you want to try DHCP configuration of the interface?

                              Yes   [ No ]

En nuestro caso, no queremos ninguna de las dos cosas, vamos a configurar una tarjeta de red con configuración IPV4 y direccionamiento estático:

Configuracion red FREEBSD

Nos podremos mover entre elementos con la tecla [TAB], paso a describiros cada una de las opciones:

Host: El nombre de la máquina (fully-qualified hostname)
Domain: El nombre del dominio en el que la máquina se encuentra.
IPv4 Gateway: Puerta de enlaceault gateway or default route.
Name server: Servidor de nombres que usará el equipo
IPv4 address: La IP estática de la interfaz de red.
Netmask: La máscada de red.

Una vez configurado todo, simplemente vamos con la tecla [TAB] hasta el Ok y presionamos ENTER:

     User Confirmation Requested
        Would you like to Bring Up the ed0 interface right now?

                             [ Yes ]   No

Nos dice si queremos levantar la interfaz de red, si la levantamos comenzará a responder.