Fail2ban gitlab

Hace unos días se usó una vulnerabilidad en la versión que tenía instalada de gitlab en la que era posible ver los mails de los usuarios de la instancia de gitlab… esto hizo que los usuarios empezásemos a recibir correos electrónicos de que nuestra cuenta estaba bloqueada por intentos fallidos de acceso.

Actualicé a la última versión de gitlab y como veía que seguían los intentos de acceso al sistema tomé una drástica decisión, parar el gitlab y encenderlo solo cuando lo necesitase hasta que tuviese tiempo de implementar esta solución que planteo en este post.

Había dos cosas a solucionar, la primera la del proxy de nginx y la segunda la del fail2ban.

Proxy nginx
El gitlab lo tengo en un contenedor lxc detrás de un proxy nginx, la parte del frontal ya la tenía bien configurada, pero faltaba configurar la parte del gitlab. Para ello será necesario editar el fichero de configuración de gitlab y añadir lo siguiente:

# vi /etc/gitlab/gitlab.rb
# Each address is added to the NGINX config as set_real_ip_from address;
nginx['real_ip_trusted_addresses'] = [ '192.168.1.0/24', '192.168.1.10', '2001:0db8::/32' ]
# Other real_ip config options
nginx['real_ip_header'] = 'X-Forwarded-For'
nginx['real_ip_recursive'] = 'on'

Y recargar la configuración

# gitlab-ctl reconfigure
# gitlab-ctl status

Ahora si vemos el log, si está todo bien, veremos ya la ip real

# tail -f /var/log/gitlab/nginx/gitlab_access.log

Listos!

fail2ban
Ahora la segunda parte, bloquear estas ips que nos están dando la brasa y bloquearlas. Lo haremos con fail2ban

# apt -y install fail2ban

Y creamos el fichero de configuración jail.local con este contenido

# vi /etc/fail2ban/jail.local
[DEFAULT]
# IPs que nunca se deben bloquear (loopback + rango interno)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

# Tiempo del bloqueo: 24 horas
bantime  = 86400

# Tiempo en que se cuentan los tiempos fallidos (10 minutos)
findtime = 600

# Numero máximo de intentos antes del bloqueo
maxretry = 5

# Backend para leer logs
backend = auto

# Acción para bloquear ips
banaction = iptables-multiport

# Email opcional para alertas
mta = sendmail


# -------------------------
# SSH Protection
# -------------------------
[sshd]
enabled  = true
port     = ssh
logpath  = /var/log/auth.log
backend  = systemd


# -------------------------
# GitLab Protection
# -------------------------
[gitlab]
enabled  = true
filter   = gitlab
port     = http,https
# Incluye logs de Rails y API
logpath  = /var/log/gitlab/gitlab-rails/production.log
           /var/log/gitlab/gitlab-rails/api_json.log
maxretry = 5
findtime = 600
bantime  = 86400

Ahora recargamos la configuración y miramos el estado

# fail2ban-client reload
# fail2ban-client status gitlab
Status for the jail: gitlab
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- File list:	/var/log/gitlab/gitlab-rails/production.log /var/log/gitlab/gitlab-rails/api_json.log
`- Actions
   |- Currently banned:	0
   |- Total banned:	0
   `- Banned IP list:	

Y ahora a esperar… si siguen los intentos y no se bloquean, recomiendo afinar la configuración.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

This site uses Akismet to reduce spam. Learn how your comment data is processed.