使用 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 存在。

参考

相关内容