Ich arbeite derzeit an einem Ansible-Playbook, das versucht, die iptables-Firewall auf einer minimalen CentOS 6.8-Installation zu installieren und zu starten. Ich mache Folgendes in 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
Dies führt jedoch zu folgendem:
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"}
Antwort1
Dies scheint also ein Problem zu sein, das nach CentOS 6.5 auftrat. Es gibt dazu dieses Kundenportalthema mit dem Titel:iptables konnte in Red Hat Enterprise Linux 6.6 und höheren Versionen der Minimalinstallation nicht gestartet werden..
Das direkte Problem ist das Fehlen der /etc/sysconfig/ip*
Dateien, die der iptables-Dienst zum Starten benötigt. Sie können die Erstellung dieser Dateien erzwingen, indem Sie einen ausführen. service iptables save
Dies schlägt jedoch auch sofort fehl, da zum Ausführen Kernelmodule erforderlich sind service iptables save
.
Das ist ein bisschen eine Zwickmühle!
Die einfachste Möglichkeit, dies zu umgehen, besteht darin, das Laden dieser beiden Kernelmodule zu veranlassen:
- iptables_filter
- ip_tabellen
indem Sie einen iptables
Befehl ausführen:
$ 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
Sie sehen die jetzt geladenen Module:
$ lsmod | grep iptable
iptable_filter 2793 0
ip_tables 17831 1 iptable_filter
Anschließend können Sie service iptables save
die fehlenden Dateien erstellen lassen und so den iptables-Dienst starten.
Ansible
Das Obige ist interessant, lässt sich aber nicht wirklich benutzerfreundlich über Ansible durchführen, ohne die Hilfe der Module command:
und in Anspruch zu nehmen shell:
.
Wir können das modules:
Modul jedoch in Ansible verwenden, um das Laden/Entladen von Kernelmodulen zu gewährleisten.
Zum Beispiel:
### 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
Oben stellen wir sicher, dass der iptable_filter vorhanden ist, bevor wir versuchen, den Speichervorgang durchzuführen.