Obtenga información sobre cómo acceder al host de iptables. Conceptos básicos de iptables en Linux. ¿Y qué pasa con tus calamares favoritos?

Introducción e historia

Filtro de red - cortafuegos(también conocido como firewall, también conocido como firewall, también conocido como firewall...) integrado en núcleo de linux desde la versión 2.4. Netfilter está controlado por la utilidad iptables(Para IPv6 - ip6tables). A netfilter/iptables era cadenas ip, que se incluyó en los kernels de Linux 2.2. Antes de ipchains en Linux existía el llamado ipfw (cortafuegos IPV4), portado desde BSD. Utilidad de gestión: ipfwadm. El proyecto netfilter/iptables se fundó en 1998. El autor es Rusty Russell (también dirigió desarrollos anteriores). En 1999, se formó el Netfilter Core Team (abreviado como coreteam). El firewall desarrollado se llamó oficialmente netfilter. En agosto de 2003, Harald Welte se convirtió en el jefe del equipo central.

Proyectos cadenas de ip Y ipfwadm Cambió el funcionamiento de la pila de protocolos del kernel de Linux, desde antes de la llegada de filtro de red No había ninguna disposición en la arquitectura del kernel para agregar módulos de administración de paquetes adicionales. iptables mantuvo la idea principal ipfwadm- una lista de reglas que consta de criterios y una acción que se realiza si el paquete cumple con los criterios. EN cadenas de ip Se introdujo un nuevo concepto: la capacidad de crear nuevas cadenas de reglas y transferir paquetes entre cadenas, y en iptables el concepto se amplió a cuatro tablas (en Netfilter moderno, más de cuatro), delimitando cadenas de reglas por tarea: filtrado, NAT y modificación de paquetes. También iptables extendido Características de Linux en el área de detección de estado, permitiendo la creación de firewalls que operan a nivel de sesión.

Arquitectura de Netfilter/iptables

Requisitos previos ()

Como se mencionó anteriormente, para que Netfilter funcione, necesita la versión 2.6 del kernel (o al menos 2.3.15). Además, si es necesario, están disponibles las siguientes configuraciones: CONFIG_NETFILTER, CONFIG_IP_NF_IPTABLES, CONFIG_IP_NF_FILTER (tabla de filtros), CONFIG_IP_NF_NAT (tabla nat), CONFIG_BRIDGE_NETFILTER, así como numerosos módulos adicionales: CONFIG_IP_NF_CONNTRACK (seguimiento de conexiones), CONFIG_IP_NF_FTP (módulo auxiliar para seguimiento FTP conexiones), CONFIG_IP _NF_MATCH_* (tipos adicionales de patrones de coincidencia de paquetes: LIMIT, MAC, MARK, MULTIPORT, TOS, TCPMSS, STATE, UNCLEAN, OWNER), CONFIG_IP_NF_TARGET_* (acciones adicionales en reglas: REJECT, MASQUERADE, REDIRECT, LOG, TCPMSS ), CONFIG_IP_NF_COMPAT_IPCHAINS para compatibilidad con ipchains, CONFIG_BRIDGE_NF_EBTABLES y CONFIG_BRIDGE_EBT_* para trabajar en modo puente, otros CONFIG_IP_NF_* y CONFIG_IP6_NF_*. También es útil especificar CONFIG_PACKET.

Como se puede ver, mesa nat Y mutilar Puede modificar el destinatario o remitente de un paquete de red. Esta es la razón por la que el paquete de red se compara varias veces con la tabla de enrutamiento.

Mecanismo de detección de estado (conntrack)

Más arriba en el texto, el concepto de “definición de Estado” se mencionó varias veces; merece un tema de discusión aparte, pero, sin embargo, abordaré brevemente este tema en la publicación actual. En general, el mecanismo para determinar estados (también conocido como máquina de estados, también conocido como conectar ección pista ing, también conocido como conectar) es parte del filtro de paquetes y le permite determinar a qué conexión/sesión pertenece un paquete. Conntrack analiza el estado de todos los paquetes excepto aquellos marcados como NOTRACK en tabla sin formato. En función de este estado, se determina a qué paquete pertenece nuevo conexión (estado NUEVO), ya establecido conexión (estado ESTABLECIDO), adicional a uno ya existente ( RELACIONADO), o a " a otro" Conexión (indetectable) (estado INVÁLIDO). El estado del paquete se determina analizando los encabezados del paquete TCP transmitido. módulo de seguimiento le permite implementar un firewall a nivel de sesión (quinto). Para controlar este mecanismo, utilice la utilidad. pista de conexión, así como el parámetro de utilidad iptables: -m pista de conexión o -m estado(obsoleto). conntrack almacena los estados de las conexiones actuales en el kernel. Se pueden ver en el archivo /proc/net/nf_conntrack (o /proc/net/ip_conntrack).

Para que mis pensamientos no se hagan papilla, pienso esto breve información el material adicional será suficiente para comprenderlo.

Administrar las reglas de filtrado de red Netfilter (usando el comando iptables)

utilidad iptables es una interfaz para el control cortafuegos netfilter. Este comando le permite editar reglas de tablas, tablas y cadenas. Como ya dije - cada regla es un registro/cadena que contiene una selección de paquetes de red y paquetes que coinciden con una regla determinada. comando iptables Requiere derechos de root para funcionar.

EN caso general El formato del comando es el siguiente:

iptables [-t]

Todos los parámetros entre corchetes - opcional. El valor predeterminado es tabla de filtros, si necesita especificar otra tabla, entonces debe usar la clave -t indicando nombre. Después se indica el nombre de la tabla que define la acción ( Por ejemplo: insertar una regla, agregar una regla al final de la cadena o eliminar una regla). Por ejemplo establece los parámetros de selección.

indica qué acción se debe realizar si los criterios de selección en la regla coinciden (

: pasar el paquete a otra cadena de reglas, “descartar” el paquete, emitir un mensaje de error a la fuente...). A continuación se muestran los comandos y parámetros de la utilidad iptables: Parámetro
Descripción
Ejemplo equipos --añadir (-A) Agregar a la cadena especificada y a la tabla especificada para esta regla
hasta el FINAL de la lista. iptables -A criterio ADELANTE -j acción --eliminar (-D)
Elimina las reglas especificadas por los números o reglas. El primer ejemplo elimina todas las reglas con los números 10,12 en todas las cadenas, en las tablas de filtro, el segundo ejemplo elimina la regla especificada de la tabla mangle en la cadena PREROUTING.
iptables -D 10.12 iptables -t mangle -D criterios de PREROUTING -j acción --renombrar-cadena (-E)
Cambiar nombre de cadena. iptables -E OLD_CHAIN ​​​​NEW_CHAIN --flujo (-F)
Borra todas las reglas de la tabla actual. Para todos los paquetes que se relacionan con conexiones ya establecidas, aplique la acción terminal ACEPTAR - omitir iptables-F --insertar (-yo)
Inserta la regla especificada en la ubicación especificada por el número. iptables -I ADELANTE 5 criterios -j acción --lista (abreviado -L) Vista reglas existentes
(sin especificar explícitamente la tabla; se muestra la tabla de filtros de todas las cadenas). iptables-L --política (-P)
Establece la política predeterminada para la cadena dada. iptables -t mangle -P CAÍDA DE ENRUTAMIENTO PREVIO --reemplazar (-R)
Reemplaza la regla especificada por el número por la especificada en los criterios. iptables -R POSRRUTAMIENTO 7 | criterios -j acción --eliminar-cadena (-X)
--cero (-Z) Restablece los contadores de datos transmitidos en la cadena. iptables -Z ENTRADA
Opciones
--numérico (-n) No resuelve direcciones y protocolos durante la salida.
--números de línea Especifique los números de regla en la salida (se puede usar junto con -L). iptables -L --números-de-línea
--ayuda (-h) ¿Dónde estaríamos sin ella?
-t tabla Especifica el nombre de la tabla en la que se debe realizar la acción. El ejemplo restablece la tabla nat en todas las cadenas. iptables -t nat -F
--detallado (-v) Conclusión detallada. iptables-L-v

Criterios (parámetros) para seleccionar paquetes de red del comando iptables

Criterios para seleccionar paquetes de red. se dividen secretamente en varios grupos: Criterios generales, Criterios implícitos, Criterios explícitos. se pueden utilizar en cualquier regla, no dependen del tipo de protocolo y no requieren cargar módulos de extensión.(yo lo llamaría no general), aquellos criterios que se cargan implícitamente y quedan disponibles, por ejemplo, al especificar un criterio general --protocolo tcp|udp|icmp. Antes de usarlo, debe conectarse expansión adicional(estos son peculiares complementos para filtro de red). Extensiones adicionales cargado usando el parámetro -metro o --fósforo. Así, por ejemplo, si vamos a utilizar los criterios -m estado estado , entonces debemos especificar esto explícitamente en la línea de regla: Y a la izquierda del criterio utilizado. diferencia entre obvio

