Je cherche une manière assez élégante de lancer le programme pf
- alias Packet Filtering - processus au démarrage. L'utilisation du launchctl
ou le pfctl
les privilèges Root sont requis et il est donc inutile de les ajouter dans la rubrique .bash_profile
. Existe-t-il des solutions alternatives à ce problème ?
Réponses
Trop de publicités?Par défaut, pf est réduit au silence au démarrage, un démon de lancement com.apple.pfctl.plist existe cependant dans /System/Library/LaunchDaemons/. Pour activer pf lors du démarrage, vous devez ajouter un fichier -e
dans la liste de contrôle.
Puisque tous les fichiers dans /System/Library/LaunchDaemons/ sont protégés par SIP dans MacOS 10.11 et les versions ultérieures, vous devez le désactiver d'abord.
Ensuite, après avoir démarré sur le système principal, modifiez la liste de contrôle du démon de lancement :
sudo nano /System/Library/LaunchDaemons/com.apple.pfctl.plist
et remplacer
...
<key>ProgramArguments</key>
<array>
<string>/sbin/pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
...
avec
...
<key>ProgramArguments</key>
<array>
<string>/sbin/pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
...
Redémarrez en mode de récupération et réactivez SIP.
Il est possible de lancer des processus au démarrage à l'aide de démons. Vous pouvez créer un démon - ou même modifier un démon existant - en ajoutant ou en modifiant respectivement un fichier .plist
fichier à l'intérieur /System/Library/LaunchDaemons
ou /Library/LaunchDaemons
.
Dans mon cas, sous MacOS Sierra, un démon pour pfctl
se trouvait déjà à l'intérieur d'un de ces dossiers, mais il avait été configuré sans l'option -e
Par conséquent, au démarrage, le démon a été lancé sans aucun effet.
Le problème a été résolu en ajoutant l'option mentionnée, ainsi qu'une autre option, bien qu'elle ne soit pas nécessaire :
<?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>com.apple.pfctl</string>
<key>WorkingDirectory</key>
<string>/var/run</string>
<key>Program</key>
<string>/sbin/pfctl</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/var/log/pfctl.err</string>
<key>StandardOutPath</key>
<string>/var/log/pfctl.out</string>
</dict>
</plist>
Existe-t-il des solutions alternatives à ce problème ?
Oui*, dans Préférences système / Sécurité et confidentialité / Options du pare-feu..., cochez "Activer le mode furtif" et activez le pare-feu.
D'une manière ou d'une autre, cela permet à PF d'agir. Vous pouvez vérifier en lançant sudo pfctl -s info
.
*Testé sur High Sierra et Mojave
Si vous ne voulez pas vous embêter à désactiver la protection de l'intégrité du système (SIP), vous pouvez simplement copier le fichier existant /System/Library/LaunchDaemons/com.apple.pfctl.plist
vers la zone utilisateur non protégée /Library/LaunchDaemons
en lui donnant un nom légèrement différent, par exemple. /Library/LaunchDaemons/my.netfilter.pfctl.plist
.
J'ai changé le nom du Label pour qu'il corresponde au nom du fichier et j'ai ajouté l'option -e comme décrit dans les autres réponses.
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key> <string>my.netfilter.pfctl</string>
<key>Disabled</key> <false/>
<key>RunAtLoad</key> <true/>
<key>WorkingDirectory</key> <string>/var/run</string>
<key>Program</key> <string>/sbin/pfctl</string>
<key>ProgramArguments</key>
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
</dict>
</plist>
Après le redémarrage, vérifiez qu'il fonctionne avec pfctl -s all
. Testé sur Mojave.
Activer la PF via la console
Voici comment activer le filtre à paquets (PF) de votre Mac et faire en sorte qu'il s'active automatiquement après chaque redémarrage. Les autres méthodes n'ont pas fonctionné pour moi.
Exécutez le programme suivant à partir de Terminal ou via SSH :
sudo -i
defaults write /Library/Preferences/com.apple.alf globalstate -int 1
defaults write /Library/Preferences/com.apple.alf stealthenabled "1"
/usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
Pratique lorsque l'on travaille depuis chez soi dans un lieu fermé et que l'on n'a pas accès à l'interface graphique :-). Comme l'a souligné sunknudsen : le mode furtif permet à PF de démarrer automatiquement et de rester allumé après un redémarrage.
Test PF
Redémarrez l'ordinateur (shutdown -r now) et après le démarrage, exécutez la commande suivante :
pfctl -s info
Recherchez une ligne commençant par "Status : Enabled". Si c'est le cas, c'est que le filtre à paquets Mac est en cours d'exécution.