Когда я пытаюсь использовать команду iptables на одном из моих облачных серверов Rackspace, я получаю следующую ошибку.
В попытке применить правила 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 :
uname -r :
2.6.32.4-rscloud
modprobe / lib / modules / $ (uname -r) / kernel / net / ipv4 /netfilter/iptable_filter.ko: РЕДАКТИРОВАТЬ 2 : FATAL: Could not load /lib/modules/2.6.32.4-rscloud/modules.dep: No such file or directory
ls: cannot access /lib/modules/2.6.32.4-rscloud/kernel/net/ipv4/netfilter/: No such file or directory
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
Я также использую Rackspace Cloud с ядром 2.6.35.4-rscloud. У меня есть несколько экземпляров с этим ядром, и iptables отлично работает на некоторых, и у меня та же проблема, что и у вас на паре других.
Поэтому я считаю, что это ядро имеет необходимую поддержку для iptables, и проблема вызвана чем-то другим (я все еще ищу решение самостоятельно)
РЕДАКТИРОВАТЬ: я решил свою проблему с помощью [ 110] копирование /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, вам следует спросить их о конфигурации ядра.
Вам необходимо загрузить модуль ядра для включения таблицы фильтров. Запустите следующую команду от имени пользователя 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
оказывается, что это был просто пропавший sudo !
sudo iptables-restore < /etc/iptables.rules
вместо
iptables-restore < /etc/iptables.rules
Еще один способ получить надлежащую поддержку iptables - установить xtables-addons, хотя для его работы необходимо иметь довольно много инструментов (module-assistant, build-essential и т. Д.), Но преимущество заключается в В конце концов, у вас есть ipset, а также iptables и (IMHO) использование ipset также намного лучше для больших сложных наборов правил
apt-get install xtables-addons-common
apt-get install xtables-addons-source
m-a prepare
m-a build xtables-addons
m-a install xtables-addons
У меня была та же ошибка, но я нашел случайный комментарий в несвязанной статье ( http://articles.slicehost.com/2007/11/6/ubuntu-gutsy-setup-page-1 ]) которая определила глупую молекулярную ошибку, которая была виновата в моем случае. Проблема заключалась в том, что я создал файл iptables.rules
с помощью текстового редактора (Notepad ++), но поскольку тип файла не был распознан, Notepad ++ по умолчанию использовал Windows End-of-Line и Конец файла символов. iptables
отклоняет эти символы, требуя их эквивалентов Unix, и, таким образом, выдает ошибку при первом появлении: конце строки *filter
, создавая ложное впечатление, что с синтаксисом *filter
что-то не так. Ах, вездесущие радости ошибок, связанных с кодировкой символов!
Два решения
sudo aptitude install tofrodos
) и запустил (fromdos /etc/iptables.rules
) небольшую утилиту преобразования файла. --- ИЛИ [
Edit
> EOL Conversion
> UNIX Format
, а затем Save
и повторно загрузить файл. Это позаботилось о символах конца строки , но не о символе конца файла (несмотря на то, что можно ожидать). Поэтому, как только я загрузил его на сервер, я открыл его в nano
, создал новую строку в конце файла и сохранил. Тогда все работало отлично. Также может быть также возможно, что простое открытие файла в nano
и повторное сохранение без фактического изменения символов вручную, но я не проверял.
Можно ли также получить ошибки с iptables, если Вы установили новую версию Ядра, но Вы еще не перезагрузили (довольно распространенный, если Вы создаете новое использование сервера, например, сборник пьес Ansible, и более ранняя задача склонна - добираются, обновление )
См. https://bugs.debian.org/cgi-bin/bugreport.cgi? ре bug=829269#41 : "Неизвестный символ в модуле или неизвестный параметр" ошибка.
Ответ Лекенштейна почти, но не совсем правильный. Ошибка заключается в том, что команда modprobe
принимает в качестве аргумента имя модуля ( iptables_filter
или iptables-filter
; modprobe
автоматически преобразует дефисы в символы подчеркивания, если соответствующий модуль с таким именем файла найден в его путях поиска), а не путь к файлу объекта ядра ( .ko
), как написано в этом ответе.
У меня была проблема, очень похожая на эту проблему, в системе, где таблицы IPv4 NetFilter были загружены, а таблицы IPv6 нет. Это привело к тому, что iptables-restore
успешно загрузил мои правила брандмауэра, но ip6tables-restore
выдал ошибку «не удалось инициализировать таблицу 'фильтр'». Решением было просто запустить следующую команду modprobe
от имени пользователя root
или с помощью sudo
перед восстановлением набора правил брандмауэра iptables:
modprobe ip6table_filter
Я испытал это на Виртуальная среда Travis CI в одном из моих конвейеров CI / CD. Надеюсь, это поможет кому-то в подобной ситуации.