guacamole debian streetch + open ldap + nginx

Otra entrada que es un apunte.

En esta ocasión, instalaremos guacamole, como gateway de conexión a nuestros server y exponerlo a internet.

Partimos de una debian 9 pelada y instalamos las dependencias:


# apt install tomcat8 libcairo2-dev libossp-uuid-dev libavcodec-dev libavutil-dev libswscale-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev libjpeg62-turbo-dev libpng-dev libpng16-16 git

# git clone git://github.com/apache/incubator-guacamole-server.git
autoreconf -fi
./configure --with-init-dir=/etc/init.d
# make
# make install
# ldconfig
# systemctl enable guacd
# /etc/init.d/guacd start

creamos el fichero guacamole.properties


# nano /etc/guacamole/guacamole.properties


# Guacamole - Clientless Remote Desktop
# Copyright (C) 2010 Michael Jumper
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .

# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822

# Auth provider class (authenticates user/pass combination, needed if using the provided login screen)

# LDAP properties
ldap-hostname: ldap.craem.net
ldap-port: 389
ldap-user-base-dn: DC=craem,DC=net
ldap-search-bind-dn: CN=admin,DC=craem,DC=net
ldap-search-bind-password: password
ldap-config-base-dn: DC=craem,DC=net
ldap-username-attribute: uid

Creamos el enlace simbólico para la app


# ln -s /etc/guacamole/ /var/lib/tomcat8/.guacamole

Configuramos la parte cliente (la 0.9.14 es la última a fecha 10/2018):


# wget https://sourceforge.net/projects/guacamole/files/current/binary/guacamole-0.9.14.war
# mv guacamole-0.9.14.war /var/lib/tomcat8/webapps/guacamole.war
# service tomcat8 restart

Ahora instalamos el cliente ldap


# cd /etc/guacamole
# wget -c http://apache.org/dyn/closer.cgi?action=download&filename=guacamole/0.9.14/binary/guacamole-auth-ldap-0.9.14.tar.gz
# service tomcat8 restart

Ahora nos queda actualizar el schema de open ldap:

# tar -zxvf guacamole-auth-ldap-0.9.14.tar.gz
cp guacamole-auth-ldap-0.9.14.jar /etc/guacamole/

Dentro de la carpeta schema, tenemos la parte de openldap que hemos de incorporar en nuestro server… lo copiamos e importamos


root@ldap:/usr/src# ldapadd -Q -Y EXTERNAL -H ldapi:/// -f guacConfigGroup.ldif
adding new entry "cn=guacConfigGroup,cn=schema,cn=config"

root@ldap:/usr/src#ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: cn={4}zarafa,cn=schema,cn=config

dn: cn={5}radius,cn=schema,cn=config

dn: cn={6}guacConfigGroup,cn=schema,cn=config

root@ldap:/usr/src#

Ahora nos queda crear los objetos de nuestros servers…… creamos un fichero, por ejemplo, entrada.ldif


dn: cn=zeus,ou=maquines,dc=craem,dc=net
objectClass: guacConfigGroup
objectClass: groupOfNames
cn: zeus
guacConfigProtocol: ssh
guacConfigParameter: hostname=192.168.1.2
guacConfigParameter: port=22
guacConfigParameter: security=ssh
member: cn=Angel Elena,cn=craem_users,dc=craem,dc=net

Guardamos cambios e importamos el fichero:


# ldapadd -x -D cn=admin,dc=goufone,dc=local -W -f entrada.ldif

El siguiente paso, es añadir el ngix y certbot para hacer de reverse proxy e incorporar el certificado:


# apt-get install nginx

creamos el fichero
# nano /etc/nginx/sites-available/guacamole

y añadimos:

server {
listen 80;
listen [::]:80;
server_name guacamole;

location / {
proxy_pass http://127.0.0.1:8080/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
access_log off;
}

}

Y creamos el enlace simbólico en /etc/nginx/sites-enabled

Reiniciamos el nginx y ya tenemos el servicio preparado 😉

vamos al navegador … http://guacamole

