Etiquetas

domingo, 25 de septiembre de 2016

Proyecto de fin de semana: Usar una fuente ATX como fuente para Lab con termostato (opcional)

Las fuentes ATX genéricas son relativamente económicas y tienen múltiples ventajas: ofrecen una variedad de tensiones de salida con corrientes generosas. 3,3v; 5v, 12V entre otras tensiones de salida sirven para tener una buena fuente de laboratorio con salidas estabilizadas y bien filtradas.
Ideal para probar cualquier circuito digital. A continuación sigue un proyecto muy simple: modificar una fuente ATX genérica y además con un agregado opcional: si no queremos que el cooler funcione constantemente se usa un termostato simple, que encenderá el ventilador cuando la temperatura interna sea superior a los 30° aproximadamente.

En la secundaria, el Cuba del barrio de Belgrano, uno de los primeros trabajos prácticos del taller de electrónica consistía en construir una fuente de alimentación variable de 2-30v. Se empezaba en primer año, en el taller de hojalatería, armando el gabinete de chapa rígida.
Durante un bimestre de segundo año, creo, se mandaba a bobinar el transformador, y con todos los componentes listos, la armábamos. Todavía la conservo y sigue andando muy bien.
La contra de las fuentes como aquella, básicamente es que por no ser switching son muy pesadas. El Apple II fue la primera computadora en tener una fuente switching a fines de los '70 y en aquel tiempo debía resultar muy costoso, pero en términos de "usabilidad" aquella máquina debía pesar menos de la tercera parte de sus competidoras que no usaban fuente switching.
Hoy en día es muy sencillo y relativamente económico encontrar una fuente de tensiones múltiples, con buen filtrado y estabilización: cualquier fuente ATX de PC.

Fuente ATX para Lab, con termostato (opcional)

Este fin de semana me hice de un rato para divertirme adaptando una fuente ATX. Mi idea inicial era la siguiente: precisaba una fuente de 5Vcc con por los menos 2A, para alimentar en simultáneo varias Raspberry Pi que están dando vueltas por ahí. Una de ellas tiene un disco duro que también requiere +12Vcc. Con una fuente que continuamente esté disponible también aprovecharía los 5Vcc para colgar un hub USB que sirviera de cargador para la mayoría de los celulares de la familia.
Además uno de mis TOCs es que no me gustan los coolers. Son necesarios lo sé, pero hacen ruido. Por eso pensé agregarle un termostato a esta fuente modificada. El cooler solo se encendería cuando el calor en el interior fuera superior a cierto umbral.

Para poder conectar todo fácilmente se puede usar una bornera. Yo agregué también una DIN/Canon para usar para la salida para las raspberries.


Una vez hecho eso, hay que cortar los cables y conectarlos uno a uno a la bornera y soldar en la ficha canon. El código de colores usado para identificar las tensiones en las PSU ATX puede encontrarse aquí: http://www.instructables.com/id/A-Makers-Guide-to-ATX-Power-Supplies/step2/Wire-Colors-Functions-in-the-PSU/


Si fuéramos a usar la fuente para un Lab, para probar circuitos o proyectos, con la bornera creo que estaría más que suficiente. Decidí agregar un pequeño termostato, que es un circuito muy similar al que se ve acá: http://www.craig.copperleife.com/tech/thermo/
Basado en un opercacional LM741 como transistor usé un BD140. Entro colector y emisor va a circular la corriente que impulsa el cooler, una vez que la temperatura supere la que se haya calibrado. El termostato es muy simple y con los valores usados sirve para accionarse entre los 25-35 grados centígrados.

Acá se puede ver el termostato ya montado. Hablando eléctricamente, dentro de la fuente el ambiente es muy ruidoso. Pensé que el ruido volvería loco al 741, pero por suerte se comportó de diez.

Así es como quedó una vez cerrado el gabinete.


Es un proyecto simple y creo que útil.

Pero ATENCIÓN con esta advertencia:


Las fuentes switching funcionan con tensiones muy elevadas por eso su manipulación es riesgosa. Por eso hay que tener mucha precaución incluso aunque hayamos desconectado la fuente de los 220V, porque los capacitores quedan cargados de energía por bastante tiempo. Por eso hay que tener mucho cuidado si se desarma una fuente, más si estuvo funcionando recientemente.


