pimvh.nftables

分子テスト

要件

  1. Ansibleのインストール:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible

必要な変数

defaultsに示されている変数を確認してください。

次の構造を使用して、ホスト(../host_vars/[host_name].yaml)やホストグループ(../group_vars/[group_name].yaml)の変数にファイアウォール定義を追加できます(例についてはmolecule.default.vars/test.yamlを参照):

# この変数はリモートホストにプッシュされるルールを指します
# これはテーブル、チェーン、ルールの辞書です。molecule/default/vars/test.yamlを参照してください。
nftables_ruleset:
  # このキーはテーブルになります
  # 必ず次の形式でなければなりません:
  # ファイアウォールファミリーと名前、例: "inet firewall":
  "inet firewall":

    # テーブルの説明
    comment: "デバイスのファイアウォール"

    chains:

      # respective chainの名前
      input:
        # このチェーンに入れたい変数の名前(nftables_rulesから)
        - input_hook
        - valid_connections
        - ...

  # 同じ構造の別のテーブル
  # 有効なファミリーは、inet、inet6、netdev、inetなどです。
  # nftablesのドキュメントで完全な参照を確認してください。
  "inet foo":

# 可能なルールは`nftables_rules`の下で定義されます。
# 各ルールには2つの属性があります:
# -> def: 有効なnftables構文でのルール定義またはルールのセット
# -> depends_on: nftables_variablesからの変数のオプションの依存関係リスト
# 例についてはmolecule/default/vars/test.yamlを参照してください。

nftables_rules:
  input_hook: >
    type filter hook input priority 0; policy drop;
  valid_connections:
    def: |
        ct state established, related accept
        ct state invalid drop

  new_connections:
    def: |
        ct state new accept


# これらは依存関係のある変数定義で、depends_onと共に含まれています
# キーが一致することを確認してください
# 例についてはmolecule/default/vars/test.yamlを参照してください。
nftables_variables:

  tcp_ports:
    comment: TCPポートの設定
    def: |
      {% if nftables_open_tcp_ports_global %}define OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_global | join(",") }} }{% endif +%}
      {% if nftables_open_tcp_ports_local %}define LOCAL_OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_local | join(",") }} }{% endif +%}
      {% if nftables_open_tcp_ports_vpn %}define VPN_TCP_PORTS = { {{ nftables_open_tcp_ports_vpn | join(",") }} }{% endif +%}

  ...

Ansibleプレイブックは、役割に正しい変数が渡されているかどうかをargument_specを使用して検証します。

例のプレイブック

最小限(他の場所で変数を渡したと仮定):

hosts:
  - foo
roles:
  - pimvh.nftables

TLDR - これを実行した場合の結果

  • ルール/他の変数が定義されているかどうかを検証
  • nftablesとPythonインターフェースをインストール
  • 必要なnftableテーブルを作成
  • 空のテーブルとして動的テーブルを作成
  • 空のブロックリストを作成
  • nftablesテンプレートをnftablesディレクトリにコピー
  • nftablesサービスを編集して新しいファイルを指すようにする
  • ファイアウォールを再読み込みするスクリプトを作成し、制御外のテーブルをファイルにダンプし、その後ファイアウォールを再読み込み
  • nftables_abuseip_api_keyが定義されている場合、APIを使用してブロックリストを取得するスクリプトを追加し、それをsystemdサービスにする
  • 要求があればnftableサービスを有効にする
  • 要求があればiptablesをアンインストール

将来の改善

  • 渡す必要のあるルールの構造を簡素化
  • nftables_variablesnftables_rulesetのargument_specsを改善
プロジェクトについて

role to configure nftables using a YAML file

インストール
ansible-galaxy install pimvh.nftables
ライセンス
gpl-3.0
ダウンロード
110
所有者