GNU/Linux >> Linux Esercitazione >  >> Linux

Modulo IPTables ip_tables non trovato per root

1) "iptables" è l'applicazione userland che si occupa del modulo kernel ip_tables. Sembra che tu abbia già /bin/iptables ma il tuo kernel non ha incluso/caricato ip_tables.ko

2) se il tuo kernel non supporta ip_tables la tua distribuzione potrebbe averlo incluso come modulo kernel caricabile in:

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

dove uname -r è la versione del kernel, ovvero 3.5.0-18-generic

se trovi ip_tables.ko puoi provare

#depmod
#modprobe ip_tables

o

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

a seconda che la tua distribuzione includa app depmod/modprobe/insmod reali o quelle implementate da busybox potresti incorrere in alcuni problemi aggiuntivi come problemi di percorso relativo o moduli del kernel compressi non gestiti correttamente a seconda della versione di busybox.

3) se ip_tables.ko non è disponibile devi ricostruire il kernel con il supporto ip_table o come modulo caricabile esterno. Nell'ultimo caso dopo aver creato ip_tables.ko torna al punto 2).


TL;DR

  • Aggiorna il tuo kernel:sudo pacman -S linux

  • Aggiorna il tuo bootloader:bootctl --path=/boot install

  • Riavvia

Questa mattina ho riscontrato lo stesso problema durante il tentativo di configurare 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.

Sto usando la versione di iptables:

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

Che cosa è successo?

Il modulo del kernel ip_tables esiste davvero?

[[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.... Sembra che sia scomparso! Scopriamolo:1. Quale kernel utilizza il mio computer?2. Supporta 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.... Questo è strano perché è un kernel Arch Linux standard e supporta iptables.

Diamo un'occhiata per vedere se ci sono moduli netfilter disponibili (sarei molto sorpreso se non ci fossero perché è molto improbabile che qualcosa li elimini):

[[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

Quindi c'è un indizio qui; sembra che io abbia una mancata corrispondenza del kernel (ci sono moduli del kernel per la versione del kernel:/lib/modules/4.9.11-1 che non corrispondono al kernel in esecuzione sul mio computer - 4.9.13-1). Quindi controlliamo se ci sono moduli disponibili per il kernel in esecuzione sulla mia macchina:

[[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! Quindi è molto probabile che questa sia la causa principale del problema; il kernel in esecuzione sulla mia macchina non ha moduli caricabili (non va bene). Proviamo a risolverlo aggiornando (nel mio caso, effettuando il downgrade) del kernel, poiché sto usando il kernel standard di Arch Linux che è sotto il controllo della versione di pacman, posso semplicemente eseguire pacman per aggiornarlo (se stai usando un kernel personalizzato che è un problema che sarai in grado di risolvere):

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

Grande! pacman installerà il kernel 4.9.11-1, che è quello che voglio (ho dei moduli per questo kernel - non ho idea di come ho finito per ottenere il kernel 4.9.13). Lascia che pacman completi l'installazione.

Infine, devo assicurarmi che questo kernel venga utilizzato all'avvio della macchina. Quindi ho bisogno di aggiornare il boot manager (sto usando systemd-boot).- Ho una partizione di avvio che è montata su /boot- Elimina il file loader.conf:/boot/loader/loader.conf (verrà aggiornato quando si esegue bootctl di seguito e bootctl non lo aggiornerà se esiste già)- Esegui bootctl per aggiornare il boot manager:

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

Ora riavvia il computer.... Al riavvio dovrebbe usare il nuovo kernel (declassato)!

Una volta avviato e dopo aver effettuato l'accesso, controlla la versione del kernel per assicurarti che sia in esecuzione il kernel corretto:

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

Ora prova a eseguire il comando originale (per impostare la condivisione Internet di 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 risolto! (nota che ho effettuato l'accesso come utente root per risolvere questo problema - non consiglierei di farlo a meno che tu non sia sicuro di sapere cosa stai facendo!)


Linux
  1. id:comando non trovato

  2. w:comando non trovato

  3. df:comando non trovato

  4. du:comando non trovato

  5. rm:comando non trovato

Il modulo non è stato trovato [ubuntu 16.04.1]?

nc:comando non trovato

iptables:comando non trovato

aws-shell:comando non trovato

insmod:comando non trovato

FATAL:Errore modulo non trovato utilizzando modprobe