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/

Laravel PHP 多条件数据库查询

有时候搜索要用到比如select * from user where id > ? and (pid = ? or uid = ? )
可以使用如下方法:

$users = User::where('id','>','10')
->where(function($q1) use($pid,$uid){
$q1->orWhere('pid',$pid)
->orWhere('uid',$uid);
})->get();

简化一下就是这样:
$users = User::where('id','>','10')->where('enable' , 1)-get();

修复 ss-panel v3 无法使用 SMTP 发送邮件的问题 /解决QQ邮箱拦截 Mailgun 邮件

首先要说,有条件的,尽量使用 Mailgun 发送客信,因为 Mailgun 真的是非常好的邮件服务器,高效率而且有完善的分析和报告系统。然后国内某些无耻的邮件服务商相互勾结,恶意拦截 Mailgun 发送的邮件,由于国内部分运营商认为 Mailgun 邮件包含大量垃圾邮件,所以对 IP 限制很死,导致邮件无法正常送达客户。

为了解决这一问题,又不想屈服于国内的垃圾邮件服务提供商,可以暂时通过 smtp 发送邮件来解决问题(如果邮件量巨大的时候,千万别这么做,很容易 iP+域名 被阻止)。然后你会发现即便当你配置了 ss-panel .env 中的 smtp 信息,你依然无法通过 smtp 发送邮件(人家作者也备注了,本来就不再提供 smtp 支持了),那么你可以按如下方法,修复这一问题。

找到 ss-panel 程序目录 ./app/Services/Mail/Smtp.php 文件第27行:

$mail->SMTPSecure = 'tls';

将其修改为:

if(Config::get('smtp_ssl') == 'true'){
$mail->SMTPSecure = (Config::get('smtp_port') =='587'?'tls':'ssl');
}

保存,然后在 .env 文件中配置 smtp 参数,并且把 MailDriver 设置为 smtp,用你的游览器访问你的网站链接 ./admin/test/sendmail,测试一下是否能够发信了?

smtp 修复方案来源于 ss-panel v3 魔改版,感谢作者 kjukjuatnk.

使用 Nginx 解決 Google Analytics 无法统计大陆访问数据被墙的问题

由於眾所周之的原因,Google Analytics 在大陸地區總是「不太穩定」,且無其他可真正比肩者。故而需要通過海外服務器作為反向代理以解決此種問題。同時為統計結果之準確計,必須確保用戶IP等信息得以透明傳輸。

解決方案

nginx配置文件:

server {
listen 80;
listen 443 ssl spdy;
server_name analytics.hellomac.com.cn;
ssl_certificate /etc/letsencrypt/live/www.hellomac.com.cn/privkey.pem;
ssl_certificate_key /etc/letsencrypt/live/www.hellomac.com.cn/privkey.pem;
location /ga_proxy {
proxy_set_header X-real-ip $remote_addr;
rewrite ^/ga_proxy/(.*)$ /$1?$args&uip=$remote_addr;
proxy_pass http://www.google-analytics.com;
break;
}
location /analytics.js {
default_type text/html;
subs_filter_types text/css text/xml text/javascript;
subs_filter 'www.google-analytics.com' 'analytics.example.com/ga_proxy' g;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Referer https://www.google-analytics.com;
proxy_set_header Host www.google-analytics.com;
proxy_pass https://www.google-analytics.com;
proxy_set_header Accept-Encoding "";
}
}

Read more

iOS 上最简单的 Shadowsocks 客户端教程 / Wingy 设置教程

2019-11-3 更新:
由于 HelloMac Shadowsocks使用了新的加密技术,请前往官方网站查看配置教程及注册账号,谢谢。

前一段时间出了一个 Potatso 教程,但是因为 Patatso 功能太多,大家觉得太复杂,而且软件是需要付费的。所以今天再出一个免费的 Wingy 教程。
Wingy 是一个免费的 iOS Shadowsocks 客户端,其软件体积很小,占用资源也少,而且设置及其简单,其实这个软件的设置是全自动的,完全不需要教程,这个教程也更多的是指引大家如何注册 HelloMac Shadowsocks 服务。

首先,你需要购买 HelloMac Shadowsocks 账户,文章末尾有二维码可以扫码购买,也可以从你的服务商处购买获取更多优惠。
然后,你会收到 HelloMac 官方发来的注册链接,点击链接进入注册界面。

img_0267
Read more

最完整的 iOS Shadowsocks 教程 / Potatso 土豆丝设置教程

现在已经有更新更好用的 iOS Shadowsocks 客户端 Wingy,本文不再维护,要了解 Wingy 的配置说明,请看本站教程:
iOS 上最简单的 Shadowsocks 客户端教程 / Wingy 设置教程

由于 Suger 被下架,Shadowsocks 不能后台保持,导致很长一段时间在 iOS 上使用 SS 翻墙成了一个很痛苦的问题,现在 Potatso 带着全新功能,完美支持 Shadowsocks,自动区分国内外流量,支持后台连接保持,4G / WiFi 切换不会断线,这是我试用过的最棒的 iOS 上支持 Shadowsocks 的软件,下面就来说以下设置步骤。

首先当然是你的去 App Store 购买软件了,写此文时这个软件卖 45 元,之前便宜些。

