現在、CentOS 6.8 の最小インストールに iptables ファイアウォールをインストールして起動しようとする Ansible プレイブックに取り組んでいます。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 以降に発生した問題のようです。これについては、次のタイトルのカスタマー ポータル トピックがあります。最小インストールの Red Hat Enterprise Linux 6.6 以降のバージョンでは、iptables の起動に失敗しました。。
直接的な問題は、/etc/sysconfig/ip*
iptables サービスの起動に必要なファイルが存在しないことです。 を実行してこれらのファイルを強制的に作成できますservice iptables save
が、 を実行するにはカーネル モジュールが必要なので、このままではこれも失敗しますservice iptables save
。
これはちょっとしたジレンマです!
この問題を回避する最も簡単な方法は、次の 2 つのカーネル モジュールの読み込みを誘導することです。
- iptables_フィルター
- 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 サービスを開始できます。
アンシブル
command:
上記は興味深いものですが、およびモジュールの助けを借りずに Ansible を通じて実行するのはあまり簡単ではありません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 が存在することを確認しています。