Я пытаюсь открыть порт ftp в общедоступной зоне, и firewall-cmd выходит с очень непонятным ответом. Вывод команды:
firewall-cmd --zone=public --add-service=ftp
Error: COMMAND_FAILED
ОС: CentOS Linux версии 7.3.1611 (Core)
Обновление исходного вопроса с более подробной информацией.
Выход journalctl:
~ firewall-cmd --zone=public --add-service=ftp
Error: COMMAND_FAILED
~ journalctl -xf
Mar 06 00:46:42 hostname firewalld[3496]: ERROR: COMMAND_FAILED
вывод отладки:
~ firewalld --nofork --debug=10
<...>
2017-03-06 00:49:57 DEBUG1: zone.addService('public', 'ftp', 0)
2017-03-06 00:49:57 DEBUG4: <class 'firewall.core.fw_transaction.FirewallZoneTransaction'>.execute(True)
2017-03-06 00:49:57 DEBUG4: <class 'firewall.core.fw_transaction.FirewallZoneTransaction'>.prepare(True, ...)
2017-03-06 00:49:57 DEBUG4: <class 'firewall.core.fw_transaction.FirewallZoneTransaction'>.prepare(True, ...)
2017-03-06 00:49:57 DEBUG4: <class 'firewall.core.fw_transaction.FirewallZoneTransaction'>.pre()
2017-03-06 00:49:57 DEBUG2: <class 'firewall.core.ipXtables.ip4tables'>: /usr/sbin/iptables-restore /run/firewalld/temp.tptEtP: 89
1: *filter
2: -A IN_public_allow -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
3: COMMIT
2017-03-06 00:49:57 DEBUG2: <class 'firewall.core.ipXtables.ip6tables'>: /usr/sbin/ip6tables-restore /run/firewalld/temp.CYsjiA: 89
1: *filter
2: -A IN_public_allow -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
3: COMMIT
2017-03-06 00:49:57 DEBUG2: <class 'firewall.core.modules.modules'>: /sbin/modprobe nf_conntrack_ftp
2017-03-06 00:49:57 DEBUG2: <class 'firewall.core.ipXtables.ip4tables'>: /usr/sbin/iptables-restore /run/firewalld/temp.1dBrUZ: 89
1: *filter
2: -D IN_public_allow -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
3: COMMIT
2017-03-06 00:49:57 DEBUG2: <class 'firewall.core.ipXtables.ip6tables'>: /usr/sbin/ip6tables-restore /run/firewalld/temp.vbUyZC: 89
1: *filter
2: -D IN_public_allow -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
3: COMMIT
2017-03-06 00:49:57 ERROR: COMMAND_FAILED
Еще одно обновление: если я сделаю:
~ iptables -A IN_public_allow -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
служба ftp работает. Однако хотелось бы управлять всем через firewalld. Так что мне интересно, это сбой firewalld или ошибка в конфигурации.
Та же проблема, но --add-port у меня сработал:
# firewall-cmd --zone=public --add-port=21/tcp
Это решает проблему гостя LXC с хостом, который его поддерживает. Поддерживает ли ваш LXC это?
Хост должен иметь поддержку modprobe nf_conntrack_ftp lsmod показывает nf_conntrack_ftp? если да, добавьте nf_conntrack_ftp в / etc / modules. Захватить вывод modinfo nf_conntrack_ftp для дальнейшего использования.
Поддерживается в вашем LXC? / sys / module / nf_conntrack_ftp существует? / proc / sys / net / netfilter / nf_conntrack_helper существует? mkdir -p /lib/modules/4.4.67-1-pve/kernel/net/netfilter/ замените 4.4.67-1-pve вашим хостом, я использую Proxmox с этим ядром. коснитесь всех этих файлов .ko с хоста, поместите вывод modinfo nf_conntrack_ftp в резервную копию файла nf_conntrack_ftp.ko. modinfo замените его этим сценарием
#!/bin/bash
cat /lib/modules/4.4.67-1-pve/kernel/net/netfilter/$1.ko
Замените путь тем, что вы создали ранее. Сделайте файл исполняемым. Вы хотите, чтобы modinfo nf_conntrack_ftp выводил на вашем хосте тот же результат, что и на вашем гостевом компьютере.
Затем нам нужно заменить modprobe следующим скриптом.
#!/bin/bash
exit 0
Сделайте его исполняемым. Поскольку это гость, у вас даже нет модулей для проверки.
Отлично. Теперь вы можете обмануть /usr/lib/python2.7/site-packages/firewall/functions.py, чтобы ваш гость мог делать что-то с помощью modinfo.
Вы также обманываете /usr/lib/python2.7/site-packages/firewall/core/modules.py заменой modprobe.
Опять же, я считаю, что это нормально, что modinfo и modprobe заменены этими поддельными скриптами, потому что гость в контейнере в любом случае не имеет доступа к модулям. Вот почему это не работает.
Я также думаю, что проект firewalld должен исправить это, поскольку это кажется непреднамеренной ошибкой.