Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VPN-科学上网 #11

Open
sophister opened this issue Oct 16, 2018 · 6 comments
Open

VPN-科学上网 #11

sophister opened this issue Oct 16, 2018 · 6 comments

Comments

@sophister
Copy link
Owner

sophister commented Oct 16, 2018

前面两篇都被和谐了, 找到了这一篇,https://zzz.buzz/zh/gfw/2017/08/14/install-shadowsocks-server-on-centos-7/ ,为了防止再被和谐,还是把主要内容摘录到下面吧:

安装 Shadowsocks

执行安装 Shadowsocks 的命令之前,我们需要先切换到 root 用户(直接以 root 身份登入;或是以普通用户登入,通过命令 sudo su - 切换为 root 用户),或者使用普通用户,但在每条命令前加上 sudo。

另外,后续的配置也需要以 root 用户的身份进行。

具体安装 shadowsocks-libev 的命令如下:

cd /etc/yum.repos.d/
curl -O https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/repo/epel-7/librehat-shadowsocks-epel-7.repo
yum install -y shadowsocks-libev

安装完成后,会有 ss-local, ss-manager, ss-nat, ss-redir, ss-server, ss-tunnel 命令可用。

其中,作为服务器,我们需要的是 ss-server,不过后文中我们将通过服务文件启动 Shadowsocks,而不会直接与 ss-server 命令打交道。

注,如果安装报类似如下错误:

Error: Package: shadowsocks-libev-3.1.3-1.el7.centos.x86_64 (librehat-shadowsocks)
           Requires: libsodium >= 1.0.4
Error: Package: shadowsocks-libev-3.1.3-1.el7.centos.x86_64 (librehat-shadowsocks)
           Requires: mbedtls

说明系统没有启用 EPEL (Extra Packages for Entreprise Linux)。那么我们需要首先启用 EPEL,再安装 shadowsocks-libev:

yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y shadowsocks-libev

添加配置文件

COPR 里的 shadowsocks-libev 默认读取位于 /etc/shadowsocks-libev/config.json 的配置文件,我们可以根据需要参考以下配置文件进行修改:

{
	"server": "0.0.0.0",
	"server_port": 10443,
	"password": "zzz.buzz",
	"method": "aes-256-cfb",
	"mode": "tcp_and_udp"
}
  • "server": 选填,默认 "0.0.0.0"。配置客户端时填入服务器的实际 IP。
    "0.0.0.0" 表明服务端接受来自任何网络接口的连接。配置服务端时填入 "0.0.0.0" 总是能生效,而不必填入服务器自身的 IP。
  • "server_port": 必填。需要在客户端配置时填入相同的值。
    此处填入服务端要监听的端口。需要选择 1024 或以上的端口号,否则启动 ss-server 时将会需要 root 权限,而默认的服务文件则是以 nobody 用户启动 Shadowsocks 的。
    如需选用低于 1024 的端口,也可执行命令 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/ss-server 赋予相应权限,后续就可以使用 nobody 用户或普通用户启动 Shadowsocks。

或执行 systemctl edit shadowsocks-libev 命令,并输入以下内容:

[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
  • "method": 选填,默认 "rc4-md5"。需要在客户端配置时填入相同的值。

服务端所用的加密方法,推荐以下几种算法:

  1. "chacha20-ietf-poly1305" 具有优秀的安全性,更佳的性能,属于 AEAD 加密算法,少部分客户端(如 iOS Wingy)不支持此算法;
  2. "aes-256-cfb" 具有足够安全性,且被各服务端及客户端广泛支持;
  3. "rc4-md5" 算法快速,且具有一定的安全性,适合运算能力受限的设备如路由器等。

启动 Shadowsocks 服务

有了 Shadowsocks 服务端的配置文件后,我们通过 systemd 启动 Shadowsocks 的服务端服务:

systemctl start shadowsocks-libev

要确认 Shadowsocks 的服务运行状态及最新日志,我们可以执行命令:

systemctl status shadowsocks-libev
@sophister
Copy link
Owner Author

sophister commented Oct 16, 2018

vultr 上购买的 centos 7,默认禁用了 80 端口的外部访问,需要额外的打开80端口才行!

firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

# 删除端口
sudo firewall-cmd --remove-port=3306/tcp --permanent --zone=public
# 查看端口开放情况
firewall-cmd --list-all

重启防火墙:systemctl restart firewalld

来自 这篇文章

@sophister
Copy link
Owner Author

sophister commented Oct 16, 2018

搭建ngrok内网穿透:

@sophister
Copy link
Owner Author

sophister commented Oct 16, 2018

let's encrypt 免费获取泛域名证书

我靠,用这个证书之后,发现 https 偶尔能打开,偶尔不能打开,大部分时间都不能打开!!有人说是 会干扰,还TM时不时的干扰,你大爷的!!

抓包发现,每次 SSL 握手,都在 client hello之后卡住,server端一直 不返回。但是在 server 端抓包,发现 server 在 TCP握手结束后,立即返回了一个 FIN/ACK 的包,关闭掉了连接!但是!client很久之后才会收到这个 FIN/ACK 包。

遇到这个问题的还是很多的,比如

相关抓包工具:

发现问题了!!

当使用 openssl s_client -connect n1.chengjie.me:443 时,可以正常完成 SSL握手;但是本地使用 curl -kv "https://n1.chengjie.me/" 时,始终收不到 server hello,仔细对比 client hello 的内容,发现差了一个 server_name:没有 server_name 时,不会被干扰;有 server_name时,偶尔会被干扰。但是我搞不懂,为什么是偶尔,而不是稳定的断掉,难道不同线路或者不同 GFW机器上,部署的策略还不太一样么?还是说 GFW故意这样偶尔干扰,偶尔恢复,增加我们定位问题的难度呢,不能更坏了简直 :(

image

结合网上说的,看来 GFW 确实会解析 SNI 里的域名,进行干扰啊!!

@sophister
Copy link
Owner Author

sophister commented Oct 22, 2018

暴露到公网了,导致很多暴力破解的 ssh 登录攻击,因此,需要 禁止密码登录,使用 ssh public key 登录,参考这篇文章

@sophister
Copy link
Owner Author

macOS 下,iTerm下的 bash,设置 http proxy,先安装 polipo将本地的 socks5代理,转换成 http代理,然后再配置 ~/.bash_profile

安装 polipo文章:为终端设置Shadowsocks代理

本地 ~/.bash_profile 配置:

# proxy list
alias proxy='export all_proxy=http://127.0.0.1:8123 https_proxy=http://127.0.0.1:8123'
alias unproxy='unset all_proxy https_proxy'

@sophister
Copy link
Owner Author

sophister commented Sep 1, 2019

let's encrypt 续期

使用了 let's encrypt 的通用证书,续期的时候,需要使用 DNS 的方式来校验,命令如下:

./certbot-auto certonly --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --manual-public-ip-logging-ok -d '*.b.ecool.fun'

## 或者用下面这个命令
./certbot-auto certonly --manual -d "xxz.ecool.fun"

接着按命令操作即可

Repository owner locked as resolved and limited conversation to collaborators Sep 1, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant