如何修复iptables错误消息“无法初始化表’filter’”?
当我尝试在我的Rackspace云服务器上使用iptables命令时,我收到以下错误。
为了尝试使用iptables-apply -t 120 /etc/iptables.rules
和iptables-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-rscloud
和ls /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-Line和End-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