IMG_0139

下载好软件以后打开设置。

Read more

各平台最新版 Shadowsocks 客户端下载

由于 Shadowsocks 主页被墙,所以在这里提供最新版软件下载,所有软件来源均来自 Shadowsocks 官方镜像,请根据您的操作系统选择合适的版本下载。

Windows 8 or above

Newest Version:
最新版:
Shadowsocks 3.4.2.1
旧版本:
Shadowsocks 3.3.2

Windows 7

(不再更新)
Shadowsocks-Qt5:
最新版:
SS 2.7.0 Win 32 Version
SS 2.7.0 Win 64 Version
旧版本:
SS 2.6.1 Win 32 Version
SS 2.6.1 Win 64 Version

Mac OS X

GUI Client:
最新版:
ShadowsocksX-NG 1.3.2
旧版本:
ShadowsocksX 2.6.3
Command-line Client: (支持网内其他设备共享)
brew install shadowsocks-libev

Linux

GUI Client:
Shadowsocks-Qt5
Command-line Client:
pip install shadowsocks

Android

最新版:
Shadowsocks 3.3.1
旧版本:
Shadowsocks 3.0.4
Shadowsocks 2.10.4

iOS

Wingy App Store (免费,扫码设置,强烈推荐)
Potatso App Store (软件费用45元,功能丰富,有需要可购买)

Shadowsocks 官方主页:https://shadowsocks.org/

ARM 与 X86 架构的区别[转]

文章转载,但原文出处不明,觉得写的不错,贴过来备用。

这里简单来谈一下,ARM和X86之间为什么不太具有可比性的问题。要搞清楚这个问题首先要明白什么是架构,之前也有很多人提到了架构不同,但架构是什么意思?它是一个比较抽象的概念,不太容易用几句话就解释清楚。我们要明白CPU是一个执行部件,它之所以能执行,也是因为人们在里面制作了执行各种功能的硬件电路,然后再用一定的逻辑让它按照一定的顺序工作,这样就能完成人们给它的任务。也就是说,如果把CPU看作一个人,首先它要有正常的工作能力(既执行能力),然后又有足够的逻辑能力(能明白做事的顺序),最后还要听的懂别人的话(既指令集),才能正常工作。而这些集中在一起就构成了所谓的“架构”,它可以理解为一套“工具”、“方法”和“规范”的标准。不同的架构之间,工具可能不同,方法可能不同,规范也可能不同,这也造成了它们之间的不兼容——你给一个意大利泥瓦匠看一份中文写成的烹饪指南,他当然不知道应该干什么了。

如果还看不懂,没关系,我们继续。从CPU发明到现在,有非常多种架构,从我们熟悉的X86,ARM,到不太熟悉的MIPS,IA64,它们之间的差距都非常大。但是如果从最基本的逻辑角度来分类的话,它们可以被分为两大类,即所谓的“复杂指令集”与“精简指令集”系统,也就是经常看到的“CISC”与“RISC”。属于这两种类中的各种架构之间最大的区别,在于它们的设计者考虑问题方式的不同。我们可以继续举个例子,比如说我们要命令一个人吃饭,那么我们应该怎么命令呢?我们可以直接对他下达“吃饭”的命令,也可以命令他“先拿勺子,然后舀起一勺饭,然后张嘴,然后送到嘴里,最后咽下去”。从这里可以看到,对于命令别人做事这样一件事情,不同的人有不同的理解,有人认为,如果我首先给接受命令的人以足够的训练,让他掌握各种复杂技能(即在硬件中实现对应的复杂功能),那么以后就可以用非常简单的命令让他去做很复杂的事情——比如只要说一句“吃饭”,他就会吃饭。但是也有人认为这样会让事情变的太复杂,毕竟接受命令的人要做的事情很复杂,如果你这时候想让他吃菜怎么办?难道继续训练他吃菜的方法?我们为什么不可以把事情分为许多非常基本的步骤,这样只需要接受命令的人懂得很少的基本技能,就可以完成同样的工作,无非是下达命令的人稍微累一点——比如现在我要他吃菜,只需要把刚刚吃饭命令里的“舀起一勺饭”改成“舀起一勺菜”,问题就解决了,多么简单。
Read more

Xbian 音频配置 ALSA PulseAudio Bluez A2DP

怀疑 Xbian 的 XBMC 是直接与硬件通信的,所以在 Xbian 系统里完全没有音频相关的配置,连最起码的ALSA都没有配置,简单说就是默认声卡驱动都没有加载。
步骤一:加载声卡驱动模块
sudo modprobe snd_bcm2835
然后用 aplay -l 和 -L 分别看一下是否有声卡了,如果有就说明加载成功。
测试一下是否发声
speaker-test -twav -c2
如果发声,就可以把模块写入到 /etc/modules 中了,第一步就完成了。

步骤二:扩展蓝牙音频。
参考:http://legendmohe.net/2014/06/20/pcduino-连接蓝牙音箱/

步骤三:扩展音频系统为 PulseAudio
sudo apt-get install pulseaudio pulseaudio-utils libfftw3-bin libfftw3-dev pavumeter pavucontrol paman paprefs pulseaudio-module-x11 gstreamer0.10-pulseaudio rtkit

然后进入桌面环境下去看看。