con la instalación mínima de CentOS 6.x no puedo iniciar iptables

con la instalación mínima de CentOS 6.x no puedo iniciar iptables

Actualmente estoy trabajando en un manual de Ansible que intenta instalar e iniciar el firewall de iptables en una instalación mínima de CentOS 6.8. Estoy haciendo lo siguiente en 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

Sin embargo, esto resulta en esto:

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

Respuesta1

Entonces este parece ser un problema que apareció después de CentOS 6.5. Hay este tema del portal del cliente, titulado:iptables no pudo iniciarse en Red Hat Enterprise Linux 6.6 y versiones superiores de instalación mínima..

El problema directo es la ausencia de los /etc/sysconfig/ip*archivos que el servicio iptables requiere para iniciarse. Puede forzar la creación de estos archivos ejecutando un service iptables save, sin embargo, esto también fallará, porque se requieren módulos del kernel para ejecutar service iptables save.

¡Esto es una especie de trampa 22!

La forma más sencilla de solucionar este problema es induciendo la carga de estos 2 módulos del kernel:

  • filtro_iptables
  • tablas_ip

ejecutando un 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

Verás los módulos cargados ahora:

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

Luego puede hacer una service iptables savepara crear los archivos que faltan y así iniciar el servicio iptables.

ansible

Lo anterior es interesante pero no muy fácil de hacer a través de Ansible, sin contar con la ayuda de los módulos command:y shell:.

Sin embargo, podemos usar el modules:módulo en Ansible para garantizar la carga/descarga de los módulos del kernel.

Por ejemplo:

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

En lo anterior, nos aseguramos de que iptable_filter esté presente antes de intentar guardar.

Referencias

información relacionada