当我尝试在我的一台 Rackspace 云服务器上使用 iptables 命令时,我收到以下错误。
在尝试应用 iptables 规则时iptables-apply -t 120 /etc/iptables.rules
,iptables-restore < /etc/iptables.rules
我得到了下一个错误:
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:
unname -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
您需要加载内核模块以启用过滤器表。以 root 身份运行下一个命令:
(
uname -r
给出当前内核版本)有关 iptables 可用模块的列表,请列出包含 iptables 模块的目录:
要获取有关所有模块的信息:
事实证明,这只是一个缺失的sudo!
sudo iptables-restore < /etc/iptables.rules
代替
iptables-restore < /etc/iptables.rules
我还使用带有内核 2.6.35.4-rscloud 的 Rackspace Cloud。我有多个使用此内核的实例,并且 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
我不确定为什么这会不同步,或者如果您没有可以从中复制这些文件的工作服务器该怎么办,但希望这会为您指明正确的方向。
我不需要重新编译内核或类似的东西。
您使用的 linux 内核可能没有使用可加载模块支持构建。确定内核是否支持模块的一个好方法是检查文件是否存在
/proc/modules
。如果它在那里但你没有/lib/modules/$(uname -r)/modules.dep
文件,这意味着你的内核支持模块但它们没有正确安装。看起来您的内核是由您的提供商 Rackspace 构建的,您应该向他们询问内核配置。获得适当 iptables 支持的另一种方法是安装 xtables-addons,尽管您需要有很多工具才能使其正常工作(模块助手、构建必要等),但优点是最终您拥有使用 ipset 的 ipset 以及 iptables 和(恕我直言)对于大型复杂规则集要好得多
我遇到了同样的错误,但我在一篇不相关的文章(http://articles.slicehost.com/2007/11/6/ubuntu-gutsy-setup-page-1)中发现了一条杂散的评论,该评论确定了愚蠢的分子错误在我的情况下是错误的。问题是我
iptables.rules
使用文本编辑器 (Notepad++) 创建了文件,但由于无法识别文件类型,Notepad++ 默认使用 Windows行尾和文件尾字符。iptables
拒绝这些字符,需要它们的 Unix 等价物,因此在第一次出现时抛出错误:行尾——给人一种语法*filter
有问题的错误印象。*filter
啊,与字符编码相关的错误永远存在的乐趣!两种解决方案
sudo aptitude install tofrodos
) 并运行了 (fromdos /etc/iptables.rules
) 一个小转换实用程序。- -或者 - -
Edit
>EOL Conversion
>UNIX Format
,然后Save
重新上传文件。这处理了行尾字符,但没有处理文件结尾字符(尽管人们可能会期望)。所以一旦我把它上传到服务器,我打开它nano
并在文件末尾创建一个换行符并保存。然后一切都很完美。也有可能只打开文件
nano
并重新保存,而不实际手动更改字符,就可以解决问题,但我还没有测试过。如果您安装了新版本的内核但尚未重新启动,您也可能会收到 iptables 错误(如果您正在使用例如 Ansible playbook 构建新服务器,这是很常见的,并且较早的任务是一个apt-get 升级)
请参阅https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=829269#41回复:“模块中的未知符号或未知参数”错误。
Lekensteyn的答案几乎是但不完全是正确答案。错误在于该
modprobe
命令接受模块名称作为其参数(如果在其搜索路径中找到具有该文件名的匹配模块,iptables_filter
或iptables-filter
;modprobe
将自动将破折号转换为下划线),而不是内核对象(.ko
)文件的路径写在那个答案中。在加载了 IPv4 NetFilter 表但未加载 IPv6 表的系统上,我遇到了与此问题非常相似的问题。这导致
iptables-restore
成功加载我的防火墙规则,但ip6tables-restore
给出了“无法初始化表'过滤器'”错误。解决方案只是在恢复 iptables 防火墙规则集之前以用户身份或 with运行以下modprobe
命令:root
sudo
我在我的一个 CI/CD 管道中的 Travis CI 虚拟环境中体验到了这一点。希望这可以帮助处于类似情况的人。