pf 是一个基于命令行的工具,需要通过终端进行配置。以下是配置步骤:
**重要提示:**
1. 配置防火墙规则需要管理员权限,使用 sudo 命令。
2. 错误配置 pf 可能会导致网络连接问题,甚至可能将自己锁在网络之外。在进行永久性修改前,强烈建议先使用临时规则进行测试,并备份 /etc/pf.conf 文件。
**步骤 1: 打开终端**
在 Spotlight 搜索中输入 “终端” (Terminal) 并打开应用。
**步骤 2: 查看当前的 pf 状态 (可选)**
你可以先查看 pf 是否已经启用以及当前的规则:
sudo pfctl -s rules
sudo pfctl -s state输入管理员密码。如果没有任何输出,可能表示 pf 没有启用或者没有加载规则。
**步骤 3: 编写阻止规则**
阻止特定 IP 入站连接的规则基本格式是:
block drop in from <要阻止的IP地址> to any
- block drop: 表示阻止并静默丢弃匹配的连接请求,对方不会收到任何错误信息。
- in: 表示规则应用于入站(传入)连接。
- from <要阻止的IP地址>: 指定要阻止的源 IP 地址。
- to any: 表示目标是你的 Mac 电脑上的任何地址(即你的 Mac 本身)。
例如,要阻止来自 192.168.1.100 的所有入站连接,规则就是:
block drop in from 192.168.1.100 to any
**步骤 4: 应用规则 (临时或永久)**
你可以选择临时应用规则(重启后失效)或永久应用规则(重启后仍然有效)。
**方法 A: 临时应用规则 (推荐先测试)**
这种方法不会修改 pf.conf 文件,规则会立即生效,但在系统重启后会消失。
**编写规则并使用 pfctl -f – 命令从标准输入加载规则:**
echo "block drop in from 192.168.1.100 to any" | sudo pfctl -f -将 192.168.1.100 替换为你要阻止的实际 IP 地址。
**启用 pf (如果尚未启用):**
sudo pfctl -e**验证规则是否加载并生效:**
sudo pfctl -sr # 查看加载的规则
sudo pfctl -s state # 查看当前连接状态,看是否有来自该IP的连接被block尝试从被阻止的 IP 地址 ping 或连接你的 Mac,应该会超时。
**注意:** 如果你的 /etc/pf.conf 文件中已经有其他规则,这个命令会 *替换* 掉所有当前加载的规则(除了默认加载的 anchored rules)。对于临时测试,通常是在一个干净的状态下加载,或者在现有规则基础上谨慎添加。更安全的临时测试方法是创建一个临时文件:
echo "block drop in from 192.168.1.100 to any" > /tmp/block_ip.conf
sudo pfctl -f /tmp/block_ip.conf
sudo pfctl -e # 确保 pf 已启用然后用 sudo pfctl -sr 查看,发现加载的只有你写的这条规则。
**方法 B: 永久应用规则 (修改 /etc/pf.conf)**
这种方法会修改 /etc/pf.conf 文件,规则在系统重启后仍然有效。**请务必小心操作,建议先备份文件!**
**备份 /etc/pf.conf:**
sudo cp /etc/pf.conf /etc/pf.conf.bak**使用文本编辑器打开 /etc/pf.conf:**
sudo nano /etc/pf.conf**在文件中添加你的规则:**
找到文件中的规则部分(通常在一些默认设置之后)。添加你的阻止规则。例如:
#
# Sample pf.conf file
#
# See pf.conf(5) for syntax and examples.
#
# Block specific IP address
block drop in from 192.168.1.100 to any
# Default rules (keep existing rules)
# ... 文件的其他内容 ...将 block drop in from 192.168.1.100 to any 添加到文件的适当位置。通常,阻止规则会放在文件的前面,在放行规则之前。
**保存并关闭文件。** (在 nano 中是按 Control + X,然后按 Y 确认保存,最后按 Enter 确认文件名)。
**检查 /etc/pf.conf 文件的语法:**
sudo pfctl -n -f /etc/pf.conf如果语法正确,不会有任何输出。如果有错误,会显示错误信息,需要回去编辑文件修复。
**加载新的 pf 配置文件:**
sudo pfctl -f /etc/pf.conf**启用 pf (如果尚未启用):**
sudo pfctl -e**验证规则是否加载并生效:**
sudo pfctl -sr你应该能看到你添加的规则。
**如何取消阻止某个 IP?**
**对于临时规则:** 规则会在重启后失效。如果想立即取消,可以尝试重新加载一个不包含该规则的 pf 配置,或者简单地禁用再启用 pf(但请注意禁用再启用可能会影响其他网络功能):
sudo pfctl -d # 禁用 pf
sudo pfctl -e # 启用 pf (这会重新加载默认配置,通常不包含你的临时规则)或者加载原始的 /etc/pf.conf 文件(如果之前没有改动过):
sudo pfctl -f /etc/pf.conf**对于永久规则:**
使用文本编辑器打开 /etc/pf.conf:
sudo nano /etc/pf.conf删除你之前添加的 block drop in from <IP地址> to any 这一行。
保存并关闭文件。
检查语法:
sudo pfctl -n -f /etc/pf.conf加载修改后的配置文件:
sudo pfctl -f /etc/pf.conf验证规则是否已移除:
sudo pfctl -sr**总结:**
使用 pf 是在 macOS 上阻止特定 IP 地址的推荐方法。对于不熟悉命令行的用户,强烈建议先在虚拟机或非关键环境进行测试,或者只使用临时规则进行验证。在修改 /etc/pf.conf 文件之前,务必进行备份。