This guide walks you through manually blocking websites with pf.conf, then transitioning to using the Python-based main.py.
- macOS (tested on macOS 12+)
- Root access (
sudo) - Python 3
- Internet connection for DNS resolution
-
Open terminal and type:
sudo bash -c 'touch /private/etc/pf.anchors/org.user.block.out /etc/pf.whitelist /etc/pf.blocklist /etc/pf.blocked_domains /etc/pf.whitelist_domains && chmod 600 /private/etc/pf.anchors/org.user.block.out /etc/pf.whitelist /etc/pf.blocklist /etc/pf.blocked_domains /etc/pf.whitelist_domains' -
Enable the firewall:
sudo pfctl -f /etc/pf.conf sudo pfctl -e
-
Download or copy the
blocker.zipscript to a safe directory:mkdir -p ~/scripts cd ~/scripts upzip blocker.zip ./blocker
-
Upzip the contents of
blocker.zipgo to terminal and paste it.upzip blocker.zip -d ./blocker cd ./blocker -
Make the script executable:
chmod +x main.py
Use root privileges to start the menu-based blocker:
sudo python3 ~/scripts/blocker/main.py-
Block a domain
Enter a domain likeexample.comto block it. -
Unblock a domain
Choose a domain from the list to remove it. -
List blocked domains
See all currently blocked entries. -
Exit
Close the script.
- Resolves the domain name to one or more IP addresses.
- Stores those IPs in
/etc/pf.blocklist. - Applies rules using
pfctl. - Keeps a persistent record of blocked domains in
/etc/pf.blocked_domains.
After any change via blocker.py, the script automatically:
sudo pfctl -f /etc/pf.confSo no need to manually reload unless you edit pf.conf directly.
-
Remove rules from
/etc/pf.confsudo nano /etc/pf.conf
-
Delete the data files:
sudo bash -c 'rm /private/etc/pf.anchors/org.user.block.out /etc/pf.whitelist /etc/pf.blocklist /etc/pf.blocked_domains /etc/pf.whitelist_domains -
Reload the firewall:
sudo pfctl -f /etc/pf.conf
-
(Optional) Delete the script:
rm -rf ~/scripts/blocker
这份指南会带你先用 pf.conf 手动封锁网站,然后转向使用 Python 编写的 main.py脚本。
- macOS(在 macOS 12+测试通过)
- 根权限(使用
sudo) - Python 3
- 用于 DNS 解析的网络连接
-
打开终端输入:
sudo bash -c 'touch /private/etc/pf.anchors/org.user.block.out /etc/pf.whitelist /etc/pf.blocklist /etc/pf.blocked_domains /etc/pf.whitelist_domains && chmod 600 /private/etc/pf.anchors/org.user.block.out /etc/pf.whitelist /etc/pf.blocklist /etc/pf.blocked_domains /etc/pf.whitelist_domains' -
启用防火墙:
sudo pfctl -f /etc/pf.conf sudo pfctl -e
-
下载或备份
blocker.zip脚本至一个安全的目录:mkdir -p ~/scripts cd ~/scripts upzip blocker.zip ./blocker
-
解压
blocker.zip内容,然后转到该目录:upzip blocker.zip -d ./blocker cd ./blocker -
使脚本可执行:
chmod +x main.py
使用根权限启动基于菜单的封锁器:
sudo python3 ~/scripts/blocker/main.py-
封锁域名
输入一个域名,如example.com,将其封锁。 -
解除封锁域名
从列表中选择一个域名,将其移除。 -
列出已封锁域名
查看目前所有封锁记录。 -
退出
关闭脚本。
- 将域名解析为一个或多个 IP 地址;
- 将这些 IP 存入
/etc/pf.blocklist; - 使用
pfctl应用规则; - 将已封锁域名保存在
/etc/pf.blocked_domains中,以保持持久记录。
通过 blocker.py 进行任何更改后,脚本会自动执行:
sudo pfctl -f /etc/pf.conf所以不需要手动重新加载,除非你直接编辑了 pf.conf。
-
从
/etc/pf.conf移除相关规则sudo nano /etc/pf.conf
-
删除数据文件:
sudo bash -c 'rm /private/etc/pf.anchors/org.user.block.out /etc/pf.whitelist /etc/pf.blocklist /etc/pf.blocked_domains /etc/pf.whitelist_domains' -
重新加载防火墙:
sudo pfctl -f /etc/pf.conf
-
(可选) 删除脚本:
rm -rf ~/scripts/blocker