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

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

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

No entanto, isso resulta no seguinte:

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"}

Responder1

Portanto, este parece ser um problema que apareceu após o 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 /etc/sysconfig/ip*arquivos que o serviço iptables requer para iniciar. Você pode forçar a criação desses arquivos executando um service iptables save, mas isso também falhará imediatamente, porque os módulos do kernel são necessários para executar o service iptables save.

Isso é um pouco complicado!

A maneira mais fácil de contornar isso é induzindo o carregamento destes 2 módulos do kernel:

  • filtro_iptables
  • tabelas_ip

executando um iptablescomando:

$ 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 savepara criar os arquivos ausentes e, assim, iniciar o serviço iptables.

Ansible

O que foi dito acima é interessante, mas não muito fácil de fazer por meio do Ansible, sem contar com a ajuda dos módulos command:e shell:.

Porém podemos usar o modules:módulo no Ansible para garantir o carregamento/descarregamento dos 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 tentarmos salvar.

Referências

informação relacionada