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 iptables
comando:
$ 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 save
para 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.