GNU/Linux >> Tutoriales Linux >  >> Linux

Módulo IPTables ip_tables no encontrado para root

1) "iptables" es la aplicación de usuario que se ocupa del módulo del kernel ip_tables. Parece que ya tiene /bin/iptables pero su kernel no ha incluido/cargado ip_tables.ko

2) si su kernel no es compatible con ip_tables, es posible que su distribución lo tenga incluido como un módulo de kernel cargable en:

/lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko 

donde uname -r es la versión del kernel, es decir, 3.5.0-18-generic

si encuentra ip_tables.ko puede probar

#depmod
#modprobe ip_tables

o

#insmod /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko 

dependiendo de si su distribución incluye aplicaciones depmod/modprobe/insmod reales o las implementadas por busybox, es posible que se encuentre con algunos problemas adicionales, como problemas de ruta relativa o módulos de kernel comprimidos que no se manejen correctamente según la versión de busybox.

3) si ip_tables.ko no está disponible, debe reconstruir el kernel con soporte para ip_table o como un módulo externo que se pueda cargar. En el último caso, después de crear ip_tables.ko, vuelva a 2).


TL;DR

  • Actualice su núcleo:sudo pacman -S linux

  • Actualice su gestor de arranque:bootctl --path=/boot install

  • Reiniciar

Esta mañana me encontré con este mismo problema al intentar configurar iptables:

[[email protected] /]# iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
iptables v1.6.0: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Estoy usando la versión de iptables:

[[email protected] /]# pacman -Q iptables
iptables 1.6.0-1

¿Qué ha pasado?

¿Existe realmente el módulo kernel ip_tables?

[[email protected] /]# /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.ko
bash: /lib/modules/4.8.13-1-ARCH/kernel/net/ipv4/netfilter/ip_tables.ko: No such file or directory

[[email protected] /]# modprobe ip_tables
modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.8.13-1-ARCH

hmmm.... ¡Parece que ha desaparecido! Averigüemos:1. ¿Qué kernel está usando mi computadora?2. ¿Es compatible con iptables?

[[email protected] /]# uname -r
4.8.13-1-ARCH

[[email protected] /]# cat /proc/sys/kernel/osrelease
4.8.13-1-ARCH

[[email protected] /]# zgrep IPTABLES /proc/config.gz
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP6_NF_IPTABLES=m

Ok.... Esto es extraño porque es un kernel estándar de Arch Linux y es compatible con iptables.

Echemos un vistazo para ver si hay módulos de netfilter disponibles (me sorprendería mucho si no los hubiera porque es muy poco probable que algo los elimine):

[[email protected] /]# ls /lib/modules/*/kernel/net/*/netfilter/
/lib/modules/4.9.11-1-ARCH/kernel/net/bridge/netfilter/:
ebt_802_3.ko.gz       ebtables.ko.gz      ebt_dnat.ko.gz   ebt_log.ko.gz     ebt_pkttype.ko.gz   ebt_vlan.ko.gz      nft_reject_bridge.ko.gz
ebtable_broute.ko.gz  ebt_among.ko.gz     ebt_ip6.ko.gz    ebt_mark.ko.gz    ebt_redirect.ko.gz  nf_log_bridge.ko.gz
ebtable_filter.ko.gz  ebt_arp.ko.gz   ebt_ip.ko.gz     ebt_mark_m.ko.gz  ebt_snat.ko.gz  nf_tables_bridge.ko.gz
ebtable_nat.ko.gz     ebt_arpreply.ko.gz  ebt_limit.ko.gz  ebt_nflog.ko.gz   ebt_stp.ko.gz   nft_meta_bridge.ko.gz

/lib/modules/4.9.11-1-ARCH/kernel/net/ipv4/netfilter/:
arptable_filter.ko.gz   ip_tables.ko.gz       nf_conntrack_ipv4.ko.gz       nf_nat_pptp.ko.gz       nft_dup_ipv4.ko.gz
arp_tables.ko.gz    ipt_ah.ko.gz          nf_defrag_ipv4.ko.gz      nf_nat_proto_gre.ko.gz  nft_masq_ipv4.ko.gz
arpt_mangle.ko.gz   ipt_CLUSTERIP.ko.gz   nf_dup_ipv4.ko.gz         nf_nat_snmp_basic.ko.gz nft_redir_ipv4.ko.gz
iptable_filter.ko.gz    ipt_ECN.ko.gz         nf_log_arp.ko.gz          nf_reject_ipv4.ko.gz    nft_reject_ipv4.ko.gz
iptable_mangle.ko.gz    ipt_MASQUERADE.ko.gz  nf_log_ipv4.ko.gz         nf_tables_arp.ko.gz
iptable_nat.ko.gz   ipt_REJECT.ko.gz      nf_nat_h323.ko.gz         nf_tables_ipv4.ko.gz
iptable_raw.ko.gz   ipt_rpfilter.ko.gz    nf_nat_ipv4.ko.gz         nft_chain_nat_ipv4.ko.gz
iptable_security.ko.gz  ipt_SYNPROXY.ko.gz    nf_nat_masquerade_ipv4.ko.gz  nft_chain_route_ipv4.ko.gz

