IPTables-Modul ip_tables für root nicht gefunden

20253
Gopi

Wir haben eine von Linux hergestellte Linux-Distribution, die nicht mit aktivierten iptables ausgeliefert wird.

root@xxxx:~# iptables -L modprobe: FATAL: Module ip_tables not found. iptables v1.4.21: can't initialize iptables table `filter': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded. 

Ich habe auch versucht, modprobe zu verwenden, aber nicht gefunden und auch den Befehl find nichts gefunden.

# modprobe ip_tables modprobe: FATAL: Module ip_tables not found. # find / -name "ip_tables*" #  

Kann ich netfilter und iptables zusammenstellen und integrieren? Ich habe versucht, den gesamten Kernel zu kompilieren, aber aufgrund einiger unbekannter Faktoren funktionieren einige Funktionen nicht. Daher muss ich sie als Kernel-Modul erstellen und in unsere vorhandene benutzerdefinierte Distribution integrieren.

5
Haben Sie versucht, Quellen von http://www.netfilter.org/downloads.html zu kompilieren Anthony vor 9 Jahren 0
Haben Sie `modprobe ip_tables` ausprobiert? Jan vor 9 Jahren 1
Ich habe meinen Kernel neu kompiliert, um die Funktion zu aktivieren. Vielen Dank Gopi vor 9 Jahren 0

2 Antworten auf die Frage

6
Pat

1) "iptables" ist die Userland-Anwendung, die sich mit dem Kernmodul ip_tables befasst. Es scheint, Sie haben / bin / iptables bereits, aber Ihr Kernel hat ip_tables.ko nicht mit geladen / geladen

2) Wenn Ihr Kernel ip_tables nicht unterstützt, könnte Ihre Distribution es als ladbares Kernel-Modul enthalten:

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

Wo uname -rist die Kernel-Version, dh 3.5.0-18-generisch

Wenn Sie ip_tables.ko finden, können Sie es versuchen

#depmod #modprobe ip_tables 

oder

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

Abhängig davon, ob Ihre Distribution echte depmod / modprobe / insmod-Apps oder die von busybox implementierten Apps enthält, können Sie auf einige zusätzliche Probleme wie relative Pfadprobleme oder komprimierte Kernelmodule stoßen, die je nach der busybox-Version nicht korrekt gehandhabt werden.

3) Wenn ip_tables.ko nicht verfügbar ist, müssen Sie entweder den Kernel mit Unterstützung von ip_table oder als externes ladbares Modul neu erstellen. Im letzten Fall nach dem Erstellen von ip_tables.ko gehe zurück zu 2).

3
Matt Conway

TL; DR

  • Aktualisieren Sie Ihren Kernel: sudo pacman -S linux

  • Aktualisieren Sie Ihren Bootloader: bootctl --path=/boot install

  • Starten Sie neu

Heute Morgen bin ich bei der Konfiguration von iptables auf das gleiche Problem gestoßen:

[root@office-pc /]# 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. 

Ich verwende die iptables Version:

[root@office-pc /]# pacman -Q iptables iptables 1.6.0-1 

Was ist passiert?

Gibt es das Kernel-Modul ip_tables tatsächlich?

[root@office-pc /]# /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  [root@office-pc /]# modprobe ip_tables modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.8.13-1-ARCH 

hmmm .... scheint es verschwunden zu haben! Finden wir heraus: 1. Welchen Kernel verwendet mein Computer? 2. Unterstützt es iptables?

[root@office-pc /]# uname -r 4.8.13-1-ARCH  [root@office-pc /]# cat /proc/sys/kernel/osrelease 4.8.13-1-ARCH  [root@office-pc /]# zgrep IPTABLES /proc/config.gz CONFIG_IP_NF_IPTABLES=m CONFIG_IP6_NF_IPTABLES=m 

Ok .... Dies ist merkwürdig, da es sich um einen Standard-Arch-Linux-Kernel handelt und iptables unterstützt.

Werfen wir einen Blick darauf, ob Netzfiltermodule verfügbar sind (ich wäre sehr überrascht, wenn dies nicht der Fall wäre, da es sehr unwahrscheinlich ist, dass etwas sie löscht):

[root@office-pc /]# 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 

Also gibt es hier einen Hinweis; Anscheinend habe ich einen Kernel-Miss-Match (es gibt Kernel-Module für die Kernel-Version: /lib/modules/4.9.11-1, die nicht zum Kernel passen, der auf meinem Computer ausgeführt wird - 4.9.13-1). Schauen wir uns also an, ob Module für den Kernel auf meinem Rechner verfügbar sind:

[root@office-pc /]# ls /lib/modules/4.8.13-1-ARCH ls: cannot access '/lib/modules/4.8.13-1-ARCH': No such file or directory 

Nee! Daher ist dies höchstwahrscheinlich die Hauptursache des Problems. Der Kernel, der auf meiner Maschine läuft, hat keine ladbaren Module (nicht gut). Versuchen wir, das Problem zu beheben, indem Sie den Kernel aktualisieren (in meinem Fall ein Downgrade durchführen), da ich den Standard-Arch-Linux-Kernel unter pacman-Versionskontrolle verwende. Ich kann einfach pacman ausführen, um ihn zu aktualisieren (wenn Sie einen benutzerdefinierten Kernel verwenden.) ein Problem, das Sie lösen können):

[root@office-pc /]# sudo pacman -S linux ... Packages (1) linux-4.9.11-1 ... 

Großartig! pacman installiert den Kernel 4.9.11-1, den ich will (ich habe Module für diesen Kernel - ich habe keine Ahnung, wie ich den Kernel 4.9.13 bekommen habe). Lassen Sie Pacman die Installation abschließen.

Schließlich muss ich sicherstellen, dass dieser Kernel beim Booten des Computers verwendet wird. Also muss ich den Bootmanager aktualisieren (ich benutze systemd-boot). - Ich habe eine Bootpartition, die an / boot angehängt ist. - Löschen Sie die Datei loader.conf: /boot/loader/loader.conf (diese wird aktualisiert, wenn bootctl unten ausgeführt wird, und bootctl aktualisiert sie nicht, wenn sie bereits vorhanden ist.) - Run bootctl, um den Bootmanager zu aktualisieren:

[root@office-pc /]$ bootctl --path=/boot install 

Starten Sie jetzt den Computer neu ... Wenn er neu startet, sollte er den neuen (heruntergestuften) Kernel verwenden!

Nachdem Sie gebootet haben und sich angemeldet haben, überprüfen Sie die Kernel-Version, um sicherzustellen, dass der richtige Kernel ausgeführt wird:

[matt@office-pc /]$ uname -r 4.9.11-1-ARCH 

Versuchen Sie nun, den Originalbefehl auszuführen (um die Internetfreigabe von iptables einzurichten)

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

Woo-hoo Problem behoben! (Hinweis: Ich habe mich als Root-Benutzer angemeldet, um dieses Problem zu beheben. Ich würde das nicht empfehlen, wenn Sie nicht sicher sind, dass Sie wissen, was Sie tun!)