Mi primer servidor dinámico con Freebsd 14 (15/04/26)

Este artículo  sirve para crear un servidor estático y dinámico con FreeBSD. Parte de la idea que las personas que deseen hacerlo con FreeBSD ya conocen y utilizan este sistema operativo, de otra forma no creemos que sea  fácil, aunque todo es posible. 

Para este uso FreeBSD es sencillamente sensacional. Como se trata de aprender, utilizaremos un servidor en local y con entorno gráfico Mate, ya que un entorno gráfico facilita enormemente el trabajo de aprendizaje para las personas aficionadas, pues se puede trabajar mientras se consultan los problemas o ideas en los medios web disponibles, de otra forma todo desde consola y sin poder consultar sería imposible.

Partiremos del sistema ya instalado tal como indicamos en el artículo de este mismo blog: Instalar y adaptar FreeBSD 14 y 15 con entorno gráfico Mate con el enlace siguiente:

https://tecn-ara.blogspot.com/2019/08/instalar-y-adaptar-freebsd-12-con.html 

 

- Instalar apache 

 Normalmente utilizamos en los servidores apache pues lo conocemos desde siempre y nos es fácil de configurar. Siendo la 24 última versión.

# pkg install apache24

 

- Instalamos php

 Utilizaremos la última a versión actual que es la 85.


#  pkg install php85 mod_php85 php85-mbstring php85-zlib php85-curl php85-gd

# pkg install php85-mysqli php85-extensions php85-pdo php85-pdo_mysql php85-zip php85-mbstring


- Instalamos mariaDB

MariaDB es exactamente lo mismo que mysql pero es la versión totalmente libre y, normalmente, más adelantada, pues sirve de pruebas para mysql. Instalamos la última versión actual.

 

# pkg install  mariadb118-server

ya lo instala todo, no es necesario instalar mariadb118-client ya lo hace. 

 

- Instalamos phpMyAdmin

Existe otra herramienta más sencilla que también se puede utilizar que es Adminer, pero nosotros preferimos phpMyAdmin, porque es mucho más completa para el trabajo con las bases de dadtos de forma gráfica. También instalaremos la última versión.

# pkg install phpMyAdmin5-php85

 

- Ficheros de configuración

