我想测试 memcached 驱动程序的后备策略(以防端口受防火墙保护)。如何拒绝访问 127.0.0.1 上的特定端口?
答案1
以 Mac OS X 10.6 (Snow Leopard) 为例
拒绝与本地主机、端口 SSH 的连接(= 22,读取自/etc/services
):
sudo ipfw add deny tcp from any to localhost ssh
答案2
您可以使用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
此规则阻止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 -
命令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
此命令与上一个命令不同之处在于我删除了-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
完成后你可以删除规则:
加载原始规则集:
sudo pfctl -f /etc/pf.conf
或者以与添加规则类似的方式删除该规则:
(sudo pfctl -sr 2>/dev/null | fgrep -v "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -f -
(我已经在 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.