Servidor SRV-INTERNET

Objetivo

Máquina expuesta a la intemperie de internet:

  • Servicios que deben poderse acceder desde internet y acceso limitado y controlado a recursos de brocoli.
  • Servicios que han de acceder a internet, p.ej.
    • crons de actualización de la ip a la nube
    • crons de actualización de la wiki a la nube

Reverse proxy

Para podernos conectar al http del movil usado como webcam, usamos un reverse proxy con apache

El caso actualmente instalado es acceder a telefononum01:8080 mediante la dirección https://srv-internet.lechuga/telefononum01.

El propio reverse proxy provee autenticación de acceso.

Carga directa de archivos

Hay un script que, activado, permite subir archivos al servidor sin preguntas, tan sólo arrastrando el archivo al applet java

Sólo activar temporalmente y en caso necesario, para agiliar la captura de archivos

Se accede mediante el enlace https://srv-internet.lechuga.eu/s

los archivos quedan en html_internet/s/uploads

Se activa manipulando el archivo .htaccess situado en /mnt/html_internet/s/.htaccess

en el archivo README hay más información al respecto

Webdav

Por eficiencia, toda la configuración se lleva en el archivo de configuración de apache2:

vim /etc/apache2/sites-enabled/010-srv-internet.lechuga.eu.conf

En el archivo de configuración del sitio hay instrucciones de cómo configurar los almacenamientos, los usuarios y las contraseñas

Accesos comunes

https://srv-internet.lechuga.eu/nubes/
https://srv-internet.lechuga.eu/libros-uoc/
https://srv-internet.lechuga.eu/peliculas/
https://srv-internet.lechuga.eu/musica/
https://srv-internet.lechuga.eu/multimedia/

Carpeta pública

Mediante webdav

Hay una carpeta de acceso público sin clave, pero sin permisos de listado ni para subir archivos.

los archivos de la carpeta son accesibles en https://srv-internet.lechuga.eu/nubes/publico/[nombre_de_archivo]

Para cargar archivos, pegarlos en /mnt/pool_crit/nubes/publico mediante línea de comandos o webdav.

Carpeta de intercambio-lechuga

Información de la configuración de la carpeta: Clic aquí.

https://srv-internet.lechuga.eu/nubes/intercambio-lechuga es un espacio donde se puede intercambiar información entre dispositivos de la red lechuga

El usuario es intercambio-lechuga


# Subir archivo con curl: https://curl.haxx.se/docs/manpage.html#-T
curl --user intercambio-lechuga https://srv-internet.lechuga.eu:4430/intercambio-lechuga/  --upload-file nombre_archivo

# Bajar archivo con curl (si da error, éste se muestra en el archivo!)
curl --user intercambio-lechuga --fail https://srv-internet.lechuga.eu:4430/intercambio-lechuga/nombre_archivo --output nombre_archivo

# o bien:
wget --user=intercambio-lechuga --ask-password https://srv-internet.lechuga.eu:4430/intercambio-lechuga/nombre_archivo

# Conectar al servidor
cadaver https://srv-internet.lechuga.eu:4430/intercambio-lechuga

# Listar local
lls
# Listar remoto
ls
# subir archivo(s)
put *
mput *

# bajar archivo(s)
get *
mget *
 

Configuración

Este directorio también es servido por el servicio vsftpd con los usuarios definidos en /etc/vsftpd_users/

La autenticación de acceso se hace contra el servidor RADIUS.

Una vez autenticado, se tiene acceso a todo el arbol de directorios, excepto el público

Anotaciones de seguridad

http://www.apacheweek.com/issues/00-12-29
https://www.defcon.org/images/defcon-12/dc-12-presentations/dc-12-beale.pdf

<Limit PROPFIND PROPPATCH LOCK UNLOCK MOVE COPY MKCOL PUT DELETE>
	Order allow,deny
	Deny from all
</Limit>

FTPS

más información en Guia VSFTPD

Configuración srv-internet.lechuga.eu

  • El servidor es ftps://srv-internet.lechuga.eu:990
  • El directorio raiz para usuarios estándar es /mnt/nubes/. Compartido con el sistema webdav.
  • El usuario ftp está en el grupo nubes, para poder acceder al directorio de nubes.

Gestión de usuarios

  • Los usuarios son virtuales, aprobados por radius. El servidor se muestra como usuario vsftp.
  • Para crear un usuario, crearlo en el servidor radius y activarlo en el fichero /etc/vsftpd.allowed_users
  • Para eliminar el usuario, eliminarlo del radius y quitarlo del fichero /etc/vsftpd.allowed_users
  • No podrá logarse un usuario si su root del chroot jail es escribible.
  • El directorio se define en /etc/vsftpd_users/, un archivo por usuario.

HEIMDALL

Está configurado a través de apache escuchando desde el puerto 8001

8001         tcp       apache2  (heimdall)

SSH

Está escuchando en el puerto 220

Uso intercambio de archivos

Se utiliza para el scp de intercambio de archivos, con el usuario intercambio-lechuga.

Mirar el apartado webdav para más detalles de cómo está montado.

Uso syncronización de directorios entre dispositivos

Ejemplo de uso: Directorios de asignaturas de la UOC en el móvil

Criterios:

  • Si la sincronización está asociada a un usuario (hugo, pablo, evelyn) Se utilizará éste para el login ssh
  • Se utiliza autenticación con clave pública, y sólo con forced commands

Generación de par de claves

Ir a RedLechuga.GuiaSSHD#generacion_claves

Atención, la aplicación de android necesita que las claves estén en formato "dropbear":

  • En el container dev está instalado el paquete para generarlas
  • Con un lxc pull/push copiarlas

