Intentando usar iptables para bloquear todo el tráfico excepto SSH y RDP


1

EDITAR: Script de trabajo para usar iptables para bloquear todo el tráfico entrante / saliente, excepto ssh (puerto 22) y RDP (puerto 3389):

#!/bin/sh
# Block all incoming/outgoing traffic except for ssh and rdp

iptables -Z # zero counters
iptables -F # flush (delete) rules
iptables -X # delete all extra chains

# Set default filter policy to DROP
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP

# Allow DNS
iptables -A INPUT --proto udp --sport 53 --jump ACCEPT
iptables -A OUTPUT --proto udp --dport 53 --jump ACCEPT
iptables -A OUTPUT --proto tcp --dport 53 --jump ACCEPT

# Allow unlimited traffic on loopback (localhost)
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow ssh (22) and rdp (3389)
iptables -A INPUT  -p tcp -m multiport --dports 22,3389 -j ACCEPT

# Continue accepting packets after connection is established (and moved to some random >1024 port)
iptables -A INPUT --match state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT --match state --state ESTABLISHED,RELATED -j ACCEPT

Deshacer:

#!/bin/sh

# Set default filter policy to ACCEPT
iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT

iptables -Z # zero counters
iptables -F # flush (delete) rules
iptables -X # delete all extra chains

Respuestas:


1

Te pierdes algo como:

iptables -A INPUT  --match state --state ESTABLISHED,RELATED --jump ACCEPT
iptables -A OUTPUT --match state --state ESTABLISHED,RELATED --jump ACCEPT

continuar aceptando paquetes después de establecer la conexión. Cuando sucede que la conexión se mueve del lado del servidor a algún puerto aleatorio> 1024, es por eso que aceptar paquetes en el puerto 22 y 3389 no es suficiente.

Para permitir búsquedas de DNS:

iptables -A INPUT  --proto udp --sport 53 --jump ACCEPT
iptables -A OUTPUT --proto udp --dport 53 --jump ACCEPT
iptables -A OUTPUT --proto tcp --dport 53 --jump ACCEPT

Para establecer la regla para varios puertos a la vez (más --sportso menos --dports), debe habilitar el multiportmódulo. De lo contrario, iptables se quejará de la opción desconocida "--dports" . Entonces, para permitir conexiones entrantes SSH y RDP en una línea:

iptables -A INPUT --proto tcp -m multiport --dports 22,3389 --jump ACCEPT

Además, dado que establece la política predeterminada en DROP, no necesita las dos últimas líneas en las que también establece DROP para conexiones de entrada / salida. Entiendo que te hacen sentir más seguro, pero es como configurar el nombre de host, y también cron job para configurarlo por si acaso en cada minuto. De hecho, esto puede conducir a problemas en el futuro, cuando te olvides de esas dos líneas y añadas algunas otras reglas, y te sorprenderá por qué no funcionan.


Gracias por la respuesta. Esto ayudó a aclarar las cosas, pero todavía tengo problemas. Hice los cambios que mencionó y agregué lógica para permitir búsquedas DNS salientes (edité el script en la publicación original para reflejar esto). Desafortunadamente, todavía no puedo enviar a esta caja. ¿Alguna idea de qué más podría estar mal?
Bennett Lynch

@BennettLynch gracias por actualizar la pregunta, consulte mi edición sobre las búsquedas de DNS. y hágame saber si ayudó.
rsm

@BennettLynch Si esto responde a su pregunta, por favor otórguele la marca verde (y posiblemente un voto positivo por ser útil), de lo contrario, explique lo que aún no funciona.
rsm

Realmente aprecio tu ayuda, pero desafortunadamente todavía no tengo suerte. He actualizado mi publicación original con la versión actual del script que estoy usando. ¿Te importaría intentar ejecutarlo si tienes un entorno para probarlo de forma segura? Actualmente estoy ejecutando esto en una instancia de EC2 e intento enviar ssh a la instancia después, pero mi intento de ssh sigue agotando el tiempo. Tengo que reiniciar la instancia para restablecer las iptables cada vez.
Bennett Lynch

@BennettLynch Lo estaba probando solo para ssh, por eso me perdí el --dportsproblema. por favor revise mi respuesta actualizada, parte sobre multiport.
rsm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.