Press "Enter" to skip to content

在 macOS 上阻止特定来源 IP 对你的电脑发起网络请求

在 macOS 上阻止特定来源 IP 对你的电脑发起网络请求,最强大和灵活的方法是使用 macOS 内置的防火墙工具 Packet Filter (pf)。macOS 自带的图形界面防火墙主要基于应用程序,无法直接通过图形界面阻止特定 IP。

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 文件之前,务必进行备份。

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注