IPTables: permite solo acceso SSH, nada más dentro o fuera

11

¿Cómo se configuran las IPTables para que solo permita la entrada de SSH y no permita ningún otro tráfico de entrada o salida ?

¿Alguna precaución de seguridad que alguien pueda recomendar?

Tengo un servidor que creo que se ha migrado de GoDaddy con éxito y creo que ya no está en uso.

Pero quiero asegurarme solo porque ... nunca se sabe. :)

Tenga en cuenta que este es un servidor virtual dedicado de GoDaddy ... Eso significa que no hay respaldo y prácticamente no hay soporte.

Disco
fuente

Respuestas:

13

Solo necesita establecer la política predeterminada en DROP en las cadenas INPUT y OUTPUT.

Para permitir la entrada de SSH, necesita los siguientes comandos:

$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Los dos últimos comandos permiten el tráfico de bucle invertido, ya que algunas aplicaciones lo requieren para funcionar correctamente. Puede restringir el acceso SSH desde una IP específica usando la -s source_ipopción.

La ejecución de los comandos en el orden que se muestra arriba hará que su sesión SSH actual se bloquee. Esto se debe a que los comandos de iptables surten efecto de inmediato. Debe ejecutarlos en un script de shell para evitar perder la capacidad de conectarse a su máquina cuando los ejecuta de forma remota.

Khaled
fuente
44
--state RELATEDen la última regla es innecesaria; --state ESTABLISHEDes suficiente. También es posible que desee permitir el tráfico de DNS, y probablemente debería permitir cualquier cosa en la interfaz de bucle invertido, o todo tipo de cosas pueden comportarse de manera muy extraña.
MadHatter
@MadHatter: Sí, tienes razón especialmente sobre las cosas del loopback :)
Khaled
Gracias, ¿sería posible obtener el archivo completo de usted? es decir, algo que puedo copiar y pegar directamente en / etc / sysconfig / iptables? No tengo suficiente experiencia con esto para confiar en mi intuición para hacer las ediciones adecuadas.
Disco
2
PD. establecer conexión se cerrará a la fuerza después del primer comando
user956584
3
Realmente deberías cambiar el orden de estos comandos. Las líneas de política deben aparecer como las últimas. Cualquiera que simplemente haga una copia de esto en una sesión ssh será HUPed y se cerrará de inmediato
AndreasT
4

Algo como esto:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT  # or iptables -P INPUT DROP

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP
Mikel
fuente
1
Creo que quieres decir que -i lono -s lo; de nuevo, solo ESTABLISHEDes necesario en las reglas estatales, y probablemente también debería haber una --sport 22allí. ¿Por qué todos están tan dispuestos a permitir RELATED?
MadHatter
@MadHatter: Acerca de RELATED: en realidad es útil para hacer coincidir cosas que no son TCP, como las respuestas de ping y las respuestas de DNS. Al menos, eso es lo que siempre asumí.
Steven lunes
2
Mi creencia es que no coincidirá con ninguno de esos. Coincidiría, por ejemplo, con una respuesta ICMP prohibida administrativamente por el host, pero eso es lo más útil posible; y si no está calificado, coincidirá con cualquier tráfico relacionado, no solo con el tráfico relacionado con la línea anterior.
MadHatter
@MadHatter: Creo que tendré que hacer algunas pruebas para ver si tienes razón. Gracias por desafiar mi suposición.
Steven lunes
Sí, el estado ESTABLECIDO es todo lo que se necesita para hacer coincidir las respuestas DNS UDP y las respuestas de eco ICMP.
Steven lunes