Ahora veamos como hemos dejado todos los ficheros de configuración para que el servidor dinámico funcione correctamente. Se ha procurado que todos los ficheros sean específicos para cada parte que forma el servidor y así se capte mejor su significado. Para ello hemos introducido en apache24 la instrucción Include /usr/local/etc/apache24/Includes/*.conf, que nos permitirá poner en la carpeta Includes todos los ficheros de configuración de cada una de los elementos que configuran nuestro servidor, facilitando el trabajo de comprensión y posterior ampliación.

 Primero informaremos a rc.conf que active nuestro servidor

- /etc/rc.conf

En /etc/rc.conf, hemos añadido:

# nano /etc/rc.conf

 apache24_enable="YES"
 php_fpm_enable="YES"
 mysql_enable="YES" 


Utilizaremos el servicio php_fpm. Además incorporaremos en la configuración de apache 24 la instrucción: Include /usr/local/etc/apache24/Includes/*.conf, lo cual nos va permitir configurar en la  carpeta Includes todos los servicios por separado, que entendemos que queda más estructurado, fácil de ver y repasabind-address = 127.0.0.1r, más que ponerlo todo en httpd.conf de apache24.


Ahora muy importante el fichero   de configuración de apache24 agregamos lo siguiente.

# nano /usr/local/etc/apache24/httpd.conf

Listen 80   # son los puertos típicos de las web
Listen 443
ServerName 127.0.0.1   # Utilizamos servidor local (localhost) para pruebas importante después cuando esté en producción deberá cambiarse y poner la IP externa.

# Estas dos líneas están comentadas para hacerlas activas eliminamos # para activarlas. 

LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so

 # aqui indicamos a apache que  pondran los ficheros de configuración en la carpeta Include del mismo.

Include /usr/local/etc/apache24/Includes/*.conf

Observar que al poner la IP 127.0.0.1 se está trabajando únicamente en local.

 

nano /usr/local/etc/apache24/Includes/php.conf

<IfModule php_module>
    DirectoryIndex index.php index.html
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
</IfModule> 

 

# nano /usr/local/etc/mysql/my.cnf 

En el fichero de configuración de mysql.

# nano /usr/local/etc/mysql/my.cnf

[client]
port    = 3306
socket    = /var/run/mysql/mysql.sock
[mysqld]
bind-address = 127.0.0.1 # cuando este en producción deberá cambiar, aquí solo en local

 

nano  /usr/local/etc/apache24/Includes/phpmyadmin.conf

 Alias /phpmyadmin "/usr/local/www/phpMyAdmin"

<Directory "/usr/local/www/phpMyAdmin">
    AllowOverride All
    Options None
    Require all granted
</Directory>

-  /usr/local/etc/apache24/Includes/php_fpm.conf

<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/"
</FilesMatch>
 

nano   /usr/local/etc/apache24/Includes/php.conf 

<IfModule php_module>
    DirectoryIndex index.php index.html
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
</IfModule>

 

nano  /usr/local/etc/php-fpm.d/www.conf

listen = /var/run/php-fpm.sock
listen.owner = www
listen.group = www
listen.mode = 0660  

 

nano  /usr/local/www/phpMyAdim/config.inc.php

 <?php

$cfg['blowfish_secret'] = '0123456789abcdefghijklmnopqrstuv'; # deben ser 32 caracteres

$i = 1;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = '127.0.0.1';   # cuando este en producción deberá cambiar.
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['TempDir'] = '/tmp';

?>

 

En esta apartado observar que se han puesto exactamente 32 caracteres exactamente.  

$cfg['blowfish_secret'] = '0123456789abcdefghijklmnopqrstuv'; 

Inicio y apagado de los servicios instalados 

Debemos recordar que una vez hecho esto anterior deberemos iniciar los servicios, pues una vez instalados no se inician, debe hacerse manualmente o reiniciar el ordenador. pero es mejor hacerlo manualmente, así pues os daréis cuenta si funciona o si tenéis algún problema. 

1.- La siguiente orden para el servicio apache. 

 # service apache24 stop

Esta inicia el servicio.

# service apache24 start

Esta reinicia de nuevo el servicio  ya en funcionamiento.

# service apache24 reload  

Y, finalmente, esta sirve para comprobar el estado del servicio.

# service apache24 status

 

2.- Para el servicio mysql igual

# service mysql-server restart

 

3.- Para el servicio php

   

Importante permisos para la carpetas web del servidor.

Daremos los siguientes permisos para las carpetas de acceso web:

chown -R root:wheel /usr/local/www/
chmod -R 755 /usr/local/www/

chown -R www:www /usr/local/www/
chmod -R 755 /usr/local/www/

chmod -R 775 /usr/local/www/phpMyAdmin
chown -R www:www /usr/local/www/phpMyadmin

chown -R www:www /usr/local/www/apache24/data
chmod -R 755 /usr/local/www/apache24/data

 

Muy importante evitar el siguiente permiso, pues no se tendría ninguna seguridad.

chmod -R 777
 

Y con todo lo hecho  ya se tiene el servidor dinámico preparado para instalar el servicio que se desee: Moodle, dokuwiki, Joomla, NAS, Wordpress,  etc. 

Observar que se ha utilizado Nameserver 127.0.0.1, por que se hace la experiencia en local en caso de querer IP  pública se sustituye por el valor correspondiente.  Pero hay una parte que aquí, de mopmento, aún no se ha trabajado la seguridad con el cortafuegos del servidor.

Lo que más nos gusta de este sistema operativo es que de forma nativa el entorno web dinámico y su configuración están fuera del sistema base y parece de entrada que sea una máquina virtual, pues lo separa totalmente de la base del sistema situándolo todo en /usr/local/www y las configuraciones en    /usr/local/etc/apache24/ y no hay nada en la carpeta etc/ que es el sistema. 

Se ha puesto todo muy escueto porque pensamos que las personas que se proponen crear un servidor FreeBSD tienen un nivel suficiente de todo y lo único que necesitan es una guía de lo que deben instalar. Observar que se han instalado siempre las ultimas versiones disponibles a día de hoy en los repositorios. Siempre se puede acceder a nuestro blog y consultar les explicaciones que damos, y que aquí no se repiten, mi primer servidor web estático y dinámico. Ahora viene la segunda parte dotarle de la seguridad necesaria y evitar ataques, hecho que estamos preparando.

Una vez instalado el servidor dinámico funcionando con FreeBSD 14, el siguiente paso es utilizar un firewall. Seguramente el  más utilizado y mejor integrado es PF (Packet Filter)

 Instalar y activar PF.

# pkg install pf 

 

Crear una política por defecto que bloquee todo el tráfico entrante.

En rc.conf lo activaremos para el reinicio para ello agregamos las siguientes líneas.

# nano /etc/rc.conf

pf_enable="YES"
pflog_enable="YES" 

 Creamos el siguiente fichero

# nano  /etc/pf.conf

Para primeras pruebas de un servidor dinámico se puede utilizar la siguiente configuración:

 
# Interfaz de red vigilar vuestro nombre que podéis ver en rc.conf
ext_if = "em0"

# Opcional: IPs autorizadas para SSH
# admin_hosts = "{ 203.0.113.10 }"

set block-policy drop
set loginterface $ext_if
set skip on lo

scrub in all
antispoof quick for $ext_if

# Política por defecto
block in all
pass out all keep state

# Permitir ICMP (ping)
pass inet proto icmp all keep state

# SSH (abierto a todo el mundo)
pass in on $ext_if proto tcp to ($ext_if) port 22 flags S/SA keep state

# Si prefieres restringir SSH:
# pass in on $ext_if proto tcp from $admin_hosts to ($ext_if) port 22 flags S/SA keep state

# HTTP
pass in on $ext_if proto tcp to ($ext_if) port 80 flags S/SA keep state

# HTTPS
pass in on $ext_if proto tcp to ($ext_if) port 443 flags S/SA keep state

Debe verificarse que MariaDB solo escuche lo que corresponda. En el archivo de configuración correspondiente. Nosotros lo hemos puesto solo localmente: bind-address = 127.0.0.1

El servicio ssh está comentado porque tal como hemos presentado el servidor no se necesita acceder desde el exterior estamos trabajando directamente en él. El dia que se ponga en marcha el servidor y no sea de pruebas deberá pensarse en acceder a él remotamente, en este caso por el puerto 22 o el que se desee abrir para acceder al eĺ vía SSH.. 

Finalmente, Probamos la configuración antes de reiniciar el servicio. Debe entenders que cada servidor concreto necesitará una fichero pf.conf diferente, aquí simplemente se ha puesto una idea general.

Y con esto acabamos nuestro primer servidor FreeBSD,  ahora tendríamos que trabajar los servicios que se instalarían en él,  para ello se pueden ver las propuestas que hemos hecho en este mismo blog ,  si es que son estas la que os interesan. Todas ellas son muy típicas de los Institutios de Enseñanza.

Apreciado lector, entendemos que las IA son la herramienta de consulta más precisa que existe y la de más futuro, y que nuestro trabajo pierde casi todo su interés porque ellas te lo explican. Hecho que aceptamos con gusto, pues nunca debemos quedarnos quietos y no evolucionar y más las personas que estamos interesados en el software libre, y que siempre hemos ido luchando a contracorriente de lo que imponía y impone el mercado. I entendemos que si sabemos utilizar esta herramienta adecuadamente, podremos acceder a niveles de conocimiento muy superiores. Con esto los foros pierden casi todo sentido.