implícito no general El criterio es que los explícitos deben cargarse explícitamente y los implícitos se cargan automáticamente. Se puede utilizar en todos los criterios. ¡firmar!. antes del valor del criterio. Esto significará que esta regla cubre todos los paquetes que no corresponden a este parámetro Por ejemplo : criterio--protocolo! TCP significará que todos los paquetes que No Son protocolos TCP que están sujetos a la regla. Sin embargo últimas versiones iptables (específicamente 1.4.3.2 y superiores) ya no admiten esta sintaxis y requieren el uso de --protocolo! TCP, A

! --protocolo tcp

, dando el siguiente error: El uso de negación intraposicionada (`--option! this`) está obsoleto en favor de la extraposición (`! --option this`).

: pasar el paquete a otra cadena de reglas, “descartar” el paquete, emitir un mensaje de error a la fuente...). A continuación se muestran los comandos y parámetros de la utilidad iptables: Parámetro
A continuación se presentan en forma de tabla.
Parámetros de selección de paquetes de uso común:
Configuraciones generales
--protocolo (abreviado -p)
Define el protocolo. Opciones tcp, udp, icmp, todos o cualquier otro protocolo definido en /etc/protocols
iptables -A ENTRADA -p tcp
--fuente
  • (-s, --src)
  • Dirección IP del origen del paquete. Se puede definir de varias maneras:

Se recomienda encarecidamente no utilizar nombres de dominio que requieran consultas DNS para su resolución, ya que es posible que Netfilter DNS no funcione correctamente durante la etapa de configuración. Además, tenga en cuenta que los nombres se resuelven sólo una vez: al agregar una regla a la cadena. Posteriormente, la dirección IP correspondiente a este nombre puede cambiar, pero esto no afectará las reglas ya escritas (la dirección anterior permanecerá en ellas). Si especifica nombre de dominio, que se resuelve en varias direcciones IP, se agregará una regla separada para cada dirección.

iptables -A ENTRADA -s 10.10.10.3
--destino
(-d)
Dirección IP del destino del paquete. Se puede definir de varias maneras (ver --fuente). iptables -A ENTRADA --destino 192.168.1.0/24
--en-interfaz
(-i)
Identifica la interfaz a la que llegó el paquete. Útil para NAT y máquinas con múltiples interfaces de red. Utilizado en cadenas de ENTRADA, ADELANTE y PREROUTING. Es posible utilizar el signo "+", entonces significa el uso de todas las interfaces que comienzan con el nombre + (por ejemplo, eth+ - todas las interfaces eth). iptables -t nat -A PREROUTING --en-interfaz eth0
--out-interfaz
(-o)
Define la interfaz desde la que saldrá el paquete. Útil para NAT y máquinas con múltiples interfaces de red. Utilizado en cadenas de SALIDA, ADELANTE y POSTROUTING. Es posible utilizar el signo "+". iptables -t nat -A POSTROUTING --en-interfaz eth1
Parámetros implícitos (no compartidos)
-p proto -h mostrando ayuda sobre los parámetros implícitos del protocolo proto. iptables -p icmp -h
--puerto-fuente
(--deporte)
Fuente del puerto, solo posible para protocolos --protocolo tcp o --protocol udp iptables -A ENTRADA --protocol tcp --puerto-fuente 25
--puerto-destino
(--puerto)
Puerto de destino, solo posible para los protocolos --protocol tcp o --protemocol udp iptables -A ENTRADA --protocolo udp --puerto-destino 67
Parámetros explícitos
-metro estado --estado(obsoleto)
alias
-m conntrack --ctstate

Estado de conexión. Opciones disponibles:

  • NUEVO(Todos los paquetes establecen una nueva conexión)
  • ESTABLECIDO(Todos los paquetes pertenecientes a conexión establecida)
  • RELACIONADO(Paquetes que no pertenecen a una conexión establecida, pero están asociados a ella. Por ejemplo, FTP en modo activo utiliza diferentes conexiones para transferir datos. Estas conexiones están asociadas).
  • INVÁLIDO(Paquetes que no se pueden identificar por una razón u otra. Por ejemplo, errores ICMP que no pertenecen a conexiones existentes)
  • etc. (más detalles en la documentación)
iptables -A ENTRADA -m estado --estado NUEVO,ESTABLECIDOiptables -A ENTRADA -m conntrack --ctstate NUEVO,ESTABLECIDO
-m mac --mac-fuente Conjuntos dirección MAC nodo de red que envió el paquete. La dirección MAC debe especificarse en el formato XX:XX:XX:XX:XX:XX. -m mac --mac-fuente 00:00:00:00:00:0

Acciones sobre paquetes

Este título sería más correcto reformularlo como " Acciones sobre paquetes que coinciden con los criterios de selección.". Entonces, para lograr cualquier acciones en paquetes, necesitas especificar la clave -j (--saltar) e indicar qué acción específica tomar.

Las acciones sobre paquetes pueden tomar los siguientes valores:

  • ACEPTAR- el paquete sale de esta cadena y pasa a la siguiente (literalmente - ACEPTAR).
  • GOTA- descartar un paquete que cumple la condición, mientras el paquete no se transmite a otras tablas/cadenas.
  • RECHAZAR- descartar el paquete enviando un mensaje ICMP al remitente, mientras el paquete no se transmite a otras tablas/cadenas.
  • DEVOLVER- devolver el paquete a la cadena anterior y continuar su paso a partir de la siguiente regla.
  • SNAT fuente en el paquete. Sólo se puede utilizar en cadenas. POSTROUTING y SALIDA en tablas nat.
  • ADNT- aplicar traducción de dirección equipo en el paquete. Se puede utilizar en cadena. ENRUTAMIENTO PREVIO en la mesa nat. (en casos excepcionales - en la cadena de SALIDA)
  • REGISTRO- registrar el paquete (enviado al demonio) y procesarlo con otras reglas.
  • MASCARADA- usado en su lugar SNAT si hay una conexión con una IP dinámica (se permite indicar solo en la cadena POSTRRUTAMIENTO tablas nat).
  • MARCA- se utiliza para establecer etiquetas en paquetes y pasar a reglas adicionales para su procesamiento.
  • etc.

Excepto acciones especificadas, hay otros que se pueden encontrar en la documentación (quizás pronto complemente el artículo a medida que desarrolle el tema). Algunas acciones tienen parámetros adicionales.

La siguiente tabla proporciona ejemplos y descripciones de parámetros adicionales:

: pasar el paquete a otra cadena de reglas, “descartar” el paquete, emitir un mensaje de error a la fuente...). A continuación se muestran los comandos y parámetros de la utilidad iptables: Parámetro
DNAT (Traducción de direcciones de red de destino)
--al destino especifica qué dirección IP debe sustituirse como dirección de destino. En el ejemplo en todos los paquetes. protocolo tcp, que acudió a la dirección 1.2.3.4, dirección dada será reemplazado por 4.3.2.1. iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 -j DNAT --to-destino 4.3.2.1
REGISTRO
--nivel de registro Se utiliza para establecer el nivel de registro (). En el ejemplo, el nivel de registro máximo se establece para todos los paquetes tcp en la tabla de filtro de la cadena FORWARD. iptables -A FORWARD -p tcp -j LOG --depuración a nivel de registro
--prefijo-registro Especifica el texto (prefijo) que precederá a todos los mensajes. iptables. (muy conveniente para más adelante) El prefijo puede contener hasta 29 caracteres, incluidos los espacios. En el ejemplo, todos los paquetes tcp en la tabla de filtros de la cadena INPUT con el prefijo de filtro INRUT se envían a syslog. iptables -A ENTRADA -p tcp -j LOG --log-prefix "filtro-INRUT"
--log-ip-opciones Le permite ingresar diversa información desde el encabezado del paquete IP. iptables -A ADELANTE -p tcp -j LOG --log-ip-options
etc...

Esto concluye la teoría sobre el filtro de red netfilter/iptables. En el próximo artículo daré ejemplos prácticos para dominar esta teoría.

Reanudar

En este artículo examinamos muy brevemente los conceptos básicos. protector contra sobretensiones en linux. Entonces, el subsistema netfilter/iptables es parte del kernel de Linux y se utiliza para organizar varios esquemas Filtrado y manipulación de paquetes de red. En este caso, cada paquete pasa de interfaz de red, en el que llegó y más adelante a lo largo de una determinada ruta de cadenas, dependiendo de si está destinado sistema local o "no local". Cada cadena consta de un conjunto de tablas que contienen un conjunto secuencial de reglas. Cada regla consta de un determinado criterio/criterios para seleccionar un paquete de red y alguna acción con el paquete que cumple con estos criterios. De acuerdo con las reglas dadas, se puede realizar cualquier acción en el paquete (por ejemplo, transferir a la siguiente/otra cadena, restablecer el paquete, modificar el contenido o los encabezados, etc.). Cada cadena y cada tabla tiene su propio propósito, funcionalidad y lugar en la ruta del paquete. Por ejemplo, para filtrar paquetes se utiliza la tabla de filtrado, que está contenida en tres cadenas estándar y puede estar contenida en cadenas, definido por el usuario. La ruta del paquete termina en la interfaz de red saliente o en la entrega a un proceso/aplicación local.

Literatura

