В настоящее время я работаю над Ansible playbook, который пытается установить и запустить брандмауэр iptables на минимальной установке CentOS 6.8. Я делаю следующее в 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
Однако это приводит к следующему:
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"}
решение1
Так что, похоже, это проблема, которая появилась после CentOS 6.5. На этом есть тема на клиентском портале под названием:iptables не удалось запустить в Red Hat Enterprise Linux 6.6 и более поздних версиях минимальной установки..
Прямая проблема заключается в отсутствии файлов /etc/sysconfig/ip*
, которые требуются службе iptables для запуска. Вы можете принудительно создать эти файлы, запустив service iptables save
, однако из коробки это тоже не получится, поскольку для запуска требуются модули ядра service iptables save
.
Это своего рода уловка-22!
Самый простой способ обойти эту проблему — запустить загрузку следующих двух модулей ядра:
- iptables_filter
- ip_таблицы
выполнив 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
Теперь вы увидите загруженные модули:
$ lsmod | grep iptable
iptable_filter 2793 0
ip_tables 17831 1 iptable_filter
Затем вы можете выполнить команду , service iptables save
чтобы создать недостающие файлы и таким образом запустить службу iptables.
Ансибль
Вышеизложенное интересно, но на самом деле не очень удобно для реализации через Ansible без привлечения помощи модулей command:
и shell:
.
Однако мы можем использовать modules:
модуль в 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
# 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
В приведенном выше примере мы убеждаемся в наличии iptable_filter, прежде чем пытаться выполнить сохранение.