Una guía para principiantes de iptables, el cortafuegos de Linux
Iptables es una utilidad de firewall extremadamente flexible creada para el sistema operativo Linux. Ya sea que sea un nuevo geek de Linux o un administrador de sistemas, iptables puede beneficiarlo de alguna manera. Siga leyendo mientras le mostramos cómo configurar el firewall de Linux más versátil.
fotógrafo Eziomán.
Acerca de iptables
iptables es una utilidad de firewall de línea de comandos que utiliza el encadenamiento de políticas para permitir o bloquear el tráfico. Cuando una conexión intenta establecerse en su sistema, iptables busca en su lista una regla que coincida. Si no se encuentra, realiza la acción predeterminada.
iptables casi siempre está preinstalado en cualquier distribución de Linux. Para actualizarlo/instalarlo, simplemente recupere el paquete iptables:
sudo apt-get install iptables
Hay alternativas GUI a iptables como encendedor, pero iptables no es tan difícil una vez que dominas algunos comandos. Debe tener mucho cuidado al configurar las reglas de iptables, especialmente cuando está conectando SSH a un servidor, ya que un comando incorrecto podría bloquearlo permanentemente hasta que se solucione manualmente en la máquina física. No olvide bloquear su servidor SSH si abre puertos.
tipo de cadena
iptables utiliza tres cadenas diferentes: entrada, reenvío y salida.
ingresar – Esta cadena se utiliza para controlar el comportamiento de las conexiones entrantes. Por ejemplo, si un usuario intenta acceder a su PC/servidor mediante SSH, iptables intentará hacer coincidir la dirección IP y el puerto con las reglas de la cadena de entrada.
delantero – Esta cadena se utiliza para conexiones entrantes que en realidad no se entregan localmente. Piense en un enrutador: los datos siempre se le envían, pero rara vez llegan al enrutador;Los datos simplemente se reenvían a su destino. Ni siquiera usará esta cadena a menos que esté haciendo algún tipo de enrutamiento, NAT o algo más en su sistema que requiera reenvío.
Existe una forma confiable de verificar si su sistema usa/requiere el encadenamiento hacia adelante.
iptables -L -v
La captura de pantalla anterior es de un servidor que se ejecuta durante algunas semanas sin límites en las conexiones entrantes o salientes. Como puede ver, la cadena de entrada procesó 11 GB de paquetes y la cadena de salida procesó 17 GB. Por otro lado, la cadena directa no necesita procesar paquetes individuales. Esto se debe a que el servidor no realiza ningún tipo de reenvío ni actúa como dispositivo de entrega.
producción – Esta cadena se utiliza para conexiones salientes. Por ejemplo, si intenta hacer ping a howtogeek.com, iptables examinará su cadena de salida en busca de reglas sobre ping y howtogeek.com antes de decidir si permite o deniega el intento de conexión.
advertir
Aunque puede parecer que hacer ping a un host externo solo requiere atravesar la cadena de salida, tenga en cuenta que para devolver datos, también se usa la cadena de entrada. Al bloquear su sistema con iptables, recuerde que muchos protocolos requieren comunicación bidireccional, por lo que tanto la cadena de entrada como la de salida deben configurarse correctamente. SSH es un protocolo común que la gente olvida permitir en ambas cadenas.
Comportamiento predeterminado de la cadena de políticas
Antes de ingresar y configurar reglas específicas, debe decidir cuál será el comportamiento predeterminado de las tres cadenas. En otras palabras, ¿qué quiere que haga iptables si la conexión no coincide con ninguna regla existente?
Para ver cómo su cadena de políticas está configurada actualmente para manejar el tráfico sin igual, ejecuteiptables -L
Ordenar.
Como puede ver, también usamos el comando grep para obtener un resultado más limpio. En esta captura de pantalla, nuestra cadena actualmente se considera aceptable para el tráfico.
Muchas veces querrá que su sistema acepte conexiones por defecto. Esta configuración ya debería estar configurada a menos que haya cambiado previamente la regla de la cadena de políticas. De cualquier manera, aquí están los comandos que aceptan conexiones por defecto:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Con las reglas de aceptación predeterminadas, puede usar iptables para denegar direcciones IP o números de puerto específicos mientras continúa aceptando todas las demás conexiones. Tendremos esos comandos en un minuto.
Si prefiere denegar todas las conexiones y especificar manualmente qué conexiones desea permitir, debe cambiar la política predeterminada de la cadena para descartarla. Hacerlo solo puede ser útil para servidores que contienen información confidencial y solo tienen la misma dirección IP para conectarse a ellos.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
respuesta específica de conexión
Después de configurar la política de cadena predeterminada, puede comenzar a agregar reglas a iptables para que sepa qué hacer cuando encuentre una conexión desde o hacia una dirección IP o puerto específico. En esta guía, cubriremos tres de las «respuestas» más básicas y comúnmente utilizadas.
aceptar – Permitir la conexión.
reducir – Desconectar como si nunca hubiera pasado. Esto es mejor si no desea que la fuente sepa que su sistema existe.
rechazar – No se permite la conexión, pero se devuelve un error. Esto es mejor si no desea que fuentes específicas se conecten a su sistema, pero desea que sepan que su firewall las está bloqueando.
La mejor manera de mostrar la diferencia entre estas tres reglas es mostrar cómo se ve cuando una PC intenta hacer ping a una caja de Linux con iptables configurados para cada una de estas configuraciones.
Permitir conexión:
Desconectar:
Conexión denegada:
Permitir o bloquear conexiones específicas
Con la cadena de políticas configurada, ahora puede configurar iptables para permitir o bloquear direcciones, rangos de direcciones y puertos específicos. En estos ejemplos establecemos la conexión aDROP
, pero puedes cambiarlos aACCEPT
oREJECT
, en función de sus necesidades y de cómo haya configurado la cadena de directivas.
Nota: En estos ejemplos usaremosiptables -A
Agregar una regla a una cadena existente.iptables comienza en la parte superior de su lista e itera a través de cada regla hasta que encuentra una regla coincidente. Si necesita insertar una regla encima de otra, puede usariptables -I [chain] [number]
para especificar el número que debe estar en la lista.
Conexiones desde una única dirección IP
Este ejemplo muestra cómo bloquear todas las conexiones desde la dirección IP 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Conexiones desde un rango de direcciones IP
Este ejemplo muestra cómo bloquear todas las direcciones IP en el rango de red 10.10.10.0/24. Puede especificar intervalos de direcciones IP utilizando máscaras de red o notación de barra diagonal estándar.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
o
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
conectarse a un puerto específico
Este ejemplo muestra cómo bloquear conexiones SSH desde 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Puede reemplazar «ssh» con cualquier protocolo o número de puerto. Este-p tcp
Parte del código le dice al protocolo iptables qué conexión usar. Si desea bloquear protocolos que usan UDP en lugar de TCP, entonces-p udp
será necesaria.
Este ejemplo muestra cómo bloquear conexiones SSH desde cualquier dirección IP.
iptables -A INPUT -p tcp --dport ssh -j DROP
Estado de conexión
Como mencionamos antes, muchos protocolos requerirán una comunicación bidireccional. Por ejemplo, si desea permitir conexiones SSH a su sistema, las cadenas de entrada y salida deberán agregar una regla. Pero, ¿qué sucede si solo desea permitir SSH en su sistema?¿Agregar una regla a la cadena saliente no permitiría también los intentos SSH salientes?
Aquí es donde entra en juego el estado de conexión, y le brinda la capacidad que necesita para permitir la comunicación bidireccional, pero solo permitir que se establezcan conexiones unidireccionales. Eche un vistazo a este ejemplo donde se permiten conexiones SSH desde 10.10.10.10 pero no hasta 10.10.10.10. Sin embargo, siempre que se establezca la sesión, el sistema puede enviar información a través de SSH, lo que permite la comunicación SSH entre los dos hosts.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
guardar cambios
Los cambios que realice en las reglas de iptables se descartarán la próxima vez que reinicie el servicio de iptables a menos que ejecute un comando para guardar los cambios. Este comando puede variar dependiendo de su distribución:
Ubuntu:
sudo /sbin/iptables-save
RedHat/CentOS:
/sbin/service iptables save
o
/etc/init.d/iptables save
otros comandos
Enumere las reglas de iptables actualmente configuradas:
iptables -L
añadir-v
le dará información de paquetes y bytes, agregue-n
Todo se enumerará numéricamente. En otras palabras, los nombres de host, los protocolos y las redes se enumeran numéricamente.
Para borrar todas las reglas configuradas actualmente, puede emitir el comando de descarga.
iptables -F
comandos de linux | ||
documento | asfalto · fotovoltaica · gato · táctica · modo de cambio · grep · diferencia · sed · Arkansas · hombre · para empujar · ventana emergente · fsck · disco de prueba · número de serie · f.d. · pandoc · CD · $ruta · awk · participar · jq · doblar · Único · diarioctl · Cola · estado · ls · mesa de estabilidad · eco · menos · chgrp · Chon · Velocidad de rotación · Mirar · cuerda · escribe · cambiar nombre · compresión · abrir la cremallera · Montaña · desinstalar · Instalar · disco · mkfs · RM · Tabla de contenido · Sincronizar · paradero · gpg · seis · Nano · Tabla de contenido · Du · existir · reparar · intercambio · clon · arrancar · Srm | |
proceso | alias · Pantalla · óptimo · OK · agradable · Progreso · pista · sistema · multiplexor · chsh · historia · existir · lote · libre · cual · dmesg · Franco suizo · módulo de usuario · posdata · chroot · xargs · Terminal · dedo meñique · lsof · Estadísticas de máquinas virtuales · pausa · pared · Sí · matar · dormir · Sudo · demandar · tiempo · dirección de grupo · módulo de usuario · grupo · lshw · cierre · reiniciar · deténgase · cerrar · clave · lscpu · Lista de tareas cronometradas · fecha · antecedentes · fg | |
redes | estadísticas de la red · plano · pista de ruta · propiedad intelectual · SS · Quien es · fail2ban · bmón · excavar · dedo · mapa · FTP · ondulado · wget · Quién · quién soy · w · iptables · ssh-keygen · ufw |