用于防火墙的 Saltstack

用于防火墙的 Saltstack

我正在尝试设置一个状态,以便我可以在firewalld中添加打开的相关端口。

尝试了我能找到的每一个例子但都失败了。

这是我的当前情况:

firewalld:
  service.running:
    - enable: True
  default_zone:
    - public
  services:
    snmpd:
      - short:
        - snmp
      - ports:
        - udp:
          - 161
        - tcp:
          - 161
    ssh:
      - short:
        - ssh
      - ports:
        - tcp:
          - 22
  zones:
    public:
      - short:
        - Public
      - services:
        - ssh
        - snmpd

这会导致以下错误:

SLS 'firewalld.firewalld' 中的状态 'firewalld' 未形成列表

我已经通过三个不同的 YAML 验证器运行了它,并且都说它是干净的,所以我很困惑。

答案1

firewalld-formula我假设你正在使用官方存储库

请注意,“SaltStack Formula”是“使用 pillars 配置的即用型状态”。因此,您的 YAML 声明必须不是不是国家宣言,而是支柱宣言

让我举例说明一下:

我假设您有您的状态文件/srv/salt和您的支柱文件/srv/pillar

要使用firewalld-formula,您需要创建一个“pillar”文件。使用提供的pillar.example文件并将其另存为/srv/pillar/firewalld/<target-host>.sls,然后从 中引用它/srv/pillar/top.sls。例如:

# /srv/pillar/top.sls
base:
  # ... other references we skip ...
  'target-host':
    - firewalld.<target-host>

注意:通过命名pillar文件<target-host>.sls,我们可以轻松地为不同的主机制作不同的pillar。

firewalld-formula然后,我们通过引用from (或使用该指令/srv/salt/top.sls下的其他状态文件)来“激活”公式。/srv/salt/include:

我假设你firewalld-formula通过以下方式克隆了 repo:

cd /srv/salt
git clone https://github.com/saltstack-formulas/firewalld-formula.git
ln -s firewalld-formula/firewalld firewalld

firewalld注意:符号链接允许我们用而不是来引用状态firewalld-formula.firewalld

现在,编辑/srv/salt/top.sls文件以调用firewalld状态:

# /srv/salt/top.sls
base:
  # ... other references ...
  'target-host':
    - firewalld

然后你就完成了。

或者,您可以使用通用状态,让 Jinja 渲染器和 Pillar 系统处理“定位”细节。假设您的top.sls文件包含以下内容:

# /srv/salt/top.sls
base:
  '*':
    # ...other states...
    - hardening
    # ...more states...

按如下方式编辑hardening状态文件:

# /srv/salt/hardening/init.sls

# ...various states we skip

include:
  # ... possible other includes ...
{% if pillar.get('firewalld', false) -%}
  # The following will be included *only* if pillar for the minion has the 'firewalld' key defined
  - firewalld
{% endif -%}

相关内容