с минимальной установкой CentOS 6.x я не могу запустить iptables

с минимальной установкой CentOS 6.x я не могу запустить iptables

В настоящее время я работаю над Ansible playbook, который пытается установить и запустить брандмауэр iptables на минимальной установке CentOS 6.8. Я делаю следующее в Ansible.

### sets up FW pkgs
- name: Install FW packages
  hosts: elasticsearch-servers
  become: yes

  tasks:
    - name: install ipset
      yum: name={{ item }} state=present
      with_items:
        - ipset
        - iptables

    - name: start iptables service
      service: name=iptables state=started enabled=yes

Однако это приводит к следующему:

TASK [start iptables service] **************************************************
fatal: [10.40.3.246]: FAILED! => {"changed": false, "failed": true, "msg": "iptables: No config file.[WARNING]\r\n"}
fatal: [10.40.3.254]: FAILED! => {"changed": false, "failed": true, "msg": "iptables: No config file.[WARNING]\r\n"}
fatal: [10.40.3.164]: FAILED! => {"changed": false, "failed": true, "msg": "iptables: No config file.[WARNING]\r\n"}

решение1

Так что, похоже, это проблема, которая появилась после CentOS 6.5. На этом есть тема на клиентском портале под названием:iptables не удалось запустить в Red Hat Enterprise Linux 6.6 и более поздних версиях минимальной установки..

Прямая проблема заключается в отсутствии файлов /etc/sysconfig/ip*, которые требуются службе iptables для запуска. Вы можете принудительно создать эти файлы, запустив service iptables save, однако из коробки это тоже не получится, поскольку для запуска требуются модули ядра service iptables save.

Это своего рода уловка-22!

Самый простой способ обойти эту проблему — запустить загрузку следующих двух модулей ядра:

  • iptables_filter
  • ip_таблицы

выполнив iptablesкоманду:

$ iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Теперь вы увидите загруженные модули:

$ lsmod | grep iptable
iptable_filter          2793  0
ip_tables              17831  1 iptable_filter

Затем вы можете выполнить команду , service iptables saveчтобы создать недостающие файлы и таким образом запустить службу iptables.

Ансибль

Вышеизложенное интересно, но на самом деле не очень удобно для реализации через Ansible без привлечения помощи модулей command:и shell:.

Однако мы можем использовать modules:модуль в Ansible, чтобы гарантировать загрузку/выгрузку модулей ядра.

Например:

### sets up FW pkgs
- name: Install FW packages
  hosts: elasticsearch-servers
  become: yes

  tasks:
    - name: install ipset
      yum: name={{ item }} state=present
      with_items:
        - ipset
        - iptables

    # these next 2 tasks work around issue with iptables RPM in CentOS 6.5+
    # REF: https://access.redhat.com/solutions/1361093
    - name: load ip_tables kernel module
      modprobe: name=iptable_filter state=present

    - name: initial save iptables generate files
      command: /sbin/service iptables save
      args:
        warn: false

    - name: start iptables service
      service: name=iptables state=started enabled=yes

В приведенном выше примере мы убеждаемся в наличии iptable_filter, прежде чем пытаться выполнить сохранение.

Рекомендации

Связанный контент