https://yapingxin.github.io/2017/04/03/Ubuntu-Install-gnome/
https://blog.creke.net/696.html
http://piaolingspace.blogspot.com/2017/07/ubuntu-1604-gnome.html
help
→SSL Proxying
→Install Charles Root Certificate
。Install Charles Root Certificate
后它会自动打开钥匙串,点击钥匙串的Trust(信任)→Always Trust(始终信任),然后直接关闭窗口(没有保存按钮,也不用点保存,直接关闭窗口即可)。Update Settings(更新设置)
,然后就可以把钥匙串退出了。Proxies
,把Web Proxy(Http)
和Secure Web Proxy(Https)
勾上,如果Automatic Proxy Configuration
有勾,则把它去掉,一般Automatic Proxy Configuration
默认勾上的原因是你用了代理软件(比如ss),最好先把ss关掉,注意你关闭ss的时候,网络设置里它会把你已经勾上的http和https都取消勾选,所以这个要注意反复检查是否勾上了。127.0.0.1:8888
8888
就是对应Charles的Proxy
→Proxy Settings
里的Http Proxy
的端口,这个8888可以改成其他数字(最大65535),但不能是本地已使用的(例如80最好别用,因为你本地有可能有nginx或者apache占用了这个端口),因为此时Charles就是一个HTTP代理服务器
,它监听你设置的这个端口,所以如果这个端口已经被占用,那显然就会出问题。127.0.0.1
,而端口在Charles里有设置,只要两边对上,端口未被其他程序占用就行。Proxy
→SSL Proxy Settings
里,要把*:443
加上(如果没有的话),*表示任何ip,:443表示443端口,因为443端口是https的端口,所以要允许,否则无法抓取https的包http://192.168.0.102:8888
的代理,然后用iPhone的Safari浏览器访问这个地址chls.pro/ssl
来安装证书。设置
→无线局域网
¡
配置代理
手动
,然后填写Charles提示的IP和端口,注意,ip和端口不要照填我的,上面Charles弹出的那个提示框里有你自己的ip和端口。存储
保存,保存后mac上的Charles会提示有一个链接试图连接Charles,这个就是手机的链接,这时当然要允许,即点左边的Allow(允许)
按钮。chls.pro/ssl
,然后根据提示一步一步安装证书。允许
安装
安装
完成
.pac
结尾。www.hexotest.com
,如果是,则把它代理到192.168.0.102:8888
,如果192.168.0.102:8888
无法访问,那么走后面的DIRECT
即直连,不代理了。如果域名不是www.hexotest.com
那就直连不走代理。//一个很简单的调pac文件
function FindProxyForURL(url, host) {
//这里填写你们公司的host
if (dnsDomainIs(host, 'www.hexotest.com')) {
//这里填你自己的局域网ip,端口号是你在Charles里设置的 默认8888
return "PROXY 192.168.0.102:8888; DIRECT;";
} else {
return "DIRECT";
}
}
xxx.pac
,比如我命名成proxy.pac
,然后放到nginx目录里,让它可以访问,比如电脑的ip是192.168.0.102
,那么我通过在手机通过http://192.168.0.102/proxy.pac
就可以访问,这样,手机就会根据pac文件的配置来决定是否代理。/etc/yum.repos.d/
目录中添加一个叫mongodb-org-4.0.repo
的文件,并把下边的内容填进去保存即可:[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
/etc/yum.repos.d/
目录中产生这个文件:cat << EOF | sudo tee -a /etc/yum.repos.d/mongodb-org-4.0.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF
mongodb-org
而不是mongodb
):yum -y install mongodb-org
wiredTiger
,以及把设置replication
为replSetName: rs01
,以及把bindIp
的ip用引号起起来。# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
engine: wiredTiger
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: "127.0.0.1" # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
#security:
#operationProfiling:
replication:
replSetName: rs01
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
systemctl start mongod
systemctl status mongod
active (running)
字样,说明已经成功启动:systemctl enable mongod
# 停止mongodb
systemctl stop mongod
# 重启mongodb
systemctl restart mongod
mongo
命令登录mongodb:mongo 127.0.0.1
rs.initiate({_id:'rs01',members:[{_id:1,host:'127.0.0.1:27017'}]})
exit
命令退出mongodb。yum -y install nodejs
node -v
命令查看版本,我这里目前是v6.17.1
),但是RocketChat需要使用比较高的nodejs版本,所以我们要使用nodejs的版本管理工具n
来切换到新版本(没错,这个工具名称就一个字母n
)。inherits
以及n
(前面安装nodejs后,npm
命令就自动有了):npm install -g inherits n
WARNING
,可以不用理会(当然也可能没有)。n
工具把nodejs的版本切换到RocketChat要求的版本8.11.4
:n 8.11.4
node -v
查看版本,可能还是原来的版本,原因是终端记录了原来的版本,你需要退出登录,再重新登录服务器,然后再看版本,应该就已经换过来了:yum install -y GraphicsMagick
main.js
而已,比如:/usr/local/bin/node /path/to/RocketChat/main.js
/tmp/
目录中:curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz
/tmp/
目录,我们可以看到一个叫rocket.chat.tgz
的文件,这个文件就是刚刚下载的:cd /tmp/
rocket.chat.tgz
,解压出来是一个bundle
文件夹:tar -zxvf rocket.chat.tgz
server
文件夹:cd bundle/programs/server
server
文件夹后,使用npm安装依赖:npm install
/tmp/
目录中,这是Linux的临时文件夹,我们不能把它放在那里(当然你非要放在那运行也是可以的,只不过怕以后清缓存会不小心删除掉,而且也没有人会把程序那在那),所以我们要移动到一个我们认为合适的地方。/usr/local/
目录中的,但是官方文档是把它放在了/opt/
目录下,这里我们就根据官方文档的做法,把刚刚解压出来的整个bundle
文件夹移动到/opt/
目录下,并且重命名为Rocket.Chat
(当然你不重命名也是一样可以的,只不过以后可能忘了这是什么程序了)。bundle
文件夹(也就是Rocket.Chat源码程序)移动到/opt/
目录并重命名为Rocket.Chat
:mv /tmp/bundle /opt/Rocket.Chat
rm /tmp/rocket.chat.tgz
main.js
即可,即:/usr/local/bin/node /path/to/RocketChat/main.js
/usr/lib/systemd/system/
目录中添加一个以.service
结尾的配置文件,比如RocketChat我们就命名为rocketchat.service
就行,然后内容直接粘贴以下的内容进去就行(但要注意把ROOT_URL
中的ip换成你自己服务器的ip):[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target nginx.target mongod.target
[Service]
ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=rocketchat
Environment=MONGO_URL=mongodb://127.0.0.1:27017/rocketchat?replicaSet=rs01
Environment=MONGO_OPLOG_URL=mongodb://127.0.0.1:27017/local?replicaSet=rs01
Environment=ROOT_URL=http://你的服务器ip:3000/
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
rocketchat
吧,使用以下命令即可创建:useradd -M rocketchat && usermod -L rocketchat
chown -R rocketchat:rocketchat /opt/Rocket.Chat
systemctl
来启动RocketChat服务器了:systemctl start rocketchat
systemctl status rocketchat
failed
字样,则说明启动失败,一般来说都是权限问题或者是路径问题,多检查一下即可:systemctl enable rocketchat
# 停止
systemctl stop rocketchat
# 重启
systemctl restart rocketchat
http://你的服务器ip:3000
http://你的服务器ip:3000/
发给朋友,或者公司同事,他们在浏览器或客户端访问这个链接,注册一个账号,就可以相互聊天了。# rocketchat反代
server {
listen 80;
listen 443 ssl;
server_name rocketchat.xxx.com;
if ($scheme = http){
return 302 https://$host$request_uri;
}
access_log /var/log/nginx/rocketchat.xxx.com_nginx.access.log combined buffer=1k;
error_log /var/log/nginx/rocketchat.xxx.com_nginx.error.log error;
#https start
ssl_certificate /usr/local/nginx/letsencrypt/xiebruce.top/fullchain.pem;
ssl_certificate_key /usr/local/nginx/letsencrypt/xiebruce.top/private.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHellA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
#https end
location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
#由于RocketChat是使用websocket来传输数据的,所以这里反代的时候要设置支持websocket协议
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# rocketchat反代
server {
listen 80;
server_name rocketchat.xxx.com;
access_log /var/log/nginx/rocketchat.xxx.com_nginx.access.log combined buffer=1k;
error_log /var/log/nginx/rocketchat.xxx.com_nginx.error.log error;
location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
#由于RocketChat是使用websocket来传输数据的,所以这里反代的时候要设置支持websocket协议
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server_name
的值改成你自己的域名,并在你的域名服务商那边添加一个A记录,把域名解析到你这台服务器上;access_log
和error_log
的路径要修改成真实存在的路径;proxy_pass
意思就是把nginx接收到的请求转发给RocketChat,所以它后面的http://127.0.0.1:3000
就是RocketChat的地址和端口,由于RocketChat就在本地,所以地址就是127.0.0.1
,而端口是我们在/usr/lib/systemd/system/rocketchat.service
中用Environment=PORT=3000
指定的,如果你不想用这个端口,你可以去修改一下(修改了记得重启)。一个还不错的图床工具,支持Mac/Win/Linux服务器、支持压缩后上传、添加图片或文字水印、多文件同时上传、同时上传到多个云、右击任意文件上传、快捷键上传剪贴板截图、Web版上传、支持作为Mweb发布图片接口、作为PicGo、ShareX、uPic等的自定义图床,支持在服务器上部署作为图床接口,支持上传任意格式文件。目前支持的云有:七牛、阿里、腾讯、华为、网易、京东、百度、又拍、青云、Ucloud、sm.ms、Imgur、Github、Gitee(码云)、微博、Nextcloud、Cloudinary、Chevereto、Minio、Aws s3、金山、个人服务器(sftp)、本地(即PicUploader所在机器)!
PicUploader 是一个用php编写的图床工具,它能帮助你快速上传你的图片到云图床,并自动返回Markdown格式链接到剪贴板。配置完成后,要获取一个可用于markdown的图片外链只需要:
你的自定义上传菜单
→系统通知文件上传成功→到Markdown编辑器中粘贴!复制图片
→按上传快捷键→系统弹出上传成功通知→到Markdown编辑器中粘贴!如果图片看不了请点击图片上边的文字链接单独打开即可查看。
由于维护多个文档太累,Github flavor markdown不支持视频,并且gif图大点就不显示,还得空两格才会换行,基于种种原因,如果要继续查看文档,请直接查看唯一文档:
wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/local/bin/minio && chmod +x /usr/local/bin/minio
minio
可执行文件下载到/usr/local/bin/
目录下并添加可执行权限。wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc && chmod +x /usr/local/bin/mc
mc
(minio config)可执行文件下载到/usr/local/bin/
目录下并添加可执行权限。systemctl
来控制启动/停止/开机自启动等等):wget https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service -O /usr/lib/systemd/system/minio.service
minio.service
文件:vim /usr/lib/systemd/system/minio.service
User
和Group
都注释掉(当然也可以创建一个用户和组填进去):#User=minio-user
#Group=minio-user
minio.service
文件:systemctl daemon-reload
systemctl
来管理minio
的启动,所以配置要被minio.service
调用。minio
的配置文件(这个文件是在minio.service
中的这句EnvironmentFile=/etc/default/minio
中被调用的):vim /etc/default/minio
# 指定数据存储目录(注意这个目录要存在)
MINIO_VOLUMES="/data/minio"
# 指定监听端口(也可以不监听具体ip,只写 :9199即可)
MINIO_OPTS="--address 127.0.0.1:9199"
# Access key,相当于账号
MINIO_ACCESS_KEY="CHAW*******I1EWP2"
# Secret key,相当于密码
MINIO_SECRET_KEY="diEvRU6eQez**********Dkkpo4srSh+p"
# 区域值,这是完全自己写的,比如你愿意的话写“abcd”也行,但标准格式是“国家-区域-编号”,
# 如“中国-华北-1号”就可写成“cn-north-1”,又比如“美国-西部-2号”可写成“us-west-1”
MINIO_REGION="cn-south-1"
# 域名
MINIO_DOMAIN=minio.your_domain.com
MINIO_DOMAIN
要与nginx反向代理的域名一致。minio
:systemctl start minio
minio
启动状态:systemctl status minio
minio
:systemctl restart minio
minio
:systemctl stop minio
server {
listen 443 ssl http2;
server_name minio.your_domain.com;
error_log /data/wwwlogs/minio.your_domain.com.error.log error;
access_log /data/wwwlogs/minio.your_domain.com.access.log combined buffer=1k;
#https start
ssl_certificate /usr/local/nginx/letsencrypt/xiebruce.top/fullchain.pem;
ssl_certificate_key /usr/local/nginx/letsencrypt/xiebruce.top/private.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHellA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
#https end
# 把请求转发到minio服务器
location / {
proxy_pass http://127.0.0.1:9199;
proxy_set_header Host $host;
}
}
nginx -s reload
https://minio.your_domain.com
就可以访问到后台了:Create bucket
即可创建一个bucket(存储桶):~/.mc/config.json
~/.mc/config.json
内容是这样的:{
"version": "9",
"hosts": {
"gcs": {
"url": "https://storage.googleapis.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v2",
"lookup": "dns"
},
"local": {
"url": "http://localhost:9000",
"accessKey": "",
"secretKey": "",
"api": "S3v4",
"lookup": "auto"
},
"play": {
"url": "https://play.min.io",
"accessKey": "Q3AM3UQ867SPQQA43P2F",
"secretKey": "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
"api": "S3v4",
"lookup": "auto"
},
"s3": {
"url": "https://s3.amazonaws.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v4",
"lookup": "dns"
}
}
}
url
修改为前面设置的域名,同理accessKey
和secretKey
设置为前面/etc/default/minio
的设置的值:"local": {
"url": "https://minio.your_domain.com",
"accessKey": "CHAW*******I1EWP2",
"secretKey": "diEvRU6eQez**********Dkkpo4srSh+p",
"api": "S3v4",
"lookup": "auto"
},
local
就是指使用前面~/.mc/config.json
的“local”部分的配置,markdown
为你自己创建的bucket的名称:mc policy set public local/markdown
https://minio.your_domain.com/markdown/2019/09/29/6fb64fbbb0eb1e3c9cd3cdd50a5d3dd3.jpg
最根本的解决方法就是加密DNS查询。目前有些DNS服务商提供了私有的加密DNS方式,不过不太通用,需要私有的客户端程序配合。实际上可以不用搞这么复杂,自己建立加密通道,传递DNS消息即可。
在这个网络中,有两个关键程序:dnsProxy和dnsAgent。
dnsProxy顾名思义就是个Proxy,本身并不负责DNS协议的解析,也不保存DNS的查询结果等信息,只是单纯地将DNS消息传递给真正的DNS服务器,并返回相应的结果即可。dnsProxy另一个功能是对外提供加密的数据连接,例如TLS、SSL加密等,甚至可以只是简单地对数据包进行自定义的异或运算即可。另外就是对外提供非标准连接接口,这点非常重要。DNS采用标准UDP53接口作为DNS服务器接口,网络上那些看不见的手,往往就是扫描并篡改53接口的数据包。这个小程序跑在境外(大家都懂的)的一台VPS设备上,推荐采用DigitalOcean,专业的云计算服务商,采用SSD硬盘,价格公道,我们一直用TA,如果你有兴趣的话,请点击这里自行了解细节。
dnsAgent是另一个小程序,主要负责建立与dnsProxy的加密连接,接收普通设备的DNS请求并将其传递给dnsProxy,同时返回DNS结果给普通计算设备。对于网内设备而言,dnsAgent就是个伪装的DNS服务器。同样,dnsAgent其实也不需要关心、也不需要解析DNS协议细节。在我的网络中,dnsAgent跑在一台常年吃灰的树莓派上(还是第一代的)。
实现这些仅仅需要一点UDP、TCP的网络知识,甚至不需要了解DNS协议的细节,无需对DNS数据包做修改。完成后可以愉快地打开很多以前打不开的网站。当然,有些网站始终是打不开的,这是另一个与DNS无关的话题了。
GFW是Great Fire Wall的缩写,是金盾工程。这个工程由若干个部分组成,实现不同功能。防火长城主要指中国政府监控和过滤互联网内容的软硬件系统,由服务器和路由器等设备,加上相关的应用程序所构成。
首先,需要强调的是,由于中国网络审查广泛,中国国内含有“不合适”内容的的网站,会受到政府直接的行政干预,被要求自我审查、自我监管,乃至关闭,故GFW的主要作用在于分析和过滤中国境内外网络的资讯互相访问。
GFW对网络内容的过滤和分析是双向的,GFW不仅针对国内读者访问中国境外的网站进行干扰,也干扰国外读者访问主机在中国大陆的网站,本文讨论GFW屏蔽国外网络上传播的内容的方法及相应的对策。
GFW在网络上封锁的技术方案有:
GFW如何屏蔽网络上传播的内容?网络上封锁的具体方式:
例子:
在大陆访问 http://www.zuola.com/ 就可能出现“服务器响应时间过长”。
我家目前用的中国电信提供的网络接入:
Internet connection
Connection type:PPPoE
IP Address:220.168.9.112
Gateway address:220.168.8.1
DNS Server:222.246.129.80, 59.51.78.210
当我使用中国电信提供的DNS服务器进行查询时,出现以下画面:甚至我在中国大陆使用用国外的OPENNDS或其他DNS服务器进行查询,都会被GFW干扰而得到虚假的IP地址,
通过远程登录在美国的主机进行DNS查询后,此时的DNS查询是完全无GFW干扰的,可得到 www.zuola.com的真实IP地址是 75.119.214.237
GFW在OSI结构模型的两个层面进行审查和封锁,一种在传输层(Transport Layer)进行干扰,一种是在网络层(Network Layer)进行干扰:
GFW审查在OSI模型上的审查的位置:
GFW针对具体网站的方案有以下三种:
相应对抗GFW,网站的主人有下面几个方法:
相应对抗GFW有的具体方法
此文档的其他站点备份:
参考文档:
《Tor概述》:http://tor.zuo.la/overview.html.zh-cn
《手把手教你使用TOR+FoxyProxy突破GFW》https://knol.google.com/k/-/-/3jhi1zdzvxj3f/2
《纠正网友一些对GFW的认识》: https://www.zuola.com/weblog/?p=1228
《Zola教你玩:如何对抗GFW的域名劫持》: https://www.zuola.com/weblog/?p=1151
https://docs.google.com/document/d/1n79DOFLdUTSUtzASiN1TaxSF7SWuXqoZvwyM-SO6W7c/preview