10 votes

pfctl - comment ajouter une ancre et la rendre active / la charger

Je peux donc ajouter une ancre au pare-feu déjà activé en faisant quelque chose comme ceci :

$ pfctl -a anchor_name -f /etc/anchor_rules.txt

le fichier "anchor_rules.txt" pourrait contenir quelque chose comme ceci :

table <some-hosts> persist file /etc/someHostsToBlock.txt
block quick from any to some-hosts

Maintenant, je peux voir les règles à l'intérieur de l'ancre en faisant ceci :

$ pfctl -a anchor_name -sr
No ALTQ support in kernel
ALTQ related functions disabled
block drop quick from any to some-hosts

Cependant quand je montre le jeu de règles actif actuel avec :

$ pfctl -sr
No ALTQ support in kernel
ALTQ related functions disabled
scrub-anchor "com.apple/*" all fragment reassemble
anchor "com.apple/*" all

je ne vois pas l'ancre appelée " nom de l'ancre " que je viens d'ajouter. L'ancre n'est donc pas réellement active/chargée...

Pourquoi pas, et comment le charger ?

9voto

klanomath Points 63400

Dans ma compréhension de pf votre ancre principale est manquante. Vous pouvez soit utiliser l'ancre ou les ancres d'Apple, soit une ancre définie par l'utilisateur.

Une ancre définie par l'utilisateur est préférable :

  1. Modifier /private/etc/pf.conf :

    Ajoutez deux lignes à pf.conf comme ceci :

    ...
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    
    #
    # usr.home anchor point
    #
    anchor "usr.home/*"
    load anchor "usr.home" from "/etc/pf.anchors/usr.home"
  2. Créer un fichier usr.home . Dans l'exemple ci-dessous je crée une ancre SSH bloquant l'accès SSH depuis un réseau local à certaines IP de l'hôte :

    sudo nano /etc/pf.anchors/usr.home

    et ajouter

    #
    # usr.home ruleset, referred to by the modified /etc/pf.conf file.
    # See notes in that file regarding the anchor point in the main ruleset.
    #
    
    #
    # SSH anchor point.
    #
    
    anchor "SSH"
    load anchor "SSH" from "/etc/pf.rules/pfssh.rule"
  3. Créez maintenant un nouveau répertoire

    sudo mkdir /etc/pf.rules

    et le fichier référencé avec :

    sudo nano /etc/pf.rules/pfssh.rule

    et le contenu suivant :

    block in quick inet proto { tcp, udp } from 10.0.0.0/8 to { 10.128.8.145, 10.129.8.145 } port 22
  4. Analysez et testez votre pf.conf et votre fichier d'ancrage pour vous assurer qu'ils sont exempts d'erreurs :

    sudo pfctl -vnf /etc/pf.conf
    sudo pfctl -vnf /etc/pf.anchors/usr.home
  5. Rechargez le pf :

    sudo pfctl -d
    sudo pfctl -e -f /etc/pf.conf

Vous pouvez ajouter des ancres supplémentaires à votre ancre principale usr.home, comme le montre l'ancre principale com.apple.

Vous pouvez également ajouter des sous-ancres dynamiques supplémentaires avec la commande suivante (ici j'ajoute une règle HTTP de blocage temporaire similaire à la règle SSH - vérifier la création d'un sous-ancre transitoire : usr.home/HTTP ici !) :

echo "block drop in quick proto tcp from 10.0.0.0/8 to any port 80" | sudo pfctl -a usr.home/HTTP -f -

L'ancre temporaire ne survit pas à un redémarrage !

Une commande possible pour supprimer la règle temporaire immédiatement est :

echo "" | sudo pfctl -a usr.home/HTTP -f -

Un script pratique pour vérifier toutes les ancres et règles chargées est pfdump :

pfdump.sh :

#!/bin/bash

function pfprint() {
  if [ -n "$1" ];then
    sudo pfctl -a "$2" -s"$1" 2>/dev/null
  else
    sudo pfctl -s"$1" 2>/dev/null
  fi
}

function print_all() {

  local p=$(printf "%-40s" $1)
  (
    pfprint r "$1" | sed "s,^,r     ,"
    pfprint n "$1" | sed "s,^,n     ,"
    pfprint A "$1" | sed "s,^,A     ,"
  ) | sed "s,^,$p,"

  for a in `pfprint A "$1"`; do
    print_all "$a"
  done
}

print_all

Tous les fichiers mentionnés nécessitent une nouvelle ligne vide à la fin !

2voto

xoryves Points 111

Il m'a fallu un certain temps pour découvrir comment il semble fonctionner sans modifier les fichiers système. Une documentation officielle sur la façon d'utiliser correctement pf sous MacOS serait formidable, mais je n'en ai pas trouvé.

Tout d'abord, pour afficher toutes les ancres, vous devez utiliser sudo pfctl -vsA .

Votre "anchor_rules.txt" semble être erroné. J'ai placé le mien sous "/etc/pf.anchors/block". Au moins sous MacOS 12.0.1 j'ai obtenu des erreurs avec sudo pfctl -vnf /etc/pf.anchors/block . Les règles de travail ressemblent à ce qui suit. Mais je ne suis pas sûr qu'elle fasse ce que vous pensez qu'elle fait.

table <some-hosts> persist file "/etc/someHostsToBlock.txt"
block quick from any to <some-hosts>

Pour charger l'ancre et activer pf, vous devez utiliser sudo pfctl -a 'com.apple/block' -f /etc/pf.anchors/block -e .

Pour démarrer pf et charger votre ancre personnalisée au démarrage du système, vous devez utiliser launchd.

/Bibliothèque/LaunchDaemons/block.pfctl.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>block.pfctl</string>
    <key>WorkingDirectory</key>
    <string>/var/run</string>
    <key>Program</key>
    <string>/sbin/pfctl</string>
    <key>ProgramArguments</key>
    <array>
        <string>pfctl</string>
        <string>-a</string>
        <string>com.apple/block</string>
        <string>-f</string>
        <string>/etc/pf.anchors/block</string>
        <string>-e</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

sudo launchctl load /Library/LaunchDaemons/block.pfctl.plist

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X