outlook.com y greylisting

Desde hace años, tengo mi propia solución antispam, basada en:

– debian
– postfix
– Greylist
– openSPF
– RBL
– Spam Assassin
– MailScanner & MailWatch

Funciona bastante bien y tengo muy pocas quejas, ya que con los filtros de postgrey, descarto de un plumazo el 70% de spam.

Como era de esperar, el servicio de greyList y microsoft no son amigos…. cuando envías un mail por primera vez, devuelves un 4.5.0 try later y en 300 segundos, deberías de volver a intentarlo desde la misma IP, peeeero Microsoft no y vuelve a intentarlo desde otra, con lo que se van sumando así 5 minutos cada vez.

Google, con su servicio bastante extendido (¿quién no tiene un gmail?), hace la entrega desde la misma IP, con lo que el servicio greyList funciona bien.

Como no voy a desactivar el greyList y por fuerza tengo que comunicarme con gente que usa outlook.com o tiene el office365 contratado, tengo que solucionar el problema…. no puedo permitir que un mail tarde 12 horas en llegar.

Googleando un poco, veo bastante gente que se ha dado por vencido y ha acabado desactivando el greylisting, pero si observamos bien, Microsoft tiene unos rangos:


https://technet.microsoft.com/en-us/library/dn163583(v=exchg.150).aspx

Resumiendo:

Tengo que hacer un bypass de estos rangos en el greyList.

Vamos a nuestro postgrey:

# nano /etc/postgrey/whitelist_clients

Editamos este fichero y añadimos los rangos de M$

# postgrey whitelist for mail client hostnames
# --------------------------------------------
# put this file in /etc/postgrey or specify its path
# with --whitelist-clients=xxx
#
# postgrey version: 1.34, build date: 2011-05-04

# Debian-specific additions
# I *know* they run real mail queues, so greylisting only creates
# bigger load for them.
23.103.132.0/22
23.103.136.0/21
23.103.144.0/20
23.103.156.0/22
23.103.191.0/24
23.103.198.0/23
23.103.198.0/24
23.103.199.0/24
23.103.200.0/22
23.103.212.0/22
40.92.0.0/14
40.107.0.0/17
40.107.128.0/18
52.100.0.0/14
65.55.88.0/24
65.55.169.0/24
94.245.120.64/26
104.47.0.0/17
104.212.58.0/23
134.170.132.0/24
134.170.140.0/24
157.55.234.0/24
157.56.110.0/23
157.56.112.0/24
207.46.51.64/26
207.46.100.0/24
207.46.163.0/24
213.199.154.0/24
213.199.180.128/26
216.32.180.0/23
2a01:111:f400:7c00::/54
2a01:111:f403::/48
104.47.0.0/17
40.107.0.0/16
/.*outbound.protection.outlook.com$/
/outlook/

Añadimos las ip’s al principio.

ahora, para que el postgrey use este fichero, tenemos que editar el siguiente fichero:

# nano /etc/default/postgrey

Y lo dejamos tal que:

# postgrey startup options, created for Debian

# you may want to set
# --delay=N how long to greylist, seconds (default: 300)
# --max-age=N delete old entries after N days (default: 35)
# see also the postgrey(8) manpage

# POSTGREY_OPTS="--inet=60000"
POSTGREY_OPTS="--inet=60000 --whitelist-clients=/etc/postgrey/whitelist_clients"
# the --greylist-text commandline argument can not be easily passed through
# POSTGREY_OPTS when it contains spaces. So, insert your text here:
#POSTGREY_TEXT="Your customized rejection message here"

Una vez hecho esto, nos toca reiniciar servicios….

En mi caso, el postgrey 1.34 con debian 7, el /etc/init.d/postgrey restart no acaba de ir bien, con lo que tengo que acabar matando el servicio con kill 9 y el postfix, de la manera habitual

enjoy 😉

Automatizar añadir varias máquinas debian al ldap

Esta vez, tenía que automatizar la entrada anterior y añadir varias máquinas al ldap para login.