Continuar »

lunes, 19 de septiembre de 2016

Configurar servidor LDAP con STARTTLS y SSSD

Un servidor LDAP es parte central de muchos deployments, sean en la nube o en infraestructura propia.
Aplicar los principios de security in depth, es decir procurar siempre aplicar diversos niveles de seguridad contribuye a que nuestros deployments sean más seguros. Por eso en esta entrada se describe cómo integrar un servidor LDAP usando openLDAP con STARTTLS para encriptación. Se usará además GOSA como interfaz gráfica de usuario para la configuración del directorio.
Usaremos además sssd (System Security Services Daemon) que es un approach más reciente y bastante conveniente.



Esta configuración la estoy probando con containers de LXD/LXC por eso quizá los nombres de hosts algo extraños. La ventaja es que con LXC podemos probar con containers la infra que después vamos a llevar la nube (aws, Azure, etc).
La idea centrar es usar el directorio LDAP para autenticación e identificación de usuarios, por eso, aún cuando el servidor LDAP no esté expuesto directamente a Internet vamos a configurar STARTTLS para que el tráfico entre clientes LDAP y el servidor sea encriptado. También llamada oportunistic TLS nos permite utilizar el puerto LDAP estándar (389).

En la máquina que usamos como nuestra CA interna firmaremos los certificados. Lo ideal es que nuestra CA tenga una entidad intermedia o subsidiaria que será la que efectivamente firme los certificados de nuestra organización y que no requieran sites o servicios públicos. Idealmente la máquina de la CA no debiera tener conexión a internet si nos ponemos el nivel de paranoia elevado /alto :

# cd /root/ca

# openssl genrsa -out intermediate/private/ldap02-debian.lxd.key.pem 2048

# chmod 400 intermediate/private/ldap02-debian.lxd.key.pem

2) Crear el csr:

# openssl req -config intermediate/openssl.cnf -key intermediate/private/ldap02-debian.lxd.key.pem -new -sha256 -out intermediate/csr/ldap02-debian.lxd.csr.pem

3) Create certificate:

# openssl ca -config intermediate/openssl.cnf -extensions server_cert -days 999 -notext -md sha256 -in intermediate/csr/ldap02-debian.lxd.csr.pem -out intermediate/certs/ldap02-debian.lxd.cert.pem

#mkdir -p /etc/ssl/{certs,private}