/lib/modules/4.9.11-1-ARCH/kernel/net/ipv6/netfilter/:
ip6table_filter.ko.gz    ip6t_ah.ko.gz      ip6t_mh.ko.gz        nf_conntrack_ipv6.ko.gz       nf_reject_ipv6.ko.gz        nft_redir_ipv6.ko.gz
ip6table_mangle.ko.gz    ip6t_eui64.ko.gz   ip6t_NPT.ko.gz       nf_defrag_ipv6.ko.gz      nf_tables_ipv6.ko.gz        nft_reject_ipv6.ko.gz
ip6table_nat.ko.gz   ip6t_frag.ko.gz    ip6t_REJECT.ko.gz    nf_dup_ipv6.ko.gz         nft_chain_nat_ipv6.ko.gz
ip6table_raw.ko.gz   ip6t_hbh.ko.gz     ip6t_rpfilter.ko.gz  nf_log_ipv6.ko.gz         nft_chain_route_ipv6.ko.gz
ip6table_security.ko.gz  ip6t_ipv6header.ko.gz  ip6t_rt.ko.gz        nf_nat_ipv6.ko.gz         nft_dup_ipv6.ko.gz
ip6_tables.ko.gz     ip6t_MASQUERADE.ko.gz  ip6t_SYNPROXY.ko.gz  nf_nat_masquerade_ipv6.ko.gz  nft_masq_ipv6.ko.gz

Así que hay una pista aquí; parece que no coincide el kernel (hay módulos del kernel para la versión del kernel:/lib/modules/4.9.11-1 que no coincide con el kernel que se ejecuta en mi computadora - 4.9.13-1). Entonces, verifiquemos si hay módulos disponibles para el kernel que se ejecuta en mi máquina:

[[email protected] /]# ls /lib/modules/4.8.13-1-ARCH
ls: cannot access '/lib/modules/4.8.13-1-ARCH': No such file or directory

¡No! Por lo tanto, es muy probable que esta sea la causa raíz del problema; el núcleo que se ejecuta en mi máquina no tiene ningún módulo cargable (no es bueno). Intentemos solucionarlo actualizando (en mi caso, degradando) el kernel, porque estoy usando el kernel estándar de Arch Linux que está bajo el control de versión de pacman. Simplemente puedo ejecutar pacman para actualizarlo (si está usando un kernel personalizado que es un problema que podrás resolver):

[[email protected] /]# sudo pacman -S linux
...
Packages (1) linux-4.9.11-1
...

¡Excelente! pacman instalará el kernel 4.9.11-1, que es el que quiero (tengo módulos para este kernel; no tengo idea de cómo terminé obteniendo el Kernel 4.9.13). Deje que pacman complete la instalación.

Finalmente, necesito asegurarme de que este kernel se usará al arrancar la máquina. Entonces, necesito actualizar el administrador de arranque (estoy usando systemd-boot). Tengo una partición de arranque que está montada en /boot. Elimine el archivo loader.conf:/boot/loader/loader.conf (se actualizará cuando ejecute bootctl a continuación y bootctl no lo actualizará si ya existe) - Ejecute bootctl para actualizar el administrador de arranque:

[[email protected] /]$ bootctl --path=/boot install

Ahora reinicie la computadora... ¡Cuando se reinicie debería usar el kernel nuevo (rebajado)!

Una vez que haya arrancado y haya iniciado sesión, compruebe la versión del kernel para asegurarse de que se está ejecutando el kernel correcto:

[[email protected] /]$ uname -r
4.9.11-1-ARCH

Ahora intente ejecutar el comando original (para configurar el uso compartido de Internet de iptables)

[[email protected] /]$ sudo iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
[[email protected] /]$ sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
[[email protected] /]$ sudo iptables -A FORWARD -i enp0s20f0u4u3 -o enp0s31f6 -j ACCEPT

Woo-hoo ¡Problema solucionado! (Tenga en cuenta que inicié sesión como usuario raíz para solucionar este problema. ¡No recomendaría hacer esto a menos que esté seguro de que sabe lo que está haciendo!)


Linux
  1. id:comando no encontrado

  2. w:comando no encontrado

  3. df:comando no encontrado

  4. du:comando no encontrado

  5. rm:comando no encontrado

¿No se encontró el módulo [ubuntu 16.04.1]?

nc:comando no encontrado

iptables:comando no encontrado

aws-shell:comando no encontrado

Módulo no encontrado cuando hago un modprobe

Operación chown no permitida para root