Como no me hacía especial ilusión modificar todos los ficheros a mano, tenemos al amigo bash + sed.

al lío:


#!/bin/bash

# ########################
# ### by craem ###########
# ########################
# ########################

function instala_paquetes(){
echo "------------------------------------------------------------"
echo "aptitude -y install libnss-ldap libpam-ldap ldap-utils sudo "
aptitude -y install libnss-ldap libpam-ldap ldap-utils sudo
}

function modifica_ficheros(){
echo "--- modificamos fichero nsswitch.conf -----------------------"
sed -ie 's/compat/ldap compat/g' /etc/nsswitch.conf
echo "--- modificamos el fichero common-session -------------------"
echo "session required pam_mkhomedir.so skel=/etc/skel umask=0022" >> /etc/pam.d/common-session
echo "--- reiniciamos el servicio nscd ----------------------------"
/etc/init.d/nscd restart
echo "--- modificamos el sudoers ----------------------------------"
echo "%admin_users ALL=(ALL) ALL" >> /etc/sudoers
echo "--- modificamos el fichero common-auth ----------------------"
echo "auth required pam_access.so" >> /etc/pam.d/common-auth
echo "--- modificamos el access.conf ------------------------------"
echo "-:ALL EXCEPT root (admin_users):ALL EXCEPT LOCAL" >> /etc/security/access.conf
echo "--- modificamos el fichero ldap.conf ------------------------"
sed -ie 's/#BASE dc=example,dc=com/BASE dc=craem,dc=net/g' /etc/ldap/ldap.conf
echo "--- modificamos el ldap.conf --------------------------------"
echo "URI ldap://ldap.craem.net" >> /etc/ldap/ldap.conf
echo "--- fin del script ------------------------------------------"

}
instala_paquetes
modifica_ficheros

Servidor syslog centralizado debian jessie

Desde hace tiempo, me gusta centralizar los logs en una sola máquina…. por ejemplo, donde tengo el nagios.

la máquina base es una debian jessie pelada y instalamos el syslog-ng:

apt-get install syslog-ng

Y ahora modificamos el fichero /etc/syslog-ng/syslog-ng.conf

options { chain_hostnames(yes); flush_lines(0); use_dns(no); use_fqdn(no);
owner("root"); group("adm"); perm(0640); stats_freq(0);
create_dirs(yes); bad_hostname("^gconfd$");
};

########################
# Sources
########################
# This is the default behavior of sysklogd package
# Logs may come from unix stream, but not from another machine.
#
source s_src {
system();
internal();
};

# If you wish to get logs from remote machine you should uncomment
# this and comment the above source line.
#
#source s_net { tcp(ip(127.0.0.1) port(1000)); };

source syslog_udp {
udp(port(514));
};

.
.
.
.
.
# Debian only
destination d_ppp { file("/var/log/ppp.log"); };

# Destí logs Mikrotiks
destination clientslogs {
file("/var/log/logscraem/$YEAR$MONTH$DAY/$HOST.auth");
};

.
.
.
.
log {
source(syslog_udp);
destination(clientslogs);
};

Nos crearemos un directorio por día y un fichero por dispositivo.

Reiniciamos el syslog-ng y listo.

Upgrade zarafa 7.2.x a 7.2.4.29

Otra entrada que es un apunte.

Hace dos años aprox, actualicé mi server de correo zarafa a a 7.2 Beta, por unos problemas con la 7.2.1 y allí se quedó.

Hace unos meses, decidí volver a actualizar el server… prefiero actualizar el zarafa, ya que instalar de nuevo y migrar el sql / certificado, es muy pesado.

Primero de todo, descargamos la última versión disponible:

cd /usr/src

wget -c https://download.zarafa.com/community/final/7.2/7.2.4.29/zcp-7.2.4.29-debian-7.0-x86_64-opensource.tar.gz

Y extraemos los archivos:

# tar -zxvf zcp-7.2.4.29-debian-7.0-x86_64-opensource.tar.gz
# cd zcp-7.2.4.29-debian-7.0-x86_64-opensource

Ahora empieza el follón……