Bastante informacion interesante en ruso está contenido aquí:

  • http://www.opennet.ru/docs/RUS/iptables/
  • http://ru.wikibooks.org/wiki/Iptables

Hay material más detallado disponible en lenguaje burgués aquí:

  • http://www.frozentux.net/documents/ipsysctl-tutorial/
  • http://www.netfilter.org/documentation/index.html

¡Saludos cordiales, McSim!

Un pequeño script inicial (reglas, preguntas frecuentes de iptables) para escritorio o servidor sencillo. En este caso, ejemplos de cómo trabajar con puertos de uno u otro software que se ejecuta en su computadora. Se deben observar precauciones de seguridad en cualquier computadora. El mito de que Linux es más seguro no es cierto; todo depende de la torpeza de las manos del administrador. También hay sistemas Windows bien protegidos, así como sistemas Linux que están abiertos a casi cualquier persona. Por lo tanto, todavía vale la pena pensar un poco en la protección de la red de su computadora. A continuación se muestran algunas reglas de iptables que pueden resultar útiles al principio.

Reemplacé específicamente $IPT con /sbin/iptables, si alguien necesita solo una regla, para no cambiar nada, simplemente la copia y la ejecuta. Naturalmente, aquí todavía hay algunas reglas, no hay VPN diferentes, etc., si lo desea, agréguelas.

Estas líneas se pueden copiar completamente en un script y simplemente ejecutarlas. Para casos normales esto es suficiente. Si alguna aplicación no puede acceder a la red, se ha agregado especialmente el registro. ¡Simplemente abra tail -f /var/log/syslog (o el suyo, si es diferente de Ubuntu) y observe! Si tiene preguntas, agréguelas a la discusión y las resolveremos juntos.

PD: Además de estas reglas, piense en lo que debería tomar del artículo Optimización de TCP.

Cómo eliminar una regla en Iptables

Publicado por Alexey Ubozhenko

Varias veces me he encontrado con el hecho de que incluso las personas generalmente inteligentes cometen errores completamente imperdonables. Por ejemplo, abren el puerto en el que se ejecuta la base de datos a todo Internet.

Blog sobre administración de sistemas. Artículos sobre Linux, Windows, sistemas de almacenamiento NetApp y virtualización.

Esto les sucede a menudo a los principiantes en DevOps que han estado escribiendo código toda su vida y ahora sus responsabilidades también incluyen la configuración de servidores. Hay buenos tutoriales en línea sobre configuración básica firewall en Linux y otros *nix, pero a menudo son hojas en muchas pantallas. Entonces, espero que este tutorial más conciso sea útil para alguien.

¡Importante! Es muy fácil bloquear por error una máquina hasta tal punto que ya no se pueda acceder a ella. Esto es especialmente cierto en el caso del alojamiento en la nube. Por ejemplo, si en AWS cierra todos los puertos del 1024 al 65536, por alguna razón la máquina se cierra después de reiniciar todo en general puertos. Si estás alojado en las nubes, es mejor configurar un firewall a través de la interfaz web proporcionada por el hosting.

Una pequeña nota sobre terminología. El firewall integrado en el kernel de Linux se llama Netfilter e iptables es una utilidad para administrar este firewall. Mucha gente cree erróneamente que el firewall se llama iptables. Esto está mal. Al decir algo como "filtro paquetes usando iptables", les estás mostrando a los demás tu ignorancia.

En general, qué tipo de problemas se pueden resolver con Netfilter:

  • Permitir/denegar tráfico entrante en puertos específicos sobre ciertos protocolos (IPv4/IPv6, TCP/UDP) con direcciones especificadas(IP, MAC) o subredes;
  • Todo es igual para el tráfico saliente;
  • Puede, por ejemplo, ignorar por completo todos los paquetes ICMP;
  • Configurando NAT, consulte la publicación sobre cómo instalar y configurar OpenVPN;
  • Escuché que los verdaderos gurús saben cómo configurar protección contra DDoS y fuerza bruta y limitar el acceso a la red. aplicaciones específicas, usuarios o grupos, y hacer otras locuras;

Me gustaría señalar que al principio personalmente encontré la utilidad iptables extremadamente inconveniente en comparación con ipfw en FreeBSD. Afortunadamente, después de trabajar con él durante algún tiempo, todos estos indicadores como -A, -D, -j y otros se vuelven familiares, así que tenga paciencia. Veamos los comandos básicos.

Mostrar todas las reglas:

Puede notar que Netfilter tiene algunas "cadenas": al menos ENTRADA, SALIDA y ADELANTE.

Personalmente también tengo una cadena DOCKER en mi máquina. Por primera vez, puedes pensar en los dos primeros como todo el tráfico entrante y saliente, respectivamente, y olvidarte temporalmente del resto. Es muy probable que nunca los necesite en absoluto.

Eliminar todas las reglas:

Cambie la política (comportamiento predeterminado) de la cadena:

iptables -P CAÍDA DE ENTRADA
iptables -P ENTRADA ACEPTAR

Denegar el acceso desde el host/subred:

iptables -A ENTRADA -s 123.45.67.89 -j SOLTAR
iptables -A ENTRADA -s 123.45.0.0/16-j SOLTAR

También puedes utilizar nombres de dominio:

iptables -A ENTRADA -s ejemplo.ru -j DROP

Prohibición de conexiones salientes:

iptables -A SALIDA -d 123.45.67.89 -j SOLTAR

Puedes usar negaciones en las reglas:

iptables -A ENTRADA!-s 123.45.67.89 -j SOLTAR

Eliminando una regla por su número en la cadena:

iptables -D ENTRADA 1

Eliminar una regla según lo que hace:

iptables -D ENTRADA -s 123.45.67.89 -j SOLTAR

La opción -p especifica el protocolo. Puede utilizar todo, icmp, tcp, udp o el número de protocolo de /etc/protocols. El indicador --sport especifica el puerto desde el que se envió el paquete y el indicador --dport especifica el puerto de destino:

iptables -A ENTRADA -p tcp --sport80-j ACEPTAR
iptables -A ENTRADA -p tcp --dport80-j ACEPTAR

Insertando una regla al principio de una cadena:

iptables -ENTRÉ...

O puede especificar una posición específica:

iptables-save >/etc/iptables.rules

Restaurar reglas:

restauración-iptables

Ahora veamos algunos ejemplos prácticos. Por ejemplo, así es como se ve la emulación de Netsplit en una prueba que verifica el comportamiento de una aplicación que usa Akka Cluster:

ejecutar(nodo1, s"iptables -A ENTRADA -s $nodo2 -j DROP")
ejecutar(nodo1, s"iptables -A ENTRADA -s $nodo3 -j DROP")
ejecutar(nodo1, s"iptables -A SALIDA -d $nodo2 -j DROP")
ejecutar(nodo1, s"iptables -A SALIDA -d $nodo3 -j DROP")

La restauración se produce exactamente de la misma manera, solo que el indicador -A se reemplaza por el indicador -D.

Otro ejemplo. Debe averiguar qué puertos están escuchando en la máquina y cerrar los innecesarios. Entramos en el coche y decimos:

Salida de ejemplo:

Conexiones activas a Internet (solo servidores)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado PID/nombre de programa
tcp 0 0 0.0.0.0:80 0.0.0.0:* ESCUCHAR 3210/nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* ESCUCHAR 1789/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* ESCUCHAR 797/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* ESCUCHAR 990/postgres

Nginx y SSHd miran Internet, esto es normal. PostgreSQL solo escucha interfaz local, por lo que tampoco hay problemas con él. Pero epmd sobresale (puedes comprobarlo con telnet desde otra máquina), y esto no sirve. Solo puede cerrar el puerto 4369. Cómo hacerlo se mostró arriba. O puede ir aún más lejos y denegar todas las conexiones desde el exterior al puerto 81 y anteriores:

iptables -A ENTRADA -m multipuerto \
-p tcp --dports81:65535!-s 127.0.0.0/8-j CAÍDA

Esto utiliza la extensión multipuerto, que le permite especificar rangos de puertos.

Comprobemos que todo funciona. Si está bien, guarde las reglas:

iptables-save >/etc/iptables.rules

Para garantizar que las reglas se seleccionen cuando se inicie el sistema, creamos un nuevo archivo /etc/network/if-pre-up.d/iptables:

restauración-iptablessalir0

... y decimos:

chmod +x /etc/network/if-pre-up.d/iptables

Se ha probado que este método funciona en Ubuntu 14.04 LTS.

También debería funcionar en Debian. Encontrará una descripción de una forma alternativa de restaurar las reglas del firewall al iniciar el sistema en la nota ya mencionada sobre OpenVPN.

Materiales adicionales para quienes quieran saber más sobre Netfilter:

¿Cómo se configuran firewalls en sus servidores?

Etiquetas: Linux, Seguridad, Redes.

La utilidad de línea de comandos iptables se utiliza para configurar el firewall netfilter integrado en un sistema basado en el kernel de Linux.

Esta instrucción es adecuada tanto para principiantes que desean comprender aspectos de la seguridad de la red como para profesionales experimentados como hoja de trucos.

