sniproxy + stunnel 代理×××

不知道什么原因,之前一直是直接在国外搭建sniproxy代理出去,最近突然不行了。所以在网上找到另外一个方法,通过stunnel + sniproxy的方式成功越狱。这里记录一下搭建的过程,供参考。说明:以下的程序都是运行在centos6操作系统下

1、sniproxy搭建
这个是实际代理出墙的代理软件,代理协议可以是http也可以是https

1.1 sniproxy的安装
之前写了一篇文章关于sniproxy的安装
详情见:sniproxy的安装

sniproxy配置

cd /usr/local/sniproxy
mkdir config
vim sniprxoy.conf
user nobody
pidfile /tmp/sniproxy.pid
error_log {
    #syslog daemon
    #priority notice
    filename /usr/local/sniproxy/logs/error.log
}

access_log {
    filename /usr/local/sniproxy/logs/access.log
}

listener 127.0.0.1:4433 {       #https监听端口
    protocol tls
    table TableTls              #https请求域名白名单
    # Specify a server to use if the initial client request doesn't contain
    # a hostname
    # fallback 192.0.2.5:443
}

listener 127.0.0.1:8080 {     #http监听端口
    protocol http
    table TableHttp         #http请求域名白名单
}

table TableTls {
    # Match exact request hostnames
    # example.com 192.0.2.10:4343
    # If port is not specified the listener port will be used
    # example.net [2001:DB8::1:10]
    # Or use regular expression to match
    # .*\\.com    [2001:DB8::1:11]:443
    # Combining regular expression and wildcard will resolve the hostname
    # client requested and proxy to it
    # .*\\.edu    *:443
    # (.*.|)google.com$ *
    .* *:443
}

table TableHttp {
    .* *:80
}

table AllTable {
    # Match exact request hostnames
    # example.com 192.0.2.10:4343
    # If port is not specified the listener port will be used
    # example.net [2001:DB8::1:10]
    # Or use regular expression to match
    # .*\\.com    [2001:DB8::1:11]:443
    # Combining regular expression and wildcard will resolve the hostname
    # client requested and proxy to it
    # .*\\.edu    *:443
    # (.*.|)google.com$ *
    .*\.google\.com$ *
    .*\.google\.com\.hk$ *
    google.com google.com
    google.com.hk google.com.hk
    .*\.gstatic\.com$ *
    .*\.googleapis.com$ *
    .*\.googleusercontent.com$ *
    .*\.googlecode.com$ *
    .*\.google-analytics.com$ *
    .*\.ggpht.com$ *
    .*\.googlevideo.com$ *
    .*\.youtube.com$ *
    youtube.com youtube.com
    .*\.ytimg.com$ *
    .*\.appspot.com$ *
    .*\.blogger.com$ *
    blogger.com blogger.com
    .*\.twitter.com$ *
    twitter.com twitter.com
    .*\.twimg.com$ *
    .*\.facebook.com$ *
    facebook.com facebook.com
    .*\.fbcdn.net$ *
    # .* *:443
}

2、stunnel搭建
stunnel分为两部分,一部分在本地,属于客户端,即在办公区找一台服务器或者也可以用在公司的IDC找一台,反正原则上是办公网能直接访问的机器;
第二部分为服务端,部署在国外云服务器上。

2.1 客户端配置
安装stunnel

yum install stunnel -y

配置客户端

vi /etc/stunnel/stunnel-client.conf
client = yes
pid = /etc/stunnel/stunnel-client.pid
[http]
accept = 80
connect = remote:8082     #remote替换为stunnel服务端IP地址
[https]
accept = 443
connect = remote:4443    #remote替换为stunnel服务端IP地址

启动

stunnel /etc/stunnel/stunnel-client.conf

可以通过

ps -ef | grep stunnel 或 netstat -anp | grep 80 | grep -i listen

查看程序是否正常启动了

2.2 服务端配置
安装stunnel

yum install stunnel -y

生成stunnel证书

openssl genrsa -out key.pem 2048
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem

配置服务端

vim /etc/stunnel/stunnel.conf
client = no
pid = /etc/stunnel/stunnel.pid
[http]
accept = 8082                    #这个端口需要对应客户端的配置
connect = 127.0.0.1:8080     #8080 这个指定sniproxy http协议监听端口 
cert = /etc/stunnel/stunnel.pem
[https]
accept = 4443                   #这个端口需要对应客户端的配置
connect = 127.0.0.1:4433    #4433 这个指定sniproxy https协议监听端口 
cert = /etc/stunnel/stunnel.pem

启动

stunnel /etc/stunnel/stunnel.conf

可以通过

ps -ef | grep stunnel 或 netstat -anp | grep 8082 | grep -i listen 

查看程序是否正常启动了

3、测试

测试的方式可以通过绑定google的域名到stunnel客户端地址,也可以通过在DNS配置google域名A记录(stunnel客户端地址)。

4、安全(可选)
如果是为了安全,可以配置iptables,防止被其他人利用

-A INPUT ! -s {client ip}/32 -p tcp -m tcp --dport 4443 -j DROP 
-A INPUT ! -s {client ip}/32 -p tcp -m tcp --dport 8082 -j DROP 

注:client ip替换成stunnel客户端的出口IP

点赞