Есть ли способ запустить просто сохранить с помощью firewalld в RHEL7?

11

Я начинаю использовать RHEL7 и немного узнаю об изменениях, которые происходят с systemd.

Есть ли способ выступить /sbin/service iptables saveв firewalld?

$ /sbin/service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

Самая близкая параллель, которую я могу найти из Документации --reload:

Reload the firewall without loosing state information:
$ firewall-cmd --reload

Но он не говорит явно, сохраняет ли он или нет.

Питер Соутер
источник

Ответы:

21

Версия firewalld в RHEL 7.0 не имеет сценария «сохранения» и не имеет возможности скопировать текущую конфигурацию брандмауэра в постоянную конфигурацию. Вы сохраняете изменения брандмауэра с помощью firewalld, добавляя изменения --permanentв командную строку. Без этого любое внесенное вами изменение будет временным и будет потеряно при перезагрузке системы.

Например:

firewall-cmd --add-service=http                 # Running config
firewall-cmd --add-service=http --permanent     # Startup config

Более поздние (после RHEL 7) версии firewalld включают способ сохранения работающей конфигурации, и теперь он доступен в Fedora и в RHEL 7.1 . В этом случае команда просто:

firewall-cmd --runtime-to-permanent
Майкл Хэмптон
источник
2
Чтобы продолжить комментарий Майкла Хэмптона, я обнаружил, что мне нужно было перезапустить службу firewalld («systemctl restart firewalld») после запуска «firewall-cmd --runtime-to -erman», чтобы правила брандмауэра были сохранены правильно, особенно после удаления некоторых правил вручную через iptables. Похоже, что firewalld кеширует некоторые правила, поэтому «firewall-cmd --reload» может заново установить правила из firewalld, которые должны были быть удалены с помощью команды «--runtime-to-constant».
Энтони Нгуен
2
Обратите внимание, что команда --runtime-to-constant не отображается при завершении табуляции, но на самом деле она есть (тестировалась в системе CentOS 7.5).
додексаэдр
@AntonyNguyen вы не должны использовать команды iptables, когда firewalld управляет правилами. FIrewalld не может узнать об этом изменении (ему нужно будет периодически опрашивать, и это снизит производительность брандмауэра из-за его конструкции, которая, между прочим, исправлена ​​в nftables), используйте 'firewall-cmd --direct --passthrough ipv4 -A ВПЕРЕД ... -j DROP '
AdamKalisz
0

Мне нужно было добавить службу SIP и несколько IP-адресов.

в каталоге / usr / lib / firewalld / services / я добавил sip.xml на основе других файлов службы xml.

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SIP</short>
  <description>This is SIP, Yo! </description>
  <port protocol="udp" port="5060"/>
</service>

Затем я добавил sip-сервис в firewalld

# firewall-cmd --add-service=sip --permanent 

Затем я добавил IP-адреса для обслуживания в /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description></description>
  <service name="dhcpv6-client"/>
  <service name="http"/>
  <service name="ssh"/>
  <service name="https"/>

  <rule family="ipv4">
    <source address="x.x.x.x/32"/>
    <service name="sip"/>
    <accept/>
  </rule>

</zone>

Вы также можете добавить LOG, если вы добавляете уровень регистрации

  <rule family="ipv4">
    <source address="x.x.x.x/32"/>
    <service name="sip" 
    <log prefix="sip" level="info"/>
    <accept/>
  </rule>

после того, как вы добавили правила в свою зону, выполните

# firewall-cmd --reload

проверьте свои iptables - у вас должно быть все готово.

Алекс Н
источник