Article ID: 113000, created on Jun 10, 2014, last review on Aug 12, 2014

  • Applies to:
  • Virtuozzo 6.0
  • Virtuozzo containers for Linux
  • Virtuozzo hypervisor

Síntomas

Algunos de los distintos síntomas que pueden experimentarse son los siguientes:

  • Algunas reglas iptables no funcionan
  • Cuando intenta crear una regla iptable en la tabla NAT o al intentar usar el módulo STATE se obtiene el siguiente error:

    # iptables -t nat -L
    iptables v1.3.5: can't initialize iptables table `nat': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded.
    #
    

Causa

La causa de este problema suele ser que el seguimiento de la conexión (el módulo "conntracks") está desactivado de forma predeterminada en el nodo hardware de su Parallels Virtuozzo Containers (PVC). Por este motivo iptables no está en estado completo en la instalación predeterminada.

Puede verificarlo comprobando si recibe la misma salida que la siguiente:

[root@pvclin47 ~]# grep conntrac /etc/modprobe.d/vz-parallels.conf
options nf_conntrack ip_conntrack_disable_ve0=1
[root@pvclin47 ~]#

Cuando el soporte para "conntracks" está desactivado, la tabla NAT no está presente en la lista de tablas disponibles:

[root@pvclin47 ~]# cat /proc/net/ip_tables_names
mangle
filter
[root@pvclin47 ~]#

Como consecuencia, no es posible utilizar los módulos nf_nat y xt_state en el nodo hardware.

Resolución

Nota: la funcionalidad del módulo STATE de iptables puede reemplazarse añadiendo reglas complementarias explícitas para las cadenas INPUT y OUTPUT.

Si no está satisfecho con esta solución temporal o si necesita la funcionalidad de tabla NAT, siga leyendo este artículo.

Antes de activar el soporte para el seguimiento de la conexión, es extremadamente recomendable considerar lo siguiente:

Advertencia 1: la activación del seguimiento de conexión utiliza muchos recursos.

Advertencia 2: cuando "conntracks" está activado, es posible que no se pueda acceder de forma completa al nodo hardware desde la red cuando la carga de red sea elevada. Si un contenedor alojado está ejecutando algún software malintencionado, puede experimentarse un kernel panic.

Esto se debe a que el número de slots de seguimiento de conexión es limitado para un servidor físico. La activación de "conntracks" resulta especialmente peligrosa para un nodo hardware PVC, ya que este asigna dos slots de seguimiento para cada conexión a un contenedor – uno para la conexión externa y otro para la conexión del nodo hardware con el contenedor. De esta forma, si algún contenedor abre demasiadas conexiones, el nodo hardware no podrá crear ninguna conexión nueva.

Esta situación puede acontecer debido a un ataque de DDoS de cualquier contenedor. El administrador del nodo hardware no podría detenerlo mediante la detención de un contenedor o la adición de reglas iptables, ya que el administrador no podría acceder al nodo.

