Servidor SRV-INTERNET
(redirected from Brocoli.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 sistemawebdav. - 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
devestá instalado el paquete para generarlas - Con un
lxc pull/pushcopiarlas
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
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
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
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 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:
- http://srv-internet.lechuga.eu/ssl-certs/lechuga.eu.key.enc
- http://srv-internet.lechuga.eu/ssl-certs/lechuga.eu.crt
- http://srv-internet.lechuga.eu/ssl-certs/lechuga.eu.chain.crt
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
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
- Se descarga el certificado y la clave privada encriptada al router.
- Se desencripta el fichero con la clave privada.
- Se concatena la clave y el certificado y lo copiamos a /etc/lighttpd.
- Se corrigen permisos y propiedad.
- 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