Servidor ldap

ldap es un sistema de autenticación que nos puede valer para centralizar la autenticación de los usuarios. Una vez creada ésta base de datos podemos llamar a los programas que requieran autenticación contactar con ésta base de datos centralizada.

Partimos como casi siempre con una Debian recién instalada y ahí instalamos slapd que es el servicio de ldap y ldap-utils que nos va a permitir gestionar la base de datos ldap.

# apt -y install slapd ldap-utils 

Durante la instalación nos va a pedir el password para el usuario admin (cn=admin,dc=capa8,dc=net).

En algunos manuales hacen referencia a tocar los ficheros de configuración. Dicha acción no es recomendable, para ello, lo recomendable es usar browsers de ldap como jxplorer con el que entraremos mas adelante o con las herramientas que trae ldap-utils.

De momento, para verificar que el servidor está funcionando, en el mismo servidor donde hemos instalado ldap, vamos a ejecutar el comando slapcat, que nos muestra el contenido de la base de datos ldap

# slapcat

Con el siguiente comando vamos a poder ver las entradas disponibles

# ldapsearch -x -h localhost

A continuación para configurar nuestro dominio vamos a reconfigurar slapd

# dpkg-reconfigure -plow slapd 
Omit ldap configuration: NO
DNS domain name: capa8.net
Organization name: Capa8
Administrator Password: password
Database backend to use: MDB
Do you want database to be removed when slapd is purged? NO
Move old database?: YES

Creación y configuración de Usuario, Grupos y U. Organizativas en LDAP.
Ahora vamos a crear todos los objetos …

Enviar correos electrónicos por SMTP+TLS con python

Pues otra espinita que llevaba unos días clavada sacada! :)

Con uno de los programas que estoy haciendo necesitaba mandar un correo electrónico para hacer la verificación de correo electrónico y activación posterior del usuario. Me puse con ello pero los ejemplos que encontraba requería poner la configuración del correo electrónico en el código en lugar de cogerlo de la base de datos, además estaba dando problemas de autenticación con el servidor, cosa que entre que mi código estaba mal y la configuración con el servidor era errónea no se mandaban los mensajes, en el servidor salía el error feúcho:

Error: dict-client: server returned failure:

Así que para implementar ésto sólo vamos a tocar los ficheros de mi proyecto almacenado en ~/dev/ (mi entorno de desarrollo, en producción lo suelo dejar bajo /var/www/ o /var/www/html/).

en ~/dev/capa8/ es donde almaceno los settings.py y las url.py
en ~/dev/web/ es donde almaceno el código de mi programa
~/dev/ es pues donde está mi manage.py de django

Vamos a ver pues el código de urls.py almacenado en capa8, vamos a ver la página de registro de usuario y de validación del correo electrónico:

# vi capa8/urls.py
############
# /account/
# account patterns
urlpatterns += [
    ...
    path('create', views_account.create, name='create'),
    path('verify/<str:token>', views_account.verify_mail, name='verify'),
    ...
]

Ambas funciones las vamos a buscar en el fichero que está en web/views_account.py, pero primero editaremos el web/views.py que es donde voy a crear la función a la que le pasaremos la dirección donde queremos enviar el correo, el …

Servidor de ficheros NFS

Hace muchos años escribí un post con éste mismo propósito, pero es lioso y pide hacer muchas cosas, así que aquí uno mas sencillo, claro y entendedor :)

Servidor

# apt install nfs-kernel-server

Ahora en el fichero /etc/exports definimos los directorios del servidor que queremos compartir por NFS.

# vi /etc/exports
/mnt/hd_extern	192.168.1.0/24(rw,no_subtree_check,async)
/mnt/hd_extern  192.168.1.100(rw,no_subtree_check,async)

La primera línea sería para permitir el acceso a los hosts de la red 192.168.1.0/24 y la segunda sólo al host 192.168.1.100. Con ésta configuración debería valer, pero addicionalmente si la conexión es mediante una red MAN como guifi, tendremos que afinar lo de la pérdida de los paquetes. Una configuración alternativa podría ser:

# vi /etc/exports
/mnt/hd_extern	192.168.1.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check,no_root_squash)
/mnt/hd_extern  192.168.1.100(rw,sync,fsid=0,crossmnt,no_subtree_check,no_root_squash)

Para recargar la configuración usaremos el comando exportfs

# exportfs -arv

La opción -a exporta todos los directorios, la opción -r eliminará las entradas antiguas, mientras que la opción -v nos mostrará el resultado de la ejecución.

Cliente
Primero instalamos el cliente nfs en el equipo

# apt install nfs-common

Creamos un punto de montaje y montamos el directorio del servidor NFS

