如何修复iptables错误消息“无法初始化表’filter’”?

当我尝试在我的Rackspace云服务器上使用iptables命令时,我收到以下错误。

为了尝试使用iptables-apply -t 120 /etc/iptables.rulesiptables-restore < /etc/iptables.rules应用iptables规则,我得到了下一个错误:

 FATAL: Could not load /lib/modules/2.6.32.4-rscloud/modules.dep: No such file or directory iptables-restore v1.4.4: iptables-restore: unable to initialize table 'filter' Error occurred at line: 2 Try `iptables-restore -h' or 'iptables-restore --help' for more information. 

我该如何解决?

编辑1

uname -r

 2.6.32.4-rscloud 

modprobe / lib / modules / $(uname -r)/kernel/net/ipv4/netfilter/iptable_filter.ko

 FATAL: Could not load /lib/modules/2.6.32.4-rscloud/modules.dep: No such file or directory 

ls / lib / modules / $(uname -r)/ kernel / net / ipv4 / netfilter /:

 ls: cannot access /lib/modules/2.6.32.4-rscloud/kernel/net/ipv4/netfilter/: No such file or directory 

编辑2

apt-cache搜索linux-image- *:

 alsa-base - ALSA driver configuration files linux-image-2.6.31-14-generic - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-14-server - Linux kernel image for version 2.6.31 on x86_64 linux-image-2.6.31-14-virtual - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-302-ec2 - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-9-rt - Linux kernel image for version 2.6.31 on Ingo Molnar's full real time preemption patch linux-image-rt - Rt Linux kernel image rt2400-source - source for rt2400 wireless network driver rt2500-source - source for rt2500 wireless network driver rt2570-source - source for rt2570 wireless network driver linux-image - Generic Linux kernel image. linux-image-2.6.31-15-generic - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-15-server - Linux kernel image for version 2.6.31 on x86_64 linux-image-2.6.31-15-virtual - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-16-generic - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-16-server - Linux kernel image for version 2.6.31 on x86_64 linux-image-2.6.31-16-virtual - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-17-generic - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-17-server - Linux kernel image for version 2.6.31 on x86_64 linux-image-2.6.31-17-virtual - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-19-generic - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-19-server - Linux kernel image for version 2.6.31 on x86_64 linux-image-2.6.31-19-virtual - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-20-generic - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-20-server - Linux kernel image for version 2.6.31 on x86_64 linux-image-2.6.31-20-virtual - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-21-generic - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-21-server - Linux kernel image for version 2.6.31 on x86_64 linux-image-2.6.31-21-virtual - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-304-ec2 - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-305-ec2 - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-306-ec2 - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-ec2 - Linux kernel image for ec2 machines linux-image-generic - Generic Linux kernel image linux-image-server - Linux kernel image on Server Equipment. linux-image-virtual - Linux kernel image for virtual machines linux-image-2.6.31-22-generic - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-22-server - Linux kernel image for version 2.6.31 on x86_64 linux-image-2.6.31-22-virtual - Linux kernel image for version 2.6.31 on x86/x86_64 linux-image-2.6.31-307-ec2 - Linux kernel image for version 2.6.31 on x86/x86_64 

您需要加载内核模块以启用filter表。 以root身份运行下一个命令:

 modprobe /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/iptable_filter.ko 

uname -r给出了当前的内核版本)


有关iptables的可用模块列表,请列出包含iptables模块的目录:

 ls /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/ 

获取所有模块的信息:

 modinfo /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/*.ko 

您使用的Linux内核可能不是使用可加载模块支持构建的。 找出内核是否具有模块支持的好方法是检查文件/proc/modules是否存在。 如果它在那里,但你没有/lib/modules/$(uname -r)/modules.dep文件,这意味着你的内核支持模块,但它们没有正确安装。 看起来您的内核是由您的提供商Rackspace构建的,您应该向他们询问内核配置。

获得正确的iptables支持的另一种方法是安装xtables-addons,你需要有相当多的工具来实现这个(模块助手,构建必备等),但优点是最后你有ipset以及使用ipset的iptables和(恕我直言)对于大型复杂规则集来说要好得多

 apt-get install xtables-addons-common apt-get install xtables-addons-source ma prepare ma build xtables-addons ma install xtables-addons 

我还使用Rackspace Cloud,内核2.6.35.4-rscloud。 我有这个内核的多个实例,iptables在某些方面工作正常,我和其他几个问题一样。

因此我相信这个内核确实有iptables所需的支持,问题是由其他东西引起的(我自己还在寻找解决方案)

编辑:我解决了我的问题scp -r/lib/modules/2.6.35.4-rscloud从工作的iptables服务器复制到非工作的服务器。

出于某种原因, uname -r显示2.6.35.4-rscloudls /lib/modules/仅包含之前的版本,如/lib/modules/2.6.31-302-rs

我不确定为什么这可能会失去同步,或者如果你没有工作服务器来复制这些文件该怎么办,但希望这会指出你正确的方向。

我不需要重新编译内核或类似的东西。

我有同样的错误,但我在一篇不相关的文章( http://articles.slicehost.com/2007/11/6/ubuntu-gutsy-setup-page-1 )中发现了一个错误的评论,该文章确定了一个愚蠢的分子错误,在我的情况下有问题。 问题是我使用文本编辑器(Notepad ++)创建了iptables.rules文件,但由于无法识别文件类型,Notepad ++默认使用Windows End-of-LineEnd-of-File字符。 iptables拒绝这些字符,需要它们的Unix等价物,因此在第一次出现时抛出错误: *filter行的结尾 – 给出错误的印象, *filter语法有问题。 啊,与角色编码相关的错误始终存在的乐趣!

两种解决方案

  • 我上面提到的评论者安装了( sudo aptitude install tofrodos )并在文件上运行了( fromdos /etc/iptables.rules )一个小的转换实用程序。

– -要么 – –

  • 我所做的是,在Notepad ++中, Edit > EOL Conversion > UNIX Format ,然后Save并重新上传文件。 这照顾了行字符,但不是文件结尾字符(尽管人们可能期待)。 所以,一旦我将它上传到服务器,我就用nano打开它,并在文件末尾创建一个换行符并保存。 然后一切都很完美。

也许有可能仅仅打开nano文件并重新保存,而不实际手动更改字符,就可以做到这一点,但我还没有测试过。

如果您安装了新版本的内核但尚未重新启动(如果您正在使用Ansible playbook构建新服务器,并且之前的任务是apt-get升级

请参阅https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=829269#41 re:“模块中的未知符号或未知参数”错误。

事实certificate,这只是一个失踪的sudo

sudo iptables-restore < /etc/iptables.rules

代替

iptables-restore < /etc/iptables.rules