Daily Archive: 22 6 月, 2017

Mac 终端命令代理工具

这篇文章已不再适用,因为找到了更好的透明代理叫Proxifier。

官网地址:https://www.proxifier.com/

注册码:P427L-9Y552-5433E-8DSR3-58Z68

————-以下是废物—————————

公司网络服务器是一台 Mac mini Server(坑是自己挖的),然后最近要做一个透明网关代理用于公(ke)司(xue)业(shang)务(wang),然后研究 pfctl 研究到快疯了,这破玩意儿太 TMD 不友好了,而且在研究了一天后发现这货根本无法实现透明代理~~~

然后就各种心灰意冷之后突然看到一片曙光,原来有一个叫 ProxyChains 的神器。。。

好了,就是这里:https://github.com/rofl0r/proxychains-ng

安装 Mac

brew install proxychains-ng

配置文件

vim /usr/local/etc/proxychains.conf

OSX 上 pfctl 的简单配置笔记

OS X 上没有iptables,在10.10以后以pf取代ipfw。相比于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在以后的OSX更新中可能会被覆盖,最好可以另外建立一个自定义的pf.conf。
配置文件必须按照Macros, Tables, Options, Traffic Normalization, Queueing, Translation, Packet Filtering的顺序。
更详细的说明参考pf.conf man page
添加一个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"

建立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

使配置文件生效

pfctl -evf /etc/pf.conf

原文地址:https://blog.chionlab.moe/2016/02/01/use-pf-on-osx/