Cómo bloquear intentos de inicio de sesión SSH no deseados con PyFilter en Ubuntu 16.04

El autor seleccionó a Code.org para recibir una donación como parte del programa Write for DOnations .

Introducción

Secure Shell (SSH) es un protocolo de red criptográfico para operar servicios de red de forma segura. Se utiliza normalmente para el control remoto de un sistema informático o para transferir archivos. Cuando SSH se expone a la Internet pública, se convierte en un problema de seguridad. Por ejemplo, encontrará bots que intentan adivinar su contraseña mediante métodos de fuerza bruta.

PyFilter tiene como objetivo filtrar todas las solicitudes de inicio de sesión ilegítimas a su servidor y bloquearlas si se envían demasiadas. Funciona leyendo archivos de registro y verificando si una solicitud fallida provino de la misma dirección IP dentro de un período de tiempo configurable por el usuario. Luego, agrega reglas al firewall si captura demasiados intentos fallidos, lo que niega la posibilidad de conectarse a su servidor.

En este tutorial, instalarás y configurarás PyFilter para bloquear solicitudes SSH. Luego, instalarás PyFilter como un servicio y, opcionalmente, configurarás la sincronización de prohibiciones entre servidores, una función que permite que varios servidores compartan la lista de direcciones IP prohibidas, y habilitarás a PyFilter para que registre datos de ubicación sobre una dirección IP. Por último, explorarás cómo anular la prohibición de direcciones IP.

Prerrequisitos

Para completar este tutorial, necesitarás:

  • Un servidor Ubuntu 16.04 configurado siguiendo la guía de configuración inicial del servidor Ubuntu 16.04 , incluido un usuario sudo no root y un firewall.
  • Python 3, que ya está instalado por defecto en Ubuntu 16.04.
  • PIP instalado con sudo apt-get install python3-pip.
  • (Opcional) Redis se instala siguiendo Cómo instalar Redis en Ubuntu 16.04 si desea configurar la función de sincronización de prohibición entre servidores de PyFilter en el Paso 4 .

Paso 1: Descargar y configurar PyFilter

Descargaremos PyFilter clonando su repositorio desde Github. Vaya a su directorio de inicio y clone el repositorio:

  1. cd ~
  2. git clone https://github.com/Jason2605/PyFilter.git

Esto creará un directorio llamado PyFilter. Mueva esta carpeta a la /usr/localcarpeta:

  1. sudo mv PyFilter /usr/local/PyFilter

Luego cambia al /usr/local/PyFilter directorio:

  1. cd /usr/local/PyFilter

A continuación, debemos crear un archivo de configuración. PyFilter viene con un archivo de configuración predeterminado ubicado en Config/config.default.json. Lo copiaremos y editaremos la versión copiada en lugar de editar el archivo predeterminado directamente. De esta manera, si algo saliera mal, tendrás el archivo de configuración predeterminado con el que comparar.

Copiar el archivo de configuración predeterminado:

  1. sudo cp Config/config.default.json Config/config.json

Puede utilizar el lesscomando para ver el contenido del archivo de configuración:

  1. less Config/config.json

La configuración predeterminada requiere que las solicitudes se realicen dentro de los 5 segundos posteriores a la última solicitud y que esto ocurra 5 veces; bastará para comenzar. Ejecutemos PyFilter y asegurémonos de que todo funcione.

Paso 2: Ejecutar PyFilter

La descarga de PyFilter incluye un script llamado run.shque debes usar para iniciar PyFilter.

Primero, cambie los permisos del script para hacerlo ejecutable.

  1. sudo chmod +x run.sh

Una vez otorgados los permisos, ejecute el script para iniciar PyFilter:

  1. ./run.sh

PyFilter comenzará a observar los registros y verá el resultado a medida que ocurren los eventos:

OutputNo file to check within rule: MysqlNo file to check within rule: ApacheNo file to check within rule: NginxChecking Ssh logs

De forma predeterminada, PyFilter prohíbe las direcciones IP que realizan cinco o más solicitudes fallidas en un plazo de cinco segundos desde la solicitud fallida anterior. Puede cambiar esto en el archivo de configuración de PyFilter.

/usr/local/PyFilter/LogEstos resultados también se registran en el directorio.

Cuando una IP haya alcanzado los límites que justifican una prohibición, verá un resultado similar a este:

Output2018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name.

Nota : Si accidentalmente se bloquea su Droplet porque se ha prohibido a sí mismo, puede seguir el tutorial Cómo usar la consola de DigitalOcean para acceder a su Droplet para volver a ingresar. Luego, siga los pasos del Paso 6 para eliminar la IP prohibida.

Para cerrar PyFilter, presione CTRL+C.

Ahora instalemos PyFilter como un servicio para que se ejecute automáticamente.

Paso 3: Creación de un servicio para PyFilter

Ahora que sabes que PyFilter funciona, configurémoslo para que se ejecute como un servicio para que se inicie cada vez que reiniciemos el servidor.

Dentro del PyFilterdirectorio, hay un script llamado install.shque crea un servicio para PyFilter y le permite ejecutarse al iniciar el sistema.

Modifica el script para poder ejecutarlo:

  1. sudo chmod +x install.sh

Luego ejecuta el script:

  1. ./install.sh

Verá este resultado, indicando que la instalación fue exitosa:

OutputService created and enabled, check the status of it by using "sudo systemctl status PyFilter"

Así que hagamos exactamente eso para garantizar que todo funcione correctamente:

  1. sudo systemctl status PyFilter

Verá este resultado, que muestra que el servicio es active:

Output● PyFilter.service - PyFilter   Loaded: loaded (/etc/systemd/system/PyFilter.service; enabled; vendor preset: enabled)   Active: ^active^ (running) since Wed 2018-03-21 18:55:35 UTC; 12s ago Main PID: 8383 (bash)   CGroup: /system.slice/PyFilter.service           ├─8383 bash /usr/local/PyFilter/run.sh           ├─8384 sudo python3 run.py           └─8387 python3 run.py

Si ve un error, revise los pasos de instalación nuevamente.

A continuación, veamos cómo configurar PyFilter para compartir direcciones IP prohibidas con otros servidores.

Paso 4: Configuración de PyFilter para la sincronización de prohibiciones entre servidores (opcional)

La sincronización de prohibiciones entre servidores permite que la dirección IP prohibida se sincronice con todos los demás servidores que usan PyFilter para protegerlos y prohíban esa dirección incluso si no cumple con los requisitos para ser prohibida. Esto significa que puede estar un paso por delante de posibles bots que apunten a sus otros sistemas, ya que la IP ya está prohibida.

Como se indica en los requisitos previos, necesitará tener Redis instalado y configurado.

También necesitas el redismódulo Python, que puedes instalar con pip:

  1. pip3 install redis

Luego edita tu archivo de configuración para usar Redis en lugar de SQLite. Abre el Config/config.jsonarchivo en tu editor de texto:

  1. nano Config/config.json

Localice la siguiente línea:

Configuración/config.json

"database": "sqlite"

Cambiar sqlitea redis:

Configuración/config.json

"database": "redis"

A continuación, cambie la información de conexión de Redis. Busque esta sección del archivo:

Configuración/config.json

  "redis": {    "host": "127.0.0.1",    "password": null,    "database": 0,    "sync_bans": {      "active": true,      "name": "your_hostname",      "check_time": 600    }  },

Modifique esta sección para que incluya los detalles de conexión de su servidor Redis. Luego, dentro de la sync_banssección, cambie el namenombre de host. Este nombre debe ser único para cada sistema individual que ejecute PyFilter y utilice el mismo servidor Redis para que la sincronización de prohibición entre servidores funcione correctamente.

Guarde el archivo y salga del editor. Luego reinicie PyFilter para aplicar estos cambios:

  1. sudo systemctl restart PyFilter

PyFilter ahora está instalado y funcionando.

Paso 5: Configuración de PyFilter para recopilar datos de ubicación sobre direcciones IP (opcional)

PyFilter puede recuperar datos de ubicación sobre la IP prohibida para brindar información estadística sobre el origen de la mayoría de los ataques. Este módulo opcional agregará esta información a los registros de PyFilter.

Para utilizar esta función, primero necesitas el geoip2módulo Python, que puedes instalar con pip:

  1. pip3 install geoip2

Una vez que haya instalado este módulo, reinicie PyFilter para que reconozca el nuevo módulo:

  1. sudo systemctl restart PyFilter

Ahora, cuando veas una dirección IP prohibida, verás información adicional sobre la IP:

Output2018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name. The IP was from United Kingdom.

PyFilter ahora registra con éxito de qué país provienen las solicitudes.

Por último, veamos cómo desbloquear una dirección.

Paso 6: Desbloqueo de direcciones IP

PyFilter es simplemente un medio para prohibir direcciones IP mediante la creación de reglas de iptables. Cuando prohíbe una IP, actualiza las reglas del firewall y luego guarda instantáneas de las reglas en los archivos /usr/local/PyFilter/Config/blacklist.v4y /usr/local/PyFilter/Config/blacklist.v6.

A continuación se muestra un ejemplo de varias direcciones IPv4 prohibidas en /usr/local/PyFilter/Config/blacklist.v4:

/usr/local/PyFilter/Config/blacklist.v4

# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018*filter:INPUT ACCEPT [217:30580]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [249:30796]-A INPUT -s 203.0.113.13/32 -j DROP-A INPUT -s 203.0.113.14/32 -j DROP-A INPUT -s 203.0.113.15/32 -j DROPCOMMIT# Completed on Thu Mar 22 19:53:04 2018

Para desbloquear esta dirección IP, abra el archivo de lista negra asociado en su editor de texto:

  1. sudo nano /usr/local/PyFilter/Config/blacklist.v4

Elimine las reglas de iptables asociadas del archivo. En este caso, hemos eliminado 203.0.113.13del archivo:

/usr/local/PyFilter/Config/blacklist.v4

# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018*filter:INPUT ACCEPT [217:30580]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [249:30796]-A INPUT -s 203.0.113.14/32 -j DROP-A INPUT -s 203.0.113.15/32 -j DROPCOMMIT# Completed on Thu Mar 22 19:53:04 2018

Luego guarde el archivo y cierre el editor. Reinicie PyFilter con sudo systemctl restart PyFiltery PyFilter actualizará las reglas de su firewall usando este archivo.

Consulte Cómo enumerar y eliminar reglas de firewall de Iptables para obtener más información sobre la administración de reglas con iptables.

También puedes indicarle a PyFilter que ignore ciertas direcciones IP agregándolas a la sección de lista blanca dentro del /usr/local/PyFilter/Config/config.jsonarchivo.

Conclusión

Ahora tienes PyFilter instalado y monitoreando tus conexiones SSH.

Para obtener más información sobre cada sección del archivo de configuración y cómo configurar la monitorización de otros servicios, como MySQL y Apache, consulte el sitio de PyFilter .

SUSCRÍBETE A NUESTRO BOLETÍN 
No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top