Principio de configuración

La sintaxis general para usar iptables es:

iptables-t<таблица> <команда> <цепочка>[número]<условие> <действие>

<таблица>

Las reglas de Netfilter se distribuyen en 4 tablas, cada una de las cuales tiene su propio propósito (más detalles a continuación). Se especifica con el modificador -t, pero si no se especifica este parámetro, la acción se realizará para la tabla predeterminada: filtro.

<команда>

Los comandos indican qué tipo de acción realizamos en netfilter, por ejemplo, crear o eliminar una regla.

<цепочка>

Cada tabla tiene cadenas, para cada una de las cuales se crean las reglas. Por ejemplo, para lo anterior tablas de filtrado Hay tres cadenas predefinidas: ENTRADA (paquetes entrantes), SALIDA (saliente) y ADELANTE (tránsito).

[número]

Algunos comandos requieren especificar un número de regla, por ejemplo, para eliminar o editar.

<условие>

Una condición describe los criterios para elaborar una regla particular.

<действие>

Bueno, en realidad, ¿qué hacemos con el paquete si cumple con los criterios de la condición?

* para ser justos, vale la pena señalar que la clave de acción no tiene por qué estar al final. Es solo que este formato se encuentra con mayor frecuencia en las instrucciones y hace que las reglas sean más fáciles de leer.

Claves de iptables y ejemplos de su uso.

Para trabajar con tablas (iptables -t)

Permítanme recordarles que todas las reglas en netfilter se distribuyen en tablas. Para trabajar con una tabla específica, debe usar el modificador -t.

Descripción

Las siguientes claves determinan las acciones que realiza la utilidad iptables.

Llave Descripción y ejemplos
-A Agregar una regla al final de la lista:
iptables -A ENTRADA -s 192.168.0.15 -j SOLTAR
negar mensajes entrantes desde 192.168.0.15.
-D Eliminar una regla:
iptables -D ENTRADA 10
eliminar regla en la cadena INPUT con el número 10.
-I Insertar una regla en una parte específica de la lista:
iptables -I ENTRADA 5 -s 192.168.0.15 -j SOLTAR
insertar la regla quinta en la lista.
-R Reemplazo de la regla.
iptables -R SALIDA 5 -s 192.168.0.15 -j ACEPTAR
reemplace nuestra quinta regla de prohibir a permisiva.
-F Restablecer reglas en una cadena.
iptables -F ENTRADA
-Z Restablecer estadísticas.
iptables -Z ENTRADA
-NORTE Creando una cadena.
iptables -N CADENANUEVO
-INCÓGNITA Eliminando una cadena.
iptables -X CADENA NUEVA
-PAG Defina la regla predeterminada.
iptables -P CAÍDA DE ENTRADA
-MI Cambiar el nombre de una cadena.
iptables -E CADENANEW CHAINOLD

Términos

Estas claves definen las condiciones de la regla.

Llave Descripción y ejemplos
-pag Protocolo de red. Las opciones válidas son TCP, UDP, ICMP o TODAS.
iptables -A ENTRADA -p tcp -j ACEPTAR
Permitir todas las conexiones TCP entrantes.
-s Dirección de origen: nombre de host, dirección IP o subred en notación CIDR.
iptables -A ENTRADA -s 192.168.0.50 -j SOLTAR
negar mensajes entrantes del nodo 192.168.0.50
-d Dirección de destino. El principio de uso es similar. clave anterior-s.
iptables -A SALIDA -d 192.168.0.50 -j SOLTAR
negar salida al nodo 192.168.0.50
-i El adaptador de red por el que llegan los paquetes (ENTRADA).
iptables -A ENTRADA -i eth2 -j SOLTAR
deshabilite el tráfico entrante para la interfaz Ethernet eth2.
-o El adaptador de red desde el que se envían los paquetes (SALIDA).
iptables -A SALIDA -o eth3 -j ACEPTAR
Permitir mensajes salientes desde la interfaz Ethernet eth3.
--dport Puerto de destino.
iptables -A ENTRADA -p tcp --dport 80 -j ACEPTAR
Permitir llamadas entrantes en el puerto 80.
--deporte Puerto de origen.
iptables -A ENTRADA -p tcp --sport 1023 -j SOLTAR
prohibir mensajes entrantes desde el puerto 1023.

Las claves enumeradas también admiten la construcción mediante el signo. ! .

Configurar netfilter usando iptables

Invierte la condición, por ejemplo,
iptables -A ENTRADA -s! 192.168.0.50 -j CAÍDA
negará la conexión a todos los hosts excepto 192.168.0.50.

Comportamiento

Acciones que se realizarán en un paquete que coincida con los criterios de la condición. Cada tabla tiene su propio conjunto de acciones permitidas. Especificado mediante una clave -j.

Mesa Acción A continuación se muestran los comandos y parámetros de la utilidad iptables:
filtrar ACEPTAR Permite el paquete.
GOTA Niega el paquete.
RECHAZAR Prohíbe enviar un mensaje a la fuente.
nat MASCARADA Para paquetes salientes, reemplaza la dirección IP de origen con la dirección de la interfaz desde la que sale el paquete.
SNAT Similar a MASQUERADE, pero indica una interfaz de red específica cuya dirección se utilizará para la suplantación de identidad.
ADNT Sustitución de dirección para paquetes entrantes.
REDIRIGIR Redirige la solicitud a otro puerto en el mismo sistema.
mutilar TOS Modificación del campo TOS (priorización de tráfico).
DSCP Cambio de DSCP (también priorización de tráfico).
TTL Cambie TTL (vida útil del paquete).
HL Similar a TTL, pero para IPv6.
MARCA Marcado de paquetes. Se utiliza para su posterior filtración o modelado.
CONNMARK Marcado de conexión.
TCPMSS Cambiando el valor de MTU.

Ejemplos de comandos de iptables de uso común

Comandos generales

Ver reglas con sus números:

iptables -L --números-de-línea

Para cada tabla necesitas mirar las reglas por separado:

iptables -t nat -L --números-de-línea

Eliminar todas las reglas:

Establecer reglas predeterminadas:

iptables -P CAÍDA DE ENTRADA

iptables -P CAÍDA DE SALIDA

* en estos ejemplos, de forma predeterminada, la regla de denegación (DROP) funcionará para todos los paquetes entrantes (ENTRADA) y salientes (SALIDA).

Permitir todo

Método 1: agregando una regla:

iptables -I ENTRADA 1 -j ACEPTAR

iptables -I SALIDA 1 -j ACEPTAR

iptables -I ADELANTE 1 -j ACEPTAR

* estos tres comandos crearán reglas que permitirán todos los paquetes entrantes, salientes y en tránsito.

Método 2. Reglas de limpieza:

* aquí primero eliminamos todas las reglas (-F), luego configuramos la política predeterminada para permitir entradas, salidas y tránsito (-S).

Método 3. Deshabilitar el servicio (es conveniente deshabilitar temporalmente el firewall para diagnosticar problemas):

Trabajar con reglas

Agregue una regla al final de la lista:

iptables -A ENTRADA -p tcp --dport 25 -j ACEPTAR

iptables -A ENTRADA -p tcp -s! 192.168.0.25 —puerto 993 -i eth0 -j ACEPTAR

Agregar rango de puertos:

iptables -A ENTRADA -p tcp --dport 3000:4000 -j ACEPTAR

*en este caso, de 3000 a 4000.

Insertar regla:

iptables -I ADELANTE 15 -p udp -d 8.8.8.8 --dport 53 -i eth1 -j ACEPTAR

Reenvío de puertos

Hay dos métodos de configuración.

1. Reglas de PRERRUTAMIENTO + POSTRRUTAMIENTO:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 —dport 22 -j DNAT —al destino 192.168.1.15:2222

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 —sport 2222 -j SNAT —to-source 19.8.232.80:22

* Dónde 19.8.232.80 — la dirección en la que escuchamos las solicitudes de conexión; 22 — puerto para reenvío; 192.168.1.15 2222 — puerto interno.

2. Reglas de PRERRUTAMIENTO + ADELANTE:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 22 -j DNAT --to-destination 192.168.1.15:2222

iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m estado —estado NUEVO, ESTABLECIDO, RELACIONADO -j ACEPTAR

* Dónde eth1— interfaz de red en la que escuchamos las solicitudes; 22 — puerto para reenvío; 192.168.1.15 dirección IP interna, al que transferimos todas las solicitudes; 2222 — puerto interno.

Configuración inicial

Permitir SSH:

iptables -A ENTRADA -p tcp --dport 22 -j ACEPTAR

Establecimos la política para prohibir los mensajes entrantes y permitir todos los mensajes salientes:

iptables -P SALIDA ACEPTAR

Creamos una regla para el funcionamiento normal de apt-get:

iptables -A ENTRADA -p tcp --sport 80 -m estado --estado ESTABLECIDO -j ACEPTAR

Permitir ICMP (para ejecutar el comando ping):

iptables -A ENTRADA -p icmp -j ACEPTAR

Reglas de guardado (permanente)

De forma predeterminada, todas las reglas dejan de funcionar después de reiniciar la red o la computadora. Existen varios métodos de configuración para guardar las reglas después de reiniciar.

Método 1. iptables-save

Guarde las reglas en un archivo:

iptables-save > /etc/iptables.rules

Abrir configuración de red:

vi /etc/red/interfaces

y agrega la línea:

restauración previa de iptables< /etc/iptables.rules

Método 2: iptables-persistente

Instale el paquete persistente de iptables:

apto para instalar iptables-persistente

Para guardar las reglas, ingrese el comando:

servicio de guardado persistente de iptables

Método 3. servicio iptables

Funciona en versiones anteriores de Linux:

Método 4: iptables.init

Funciona en CentOS:

/usr/libexec/iptables/iptables.init guardar

Ubuntu y CentOS

Los sistemas operativos modernos Ubuntu y CentOS no tienen iptables de forma predeterminada.

Debe instalarlo o utilizar utilidades más nuevas.

En CentOS

Como programa regular La gestión del firewall utiliza firewall-cmd. Para obtener más detalles, lea las instrucciones sobre Cómo configurar firewalld en CentOS.

Si necesita utilizar iptables, instale el paquete con la utilidad:

yum instalar servicios-iptables

Deshabilitar firewall:

systemctl detener firewalld

systemctl deshabilita el firewalld

Permitir e iniciar iptables:

systemctl habilita iptables

en ubuntu

ufw ahora se usa para administrar el firewall.

Para trabajar con iptables, instale el siguiente paquete:

apt-get install iptables-persistente

Deshabilitar ufw:

# Redes# Seguridad# UNIX# Ubuntu# Linux

¿Le resultó útil esta instrucción?

DETRÁS DEL “Muro DE FUEGO”:
FIREWALL (FIREWALL) Y PUERTA DE ENTRADA A INTERNET
EN DEBIAN GNU/LINUX 4.0 ETCH

Una guía práctica para organizar acceso seguro a internet
desde una computadora separada y desde una red local en Debian GNU/Linux 4.0 Etch
una pequeña teoría

Cada acceso a Internet no sólo permite conectarse a varios servidores y sitios, pero también crea un peligro potencial de penetración en nuestro ordenador desde el exterior. Este peligro no debe pasarse por alto, ya que actualmente la mayoría de los intentos de acceso no autorizado a los ordenadores de los usuarios desde Internet forman parte de un negocio delictivo bien organizado. Después de piratear con éxito su sistema, intentarán usar su computadora para enviar spam, organizar ataques DoS en otras computadoras o para otros fines nefastos. Descuidando este peligro mejor escenario aumentará sus costos de tráfico y ralentizará su computadora; en el peor de los casos, puede involucrarlo sin darse cuenta en las actividades delictivas de grupos cibernéticos;

La situación se ve agravada por el hecho de que en algunos sistemas operativos (aún) muy extendidos, muchos puertos se dejan abiertos de forma predeterminada, lo que permite a un atacante de Internet conectarse con el usuario sin que éste se dé cuenta.

Para evitar conexiones no autorizadas desde el exterior y filtrar el tráfico entrante/saliente en Sistema operativo se debe utilizar un programa especial - cortafuegos(firewall inglés), también conocido como cortafuegos Y cortafuegos. A continuación se describe una configuración simple de firewall en un sistema operativo gratuito. Debian GNU/Linux 4.0.

El uso de un firewall cobra especial relevancia si tienes más de un ordenador, pero red doméstica u oficina, cuyas computadoras acceden a Internet.

Incluso una pequeña red local debe estar organizada adecuadamente. Supongamos que tiene un punto de acceso a una conexión a Internet de alta velocidad (por ejemplo, un módem ADSL) con una interfaz Ethernet (es decir, de red).

Existe la tentación (alimentada por recomendaciones de analfabetos, como en las instrucciones para mi módem ADSL) de conectar el módem directamente al conmutador y luego conectarlo al conmutador. Todo Computadoras de la red local. En este caso, el módem emite dinámicamente direcciones IP locales a través del conmutador, ¡pero resulta que cada computadora se queda sola con Internet! Ni un módem ni un interruptor pueden convertirse en un obstáculo para un malvado. Un atacante puede escanear Todo ordenadores de una red local organizada de esta manera.

Una solución lógica y segura es crear barrera entre el módem y la red local, en forma de una computadora separada con " un muro de fuego"(cortafuegos). Esta computadora tiene dos interfaces: con una “mira” a Internet (es decir, está físicamente conectada al módem), con la otra mira hacia la red local (y está físicamente conectada al conmutador, al que también están conectadas otras computadoras). conectado). Dado que nuestra computadora con firewall ahora es un centro para que otras computadoras accedan a Internet, también se le llama puerta(Puerta de entrada inglesa).

Con tal organización de la red local, la probabilidad de piratería se reduce significativamente: el atacante "ve" sólo la puerta de enlace de Internet, y hay un firewall instalado en la puerta de enlace, y no es fácil piratearlo.

Configurar iptables en Linux para principiantes

Las computadoras de la red local pueden navegar por Internet y permanecer relativamente seguras.

Configurar un firewall usando el configurador arno-iptables-firewall

Para organizar un firewall en GNU/Linux el programa se utiliza iptables, que, por regla general, se instala inmediatamente al instalar la mayoría de las distribuciones. EN DebianGNU/Linux Puedes comprobar esto ejecutándolo con derechos de administrador. aptitud. Si es necesario instalamos iptables.

Sin embargo, la configuración manual iptables No es una tarea trivial y sólo puede realizarla especialistas en el campo de la administración de sistemas. Por lo tanto, para configurar las reglas según las cuales funcionará el firewall, es mejor utilizar configurador especial. EN DebianGNU/Linux este es un programa cortafuegos-arno-iptables. Una vez lanzado, formula una serie de preguntas, a partir de las cuales genera reglas para el funcionamiento del firewall. iptables.

Escriba en la consola con derechos de superusuario:

#aptitude instalar arno-iptables-firewall

Al inicio de la instalación el programa nos preguntará si realmente queremos configurar un firewall con él. iptables:

Primero necesitas indicar Interfaz— “mirar” Internet, es decir conectado al módem. La configuración de la interfaz se define en el archivo de configuración. /etc/red/interfaces. Podría verse así, por ejemplo:

# Esta es la interfaz lo: apunta a nuestra propia máquina. auto lo iface lo inet loopback dirección 127.0.0.1 netmask 255.0.0.0 # Esta es la interfaz eth0, que está conectada a Internet (módem ADSL) # Su peculiaridad es que el proveedor le asigna dinámicamente la dirección IP, # por lo tanto la opción dhcp auto eth0 está configurada iface eth0 inet dhcp # Esta es la interfaz que da a la red local # La dirección de la red local será 192.168.2.0/24 # Por motivos de seguridad en la red local, la puerta de enlace tiene dirección IP estática- 192.168.2.1, # por lo tanto se establece la opción estática # Máscara de red - 255.255.255.0 # La dirección de transmisión de la red en este caso será 192.168.2.255 auto eth1 iface eth1 inet dirección estática 192.168.2.1 máscara de red 255.255.255.0 transmisión 192.168 .2.2 55

Entonces, mirando la configuración /etc/red/interfaces, indicamos al configurador del firewall que nuestra interfaz es externa eth0:

A la pregunta de si el proveedor nos proporciona una dirección IP dinamicamente(usando protocolo DHCP), respondemos afirmativamente:

La siguiente pregunta es qué servicios se prestarán desde nuestro ordenador a los internautas externos. ¡No tenemos ninguno! No nos dedicamos al alojamiento web profesional y no pretendemos distribuir información externamente. Dejamos la línea vacía.

Luego está la cuestión de si proporcionaremos algún servicio a través de UDP. Tampoco, ¡y también dejamos la línea vacía!

¿Necesitamos que nos hagan ping desde mundo exterior(es decir, comprobó si hay una conexión con la computadora en la que está instalado el firewall). En nuestro caso, esto es bastante aceptable:

Esto completa la configuración de una computadora separada que no es una puerta de enlace de red local. Si planeamos utilizar la computadora como puerta de entrada, debemos responder algunas preguntas más. Indicamos la interfaz con la que la puerta de enlace se enfrenta a la red local; en nuestro caso es eth1, como se desprende claramente de /etc/red/interfaces(de lo contrario, para una computadora “solitaria”, deje este campo en blanco):

Cuando se le preguntó si permitir la traducción NAT, es decir Al redirigir el tráfico de Internet a través de la puerta de enlace a la red local y viceversa, respondemos "sí"; esta es una de nuestras principales tareas en este caso:

Entonces surge la pregunta: ¿a qué segmento de la red local se puede acceder mediante la redirección a redes externas? Todas las computadoras de nuestra red local tienen derecho a acceder a Internet; indicar el valor nuevamente 192.168.2.0/24

Finalmente, confirmamos nuestro deseo de lanzar iptables sin verificación adicional por nuestra parte de las reglas de firewall generadas automáticamente por el configurador:

Luego de esto, si todo salió bien, se muestra un mensaje similar al siguiente. Ahora aparecerá cada vez que se inicie la computadora de la puerta de enlace y le informará que el firewall se ha iniciado exitosamente:

Arno's Iptables Firewall Script v1.8.8c ————————————————————————————- Se aprobaron las comprobaciones de cordura... OK Módulo IPTABLES detectado...

Cargando módulos IPTABLES adicionales: ¡Todos los módulos IPTABLES cargados! Configurando /proc/…. configuraciones: Habilitar anti-spoof con rp_filter Habilitar la protección contra inundaciones SYN a través de cookies SYN Deshabilitar el registro de marcianos Deshabilitar la aceptación de mensajes de redireccionamiento ICMP Establecer el máximo. cantidad de conexiones simultáneas a 16384 Habilitación de la protección contra paquetes enrutados de origen Configuración de tiempos de espera de conexión predeterminados Habilitación de la reducción de la capacidad de DoS Configuración predeterminada de TTL=64 Deshabilitación de ECN (notificación explícita de congestión) Habilitación del soporte para IP dinámicas Limpieza de la tabla de rutas /proc/ configuración hecha... Borrar reglas en la tabla de filtros Establecer políticas predeterminadas (seguras) Usar “información” de nivel de registro para syslogd Configurar reglas de firewall: —————————————————————————— - Aceptar paquetes desde el dispositivo de loopback local Habilitar la configuración del tamaño máximo de paquete a través de MSS Habilitar la manipulación de TOS Registro de escaneos ocultos (sondas nmap, etc.) habilitado Registro de paquetes con indicadores TCP incorrectos habilitado Registro de paquetes INVÁLIDOS deshabilitado Registro de paquetes fragmentados habilitado Registro de acceso desde direcciones reservadas habilitadas Configuración de reglas anti-spoof Lectura de reglas IPTABLES personalizadas desde /etc/arno-iptables-firewall/custom-rules Carga de complementos (de usuario) Configuración de la política INPUT para la red externa (INET): Habilitación del soporte para un DHCP IP asignada en interfaz(es) externa(s): eth0 Registro de hosts explícitamente bloqueados habilitado Registro de conexiones de salida locales denegadas habilitado Los paquetes NO serán verificados para direcciones de origen privadas Permitir que todo el mundo envíe solicitudes ICMP (ping) Registro de solicitudes ICMP descartadas (ping) habilitado Registro de otros paquetes ICMP descartados habilitado Registro de posibles escaneos ocultos habilitado Registro de (otros) intentos de conexión a puertos TCP PRIVILEGED habilitado Registro de (otros) intentos de conexión a puertos UDP PRIVILEGED habilitado Registro de (otros) intentos de conexión a Puertos TCP SIN PRIVILEGIOS habilitados Registro de (otros) intentos de conexión a puertos UDP SIN PRIVILEGIOS habilitado Registro de otros protocolos IP (no TCP/UDP/ICMP) intentos de conexión habilitados Registro de inundación ICMP habilitado Aplicación de la política INET a la interfaz externa (INET): eth0 (sin una subred externa especificada) Configuración de la política INPUT para las interfaces internas (LAN): eth1 Permitir solicitudes ICMP (ping) Permitir todos (otros) protocolos Configuración de la política FORWARD para las interfaces internas (LAN): eth1 Registro de Conexiones LAN->INET FORWARD denegadas habilitadas Configuración de la política LAN->INET: Permitir solicitudes ICMP (ping) Permitir todos (otros) protocolos Habilitar enmascaramiento (NAT) a través de interfaces externas: eth0 Agregar host(s) (internos) : 192. 168.2.0/24 La seguridad se IMPLICA para las interfaces externas en la cadena FORWARD 16 de enero a las 23:53:12 Se aplicaron todas las reglas de firewall.

Nota 1. En la mayoría de los casos, el inicio exitoso del firewall ocurre después de la primera comunicación con el configurador. Si algo no funciona, se recomienda repetir la configuración ejecutando nuevamente el configurador con derechos de superusuario:

# dpkg-reconfigure arno-iptables-firewall

Esto eliminará errores aleatorios que podrían surgir al responder preguntas del configurador durante su primera experiencia de comunicación con él. Si esto no ayuda, puedes intentar corregirlo manualmente. archivo de configuración programas cortafuegos-arno-iptables, a saber: /etc/arno-iptables-firewall/firewall.conf. Puede resultar útil visitar el sitio de inicio del creador de este programa en: http://rocky.eld.leidenuniv.nl/. Contiene una guía muy informativa para trabajar con el programa, preguntas frecuentes interesantes y, además, hay información sobre nuevas versiones del programa.

Nota 2. No debemos olvidar que ninguno Un firewall no puede ofrecer una garantía del 100% de la seguridad del funcionamiento de su computadora en Internet. Sin embargo, no se puede descuidar la protección mediante firewall. Debemos hacer todo lo que esté a nuestro alcance para luego confiar en la misericordia de Dios. “Si el Señor no preserva la ciudad, en vano vela el centinela”.(Sal. 126:1).

Fuente del artículo

Escribí una publicación de blog sobre las reglas básicas de Iptables para el usuario de producción hace mucho tiempo, y probablemente deberías leerla y el artículo relacionado sobre el firewall con estado.

Pero el kernel anterior 2.6.39 (que incluye y puede usarlo para incluir IP en la lista blanca si tiene más de 10 para lista blanca(donde 10 es arbitrario)).

Configurar iptables para tontos

El primer estado del identificador que sabemos que queremos aceptar o eliminar, y las interfaces.

Si solo desea permitir solo IP, no hay estado

Lo más probable es que encuentres problemas relacionados con esto y te sugiero que utilices esta condición para hacerte la vida más fácil. Por ejemplo, no se resuelve y definitivamente causará problemas para ciertas aplicaciones.

Principio de configuración

La sintaxis general para usar iptables es:

iptables-t<таблица> <команда> <цепочка>[número]<условие> <действие>

<таблица>

Las reglas de Netfilter se distribuyen en 4 tablas, cada una de las cuales tiene su propio propósito (más detalles a continuación). Se especifica con el modificador -t, pero si no se especifica este parámetro, la acción se realizará para la tabla predeterminada: filtro.

<команда>

Los comandos indican qué tipo de acción realizamos en netfilter, por ejemplo, crear o eliminar una regla.

<цепочка>

Cada tabla tiene cadenas, para cada una de las cuales se crean las reglas. Por ejemplo, para la tabla de filtros anterior hay tres cadenas predefinidas: ENTRADA (paquetes entrantes), SALIDA (paquetes salientes) y ADELANTE (paquetes en tránsito).

[número]

Algunos comandos requieren especificar un número de regla, por ejemplo, para eliminar o editar.

<условие>

Una condición describe los criterios para elaborar una regla particular.

<действие>

Bueno, en realidad, ¿qué hacemos con el paquete si cumple con los criterios de la condición?

* para ser justos, vale la pena señalar que la clave de acción no tiene por qué estar al final. Es solo que este formato se encuentra con mayor frecuencia en las instrucciones y hace que las reglas sean más fáciles de leer.

Claves de iptables y ejemplos de su uso.

Para trabajar con tablas (iptables -t)

Permítanme recordarles que todas las reglas en netfilter se distribuyen en tablas. Para trabajar con una tabla específica, debe usar el modificador -t.

equipos

Las siguientes claves determinan las acciones que realiza la utilidad iptables.

Llave Descripción y ejemplos
-A Agregar una regla al final de la lista:
iptables -A ENTRADA -s 192.168.0.15 -j SOLTAR
negar mensajes entrantes desde 192.168.0.15.
-D Eliminar una regla:
iptables -D ENTRADA 10
eliminar regla en la cadena INPUT con el número 10.
-I Insertar una regla en una parte específica de la lista:
iptables -I ENTRADA 5 -s 192.168.0.15 -j SOLTAR
insertar la regla quinta en la lista.
-R Reemplazo de la regla.
iptables -R SALIDA 5 -s 192.168.0.15 -j ACEPTAR
reemplace nuestra quinta regla de prohibir a permisiva.
-F Restablecer reglas en una cadena.
iptables -F ENTRADA
-Z Restablecer estadísticas.
iptables -Z ENTRADA
-NORTE Creando una cadena.
iptables -N CADENANUEVO
-INCÓGNITA Eliminando una cadena.
iptables -X CADENA NUEVA
-PAG Defina la regla predeterminada.
iptables -P CAÍDA DE ENTRADA
-MI Cambiar el nombre de una cadena.
iptables -E CADENANEW CHAINOLD

Términos

Estas claves definen las condiciones de la regla.