# mkdir /mnt/hd_remot
# mount 192.168.1.3:/mnt/hd_extern /mnt/hd_remot/

Para montarlo automáticamente, añadir en /etc/fstab

# vi /etc/fstab
192.168.1.3:/mnt/hd_extern /mnt/hd_remot nfs defaults 0 0

Y listos! :)…

Arreglando modelos con django sobre postgresql

Éstos días estaba atascada con los modelos, como soy novata con todo ésto y para ponerlo mas difícil todavía sobre postgresql! así que una chuletilla por cuando se me de por empezar a toquetear los modelos y empiecen a salir errores raros que te joden por todos lados. Por supuesto en el entorno en el que estoy trabajando es de desarrollo y estas burradas en entornos de producción es necesario exportar los datos y luego importarlos.

Primero de todo, para cualquier instancia de python que esté usando la base de datos postgresql y reinicia postgresql.

# service postgresql restart
# su - postgres

Ahora nos podemos encontrar con dos cosas, primero, que queramos reconstruir la base de datos o que simplemente queramos eliminar el contenido relacionado con un modelo.

Recrear base de datos

postgres@server:~$ dropdb wcli_db
postgres@server:~$ createdb wcli_db

Eliminar contenido referente a un modelo

postgres@server:~$ psql wcli_db
psql (9.6.10)
Type "help" for help.

wcli_db=# DROP TABLE web_voucher CASCADE;
NOTICE:  drop cascades to constraint web_payment_id_voucher_id_c75a11d9_fk_web_voucher_id on table web_payment
DROP TABLE

Con el CASCADE le indicamos que borre todas las vistas y constraints vinculadas a la tabla.…

Crear entorno virtualenv de python3.5

Si usamos virtualenv a secas nos creará un entorno virtual de python2 y python3, pero en mi caso me interesa usar python3.5 para una aplicación que estoy haciendo. Así que hoy veremos como instalar y entrar en un entorno virtual de python.

Primero de todo, python es fácilmente extendible con módulos, los módulos son librerías que han programado otros y que hacen cosas, yo los llamo chinos, porque una vez compiladas, las librerías son binarios y si los editas con un editor de textos lo que ves es un galimatías de carácteres, lo comúnmente llamado “chinos”.
Ésta forma de programar nos permite avanzar mucho mas rápido en el desarrollo de nuestra aplicación, destinando nuestro tiempo a programar lo que hace realmente nuestra aplicación y facilitar el trabajo a la creación de por ejemplo la estructura de la página web con Flask y Bootstrap o un framework como django.

Los módulos las instalamos mediante un gestor de paquetes, como en cualquier distribución de gnu/linux, podemos especificar pip para python2 y pip3 para python3 o python3.5, ésto lo que hace es descargarte el módulo en el directorio /usr/local/lib/python3.5/dist-packages, con pip3 show podemos ver información del módulo:

laura@melatonina:/usr/src$ pip3 show flask
Name: Flask
Version: 1.0.2
Summary: A simple framework for building complex web applications.
Home-page: https://www.palletsprojects.com/p/flask/
Author: Armin Ronacher
Author-email: armin.ronacher@active-4.com
License: BSD
Location: /usr/local/lib/python3.5/dist-packages
Requires: Jinja2, click, itsdangerous, Werkzeug

Si necesitas saber qué hace el módulo, es tan simple como ir al directorio correspondiente y editar el fichero .py correspondiente al módulo.…

Levantar tunnel vtun con lxc (proxmox)

Me encuentro con éste error

Oct 31 13:16:06 asterisk vtund[1748]: VTun client ver 3.X 05/15/2013 started
Oct 31 13:16:06 asterisk vtund[1748]: Connecting to 213.162.195.57
Oct 31 13:16:06 asterisk vtund[1748]: Use SSL-aware challenge/response
Oct 31 13:16:06 asterisk vtund[1748]: Remote Server sends #012.
Oct 31 13:16:06 asterisk vtund[1748]: Session sipcapa8[213.162.195.57] opened
Oct 31 13:16:06 asterisk vtund[1748]: Can't allocate tun device tun1000. No such file or directory(2)
Oct 31 13:16:06 asterisk vtund[1748]: Session sipcapa8[x.x.x.x] closed
Oct 31 13:16:06 asterisk vtund[1748]: Exit
Oct 31 13:17:09 asterisk vtund[1727]: Terminated

El motivo es que al tratar de levantar interfaces de red dentro del lxc no tenemos permisos y tenemos que definirle que éste contenedor si puede levantar interfaces de red.

Primero entramos en el host donde se encuentra el contenedor y apagamos el contenedor

# pct shutdown 104

Para ello modificamos el fichero de configuración del contenedor y añadimos al final ésta línea

