GeoIP tables Debian 9 + maxmind v2

Desde hace unos meses (finales 2018), ya no tenemos soporte para la v1 de las BBDD de Maxmind, con lo que, para usar los iptables-addon’s, hemos de convertir la base de datos.

Antes de nada, hemos de preparar el sistema operativo, instalando los siguientes paquetes:


# apt-get install module-assistant xtables-addons-source
# module-assistant auto-install xtables-addons-source
# aptitude install xtables-addons-common curl
# perl -MCPAN -e shell
> install NetAddr::IP
# /usr/bin/perl -MCPAN -e'install Text::CSV_XS'

Ahora, creamos una carpeta en /usr/src y descargamos el siguiente archivo:


# wget -c https://github.com/mschmitt/GeoLite2xtables/archive/master.zip
# unzip master.zip

Entramos dentro de la carpeta y ejecutamos los archivos:


# ./00_download_geolite2
# ./10_download_countryinfo

en la carpeta /tmp tenemos los csv para convertir:


root@sipusers01:/tmp# ls -l

-rw-r–r– 1 root root 12208785 Aug 19 22:02 GeoLite2-Country-Blocks-IPv4.csv
-rw-r–r– 1 root root 3792611 Aug 19 22:02 GeoLite2-Country-Blocks-IPv6.csv

 

Y ejecutamos la conversión:


root@sipusers01:/usr/src/geoip/GeoLite2xtables-master# cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv | ./20_convert_geolite2 /tmp/CountryInfo.txt > /usr/share/xt_geoip/GeoIP-legacy.csv

Este proceso, tardará unos segundos…. esperamos a que termine y importamos la BBDD como siempre, a partir del fichero que hemos convertido:


/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip /usr/share/xt_geoip/GeoIP-legacy.csv

A partir de este momento, ya podemos usar el geoip –src-cc. Para banear, por ejemplo a Chile:


iptables -A INPUT -m geoip --src-cc cl -p udp -m udp --dport 5060 -j DROP

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 😉

Instalando Remmina en debian 9

Otro apunte.

En alguna ocasión, necesito conectarme a escritorios remotos desde mi debian…. siempre he usado remmina y me ha funcionado genial.

Con la última actualización, ya no podemos hacer un simple «apt-get install remmina» y lo han quitado de la versión estable…. pero, podemos instalarlo de la siguiente manera:

en /etc/apt/sources.list añadimos el siguiente repositorio:


deb http://ftp.us.debian.org/debian/ buster main contrib non-free

guardamos y hacemos:


# apt-get update
# apt-get install remmina

Y listo 😉

Nagios + openldap auth + apache 2.4

Esta vez, vamos a integrar la authenticación de usuarios de nuestro nagios con nuestro openLDAP.

Primero de todo, habilitamos los módulos ldap / authnz_ldap

a2enmod authnz_ldap
a2enmod ldap

Modificamos el fichero de sites del nagios:

#nano /etc/apache2/sites-available/nagios.conf

Y lo dejamos tal que:

# SAMPLE CONFIG SNIPPETS FOR APACHE WEB SERVER
#
# This file contains examples of entries that need
# to be incorporated into your Apache web server
# configuration file. Customize the paths, etc. as
# needed to fit your system.

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"


# SSLRequireSSL
Options ExecCGI
AllowOverride None
"<"IfVersion >= 2.3>

AuthType Basic
Require all granted
AuthName "Nagios Access"
AuthLDAPURL "ldap://ldap.miserver.local/dc=miserver,dc=local?uid?sub?(objectClass=*)"
AuthBasicprovider ldap
AuthUserFile /dev/null
Require valid-user


"<"IfVersion < 2.3>
Order allow,deny
Allow from all
AuthType Basic
Require all granted
AuthName "Nagios Access"
AuthLDAPURL ldap://ldap.miserver.local/dc=miserver,dc=local?uid?sub?(objectClass=*)
AuthBasicprovider ldap
AuthUserFile /dev/null
Require valid-user


Alias /nagios "/usr/local/nagios/share"


# SSLRequireSSL
Options None
AllowOverride None
"<"IfVersion >= 2.3>

AuthType Basic
Require all granted
AuthName "Nagios Access"
AuthLDAPURL ldap://ldap.miserver.local/dc=miserver,dc=local?uid?sub?(objectClass=*)
AuthBasicprovider ldap
AuthUserFile /dev/null
Require valid-user



"<"IfVersion < 2.3>
Order allow,deny
Allow from all
AuthType Basic
Require all granted
AuthName "Nagios Access"
AuthLDAPURL ldap://ldap.miserver.local/dc=miserver,dc=local?uid?sub?(objectClass=*)
AuthBasicprovider ldap
AuthUserFile /dev/null
Require valid-user



Ahora modificamos el nagios para que acepte los usuarios:

/
#nano /usr/local/nagios/etc/cgi.cfg

Y dejamos las siguientes líneas así:


authorized_for_system_information=*
authorized_for_configuration_information=*
authorized_for_system_commands=*
authorized_for_all_services=*
authorized_for_all_hosts=*
authorized_for_all_service_commands=*
authorized_for_all_host_commands=*

Reiniciamos apache + nagios y a probar !!!!!!!!

Error "Disallowed key characters in global data." pnp4nagios

/usr/local/pnp4nagios/lib/kohana/system/libraries/Input.php public function clean_input_keys($str) { $chars = PCRE_UNICODE_PROPERTIES ? '\pL' : 'a-zA-Z'; if ( ! preg_match('#^['.$chars.'0-9:_.\-/@]++$#uD', $str)) { exit('Disallowed key characters in global data.'); } return $str; } Hemos de dejar la línea donde se mirar los carácteres especiales, tal cual.]]>

Error «Disallowed key characters in global data.» pnp4nagios

Esta vez, instalando el pnp4nagios en un debian 8, me encontré este error a la hora de visualizar las graficas del nagios:

«Disallowed key characters in global data.»

tras googlear un rato y mirar las coockies / buscar la función, encontré el error en el fichero:

/usr/local/pnp4nagios/lib/kohana/system/libraries/Input.php


public function clean_input_keys($str)
{
$chars = PCRE_UNICODE_PROPERTIES ? '\pL' : 'a-zA-Z';
if ( ! preg_match('#^['.$chars.'0-9:_.\-/@]++$#uD', $str))
{
exit('Disallowed key characters in global data.');
}

return $str;
}

Hemos de dejar la línea donde se mirar los carácteres especiales, tal cual.

Automatizar añadir varias máquinas debian al ldap

#!/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 ]]>

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