Primero de todo, nos hacemos una copia de todos los ficheros situados en:

/etc/zarafa
/usr/share/zarafa-webaccess/

Y ahora vamos a actualizar de la siguiente manera:

dpkg --auto-deconfigure -i *.deb

Dará bastantes errores, pero seguimos adelante cuando acabe el dpkg y corregimos los errores de dependencias:

#apt-get -f install
#dpkg --auto-deconfigure -i *.deb

Ahora reestablecemos los ficheros de la copia de seguridad en /usr/share/zarafa-webaccess y modificamos el seguiente fichero:

root@zeus:/etc/zarafa# nano dagent.cfg

Y cambiamos las siguientes líneas:

server_socket = file:///var/run/zarafa

Y ahora en server.cfg

root@zeus:/etc/zarafa# nano server.cfg

Y cambiamos la línea:

local_admin_users = root vmail zarafa

Reiniciamos los servicios de zarafa/apache y listo.

Freeradius stop on logger rotate

Otra entrada que es un apunte.

Cuando instalas el freeradius y lo dejas tal cual configurado, cuando hace el log rotate, se queda parado….. aquí explican el bug:

Freeradius stop

Para impedir que se quede parado, tras hacer el logrotate, hemos de modificar el siguiente fichero:


# nano /etc/logrotate.d/freeradius

Y ha de quedar tal que:

/var/log/freeradius/*.log {
weekly
rotate 52
compress
delaycompress
notifempty
missingok
postrotate
/etc/init.d/freeradius restart > /dev/null
endscript
}

Hemos de cambiar la línea

/etc/init.d/freeradius reload > /dev/null

a

/etc/init.d/freeradius restart > /dev/null

enjoy 😉

Añadir a inicio Flash Operator Panel, en debian

Una pequeña entrada, que me sirve para recordar cómo añadir al inicio de mi Debian, que autoarranque el Flash Operator Panel, aunque esto se aplique a cualquier cosa que queramos.

Primero, dentro del directorio /etc/init.d creamos el siguiente fichero, suponiendo que lo hayamos instalado en /etc/op_panel


root@pbx:/etc/init.d# nano operator_panel

Y le añadimos:

/etc/op_panel/op_server.pl -d

Nota: -d es para lanzarlo como daemon

Y ahora le damos los permisos de ejecución y lo añadimos:

root@pbx:/etc/init.d# chmod a+x operator_panel
root@pbx:/etc/init.d# update-rc.d operator_panel defaults

Y con ésto, ya lo tenemos todo. 😉

Squid3 + openLdap Debian

Hace unos días, me tocó usar squid contra openLdap para autentificar los usuarios. A priori, es bastante más fácil que contra un active directory, ya que no hace falta ni kerberos, samba ni windbind.

Partimos de la base que ya tenemos el openLdap funcionando correctamente y nuestro squid también… así que ahora, editamos el fichero /etc/squid3/squid.conf y lo dejamos tal que:


auth_param basic program /usr/lib/squid3/squid_ldap_auth -b "dc=craem,dc=net" -f "uid=%s" -h 192.168.2.5
auth_param basic children 30
auth_param basic realm Servidor Proxy cRAeM
auth_param basic credentialsttl 6 hours
auth_param basic casesensitive off

acl usuariosLdap proxy_auth REQUIRED
http_access allow usuariosLdap
http_access deny all

Antes de todo, miraremos si tenemos el fichero /usr/lib/squid3/squid_ldap_auth y probamos si el ldap funciona correctamente, haciendo la siguiente prueba:

root@proxy:/etc/squid3# /usr/lib/squid3/squid_ldap_auth -b "dc=craem,dc=net" -f "uid=%s" 192.168.2.5

Le damos al intro y ponemos un user y password:

root@netflow:/etc/squid3# /usr/lib/squid3/squid_ldap_auth -b "dc=craem,dc=net" -f "uid=%s" 192.168.2.5
usuario password
OK

Si sale Ok, entonces es que funcionará.. sinó, pues es que faltará alguna librería o similar

El primer parámetro: auth_param basic children
Indica el número máximo de procesos de auth concurrentes… ojo si tenemos muchos usuarios y colocamos un número bajo, aunque no debería ser problema.

auth_param basic realm Servidor Proxy cRAeM
Es lo que saldrá en la ventanita de user / pass … me gusta tenerlo personalizado 😉

auth_param basic credentialsttl 6 hours
Básicamente, el tiempo que tendrá cacheada nuestras credenciales

auth_param basic casesensitive off
Pues eso

El resto:

acl usuariosLdap proxy_auth REQUIRED
http_access allow usuariosLdap
http_access deny all

acl usuariosLdap proxy_auth REQUIRED
Definimos la acl usuariosLdap con autenticación requerida

http_access allow usuariosLdap
http_access deny all

Permitimos el acceso a los usuarios autentificados y el resto… deny

Enjoy your ldap + squid

Cliente cisco ipsec Debian / Ubuntu

Esta entrada es otro apunte.

Cisco, con su política de licencias y demás, está dejando en desuso su cliente ipsec… para windows 8 funciona con algunos retoques… pero para los que afortunadamente podemos usar linux, el soporte se quedó estancado en el 2009, con lo que, en los últimos kernels, el cliente vpn no funciona.

Como me niego usar windows para conectarme a mis clientes y a mi casa, busqué la compatibilidad…. de hecho, es ipsec y no debería de haber más problema… así que investigando, descubrí que en los repositorios de debian / ubuntu, hay un cliente compatible… así que, a instalar:


craem@music2:~$ sudo apt-get install vpnc vpnc-network-manager
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
...

Y ahora, para configurar el cliente:
icono

Y en las conexiones de red:
conexionesdered

Y añadimos una nueva:
nuevavpn

Y la configuramos:
configVPN

Y una vez lo tenemos hecho….. a conectarnos desde aquí, con el botón derecho del ratón :

icono

Y nada, enjoy your VPN 😉

Wake On Lan Raspberry Pi raspbian

Estos días, he tenido la necesidad de encender algún pc en remoto, mediante wake on Lan y aprovechando que tenía una raspberry Pi, decidí meterle mano.

Primero de todo, decir que la raspberry la tengo con Raspbian, así que buscamos el paquete WakeOnLan y lo instalamos…


pi@prometheus ~ $ sudo apt-get install wakeonlan
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Los paquetes indicados a continuación se instalaron de forma automática y ya no son necesarios.
libblas3gf liblapack3gf mtools
Use 'apt-get autoremove' to remove them.
Se instalarán los siguientes paquetes NUEVOS:
wakeonlan
0 actualizados, 1 se instalarán, 0 para eliminar y 8 no actualizados.
Necesito descargar 11,5 kB de archivos.
Se utilizarán 57,3 kB de espacio de disco adicional después de esta operación.
Des:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main wakeonlan all 0.41-11 [11,5 kB]
Descargados 11,5 kB en 0seg. (18,5 kB/s)
Seleccionando el paquete wakeonlan previamente no seleccionado.
(Leyendo la base de datos ... 58698 ficheros o directorios instalados actualmente.)
Desempaquetando wakeonlan (de .../wakeonlan_0.41-11_all.deb) ...
Procesando disparadores para man-db ...
Configurando wakeonlan (0.41-11) ...

Y ahora a ver la estructura….

pi@prometheus ~ $ wakeonlan
Usage
wakeonlan [-h] [-v] [-i IP_address] [-p port] [-f file] [[hardware_address] ...]

Options
-h
this information
-v
displays the script version
-i ip_address
set the destination IP address
default: 255.255.255.255 (the limited broadcast address)
-p port
set the destination port
default: 9 (the discard port)
-f file
uses file as a source of hardware addresses

See also
wakeonlan(1)

pi@prometheus ~ $

Por lo que para enviar la órden, es tan fácil como:

pi@prometheus ~ $ wakeonlan xx:xx:xx:xx:xx:xx

Sustituimos las xx por la mac address del equipo a endender y listo 😉