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.
--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
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.
--state RELATED
en la última regla es innecesaria;--state ESTABLISHED
es 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.Algo como esto:
fuente
-i lo
no-s lo
; de nuevo, soloESTABLISHED
es necesario en las reglas estatales, y probablemente también debería haber una--sport 22
allí. ¿Por qué todos están tan dispuestos a permitirRELATED
?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í.