拒绝从 OSX 上的本地主机访问端口

Vla*_*anu 7 firewall localhost macos

我想为我的 memcached 驱动程序测试回退策略(以防端口受防火墙保护)。如何拒绝访问 127.0.0.1 上的特定端口?

jau*_*ume 20

您可以使用pfctl.

OS X 10.7 "Lion" 及更高版本使用OpenBSD PF(数据包过滤器)。一个名为的伪设备/dev/pf允许用户空间工具配置数据包过滤器。该命令pfctl提供了大部分功能。

要过滤环回接口上的端口 1234,您可以使用如下规则:

block drop quick on lo0 proto tcp from any to any port = 1234
Run Code Online (Sandbox Code Playgroud)

此规则阻止lo0端口 1234上的所有入站/出站流量(quick在此上下文中,如果此规则匹配,则不应应用其他规则)。

在 PF 中加载规则的命令是:

(sudo pfctl -sr 2>/dev/null; echo "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -nf -
Run Code Online (Sandbox Code Playgroud)

命令pfctl -sr 2>/dev/null列出所有当前规则(并将非常烦人的错误消息发送No ALTQ support in kernel ALTQ related functions disabled/dev/null)。在echo添加上述的输出,其被管道输送到规则pfctl。选项-n表示不适用,只需勾选

如果没有错误消息(除了上述No ALTQ support消息和警告pfctl: Use of -f option, could result in flushing of rules present in the main ruleset added by the system at startup),您可以应用规则:

(sudo pfctl -sr 2>/dev/null; echo "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -f - 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

这个命令与上一个命令的不同之处在于我删除了-n. 请注意,您可能需要添加选项-e以启用数据包过滤器(感谢您的评论凯西):(sudo pfctl -sr 2>/dev/null; echo "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -e -f - 2>/dev/null

您现在可以列出检查它是否已正确添加的规则:

sudo pfctl -sr 2>/dev/null
(...)
block drop quick on lo0 proto tcp from any to any port = 1234
Run Code Online (Sandbox Code Playgroud)

完成后,您可以删除规则

  1. 要么加载原始规则集:

    sudo pfctl -f /etc/pf.conf 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或以添加规则的类似方式删除规则:

    (sudo pfctl -sr 2>/dev/null | fgrep -v "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -f -
    
    Run Code Online (Sandbox Code Playgroud)

(我已经在 OS X 10.8.2 "Mountain Lion" 上测试了整个过程并且完美运行。)

您可以在这篇出色的介绍中找到更多信息:http : //nomoa.com/bsd/gateway/pf/valid/pfctl.html

ipfw 仍包含在 OS X 10.7 和 10.8 中,但已弃用:

IPFW(8)                   BSD System Manager's Manual                  IPFW(8)

NAME
     ipfw -- IP firewall and traffic shaper control program (DEPRECATED)

SYNOPSIS
(...)

DESCRIPTION
     Note that use of this utility is DEPRECATED. Please use pfctl(8) instead.
Run Code Online (Sandbox Code Playgroud)

  • 在新的计算机上,您实际上可能还必须启用它。只需将 `-f` 更改为 `-ef` (6认同)
  • 很好的答案,但界面却非常糟糕。无论谁写了“pfctl”,都应该被送回学校。 (2认同)

Flo*_*ley 2

Mac OS X 10.6(雪豹)示例

拒绝与本地主机的连接,端口 SSH(= 22,从 读取/etc/services):

sudo ipfw add deny tcp from any to localhost ssh
Run Code Online (Sandbox Code Playgroud)