Llave Descripción y ejemplos
-pag Protocolo de red. Las opciones válidas son TCP, UDP, ICMP o TODAS.
iptables -A ENTRADA -p tcp -j ACEPTAR
Permitir todas las conexiones TCP entrantes.
-s Dirección de origen: nombre de host, dirección IP o subred en notación CIDR.
iptables -A ENTRADA -s 192.168.0.50 -j SOLTAR
negar mensajes entrantes del nodo 192.168.0.50
-d Dirección de destino. El principio de uso es similar al de la clave -s anterior.
iptables -A SALIDA -d 192.168.0.50 -j SOLTAR
negar salida al nodo 192.168.0.50
-i El adaptador de red por el que llegan los paquetes (ENTRADA).
iptables -A ENTRADA -i eth2 -j SOLTAR
deshabilite el tráfico entrante para la interfaz Ethernet eth2.
-o El adaptador de red desde el que se envían los paquetes (SALIDA).
iptables -A SALIDA -o eth3 -j ACEPTAR
Permitir mensajes salientes desde la interfaz Ethernet eth3.
--dport Puerto de destino.
iptables -A ENTRADA -p tcp --dport 80 -j ACEPTAR
Permitir llamadas entrantes en el puerto 80.
--deporte Puerto de origen.
iptables -A ENTRADA -p tcp --sport 1023 -j SOLTAR
prohibir mensajes entrantes desde el puerto 1023.

Las claves enumeradas también admiten la construcción mediante el signo. ! . Invierte la condición, por ejemplo,
iptables -A ENTRADA -s! 192.168.0.50 -j CAÍDA
negará la conexión a todos los hosts excepto 192.168.0.50.

Comportamiento

Acciones que se realizarán en un paquete que coincida con los criterios de la condición. Cada tabla tiene su propio conjunto de acciones permitidas. Especificado mediante una clave -j.

Mesa Acción A continuación se muestran los comandos y parámetros de la utilidad iptables:
filtrar ACEPTAR Permite el paquete.
GOTA Niega el paquete.
RECHAZAR Prohíbe enviar un mensaje a la fuente.
nat MASCARADA Para paquetes salientes, reemplaza la dirección IP de origen con la dirección de la interfaz desde la que sale el paquete.
SNAT Similar a MASQUERADE, pero indica una interfaz de red específica cuya dirección se utilizará para la suplantación de identidad.
ADNT Sustitución de dirección para paquetes entrantes.
REDIRIGIR Redirige la solicitud a otro puerto en el mismo sistema.
mutilar TOS Modificación del campo TOS (priorización de tráfico).
DSCP Cambio de DSCP (también priorización de tráfico).
TTL Cambie TTL (vida útil del paquete).
HL Similar a TTL, pero para IPv6.
MARCA Marcado de paquetes. Se utiliza para su posterior filtración o modelado.
CONNMARK Marcado de conexión.
TCPMSS Cambiando el valor de MTU.

Ejemplos de comandos de iptables de uso común

Comandos generales

Ver reglas con sus números:

iptables -L --números-de-línea

Para cada tabla necesitas mirar las reglas por separado:

iptables -t nat -L --números-de-línea

Eliminar todas las reglas:

Establecer reglas predeterminadas:

iptables -P CAÍDA DE ENTRADA

iptables -P CAÍDA DE SALIDA

* en estos ejemplos, de forma predeterminada, la regla de denegación (DROP) funcionará para todos los paquetes entrantes (ENTRADA) y salientes (SALIDA).

Permitir todo

Método 1: agregando una regla:

iptables -I ENTRADA 1 -j ACEPTAR

iptables -I SALIDA 1 -j ACEPTAR

iptables -I ADELANTE 1 -j ACEPTAR

* estos tres comandos crearán reglas que permitirán todos los paquetes entrantes, salientes y en tránsito.

Método 2. Reglas de limpieza:

* aquí primero eliminamos todas las reglas (-F), luego configuramos la política predeterminada para permitir entradas, salidas y tránsito (-S).

Método 3. Deshabilitar el servicio (es conveniente deshabilitar temporalmente el firewall para diagnosticar problemas):

parada de iptables del servicio

Trabajar con reglas

Agregue una regla al final de la lista:

iptables -A ENTRADA -p tcp --dport 25 -j ACEPTAR

iptables -A ENTRADA -p tcp -s! 192.168.0.25 --dport 993 -i eth0 -j ACEPTAR

Agregar rango de puertos:

iptables -A ENTRADA -p tcp --dport 3000:4000 -j ACEPTAR

*en este caso, de 3000 a 4000.

Insertar regla:

iptables -I ADELANTE 15 -p udp -d 8.8.8.8 --dport 53 -i eth1 -j ACEPTAR

Bloquear dirección IP específica para conectarse a través del puerto 25:

iptables -I ENTRADA 1 -s 1.1.1.1 -p tcp --dport 25 -j DROP

Reenvío de puertos

Hay dos métodos de configuración.

1. Reglas de PRERRUTAMIENTO + POSTRRUTAMIENTO:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 --dport 22 -j DNAT --to-destino 192.168.1.15:2222

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 --sport 2222 -j SNAT --to-source 19.8.232.80:22

* Dónde 19.8.232.80 — la dirección en la que escuchamos las solicitudes de conexión; 22 — puerto para reenvío; 192.168.1.15 — dirección IP interna a la que transferimos todas las solicitudes; 2222 — puerto interno.

2. Reglas de PRERRUTAMIENTO + ADELANTE:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 22 -j DNAT --to-destination 192.168.1.15:2222

iptables -A FORWARD -p tcp -d 192.168.1.15 --dport 22 -m state --state NUEVO,ESTABLECIDO,RELACIONADO -j ACEPTAR

Varias veces me he encontrado con el hecho de que incluso las personas generalmente inteligentes cometen errores completamente imperdonables. Por ejemplo, abren el puerto en el que se ejecuta la base de datos a todo Internet. Esto les sucede a menudo a los principiantes en DevOps que han estado escribiendo código toda su vida y ahora sus responsabilidades también incluyen la configuración de servidores. Hay buenos tutoriales en Internet sobre la configuración básica del firewall en Linux y otros *nix, pero a menudo son hojas en muchas pantallas. Entonces, espero que este tutorial más conciso sea útil para alguien.

¡Importante! Es muy fácil bloquear por error una máquina hasta tal punto que ya no se pueda acceder a ella. Esto es especialmente cierto en el caso del alojamiento en la nube. Por ejemplo, si en AWS cierra todos los puertos del 1024 al 65536, por alguna razón la máquina se cierra después de reiniciar todo en general puertos. Si estás alojado en las nubes, es mejor configurar un firewall a través de la interfaz web proporcionada por el hosting.

Una pequeña nota sobre terminología. El firewall integrado en el kernel de Linux se llama Netfilter e iptables es una utilidad para administrar este firewall. Mucha gente cree erróneamente que el firewall se llama iptables. Esto está mal. Al decir algo como "filtro paquetes usando iptables", les estás mostrando a los demás tu ignorancia.

En general, qué tipo de problemas se pueden resolver con Netfilter:

  • Permitir/denegar el tráfico entrante a ciertos puertos usando ciertos protocolos (IPv4/IPv6, TCP/UDP) desde direcciones específicas (IP, MAC) o subredes;
  • Todo es igual para el tráfico saliente;
  • Puede, por ejemplo, ignorar por completo todos los paquetes ICMP;
  • Configurando NAT, consulte el artículo sobre un enrutador basado en Raspberry Pi;
  • He oído que los verdaderos gurús pueden configurar protección DDoS y de fuerza bruta, limitar el acceso a la red a aplicaciones, usuarios o grupos específicos y hacer otras locuras;

Observo que la utilidad iptables personalmente me pareció extremadamente inconveniente al principio en comparación con ipfw en FreeBSD. Afortunadamente, después de trabajar con él durante algún tiempo, todos estos indicadores como -A, -D, -j y otros se vuelven familiares, así que tenga paciencia. Veamos los comandos básicos.

Mostrar todas las reglas:

iptables-L-n

Puede notar que Netfilter tiene algunas "cadenas": al menos ENTRADA, SALIDA y ADELANTE. Personalmente también tengo una cadena DOCKER en mi máquina. Por primera vez, puedes pensar en los dos primeros como todo el tráfico entrante y saliente, respectivamente, y olvidarte temporalmente del resto. Es muy probable que nunca los necesite en absoluto.

Eliminar todas las reglas:

iptables-F

Cambie la política (comportamiento predeterminado) de la cadena:

iptables -P CAÍDA DE ENTRADA
iptables -P ENTRADA ACEPTAR

Denegar el acceso desde el host/subred:

iptables -A ENTRADA -s 123.45.67.89 -j SOLTAR
iptables -A ENTRADA -s 123.45.0.0/ 16 -j SOLTAR

También puedes utilizar nombres de dominio:

iptables -A ENTRADA -s ejemplo.ru -j DROP

Prohibición de conexiones salientes:

iptables -A SALIDA -d 123.45.67.89 -j SOLTAR

Puedes usar negaciones en las reglas:

iptables -UNA ENTRADA!

Eliminando una regla por su número en la cadena:

-s 123.45.67.89 -j SOLTAR

Eliminar una regla según lo que hace:

iptables -D ENTRADA 1

iptables -D ENTRADA -s 123.45.67.89 -j SOLTAR La opción -p especifica el protocolo. Puede utilizar todo, icmp, tcp, udp o el número de protocolo de /etc/protocols. Bandera - -sport indica el puerto desde el que se envió el paquete, y -

-dport especifica el puerto de destino:
iptables -A ENTRADA -p tcp --sport 80 -j ACEPTAR

