linux:ssh
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| linux:ssh [2008/11/07 19:43] – rlunaro | linux:ssh [2022/12/02 21:02] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| ===== Limitar intentos de conexion SSH ===== | ===== Limitar intentos de conexion SSH ===== | ||
| - | [[http:// | + | ==== Introducción |
| - | + | ||
| - | ==== En qué consiste | + | |
| El presente artículo trata de cómo limitar los intentos de conexión | El presente artículo trata de cómo limitar los intentos de conexión | ||
| Line 28: | Line 26: | ||
| </ | </ | ||
| + | ==== La contramedida más adecuada ==== | ||
| - | Evitar | + | Navegando por internet, he visto varias medidas: la mayor parte |
| + | se basan en analizar el log del sistema para identificar los | ||
| + | ataques y posteriormente bloquear las ip's. | ||
| + | |||
| + | La medida me parece totalmente desacertada por varios motivos: | ||
| + | 1) muchos de esos ataques provienen de adsl' | ||
| + | va a variar forzosamente al cabo de un tiempo. 2) algunas soluciones ni | ||
| + | siquiera bloquean la ip, simplemente registran la ip atacante, y dejan | ||
| + | al administrador la tarea de bloquearlas. | ||
| + | |||
| + | Otras soluciones más peregrinas son cambiar la dirección del puerto | ||
| + | ssh o ponerlo por horas; no me parecen ni medio elegantes((cada uno | ||
| + | tiene sus opiniones sobre cómo administrar su sistema, y lo siento | ||
| + | mucho pero esto no me parece una solución)). | ||
| + | |||
| + | Sin embargo en | ||
| + | En [[http:// | ||
| + | |||
| + | * Instala dos reglas en el firewall del sistema | ||
| + | * Esas reglas registran los intentos de conexión de fallidos: a partir de tres intentos fallidos hará un DROP de la conexión, impidiendo siquiera intentarlo | ||
| + | * A los X segundos de inactividad, | ||
| + | |||
| + | Tiene una ventaja que en mi modesta opinión | ||
| + | |||
| + | * No mantiene ningún registro; lo cual es perfecto porque esas IP's atacantes son muy variables | ||
| + | * Funciona automáticamente: | ||
| + | * Funciona incluso con nosotros: | ||
| + | |||
| + | ==== Las reglas de nuestro amigo Kevin ==== | ||
| < | < | ||
| - | echo -n " [Security enhaced on]" | + | |
| - | iptables -I INPUT -p tcp --dport 22 -i eth+ \ | + | sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH |
| - | | + | sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds |
| - | iptables -I INPUT -p tcp --dport 22 -i eth+ \ | + | |
| - | | + | |
| - | | + | |
| </ | </ | ||
| + | |||
| + | ==== Instalando las reglas en SuSE ==== | ||
| + | |||
| + | No pierdas el tiempo modificando scripts peregrinos por ahí, SuSE tiene un mecanismo para instalar reglas personalizadas en el firewall. | ||
| + | |||
| + | En / | ||
| + | |||
| + | < | ||
| + | ## Type: string | ||
| + | # | ||
| + | # 25.) | ||
| + | # Do you want to load customary rules from a file? | ||
| + | # | ||
| + | # This is really an expert option. NO HELP WILL BE GIVEN FOR THIS! | ||
| + | # READ THE EXAMPLE CUSTOMARY FILE AT / | ||
| + | # | ||
| + | # | ||
| + | FW_CUSTOMRULES="" | ||
| + | </ | ||
| + | |||
| + | Que nos permite especificar un fichero de reglas de firewall personalizadas. Descomentamos la variable y lo dejamos así: | ||
| + | |||
| + | < | ||
| + | FW_CUSTOMRULES="/ | ||
| + | </ | ||
| + | |||
| + | ==== El fichero de reglas personalizadas ==== | ||
| + | |||
| + | A continuación editaremos el fichero de reglas personalizadas: | ||
| + | |||
| + | < | ||
| + | sudo vi / | ||
| + | </ | ||
| + | |||
| + | Y en la función fw_custom_after_antispoofing insertaremos las reglas: | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | fw_custom_after_antispoofing() | ||
| + | { | ||
| + | |||
| + | # | ||
| + | # | ||
| + | # Custom rules to stop script kiddies accesing ssh port | ||
| + | # | ||
| + | # | ||
| + | |||
| + | echo -n " | ||
| + | |||
| + | iptables -I INPUT -i eth+ -p tcp --dport 22 \ | ||
| + | -m state --state NEW -m recent --set --name SSH | ||
| + | |||
| + | |||
| + | # After 3 unsucessful retries, drop the | ||
| + | # connection for 60 seconds | ||
| + | iptables -I INPUT -i eth+ -p tcp --dport 22 \ | ||
| + | -m state --state NEW -m recent --update \ | ||
| + | | ||
| + | |||
| + | |||
| + | echo " | ||
| + | |||
| + | </ | ||
| + | |||
| Es decir, hemos instalado un código que mediante una llamada al comando | Es decir, hemos instalado un código que mediante una llamada al comando | ||
| iptables -el comando básico para hacer un filtrado de paquetes en Linux-, | iptables -el comando básico para hacer un filtrado de paquetes en Linux-, | ||
| - | limitaremos los intentos de conexión al puerto 22 a MAX_ATTEMPTS. Una | + | limitaremos los intentos de conexión al puerto 22 a lo que diga el |
| - | vez alcanzado ese valor, será preciso esperar | + | parámetro --hitcount. Una vez alcanzado ese valor, será preciso |
| - | poder volver a conectarse. | + | esperar |
| + | |||
| + | ==== Reiniciar el firewall ==== | ||
| + | |||
| + | |||
| + | < | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | ==== Instalación remota ==== | ||
| + | |||
| + | El riesgo de hacer una instalación en remoto de estas cosas es que podemos | ||
| + | colgar el acceso ssh y quedarnos sin acceso a la máquina. A fin de contener | ||
| + | los riesgos lo que haremos será poner una entrada de cron que a las doce de la | ||
| + | noche borre el fichero que hemos creado y así nos permita reiniciar la máquina. | ||
| + | |||
| + | |||
| + | < | ||
| + | # field allowed values | ||
| + | # ----- -------------- | ||
| + | # minute | ||
| + | # hour | ||
| + | # day of month | ||
| + | # month 1-12 (or names, see below) | ||
| + | # day of week 0-7 (0 or 7 is Sun, or use names) | ||
| + | |||
| + | # a las 23:00 borramos el fichero | ||
| + | 0 23 * * * | ||
| + | |||
| + | # a las 23:10 restauramos el firewall | ||
| + | 10 23 * * * root / | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
linux/ssh.1226087023.txt.gz · Last modified: 2022/12/02 21:02 (external edit)
