У меня есть машина CentOS7, и я использую firewalld в качестве брандмауэра. Недавно я добавил несколько правил, используя firewall-cmd
:
# Removing DOCKER-USER CHAIN (it won't exist at first)
firewall-cmd --permanent --direct --remove-chain ipv4 filter DOCKER-USER
# Flush rules from DOCKER-USER chain (again, these won't exist at first; firewalld seems to remember these even if the chain is gone)
firewall-cmd --permanent --direct --remove-rules ipv4 filter DOCKER-USER
# Add the DOCKER-USER chain to firewalld
firewall-cmd --permanent --direct --add-chain ipv4 filter DOCKER-USER
# Add rules (see comments for details)
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 0 -j REJECT -i eth0 -dport 27017
Я перезагрузился и проверил direct.xml
файл; правила есть. Проверяю с помощью firewall-cmd и вижу цепочку и правила:
firewall-cmd --permanent --direct --get-rules ipv4 filter DOCKER-USER
0 -j REJECT -i eth0 -dport 27017
И все же, если я сделаю iptables -nvL
, Нигде не вижу этой цепочки:
iptables -nvL |grep DOCKER
0 0 DOCKER-ISOLATION all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
Chain DOCKER (1 references)
Chain DOCKER-ISOLATION (1 references)
И если я использую firewall-cmd
, Я не вижу цепочек, которые появляются с использованием iptables
либо. Например, у меня есть f2b-sshd
цепочка, созданная fail2ban, но ничего не возвращает:
firewall-cmd --permanent --direct --get-rules ipv4 filter f2b-sshd
В чем дело? У меня была идея, что и iptables, и firewalld просто управляли базовым ядром, что они были просто разными интерфейсами для одного и того же. Почему один не видит правил, созданных другим? А какие преобладают?
Ладно, посмотрел журналы ошибок.
firewalld[573]: ERROR: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.4.21: The -t option (seen in line 3) cannot be used in iptables-restore.
Вот почему правила не появились: они не применялись.
Теперь возникает вопрос: как использовать firewalld для добавления правил в данную таблицу или цепочку ...