使用 CentOS 6.x 最小安裝我無法啟動 iptables

使用 CentOS 6.x 最小安裝我無法啟動 iptables

我目前正在編寫 Ansible playbook,嘗試在 CentOS 6.8 最小安裝上安裝並啟動 iptables 防火牆。我正在 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_過濾器
  • 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

然後,您可以執行 aservice 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 存在。

參考

相關內容