com instalação mínima do CentOS 6.x não consigo iniciar o iptables

3

Atualmente estou trabalhando em um playbook Ansible que tenta instalar e iniciar o firewall iptables em uma instalação mínima do CentOS 6.8. Eu estou fazendo o seguinte em 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

Isso, no entanto, resulta disso:

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"}
    
por slm 13.04.2017 / 15:30

1 resposta

4

Então, isso parece ser um problema que apareceu depois do CentOS 6.5. Há este tópico do portal do cliente, intitulado: iptables falhou ao iniciar no Red Hat Enterprise Linux 6.6 e versões superiores de instalação mínima. .

O problema direto é a ausência dos arquivos /etc/sysconfig/ip* que o serviço iptables requer para iniciar. Você pode forçar a criação desses arquivos, executando um service iptables save , porém fora da caixa, isso falhará também, porque os módulos do kernel são necessários para executar service iptables save .

Isso é um pouco difícil!

A maneira mais fácil de contornar isso é induzir o carregamento desses dois módulos do kernel:

  • iptables_filter
  • ip_tables

executando um comando 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

Você verá os módulos carregados agora:

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

Você pode então fazer um service iptables save para obter os arquivos perdidos criados, e assim iniciar o serviço iptables.

Ansible

O que precede é interessante, mas não é muito fácil de fazer através da Ansible, sem precisar da ajuda dos módulos command: e shell: .

No entanto, podemos usar o módulo modules: no Ansible para garantir o carregamento / descarregamento de módulos do kernel.

Por exemplo:

### 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

Acima, estamos nos certificando de que o iptable_filter esteja presente antes de tentar salvá-lo.

Referências

por 13.04.2017 / 15:30