class

Beryl::Apply::PfRule

Inherits Beryl::Apply::Primitive < Reference < Object

Primitive pf-rule : ajoute/retire une règle dans un bloc géré par beryl à l'intérieur de /etc/pf.conf. Le reste du fichier (macros, tables, règles de l'opérateur) n'est jamais touché.

Idempotence : diff par ligne dans le bloc géré (marqueurs # >>> beryl >>> / # <<< beryl <<<). La règle est validée (pfctl -nf sur un fichier temporaire) AVANT d'écraser pf.conf, puis chargée (pfctl -f).

- pf-rule:
    rule: "block in quick proto tcp to port 23"
    state: present     # ou absent (défaut present)

nat: true place la règle dans un bloc de TRANSLATION distinct, inséré AVANT les règles filtre (pf impose l'ordre options→scrub→translation→ filtre ; un nat en fin de fichier ferait échouer pfctl). Pour les règles nat/rdr/binat (ex. NAT sortant d'un exit-node VPN) :

- pf-rule:
    nat: true
    rule: "nat on egress from 100.64.0.0/10 to any -> (egress)"

before: <règle> insère la règle JUSTE AVANT une règle déjà présente du bloc (sinon : en fin de bloc). Indispensable pour un pass quick ajouté après coup devant un block quick déjà posé : en fin de bloc, il ne serait jamais atteint. if_set: "{{ var }}" saute l'étape si la valeur est vide (règle facultative).

- pf-rule:
    rule: "pass in quick inet proto tcp from { {{ allow_extra }} } to port 8888"
    before: "block in quick proto tcp to port 8888"
    if_set: "{{ allow_extra }}"

Constants

BEGIN_TAG = "# >>> beryl >>>"
END_TAG = "# <<< beryl <<<"
FILTER_KW = /\A\s*(block|pass|match|antispoof)\b/

Mots-clés de début de section FILTRE : le bloc nat s'insère juste avant.

NAT_BEGIN = "# >>> beryl nat >>>"
NAT_END = "# <<< beryl nat <<<"
PATH = "/etc/pf.conf"
TMP = "/etc/pf.conf.beryl.tmp"

Instance methods

apply(shell : Shell, params : Hash(String, YAML::Any), dry_run : Bool, context : Context) : StepResult

params est le hash brut du step YAML (ex: {"packages" => [...]}), déjà interpolé par l'Executor. context porte les infos dérivées du host (cf. Context).

Source
name

Nom kebab-case utilisé comme clé de step dans les recettes (« pkg-install », « service-enable », …).

Source