Pasos a realizar para activar "conntracks":

  1. Compruebe que en el nodo hardware se han cargado todos los módulos necesarios:

    [root@pvclin47 ~]# lsmod | grep -E "state|nat"
    nf_nat_ftp              3489  0
    nf_conntrack_ftp       12927  1 nf_nat_ftp
    iptable_nat             6236  0
    nf_nat                 23178  3 vzrst,nf_nat_ftp,iptable_nat
    nf_conntrack_ipv4       9848  3 iptable_nat,nf_nat
    ip_tables              18021  3 iptable_nat,iptable_mangle,iptable_filter
    xt_state                1474  2
    nf_conntrack           80758  8 vzrst,nf_nat_ftp,nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state
    [root@pvclin47 ~]#
    
  2. Añada estos módulos a la configuración de iptables en el nodo:

    [root@pvclin47 ~]# egrep '^IPTABLES_MODULES' /etc/sysconfig/iptables-config
    IPTABLES_MODULES="ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length xt_length xt_hl xt_tcpmss xt_TCPMSS xt_multiport xt_limit xt_dscp nf_conntrack iptable_nat"
    IPTABLES_MODULES_UNLOAD="yes"
    [root@pvclin47 ~]#
    
  3. Edite /etc/modprobe.d/vz-parallels.conf y establezca ip_conntrack_disable_ve0=0:

    [root@pvclin47 ~]# grep conntrac /etc/modprobe.d/vz-parallels.conf
    options nf_conntrack ip_conntrack_disable_ve0=0
    [root@pvclin47 ~]#
    
  4. Active iptables e inicie sesión para verificar que funciona correctamente:

    [root@pvclin47 ~]# egrep '^kern' /etc/rsyslog.conf
    kern.*                                                 /var/log/messages
    [root@pvclin47 ~]#
    
  5. Reinicie iptables:

    [root@pvclin47 ~]# service iptables restart
    iptables: Applying firewall rules:                         [  OK  ]
    iptables: Loading additional modules: ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length xt_length xt_hl xt_tcpmss xt_TCPMSS xt_multiport xt_limit xt_dscp ip_conntrack iptable_nat                                         [  OK  ]
    [root@pvclin47 ~]#
    

    Tenga en cuenta que la descarga de módulos de kernel puede resultar fallida si los módulos están siendo usados por contenedores en ejecución.

  6. Reinicie syslog:

    [root@pvclin47 ~]# service rsyslog restart
    Shutting down system logger:                               [ OK ]
    Starting system logger:                                    [  OK  ]
    [root@pvclin47 ~]#
    
  7. Añada una regla de prueba, como por ejemplo una regla para realizar el seguimiento de nuevas conexiones SSH:

    [root@pvclin47 ~]# iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name ssh_attempt --rsource -j LOG --log-prefix "SSH connection attempt: "
    [root@pvclin47 ~]#
    
  8. Evite realizar el seguimiento de cualquier otra conexión TCP para no utilizar tantos recursos de sistema:

    # iptables -t raw -I PREROUTING ! --dport 22 -j NOTRACK
    
  9. Intente acceder al servidor vía SSH mientras monitoriza el registro:

    Jan 11 02:29:19 pvclin47 kernel: [  106.459592] SSH connection attempt: IN=eth0 OUT= MAC=00:1c:42:ac:d1:c9:00:1e:67:07:55:95:08:00 SRC=192.168.55.3 DST=10.39.3.111 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=44446 DF PROTO=TCP SPT=51889 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
    Jan 11 02:29:19 pvclin47 kernel: [  106.459592] SSH connection attempt: IN=eth0 OUT= MAC=00:1c:42:ac:d1:c9:00:1e:67:07:55:95:08:00 SRC=192.168.55.3 DST=10.39.3.111 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=44446 DF PROTO=TCP SPT=51889 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
    

FAQ

P: ¿Qué hace exactamente esta opción?

R: Esta opción controla el seguimiento de paquetes en el entorno del nodo. Cuando está desactivada, los paquetes son aceptados, enrutados, etc., pero el kernel no guarda ninguna información acerca de las conexiones del paquete, puesto que considera cada paquete como una unidad completa.

Esta opción también presenta implicaciones para NAT. Debe disponer de la siguiente información para NAT: debe determinar el primer paquete de una conexión y decidir cuáles de los siguientes paquetes pertenecen al primer paquete. Es decir, qué paquetes deben considerarse una "conexión".

Información adicional

Si desea información acerca del proceso de configuración de "conntracks" en nodos pre-4.7, consulte el siguiente artículo:

9630
: Incidencias con el firewall en el nodo hardware - No se pueden utilizar los módulos ip_nat e ipt_state

d02f9caf3e11b191a38179103495106f e8e50b42231236b82df27684e7ec0beb 2897d76d56d2010f4e3a28f864d69223 0dd5b9380c7d4884d77587f3eb0fa8ef c62e8726973f80975db0531f1ed5c6a2 a26b38f94253cdfbf1028d72cf3a498b

Email subscription for changes to this article
Save as PDF