web-dev-qa-db-ja.com

Firewalldの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」がリストとして形成されていません

私はこれを3つの異なるYAMLバリデーターで実行しましたが、すべてクリーンだと言っているので混乱しています。

1
Jonathan Hansen

公式リポジトリfirewalld-formulaを使用していると思いますか?

「SaltStackFormula」は「ピラーを使用して構成するすぐに使用できる状態」であることに注意してください。したがって、YAML宣言は[〜#〜]ではなく[〜#〜]は状態宣言である必要がありますが、代わりにピラー宣言

説明させてください:

状態ファイルは/srv/saltにあり、ピラーファイルは/srv/pillarにあると仮定します。

firewalld-formulaを使用するには、「ピラー」ファイルを作成する必要があります。提供されている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>

注:ピラーファイルに<target-Host>.slsという名前を付けることで、ホストごとに異なるピラーを簡単に作成できます。

次に、firewalld-formulaから/srv/salt/top.sls(または/srv/salt/ディレクティブを使用してinclude:の下にある他の状態ファイル)を参照することにより、式を「アクティブ化」します。

firewalld-formulaリポジトリのクローンを次のように作成したと仮定します。

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

注:シンボリックリンクを使用すると、状態をfirewalld-formula.firewalldではなくfirewalldとして参照できます。

次に、/srv/salt/top.slsファイルを編集してfirewalld状態を呼び出します。

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

Aaand、これで完了です。

または、代わりに共通の状態を使用して、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 -%}
1
pepoluan