root@wezen-04:/etc/pve/lxc# vi /etc/pve/lxc/104.conf
lxc.cgroup.devices.allow: c 10:200 rwm

Ahora arrancamos el contenedor de nuevo y ejecutamos los siguientes comandos

root@wezen-04:/etc/pve/lxc# pct start 104
root@wezen-04:/etc/pve/lxc# pct enter 104
root@asterisk:/# mkdir /dev/net
root@asterisk:/# mknod /dev/net/tun c 10 200
root@asterisk:/# ip tuntap add mode tap
root@asterisk:/# ip link
root@asterisk:/# service vtun restart
root@asterisk:/# ifconfig |grep tun
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00   
tun1000   Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-0

Los comandos que hemos puesto los tendremos que ejecutar cada vez que reiniciemos la máquina, así que le decimos que ejecute éstos comandos justo después de levantar la interfaz de red

auto eth1
iface eth1 inet static
        address x.x.x.x
        netmask 255.255.255.224
        

Modoboa: mi solución a mis problemas de mail

Vale, el post de antes… si os queréis complicar la vida… ya lo arreglaré, pero de momento traigo otra solución… en menos de un par de horas ya tengo un servidor de correo multi-dominio que se monta plis-plas… se llama modoboa y tiene todo lo que busco :)

Partimos de una debian9 con IP pública y los DNS apuntando a mail.nusepas.com.

Ahora descargaremos el instalador de modoboa y lo ejecutaremos

root@mail-nusepas:~# cd /usr/src
root@mail-nusepas:/usr/src# git clone https://github.com/modoboa/modoboa-installer
root@mail-nusepas:/usr/src# cd modoboa-installer/
./run.py nusepas.com

La instalación durará unos 20 minutos aproximadamente. Una vez pasados, haces login en https://mail.nusepas.com y entras con el usuario y contraseña por defecto que nos indica al final de la instalación.…

Instalar servidor de correo postfix, postfixadmin, dovecot, tls

Venga, vamos a ver si finalmente consigo instalar un servidor de correo que sea administrable, ya que las veces que lo he intentado siempre me he quedado a medias… vamos ahí de nuevo pues!

Partimos de una debian recién instalada (en mi caso tiro de un contenedor lxc) y actualizada.

Instalamos algunos paquetes básicos para poder usar en condiciones el sistema:

root@mail-nusepas:~# apt install vim mtr glances net-tools

Clúster Proxmox + añadir disco

El resumen de la de hoy, montar un clúster proxmox y luego añadir un disco addicional a /var/lib/vz2.

La primera es que partimos de 3 servidores, que es el mínimo recomendado para montar un clúster de proxmox. El motivo es que los nodos del clúster sincronizan continuamente los datos y si uno de los nodos se cae, si sólo hubiese dos podría dar problemas al reconstruir el nodo, ya que algunos datos se quedaron desactualizados o a medias en el nodo del clúster que está caído (que ha dejado de funcionar). Así que si montas cualquier tipo de clúster, el mínimo son 3 nodos, o 3 servidores distintos, en éste caso con instalaciones de proxmox.

Tengo 3 servidores con éstos nombres y éstas IPs (todos sin maquinas virtuales y se recomienda así para que no haya problemas de IDs duplicados)

– wezen-01.capa8.cat 10.90.226.90
– wezen-02.capa8.cat 10.90.226.91
– wezen-03.capa8.cat 10.90.226.92

Wezen-01 será el “master”, siempre que tengamos que levantar el clúster después de un corte de electricidad, vamos a levantar primero ésta máquina.

Entramos en el servidor wezen-01 y ejecutamos pvecm create nombredelcluster. Tenemos que tener en cuenta que se no se puede cambiar el nombre una vez creado y se recomienda no cambiar las IPs.

root@wezen-01:~# pvecm create wezen

Ahora entramos en los dos otros nodos y los conectamos con el nodo maestro. Nos pedirá el password de root del servidor maestro.

root@wezen-02:~# pvecm add 10.90.226.90
root@wezen-03:~# pvecm add 10.90.226.90

Y listos, ahora si miramos el estado del clúster nos …

Gestión del tiempo con timedatectl

Otro post sobre el tiempo! ayer veíamos como no pasar la hora del host a una máquina virtual con virtualbox. Ahora vamos a ver como cambiar la hora del sistema host cuando date -s no te hace ni puto caso porque la fecha se está actualizando por otro lado, en éste caso timedatectl

Desactivar el cliente NTP

# timedatectl set-ntp 0

Cambiar la fecha

# timedatectl set-time "2018-09-03 12:20:00 CEST"

Volver a activar el cliente NTP

# timedatectl set-ntp 1