Configuración del archivo authorized_keys de cada usuario

Incluir en el fichero ~/.ssh/authorized_keys una linea del tipo:

command="/usr/local/bin/rrsync -ro /",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3Nza...

Apache

Acceso a la guia apache

La autenticación, donde se requiera, es por Radius de SRV configurado en el /etc/apache2/apache2.conf.

Puerto 443

wiki de lechuga

con protección con contraseña mediante .htaccess y .htpasswd se accede con

https://srv-internet.lechuga.eu:4430/wiki_lechuga

Webdav

El servicio webdav apunta a /mnt/nubes

Hay permisos ACL para www-data por defecto para este directorio

Puerto 80

Dando servicio al puerto 80 sólo al directorio /mnt/html_internet/.well-known/acme-challenge para el challege de let's encrypt.

Se deniega el acceso a cualquier otro lugar

archivo de configuración: lets-encrypt-p80.conf

MySQL

Averiguar qué contiene

Prosody

Servicio XMPP

Acceso a la configuración de XMPP

Renovación de certificados SSL lechuga.eu, hugo.cat, etc. OBSOLETO, BORRAR

Instalación de acme.sh

acme.sh es el bot que hace la renovación de los certificados wildcard

en srv-internet hacer:

Para lechuga

cd /tmp
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail "hugo@hugo.cat"

Renovar certificados

Se hace una primer ejecución para ver el challenge a poner en el dominio, luego reejecutarla y se encontrará el challenge ok

Para ello hay que actualizar el dominio en dondominio:
https://www.dondominio.com/admin/domains/hugo.cat/#service-dnszone
https://www.dondominio.com/admin/domains/lechuga.eu/#service-dnszone

~/.acme.sh/acme.sh --renew-all --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

Renovación de certificados let's encrypt

La renovación, para soportar dominios wildcard, se hace mediante confirmación por DNS.

Esto obliga a hacerlo manual. Para indicaciones, ejecutar el script /opt/renueva-certs/renueva-certs.

La publicación dentro de la red lechuga se hace mediante los comandos:

/opt/renueva-certs/publica-certs lechuga.eu
/opt/renueva-certs/publica-certs hugo.cat

En /etc/cron está configurada la ejecución diaria del comando /opt/renueva-certs/renueva-certs

Para el dominio lechuga.eu, el script deja el nuevo certificado se deja en /mnt/html_internet/ssl-certs/ y en /mnt/nubes/red-lechuga/ssl-lechuga-eu

Para el dominio hugo.cat, el script deja el nuevo certificado y clave en /mnt/nubes/red-lechuga/ssl-hugo-cat Para ser incorporado al hosting

Distribución de los certificados en lechuga.eu

Las diferentes máquinas de lechuga recuperan los certificados mediante curl. El script /usr/local/bin/actualiza-certs ejecutado periodicamente en cada host se encarga de ello.
Este script requiere del comando curl, del archivo /etc/certs.key y del grupo ssl-cert activo

Estas máquinas deben tener la clave para desencriptar el fichero que contiene la clave privada del certificado. Mirar el script actualiza-certs para más detalles.

Internamente el nuevo certificado se encuentra en el directorio srv-internet:/mnt/html_internet/ssl-certs

El directorio está expuesto mediante el puerto 80, pero asegurado contra listado.

Los certificados están expuestos en:

El archivo de clave privada está encriptado, mediante el comando:
openssl enc -base64 -aes-256-cbc -in lechuga.eu.key -out lechuga.eu.key.enc -pass file:/etc/certs.key

Y lo desencriptamos con el comando:
openssl enc -d -base64 -aes-256-cbc -in lechuga.eu.key.enc -out lechuga.eu.key -pass file:/etc/certs.key

Actualización del certificado en el router EdgeMax

Según https://www.stevejenkins.com/blog/2015/10/install-an-ssl-certificate-on-a-ubiquiti-edgemax-edgerouter/

Automatizado, en un principio no hay que ejecutar esto...

  • Hay un script en /home/ubnt/actualiza_certs que hace el proceso
  • Se ejecutan mediante enlace en /etc/cron.weekly

Actualmente hay que hacerlo de manera manual, a partir de los certificados instalados en cualquiera de las máquinas.

Es necesario unir la clave privada y el certificado en un mismo archivo.

En resumen

  1. Se descarga el certificado y la clave privada encriptada al router.
  2. Se desencripta el fichero con la clave privada.
  3. Se concatena la clave y el certificado y lo copiamos a /etc/lighttpd.
  4. Se corrigen permisos y propiedad.
  5. Se reinicia lighttpd.

Una vez entrado en el shell del router:

# Se supone que existe el archivo /etc/certs.key, que es la clave de encriptación del certificado

curl http://srv-internet.lechuga.eu/ssl-certs/lechuga.eu.key.enc > ~/lechuga.eu.key.enc
curl http://srv-internet.lechuga.eu/ssl-certs/lechuga.eu.crt > ~/lechuga.eu.crt

openssl enc -d -base64 -aes-256-cbc -in ~/lechuga.eu.key.enc -out ~/lechuga.eu.key -pass file:/etc/certs.key
rm ~/lechuga.eu.key.enc
mv /etc/lighttpd/server.pem ./server.pem.back
cat ~/lechuga.eu.key ~/lechuga.eu.crt > /etc/lighttpd/server.pem
rm ~/lechuga.eu.key ~/lechuga.eu.crt

sudo chown root.root /etc/lighttpd/server.pem
sudo chmod 400 /etc/lighttpd/server.pem

sudo kill -SIGINT $(cat /var/run/lighttpd.pid)
sudo /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf

Otros procesos