Insertando una regla al principio de una cadena:

iptables -A ENTRADA -p tcp --dport 80 -j ACEPTAR

O puede especificar una posición específica:

iptables -ENTRÉ...

iptables -ENTRÉ 3...

Restaurar reglas:

restauración-iptables< / etc/ iptables.rules

Ahora veamos algunos ejemplos prácticos. Así es, por ejemplo, cómo se ve la emulación de Netsplit en una prueba que comprueba el comportamiento de una aplicación que utiliza Akka Cluster:

ejecutar (nodo1, s "iptables -A ENTRADA -s $nodo2 -j DROP")
ejecutar (nodo1, s "iptables -A ENTRADA -s $nodo3 -j DROP")
ejecutar (nodo1, s "iptables -A SALIDA -d $nodo2 -j DROP")
ejecutar (nodo1, s "iptables -A SALIDA -d $nodo3 -j DROP")

La restauración se produce exactamente de la misma manera, solo que el indicador -A se reemplaza por el indicador -D.

Otro ejemplo. Debe averiguar qué puertos están escuchando en la máquina y cerrar los innecesarios. Entramos en el coche y decimos:

netstat-tuwpln

Salida de ejemplo:

Conexiones activas a Internet (solo servidores)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado PID/nombre de programa
tcp 0 0 0.0.0.0:80 0.0.0.0:* ESCUCHAR 3210/nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* ESCUCHAR 1789/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* ESCUCHAR 797/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* ESCUCHAR 990/postgres

Nginx y SSHd miran Internet, esto es normal. PostgreSQL sólo escucha la interfaz local, por lo que tampoco hay problemas con eso. Pero epmd sobresale (puedes comprobarlo con telnet desde otra máquina), y esto no sirve. Solo puede cerrar el puerto 4369. Cómo hacerlo se mostró arriba. O puede ir aún más lejos y denegar todas las conexiones desde el exterior al puerto 81 y anteriores.

IPTables es una utilidad que se utiliza para administrar un firewall en Linux. Es una herramienta poderosa y conveniente para conexiones no deseadas. Todo el proceso está contenido en reglas de iptables, que se pueden editar y ver. Más información detallada presentado en el artículo.

Historia de la creación

A IPTables en sistema linux Se utilizó el firewall IPFW, tomado de BSD. Luego, con la versión 2.4 del kernel de Linux, empezó a venir con el firewall Netfilter y la utilidad IPTables para gestionarlo. En la metodología de su trabajo, se conservaron todos los aspectos y se ampliaron ligeramente funcionalmente.

Estructura y diseño de IPTables.

Al ingresar al firewall, el paquete pasa por varias comprobaciones. Esto podría ser una suma de comprobación o cualquier otro análisis a nivel de kernel. Entonces es el momento de pasar por la cadena PREROUTING. A continuación, se comprueba según qué se produce la redirección a la siguiente cadena. Si el paquete no tiene una dirección, como, por ejemplo, en TCP, se envía a la cadena FORWARD. En los casos en que hay una dirección específica, sigue la cadena INPUT, y luego a aquellos demonios o servicios a los que está destinada. La respuesta de ellos también debe pasar por varias cadenas, por ejemplo SALIDA. El último eslabón de este proceso es la cadena POSTROUTING.

Ahora un poco sobre cadenas. Cada uno de ellos contiene varias tablas. Sus nombres pueden repetirse, pero esto no afecta en modo alguno la obra, ya que no están interconectados.

Las tablas, a su vez, contienen varias reglas. Básicamente, una regla es una determinada condición que debe cumplir el paquete que se está verificando. Dependiendo del resultado, se realiza una determinada acción en el paquete.

Por lo tanto, al pasar por todas las etapas de la red, el paquete visita secuencialmente todas las cadenas y en cada una se verifica el cumplimiento de la condición de una determinada regla. Si la tabla no la crea el usuario, entonces se realiza la acción predeterminada, básicamente ACEPTAR, que le permite continuar avanzando, o DROP, que detiene el paquete.

Las cadenas preestablecidas vienen en las siguientes categorías:

  • ENRUTAMIENTO PREVIO. Procesamiento inicial de todos los paquetes entrantes.
  • APORTE. Esto incluye aquellos paquetes que se envían directamente a la computadora local.
  • ADELANTE. Se utiliza para "paquetes de tránsito" que siguen la tabla de enrutamiento.
  • PRODUCCIÓN. Se utiliza para paquetes salientes.
  • POSTRRUTAMIENTO. La última etapa en el paso de un paquete saliente a través de todas las cadenas.

Además de las cadenas integradas, los usuarios pueden crear o eliminar las suyas propias.

Ver y administrar reglas de IPTables

Como se mencionó anteriormente, todas las cadenas contienen ciertas condiciones para los paquetes. La utilidad IPTables se utiliza para ver y administrar las reglas de IPTables. Cada regla individual es una línea con un conjunto de condiciones para los paquetes, así como acciones sobre ellos, según el resultado.

El formato del comando se ve así: iptables [-t nombre de la tabla que se está procesando] comando llamado [criterios] [acción realizada].

Todo lo contenido en se puede omitir. Si se trata de un parámetro que especifica una tabla, se utilizará el filtro. Para usar un nombre específico, debe agregar el modificador -t. El comando llamado le permite llamar acción necesaria, por ejemplo, agregue una regla IPTables o elimínela. Los “criterios” indican los parámetros mediante los cuales se realizará la selección. Y en "acción" hay una acción que debe realizarse si se cumple la condición.

Comandos para crear y ver reglas de IPTables

  • Agregar (-A). Al utilizar el comando, se especifica la cadena y la tabla a la que desea agregar. regla necesaria. El valor del equipo es que lo hace al final de la lista.
  • Eliminar (-D). Como sugiere el nombre, elimina una regla. Como parámetros, puede especificar tanto el nombre completo como los números asignados a ellos.
  • Cambiar nombre de cadena (-E). Cambia el nombre de la cadena. El comando especifica el nombre antiguo y luego el nuevo.
  • Enrasado (-F). Borrar absolutamente todas las reglas de una determinada tabla.
  • Insertar(-I). Este comando inserta la regla requerida en la ubicación indicada por el número.
  • Lista(-L). Ver reglas de Iptables. Si no se especifica ninguna tabla, se utilizará el filtro predeterminado.
  • Política (-P). Se utiliza la política predeterminada para la cadena especificada.
  • Reemplace (-R). Cambia la regla bajo número especificado, para lo que sea necesario.
  • Eliminar cadena (-X). Este comando elimina todas las cadenas creadas. Sólo quedarán los preinstalados.
  • Cero (-Z). Restablece los contadores de datos transmitidos en la cadena especificada.

Un poco sobre los parámetros de selección de paquetes.

Se pueden dividir en tres tipos:

  • Criterios generales. Se pueden especificar para cualquier regla. No requieren la conexión de extensiones y módulos especiales, y tampoco dependen del protocolo que se utilizará.
  • No criterios generales. Están disponibles cuando se utilizan criterios generales.
  • Explícito. Para utilizar este tipo, debe conectarse complementos especiales para filtro de red. Además, debe utilizar el modificador -m en el comando.

Vale la pena hablar un poco sobre los parámetros más frecuentes que se utilizan al analizar paquetes:

  • Protocolo (-p). Indica el protocolo.
  • Fuentes). Este parámetro determina la dirección IP de la fuente de donde proviene el paquete. Se puede especificar de varias maneras. Un host específico, una dirección o una subred completa.
  • Destino (-d). Dirección de destino del paquete. Al igual que el anterior, se puede describir de varias formas.
  • Interfaz interna (-i). Especifica la interfaz entrante del paquete. Se utiliza principalmente para NAT o en sistemas con múltiples interfaces.
  • Interfaz exterior (-o). Interfaz saliente.

Algunos ejemplos

¿Para ver las reglas nat de IPTables? necesitas usar el comando - "iptables -L -t nat". Descubra el estado general del firewall: "iptables -L -n -v". Además, este comando le permite ver las reglas de IPTables disponibles en todo el sistema. Inserte una regla en un lugar determinado de la tabla, por ejemplo, entre la primera y la segunda línea: "iptables -I INPUT 2 -s 202.54.1.2 -j DROP". Luego vea si se ha agregado: "iptables -L INPUT -n --line-numbers".

para bloquear dirección específica, por ejemplo, 12.12.12.12 - “iptables -A INPUT -s 12.12.12.12 -j DROP”.

Ayuda para iptables - “man iptables”. Si necesita información sobre equipo específico- “iptables -j DROP -h”.

En conclusión

Debe utilizar los comandos de IPTables con precaución, ya que una configuración incorrecta (por ignorancia) puede provocar fallas en la red o salida completa está fuera de servicio. Por lo tanto, vale la pena estudiar detalladamente los manuales e instrucciones antes de realizar la configuración. En manos hábiles, IPTables puede convertirse en un defensor confiable conexiones de red. Los administradores del sistema utilizan activamente la utilidad para crear conexiones aisladas del acceso no autorizado.




Arriba