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

CP/M for the mases (2)

Con el CP/M arrancado, ahora qué podemos hacer con él ?

Primero, debemos saber cómo funciona un poco…. comandos, utilidades y demás cosillas.

Para movernos un poco, tenemos varias utilidades básicas que deberíamos de conocer:

– SHOW
– DIR
– PIP
– USER
– REN
– ERA
– TYPE
– DUMP

SHOW
————-

El comando show nos muestra el espacio libre que tenemos en nuestras unidades de disco, siempre y cuando no le pasemos ningún parámetro…

Aquí tenemos la otra captura, especificando como parámetro, la unidad:

DIR
————–

El siguiente comando / utilidad, creo que es conocido por todos… nos muestra el DIRectorio de la unidad que tengamos activa en ese momento, en mi caso la unidad A, y disco 1 de cp/m:

Como opciones, le podemos pasar la unidad y/o un filtro para ficheros….. si por ejemplo, queremos listar los que tengan la extension .com, teclearemos A> dir *.com

Para filtrar, recordemos que los nombres de ficheros son de ocho carácteres más tres de la extensión, tipo fichero1.com
También podemos usar comodines para filtrar la salida…. tenemos las siguientes opciones:


* --> cualquier carácter a partir del * hasta el final
por ejemplo dir a*.bas mostrará todos los ficheros que empiecen por a y la extensión sea .bas
? --> comodín para esa posición; es decir, si consultamos dir a?.com mostrará todos los ficheros que empiecen por a, seguido de cualquier carácter y con la terminación .com


Otras opciones del comando dir:

FULL --> Lista el directorio, con todos los atributos de los ficheros, si llevan password, solo lectura, etc... para usarlo:

dir a: [FULL]

RO --> Muestra los ficheros de solo lectura
RW --> Muestra los ficheros con el atributo de escritura
USER=N --> Muestra los ficheros en el espacio de usuario 'N'
No lo había comentado, pero CP/M no dispone de "carpetas" y los ficheros (yo en su día) los separaba mediante los user-spaces, habiendo un total de 15
EXCLUDE --> Muestra los ficheros, excepto lo que se ponga en el exclude, por ejemplo:
DIR A: [EXCLUDE] *.COM


DRIVE=ALL --> Muestra los ficheros de todas las unidades. En mi caso, por ejemplo, dispongo de unidad A (3"), B (5.25) y C (512 ram dktronics)

PIP

El comando PIP (Peripheral Interchange Program) es para copiar información entre periféricos y la sintaxis es:
PIP destino=origen

CON: Entrada por consola / teclado
AUX: Entrada auxiliar (nunca la he usado)
EOF: Indicador de fin de fichero

CON: Salida por consola
AUX: Salida Auxiliar
LST: Impresora
PRN: Impresora(según el manual, con gestión de tabuladores, números de línea y salto entre páginas)
En mi caso, lo uso para copiar ficheros entre A,B y C…

CP/M for the mases (1)

CP/M son las siglas de Control Program for Microprocessors> y fué desarrollado como proyecto personal por Gary Killdall entre 1973 – 1975, que más tarde fundaría la empresa Digital Research . CP/M fué el primer sistema operativo que exploré, allá por el año 1987, de la mano de mi querido AMSTRAD cpc 6128 que nos compraron a mi hermano y a mi nuestros padres….. El CPC venía con el AMSDOS, un intérprete BASIC. El intérprete es el Locomotive Basic, el Amsdos era la extensión de discos (que no solo provee el servicio de basic, sinó también el firmware en general).

Estas siglas, las había visto en el Altair que tenía en el supermercado del barrio (Supermercado Parque) y lo usaban para control de stocks, junto con unos formidables diskettes de 8″…. era todo «mágico»; diskettes de 8″, mogollón de teclas / luces, un equipo parecido al que salía en la película juegos de guerra y mis paranoias de niño, era de mayor, poder tocar equipos de estos.

Ante la ausencia de internet, mis fuentes de aquella época eran las visitas contínuas los domingos al mercat de Sant Antoni , los fancines de la época, algunos amigos que pertenecían a grupos de cracking / hacking y estaban más avanzados que yo y poco más, pero aquello de cp/m me seguía llamando la atención.

Descubierto los diskettes de 3″ con el CP/M y tras leer el manual 1k veces, metí el temido diskette en la disketera y tecleé |CPM  y me quedé con la cara de oso panda pensando en qué hacer a partir de ahora.

[1] esta imagen es de mi cpc6128 actual, supervitaminado con una M4, playcity y 512kb de ram.

[2] Esta foto corresponde a uno de los discos incluídos en los PCW8256

Sin demorarnos más, encendemos nuestro querido amstrad CPC6128 con el inicio de CPM

Vale, y ahora qué hacemos ?

GEoIP Debian Wheezy (7)

Otra entrada de apunte…. esta vez, quiero permitir el acceso al puerto 25 de mi mailserver a mi red local, vpn y subredes de españa; ya tengo un antispam en una máquina separada y no me interesa que se acceda de manera habitual para entrega de correo.

La entrada original, se encuentra aquí:

https://terminal28.com/how-to-block-countries-using-iptables-debian/

Esto es solo un ejemplo, pero se puede aplicar a más cosas… ssh, VoIP o lo que necesites.

Primero de todo, instalamos las dependencias:


# apt-get install libtext-csv-xs-perl module-assistant geoip-database libgeoip1
# module-assistant --verbose --text-mode auto-install xtables-addons


Una vez instaladas las dependéncias, instalamos las bbdd de maxmind:

# mkdir /usr/share/xt_geoip
# cd /usr/share/xt_geoip
# wget http://terminal28.com/wp-content/uploads/2013/10/geoip-dl-build.tar.gz
# tar xvf geoip-dl-build.tar.gz
# ./xt_geoip_dl
# ./xt_geoip_build -D . *.csv
# rm -fr geoip-dl-build.tar.gz


Una vez aplicado, configuramos los iptables, tal que:


# Generated by iptables-save v1.4.14 on Fri Jan 3 15:57:31 2014
*filter
:INPUT ACCEPT [541:131352]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [528:125051]
:SIPDOS - [0:0]
:SSHDDOS - [0:0]
:MYSQLDOS - [0:0]
:SMTPDDOS - [0:0]
-A INPUT -m geoip --src-cc CN,UA,TW -j DROP
-A INPUT -s 127.0.0.0/8 -p tcp -m tcp --dport 22109 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -p tcp -m tcp --dport 22109 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s 192.168.0.0/16 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -s 10.0.0.0/8 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -s 127.0.0.0/8 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -m geoip --src-cc ES -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22109 -j SSHDDOS
-A INPUT -p tcp -m tcp --dport 3306 -j MYSQLDOS
-A INPUT -p tcp -m tcp --dport 25 -j SMTPDDOS
-A SIPDOS -j LOG --log-prefix "firewall-sipdos: " --log-level 6
-A SIPDOS -j DROP
-A SMTPDDOS -j LOG --log-prefix "firewall-smtpddos: " --log-level 6
-A SMTPDDOS -j DROP
-A SSHDDOS -j LOG --log-prefix "firewall-sshddos: " --log-level 6
-A SSHDDOS -j DROP
-A MYSQLDOS -j LOG --log-prefix "firewall-mysqldos: " --log-level 6
-A MYSQLDOS -j DROP

COMMIT
Enjoy your iptables 😉

LACP vCenter 6.7

Otro apunte.

Hace unos días, actualizamos al infraestructura del CPD y añadimos dos switches con puertos de 10GB en Stack. La idea es, conectar los dos hosts vmware a los switches de 10GB y hacer un bonding LACP entre ellos.

Primero de todo, vamos al apartado de redes en el vCenter y damos el alta el nuevo Distributed switch:

Añadimos un nuevo DS:

Le damos un nombre:

Seleccionamos la versión:

Como tenemos dos puertos a 10, seleccionamos dos y no creamos ningún portGroup por defecto:

y finalizamos la configuración:

Nos aparecerá el nuevo DS en el apartado de redes:

Ahora añadimos los hosts, haciendo botón derecho y Add and Manage hosts

Y seguimos con el asistente:

En este punto, no añadimos ningún interfaz y le damos a next:

Tampoco añadiremos en este caso las management networks y acabamos con el asistente.

Una vez acabado el asistente, añadimos el LAG interface:

Damos un nombre al LACP, con dos puertos, en modo pasivo (en el otro extremo tiene que estar en activo) y el modo de balanceo es Source and destination IP address

Ahora añadimos los UPLINKS en el LACP, botón derecho y Add and Manage hosts:

Vamos siguiendo el asistente hasta acabar…. ahora añadimos las redes en nuestros vmware.

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 !!!!!!!!