在 macOS 上阻止特定来源 IP 对你的电脑发起网络请求,最强大和灵活的方法是使用 macOS 内置的防火墙工具 Packet Filter (pf)。macOS 自带的图形界面防火墙主要基于应用程序,无法直接通过图形界面阻止特定 IP。
pf 是一个基于命令行的工具,需要通过终端进行配置。以下是配置步骤:
重要提示:
- 配置防火墙规则需要管理员权限,使用 sudo 命令。
- 错误配置 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 文件之前,务必进行备份。