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