CentOS 6.xの最小インストールではiptablesを起動できません

CentOS 6.xの最小インストールではiptablesを起動できません

現在、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 が存在することを確認しています。

参考文献

関連情報