Created
March 22, 2017 21:13
-
-
Save exos/ef828e75f3dfcc0f7284c9fc1e00e2c4 to your computer and use it in GitHub Desktop.
Reglas iptables para SSH anti brute force
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*filter | |
:INPUT DROP [0:0] | |
:FORWARD ACCEPT [0:0] | |
:OUTPUT ACCEPT [0:0] | |
## Vamos a definir dos names: | |
# TMPBLOCKED: Van a ser clientes temporalmente bloqueados | |
# BLOCKED: Van a ser cliente bloqueados a largo plazo | |
-N TMPBLOCKED | |
-N BLOCKED | |
-N SSH | |
## Definimos TMPBLOCKED, para bloqueos temporales | |
-A TMPBLOCKED -m recent --set --name tmpblocked | |
-A TMPBLOCKED -j DROP | |
## Antes de verificar mas, bloqueamos si es en "blocked" | |
# aparte, actualizamos el bloqueo a 24 horas desde el nuevo intento | |
-A INPUT -p tcp --syn -m recent --name blocked --update --seconds 86400 -j DROP | |
## Definimos BLOCKED | |
-A BLOCKED -m recent --name blocked --set | |
# Logueamos que una ip fue bloqueada a largo plazo | |
-A BLOCKED -m limit --limit 2/min -j LOG --log-prefix "IP blocked: " --log-level 7 | |
# Dropeamos | |
-A BLOCKED -j DROP | |
## Definimos SSH para manejar las conecciones a este protocolo | |
-A SSH -p tcp --syn -m recent --name ssh --set | |
## Si hay 100 conexiones en las últimas 24 horas, bloqueamos a largo plazo | |
-A SSH -p tcp --syn -m recent --name ssh --rcheck --seconds 86400 --hitcount 100 -j BLOCKED | |
## Si hay 10 conexiones en los anteriores 30 minutos, bloqueamos temporalmente | |
-A SSH -p tcp --syn -m recent --name ssh --rcheck --seconds 1800 --hitcount 10 -j TMPBLOCKED | |
# Si hay mas de dos conexiones en los anteriores 5 segundos, o 4 en los anteriores 30 segundos | |
# dropeamos el paquete | |
-A SSH -p tcp --syn -m recent --name ssh --rcheck --seconds 5 --hitcount 2 -j DROP | |
-A SSH -p tcp --syn -m recent --name ssh --rcheck --seconds 30 --hitcount 4 -j DROP | |
# Si está todo bien, aceptamos la conexión | |
-A SSH -m recent --name ssh --set -j ACCEPT | |
## Si la conexión ya está establecida, los paquetes pasan libres | |
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT | |
## Liberamos conexiones locales | |
-A INPUT -i lo -j ACCEPT | |
## En caso de neuva conexión al puerto 22 tcp, lo mandamos a SSH | |
-A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j SSH | |
COMMIT |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment