MacOS X Firewall

Max前陣子在研究 Mac OS X 上的中間人攻擊(man-in-the-middle attack, MITM),有安裝 SSLsplit – transparent SSL/TLS interception 趁這個機會學習到了很多 Mac OS X 裡的指令,結論是:rdr封包無法轉發,要可以被轉發需要在 Mac OS X 裡插入實體的網路線並啟用wifi 基地台分享,讓 Mac OS X 變成 gateway 才能收到用戶端送的封包,或是配合mitmproxy的透明代理。

Apple的 MacOS X上沒有iptables,在10.10以後以pf取代ipfw。相比於linux 的 iptables,pf一般使用配置文件保存防火牆規則,語法規範上更嚴謹,但是配置也更複雜、規則冗長。本文記錄pf的簡單配置方法。cat /etc/pf.conf,可看到以下已有內容:(已忽略注解部分)

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"

anchor可理解為一組規則的集合。默認情況下,這裡的幾行anchor都是蘋果留的place holder,實際上沒有active的規則。
/etc/pf.conf在以後的MacOS X更新中可能會被覆蓋,最好可以另外建立一個自定義的pf.conf。
配置文件必須按照Macros, Tables, Options, Traffic Normalization, Queueing, Translation, Packet Filtering的順序。

更詳細的說明參考 pf.conf man page

1. 添加一個anchor。修改/etc/pf.conf如下:

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
nat-anchor "custom"
rdr-anchor "com.apple/*"
rdr-anchor "custom"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
anchor "custom"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "custom" from "/etc/pf.anchors/custom"

2. 建立anchor規則文件/etc/pf.anchors/custom,內容為具體規則。

常用的規則:
• 屏蔽IP入站TCP連接並記錄:

block in log proto tcp from 192.168.1.136 to any



• 轉發入站TCP連接到另一本地端口:

rdr inet proto tcp from any to any port 8081 -> 127.0.0.1 port 80



經測試,rdr無法轉發到另一台外部主機上(man page的示例,只可以轉發到internal network),內核開啓net.inet.ip.forwarding=1也無效。如需轉發到另一個外網IP,需要配合mitmproxy的透明代理。

• NAT,路由vlan12接口上(192.168.168.0/24)的出口包,經由非vlan12的接口轉換到外部地址(204.92.77.111),並允許vlan12之間的互相訪問:

nat on ! vlan12 from 192.168.168.0/24 to any -> 204.92.77.111



3. 使配置文件生效

pfctl -evf /etc/pf.conf



 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *