linux 设置成代理服务器(安装squid)

linux 设置成代理服务器(安装squid)

  • 1、安装依赖软件
root@xct-B360M-D2V:/etc/squid# apt-get install -y gcc openssl
  • 2、安装 squid
# 安装
root@xct-B360M-D2V:/etc/squid# apt-get install squid
# 编辑
root@xct-B360M-D2V:/etc/squid# cd /etc/squid/
root@xct-B360M-D2V:/etc/squid# cp squid.conf squid.conf.bak
root@xct-B360M-D2V:/etc/squid# vim squid.conf

找到这些代码

http_access deny all
# http_port 3128
# cache_dir ufs /var/spool/squid 100 16 256

改为

http_access allow all
http_port 0.0.0.0:3128 # 用 netstat -apn |grep 3128 查看是否是 tcp6 如果是就改为0.0.0.0的否则就只需要一个端口号就行了
cache_dir ufs /var/spool/squid 100 16 256

测试、初始化、启动 squid

# 测试
root@xct-B360M-D2V:/etc/squid# squid -k parse
2016/08/09 13:35:04| Processing Configuration File: /etc/squid/squid.conf (depth 0)
2016/08/09 13:35:04| Processing: acl manager proto cache_object
..............
..............
2016/08/09 13:35:04| Processing: refresh_pattern . 0 20% 4320
2016/08/09 13:35:04| Initializing https proxy context
# 初始化
root@xct-B360M-D2V:/etc/squid# squid -z
# 启动squid
root@xct-B360M-D2V:/etc/squid# /etc/init.d/squid start
[ ok ] Restarting squid (via systemctl): squid.service.
  • 3、开启 3128 端口
root@xct-B360M-D2V:/etc/squid# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
root@xct-B360M-D2V:/etc/squid# iptables-save
  • 4、编辑 hosts 文件
# 加入自己想要的ip域名解析
root@xct-B360M-D2V:/etc/squid# vim /etc/hosts
1.1.1.1 test.com
root@xct-B360M-D2V:/etc/squid# /etc/init.d/networking restart
  • 查看代理是否生效
root@xct-B360M-D2V:/etc/squid# curl -x192.168.22.30:3128 'http://www.51cto.com/images/home/images/logo.jpg' -I
HTTP/1.0 200 OK
Server: Tengine
Date: Sun, 24 May 2015 13:42:43 GMT
Content-Type: image/jpeg
Content-Length: 5309
Last-Modified: Wed, 22 Jan 2014 07:55:12 GMT
Expires: Sun, 31 May 2015 13:42:43 GMT
Cache-Control: max-age=604800
Load-Balancing: web39
Accept-Ranges: bytes
Age: 29661
X-Cache: HIT from yonglinux
X-Cache-Lookup: HIT from yonglinux:3128
Via: 1.0 yonglinux (squid/3.1.10)
Connection: keep-alive

关于手机App的Https抓包

我喜欢用 Mitmproxy 来处理手机 App 抓包之类的工作,本来用它来抓 Https 包是很容易的一件事,只要设置好代理,浏览 mitm.it 按提示安装证书即可,可是当 Android 版本升级到 7 以后,此方法就失效了,为什么呢?因为新版 Android 缺省情况下只信任系统级证书,而不再信任用户级证书,问题详细描述可以参考:听说安卓微信 7.0 不能抓 https?

普通的解决方法有很多,比如说用低版本的 Android 手机,或者干脆换个苹果手机。不过那些治标不治本的方法并不是本文关注的重点,本文我们主要聊聊如何通过 root 来解决问题,但是 root 本身是有风险的,所以下面有请重量级嘉宾网易 MuMu 闪亮登场!它是一个有 root 权限的全功能 Android 模拟器。

mumu

mumu

网易 MuMu 使用起来很简单,不过你需要注意实际抓包的时候,你需要设置模拟器的网络连接走相应的代理,设置的方法是找到对应的网络连接「长按」即可:

网络连接

网络连接

因为我是用 Mitmproxy 来抓包的,所以要安装的也是 Mitmproxy 的证书。下面看看如何把 Mitmproxy 证书安装到网易 MuMu 里,记得安装相关工具,以 Mac 操作系统为例:

shell> brew install mitmproxy
shell> brew install Caskroom/cask/android-platform-tools

安装好工具之后,别忘了启动网易 MuMu,然后通过 android-platform-tools 中的 adb 命令来连接它,只需要简单执行「adb shell」即可,如果遇到连不上的情况,可以参考文档。连接成功后,你可以在「/system/etc/security/cacerts/」目录看到现有的系统级证书:

证书

证书

换句话说,我们只要把 Mitmproxy 证书安装到这里即可。不过这些证书的文件名都是啥意思,实际上他们就是证书文件的散列值,那 Mitmproxy 证书在哪?如何计算它的散列值?其实当我们安装好 Mitmproxy 的时候,相应的证书就已经保存在「~/.mitmproxy」目录里了,其中 mitmproxy-ca-cert.p12 证书是 windows 环境用的,剩下的 mitmproxy-ca-cert.cer 和 mitmproxy-ca-cert.pem 是用在非 windows 环境,它俩的文件内容一样,只是扩展名不同,方便一些设备识别,详见官方文档。下面看看如何计算证书的散列值:

shell> openssl x509 \
    -subject_hash_old \
    -inform PEM \
    -in ~/.mitmproxy/mitmproxy-ca-cert.pem | head -1

c8750f0d

接下来我们把 Mitmproxy 证书推送到模拟器系统证书所在目录:

shell> adb push \
    ~/.mitmproxy/mitmproxy-ca-cert.pem \
    /system/etc/security/cacerts/c8750f0d.0

最后在模拟器「设置 / 安全 / 信任的凭据 / 系统」里就能看到 Mitmproxy 证书了:

系统证书

系统证书

BTW:如果你使用 Fiddler 来抓包的话,那么因为它的证书 FiddlerRoot.cer (可以从如下路径获取:Tools/Options/HTTPS/Actions/Export Root Certificate to Desktop)是 DER 格式的,所以你需要先把它转换成 PEM 格式:

shell> openssl x509 -inform DER -in FiddlerRoot.cer > FiddlerRoot.pem

通过 root 安装系统证书可以解决大部分 Https 抓包问题,为什么不是全部?还有哪些特殊情况不能处理?答案是「SSL Pinning」,它是为了应对中间人攻击而出现的一种技术,简单点说,就是证书被打包到 App 里,每次请求都会验证证书一致性。如此一来,虽然我们可以安装系统级证书,但是当 App 验证证书一致性的时候就失败了,如何突破此限制呢?答案很简单,你不是要验证一致性么,我统统返回 OK 不就行了!

为了达到 hack 的目的,我们需要安装 Xposed 和 JustTrustMe,其中 Xposed 是一个 hack 框架,JustTrustMe 是一个插件。安装过程并不复杂,唯一需要说明的是,在安装 Xposed 之前,最好在网易 MuMu 中关闭兼容模式,路径「设置 / 应用兼容性 / 兼容模式」。

BTW:有一个 VirtualXposed 项目,无需 root,使用起来更简单,值得关注。

Xposed

Xposed

JustTrustMe

JustTrustMe

如果你认认真真从头看到尾,那么恭喜你,关于手机 App 的 Https 抓包,你已经是专家了