題 拒絕在OSX上從localhost訪問端口


我想為我的memcached驅動程序測試一個回退策略(如果端口受防火牆保護)。如何在127.0.0.1上拒絕訪問特定端口?


4
2017-11-13 17:01


起源


根據您使用的MacOS版本,使用jaume的答案(=您在10.7或更高版本)或我的(您在10.6)。 - Florenz Kley
@FlorenzKley:謝謝你們的回答,我對他們兩個都讚不絕口。我決定接受答案,因為我在OSX Snow Leopard :) - Vlad Zloteanu
:P :)謝謝你的回答! ;) - Vlad Zloteanu


答案:


Mac OS X 10.6(Snow Leopard)示例

拒絕連接到localhost,端口SSH(= 22,從中讀取 /etc/services):

sudo ipfw add deny tcp from any to localhost ssh

1
2017-11-13 17:57



ipfw在OSX 10.7和OSX 10.8中已棄用,在OSX 10.9上不再可用 - Guido
這就是為什麼它在我的回答中說“Mac OS X 10.6的例子”... - Florenz Kley


您可以使用 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

當你完成後,你可以 刪除規則

  1. 加載原始規則集:

    sudo pfctl -f /etc/pf.conf 
    
  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 -
    

(我已經在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.

17
2017-11-13 20:34



在新的計算機上,您可能實際上也必須啟用它。只是改變 -f 至 -ef - casey
@casey謝謝,我編輯了我的答案,在你的評論中添加信息。 - jaume