(copiar los certificados de la CA (trust chain), certificado del servidor y la private key.

cp ldap02-debian.lxd.key.pem /etc/ssl/private
chown -R root:openldap /etc/ssl/private
chmod 440 /etc/ssl/private/ldap02-debian.lxd.key.pem

cp ldap02-debian.lxd.cert.pem /etc/ssl/certs
cp ca-chain.cert.pem /etc/ssl/certs

Configurar LDAP:

Configurar /etc/ldap/ldap.conf con los parametros requeridos (BASE y URI):

BASE dc=ldap02-debian,dc=lxd
URI ldap://ldap02-debian.lxd

#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never

# TLS certificates
TLS_CACERT /etc/ssl/certs/ca-chain.cert.pem


Creamos el siguiente archivo ldif para configurar nuestro certificado ssl:

vim /root/certs.ldif

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ca-chain.cert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap02-debian.lxd.cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap02-debian.lxd.key.pem

Y lo importamos al directorio LDAP:

ldapmodify -H ldapi:/// -Y EXTERNAL -f /root/certs.ldif
(si hay algun error revisar permisos y que la ruta a los certs sea la correcta)


Probar que starttls funcione, con el parámetro -ZZ

ldapwhoami -H ldap:// -x -ZZ

Si está todo bien debemos obtener:

anonymous

Forzar usar siempre starttls (opcional pero recomendado):

Creamos el siguiente archivo ldif:

cat /root/forcetls.ldif:
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1

ldapmodify -H ldapi:/// -Y EXTERNAL -f /root/forcetls.ldif

Para probar podemos hacerlo con:

ldapsearch -H ldap:// -x -b "dc=ldap02-debian,dc=lxd" -LLL dn
Si la encriptación está activada obtendremos:

Confidentiality required (13)
Additional information: TLS confidentiality required


En cambio, si con la opción -ZZ forzamos el uso de starttls:

# ldapsearch -H ldap:// -x -b "dc=ldap02-debian,dc=lxd" -LLL -ZZ dn
dn: dc=ldap02-debian,dc=lxd

dn: cn=admin,dc=ldap02-debian,dc=lxd

Con esto último nos habremos asegurado que todas las solicitudes para LDAP se encripten usando STARTTLS.

Recordar: en la instalación de los clientes LDAP se deberá configurar el archivo /etc/ldap/ldap.conf de la misma manera que se indicó arriba. Asegurándose de haber deployado el certificado de la CA o chain trust y referenciarlo a la ubicación correcta.

Instalación de GOSA

Instalar los siguientes paquetes:

# apt-get install gosa gosa-plugin-sudo gosa-plugin-sudo-schema gosa-schema

La configuración básica de GOSA se hace a través de su UI. Es bastante directa. Lo importante es configurar para que use STARTTLS caso contrario no se podrá comunicar con LDAP. Para ello, luego de haber configurado GOSA por la UI debemos agregar en /etc/gosa/gosa.conf:

<location name="default"
ldapTLS="true"
config="ou=gosa,ou=configs,ou=systems,dc=ldap02-debian,dc=lxd">
<referral URI="ldap://localhost:389/dc=ldap02-debian,dc=lxd"
adminDn="cn=admin,dc=ldap02-debian,dc=lxd"
adminPassword="topsecret" />
</location>

Luego podremos ir creando nuestra base de usuarios en LDAP vía gosa:



Configurar sssd en los clientes para que autentifiquen vía LDAP

Lo que resta es configurar sssd en los clientes para que se autentifiquen vía LDAP:

Instalar paquetes para sssd:

ii sssd 1.13.4-3 System Security Services Daemon -- metapackage
ii sssd-ad 1.13.4-3 System Security Services Daemon -- Active Directory back end
ii sssd-ad-common 1.13.4-3 System Security Services Daemon -- PAC responder
ii sssd-common 1.13.4-3 System Security Services Daemon -- common files
ii sssd-ipa 1.13.4-3 System Security Services Daemon -- IPA back end
ii sssd-krb5 1.13.4-3 System Security Services Daemon -- Kerberos back end
ii sssd-krb5-common 1.13.4-3 System Security Services Daemon -- Kerberos helpers
ii sssd-ldap 1.13.4-3 System Security Services Daemon -- LDAP back end
ii sssd-proxy 1.13.4-3 System Security Services Daemon -- proxy back end
ii sssd-tools


Y la configuración de /etc/sssd/sssd.conf:

root@host01-debian:~# cat /etc/sssd/sssd.conf
[sssd]
services = nss,pam
config_file_version = 2
domains = ldap

[domain/ldap]
ldap_schema = rfc2307bis
ldap_search_base = dc=ldap02-debian,dc=lxd
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://ldap02-debian.lxd:389
ldap_id_use_start_tls = True
cache_credentials = True
ldap_tls_cacertdir = /etc/ssl/certs
ldap_tls_cacert = /etc/ssl/certs/ca-chain.cert.pem


[nss]

[pam]

[sudo]

[autofs]

[ssh]

Verificar que la ubicación de los certificados de la CA sea correcta y que además el modo para el archivo config sea 0600:

# ls -l /etc/sssd/sssd.conf
-rw------- 1 root root 435 Sep 18 23:27 /etc/sssd/sssd.conf

Por último si deseamos que los directorios home de los usuarios (configurados en ldap) se creen automáticamente debemos configurar el módulo pam adecuado:

# cat /etc/pam.d/common-session
#
# /etc/pam.d/common-session - session-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of sessions of *any* kind (both interactive and
# non-interactive).
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
session [default=1] pam_permit.so
# here's the fallback if no module succeeds
session requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required pam_permit.so
# and here are more per-package modules (the "Additional" block)
session required pam_unix.so
session optional pam_sss.so
session optional pam_systemd.so
# Added for creating homedir (line to be added):
session required pam_mkhomedir.so
# end of pam-auth-update config


Continuar »