OpenWrt访问桥接光猫

主路由使用OpenWrt进行拨号以后,发现无法直接通过192.168.1.1访问桥接过来的光猫了。之前使用Padavan的时候wan口接光猫时会作为光猫的DHCP客户端自动获取一个192.168.1.*的ip地址,下级设备都可以直接访问到光猫的地址;而OpenWrt却没有分配到光猫网段的地址,所以需要手动创建一个接口。

网络-接口中创建一个新接口,名字可以叫man,协议选DHCP客户端,接口选择和wan口相同的接口,我这里是eth0.2

创建新接口

创建后修改高级设置,禁用使用默认网关选项;在防火墙设置里,将防火墙区域选到wan上。

高级设置

防火墙设置

最后保存后去接口里连接MAN就会发现可以获取到192.168.1.*网段下的地址了,然后光猫就可以访问了。

Read More +

N1盒子Docker安装OpenWrt旁路由

N1盒子装上Armbian以后就可以当作一台低功耗的小主机使用,配合各种docker可以集各种功能于一体。

刷入Armbian

Armbian固件使用的是恩山flippy大神的49+o(原帖地址),目前已经稳定,于是在刷入u盘后顺手刷入了eMMC。

在刷入前先在u盘启动的系统里运行ddbr命令选b进行备份(记得选压缩),文件保存到了/ddbr目录,以便以后有需要时恢复原系统。
然后执行install-to-emmc.sh脚本按提示将系统拷贝到N1的闪存中。拷贝完成关机、拔U盘、再开机,就进入内置的系统了。

安装docker

执行install-docker.sh安装docker,啪的一下就安装完成了,很快啊!

可以接着安装一个Docker图像化管理工具Portainer

1
2
docker volume create portainer_data
docker run -d --name portainer --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

通过浏览器访问盒子的9000端口就能管理docker了。

安装OpenWrt

OpenWrt的Docker镜像使用的也是flippy大神提供的(原帖地址),目前还在更新。

启动容器

从网盘上下载压缩包传到Armbian目录下,省去pull的步骤直接启动:

1
2
3
gzip -dc docker-img-openwrt-aarch64-r20.10.20.gz | docker load
docker network create -d macvlan --subnet=192.168.123.0/24 --gateway=192.168.123.1 -o parent=eth0 macnet
docker run -d --name openwrt --restart always --network macnet --privileged unifreq/openwrt-aarch64:r20.10.20

其中macvlan的网段按主路由的实际情况填写。

配置OpenWrt地址

执行docker exec -it openwrt bash进入容器里进行配置。
编辑容器里的/etc/config/network配置文件,将option ipaddr的值改为指定给OpenWrt的ip地址,如192.168.123.2
保存后执行/etc/init.d/network restart使配置生效。
此时通过浏览器访问刚刚配置的地址应该就可以进入luci管理界面了(默认密码应该是password)。

旁路由设置

通过浏览器进入OpenWrt的管理界面,在网络-接口里修改lan的配置,将IPv4网关设置为主路由的地址,如192.168.123.1,在使用自定义的DNS服务器里添加几个当地最好用的公共DNS;在物理设置里关闭桥接接口;关闭DHCP服务器里的动态DHCP功能,保存并与应用设置。

主路由设置

在主路由的内部网络(LAN)-DHCP服务器设置里将默认网关DNS服务器设置为旁路由地址,如192.168.123.2
如果主路由是padavan固件且外部网络(WAN)-外网设置开启了硬件加速,需要将IPv4 硬件加速设置为OFFLOAD TCP/UDP for LAN

Armbian和OpenWrt网络互通

按照上面设置完旁路由发现Docker的宿主机Armbian系统和OpenWrt无法互相访问。需要修改Armbian网络配置/etc/network/interfaces,增加如下内容:

1
2
3
4
5
6
7
8
9
10
up ip link set eth0 promisc on

auto macvlan
iface macvlan inet static
address 192.168.123.123
netmask 255.255.255.0
gateway 192.168.123.1
dns-nameservers 192.168.123.1
pre-up ip link add macvlan link eth0 type macvlan mode bridge
post-down ip link del macvlan link eth0 type macvlan mode bridge

其中address是要固定的Armbian的地址,gatewaydns-nameservers填主路由地址就可以了。

保存后执行systemctl restart networking使配置生效,两个地址就可以互相访问了。

然后在比硬路由更强大的N1盒子上就起一些留学服务了。

Read More +

Time Machine通过Samba备份到NAS

MacBook升级后去掉了USB口,插移动硬盘比较麻烦,所以就一直没有备份时间机器了。后来觉得samba挂载的硬盘也可以用来备份,于是就想起了2019年捡垃圾时在某宝买的蜗牛星际矿渣(现在挂上硬盘装了OMV系统成为了一台家用NAS),希望可以无线局域网的环境下直接备份。

OMV设置

配置共享文件夹

首先进入OMV控制台配置一个共享文件夹用于Time Machine的备份:

共享文件夹

这里我用了单独一块磁盘用于备份,并把文件夹命名为Backup。

配置完成后在特权里给用于备份的账户授予读写权限,并更改ACL设置如下:

修改ACL

更改samba设置

以root身份登入OMV,编辑samba的配置文件/etc/samba/smb.conf,更改备份文件夹的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[Backup]
comment = Time Machine
path = /srv/dev-disk-by-label-Backup/
guest ok = no
guest only = no
read only = no
browseable = yes
inherit acls = yes
inherit permissions = no
ea support = no
store dos attributes = no
fruit:encoding = private
fruit:locking = none
fruit:metadata = netatalk
fruit:resource = file
fruit:time machine = yes
vfs objects = catia fruit streams_xattr
printable = no
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
hide special files = yes
follow symlinks = yes
hide dot files = yes
valid users = "shintaku"
invalid users =
read list =
write list = "shintaku"

主要变化在于更改了vfs objects的值并增加了几个fruit的配置。

保存后运行testparm看一下配置是否正确,没问题就可以systemctl restart smbd重启服务了。

macOS设置

将Mac和NAS放到统一局域网下,用Finder的前往-连接服务器挂载一下备份硬盘看看是否正常。

开启文件共享

进入系统偏好设置-共享,在文件共享的选项里将SMB共享打勾:

文件共享

配置时间机器

进入系统偏好设置-时间机器,点选择磁盘

选择磁盘

发现在NAS上配置的共享磁盘已经出现了,选择这个磁盘会弹出窗口认证身份,填入之前授权过的用户名密码即可:

登录

然后就连接完成,可以开始备份了:

备份

Read More +

ShadowSocks启用v2ray-plugin

2019年6月初由于某事件发生30周年,导致某长城突然加高,将大量机场IP屏蔽,于是将梯子改成了v2ray,并通过cloudflare代理DNS解析的方式将翻墙流量伪装成对域名的tls访问流量,曲线解决了IP端口被封的问题。
但是路由器上使用v2ray客户端有一些性能问题,总觉得不如原来的shadowsocks流畅,于是找到一种继续使用ss,并通过v2ray-plugin插件来伪装流量的方法。

服务端

搭建服务

停用原来的python版,安装shadowsocks-libev:

yum install shadowsocks-libev -y

克隆v2ray-plugin代码并编译(需要golang环境):

git clone https://github.com/shadowsocks/v2ray-plugin.git
cd v2ray-plugin && go build
cp v2ray-plugin /usr/bin/

更改配置

编辑/etc/shadowsocks-libev/config.json

1
2
3
4
5
6
7
8
9
10
{
"server":"0.0.0.0",
"server_port":23333,
"local_port":1080,
"password":"password",
"timeout":300,
"method":"rc4-md5",
"plugin":"v2ray-plugin",
"plugin_opts":"server;loglevel=none"
}

本来这里使用v2ray插件的目的是将shadowsocks的流量伪装成tls流量,自然服务器端口应当使用443。
但是我的服务器同时还启用了nginx,再使用443会造成端口冲突,所以在这里使用一个其他的端口,然后再用nginx做一次端口转发。

端口转发

/etc/nginx/conf.d/目录下新建一个配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 443;
server_name ss.your.domain;

location / {
proxy_pass http://127.0.0.1:23333;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

server_name需要使用自己的域名,并将这个二级域名解析到vps上。

保存后重启nginx,启动shadowsocks并设置开机启动:

systemctl restart nginx
systemctl start shadowsocks-libev
systemctl enable shadowsocks-libev

客户端

主要注意以下配置:

  • 服务器地址填上面配置的二级域名
  • 服务器端口443
  • 插件名称v2ray-plugin
  • 插件参数tls;host=二级域名

路由器

此处以老毛子固件为例:

路由器设置

打开开关应用即可。

Windows

下载完成将插件v2ray-plugin.exe解压到shadowsocks的文件夹中(使其与shadowsocks.exe平级),启动按如下配置:

Windows设置

macOS

将客户端解压到应用目录(客户端会自己安装插件),启动按如下配置:

macOS设置

Android

两个apk安装以后启动按如下配置:

Android设置
插件设置

Read More +

Hexo博客使用MathJax公式

最近手贱将Hexo的博客的版本升到了3.8.0,顺便将npm组件也都升级了。一开始没有发现什么问题,后来打开一篇带公式的文章发现里面的部分MathJax公式渲染失败了。想到之前曾经因为Markdown里面的下划线_表示斜体,和MathJax里的下标冲突了,之前改过的node_modules被更新覆盖了,这次索性重新搞一遍。

更换渲染引擎

卸载原来的hexo-renderer-marked,换成专门对MathJax魔改过的hexo-renderer-kramed(注意kram这个单词的拼写):

npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save

再安装hexo-renderer-mathjax渲染器:

npm install hexo-renderer-mathjax --save

更改字符集

为了避免语义冲突,修改node_modules/kramed/lib/rules/inline.js文件的escapeem

1
2
//escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/,
escape: /^\\([`*\[\]()#$+\-.!_>])/,

1
2
//em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,

更改cdn链接

修改node_modules/hexo-renderer-mathjax/mathjax.html的最后一行,将http改成https

1
2
<!--script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script-->
<script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

这样是为了避免在网站为https协议时请求http的内容时被浏览器block。使用hexo s预览是否已生效。

Read More +

路由器TTL刷机救砖

之前偶然拿到一台大麦DW22D路由器,应该是之前的租客办长城宽带赠送的,登入管理界面发现里面是基于长城宽带深度定制的系统。

上了恩山查了一下发现这个机器的硬件还可以,并且可以无拆机刷入padavan固件,所以就开始按照教程刷机。

无拆机刷机

以下步骤参考恩山的教程

开启ssh

本方法主要依靠后门页面的命令注入漏洞,步骤如下:

注入新密码

电脑连上路由器(最好有线方式),访问http://192.168.10.1/upgrade.html,在页面上打开ssh的选项,密码框内输入:

123 | echo 6c216b27c8c9b051106c969e2077d4e9 > /ezwrt/bin/upgrade_passwd 

注意末尾有空格。这里的md5值是echo dfc643 | md5算出来的,里面的dfc643是发现这个方法大佬的用户名,此处的密码是可以随便改的。然后点确定提交,此时会提示密码错误,可以忽略。

注入ssh公钥

再次访问http://192.168.10.1/upgrade.html,同样选择打开ssh,密码框内输入:

123 | echo YOUR_ID_RSA_PUB > /etc/dropbear/authorized_keys 

同样注意末尾有空格。其中YOUR_ID_RSA_PUB替换为自己的公钥,即电脑上~/.ssh/id_rsa.pub的内容。再次点确定提交,此时还会提示密码错误,也可以忽略。

开启ssh

最后一次访问http://192.168.10.1/upgrade.html,选择打开ssh,密码为dfc643(如果在第一步注入密码时用了别的密码,此处输入相应的密码),最后点确定提交,提示start ssh success表示已经开启ssh。

这样就可以ssh [email protected]登录路由器了。

刷入breed

breed是hackpascal独立开发的一个全新的 Bootloader。DW22D路由器对应的版本是breed-mt7620-reset13.bin

下载好后将其传入路由器的/tmp目录下备用:

scp breed-mt7620-reset13.bin [email protected]:/tmp

然后在路由器上执行:

mtd_write -x mIp2osnRG3qZGdIlQPh1 -r write /tmp/breed-mt7620-reset13.bin bootloader

这样应该就能将breed刷入bootloader,然后就可以随意刷firmware了。

然而我手残将最后的bootloader打成了firmware,也就是将breed刷入了firmware分区,导致路由器进不去系统了,也才有了后面的ttl救砖。

TTL刷机

以下步骤参考恩山的教程

USB转TTL

为了让路由器硬件和电脑相连,需要一个USB转TTL模块,随便在马云家买一个最便宜的就能用,我就买了一个ch340g芯片的模块。

TTL驱动

然后在github找了驱动安装上(这里给的是Mac电脑的驱动,Windows的驱动一般卖家都会提供,网上找找也都有)。

重启后打开网络偏好可以看见多了一个串行接口:

将USB转TTL模块插在电脑上,在/dev目录下会出现名字类似cu.usbserial-1410的设备,说明识别成功。

TTL连接

在如图位置焊上引脚(GND那个孔不用焊):

然后用杜邦线将三个引脚和USB转TTL模块相连。

开启TFTP

将电脑用网线和路由器lan口连接,设置有线连接为手动模式,按图修改参数:

参考macOS启用TFTP服务,将breed-mt7620-reset13.bin放到TFTP目录下,将TFTP的地址选择有线ip(即上面设置的10.10.10.3)。

刷机

一切就绪后,可以连接路由器开始刷机。

登录路由器

使用screen连接未通电的路由器,波特率为57600:

screen /dev/cu.usbserial-1410 57600

此时终端里什么也没有。然后给路由器通电,此时会打印出很多东西,最后出现一些选项,立刻(5秒内)按数字键9选择TFTP刷机。

刷入breed

之后会让确认device IP(路由器地址)和server IP(电脑地址),确认无误后会提示输入要刷入的文件名,输入breed-mt7620-reset13.bin回车就开始刷入了。

刷完后断电按住复位键通电并长按5秒即可进入breed:

Read More +

macOS启用TFTP服务

TFTP在路由器刷机中被普遍使用,因为其协议简单,可以通过少量存储器实现。在PC上打开Windows功能就可启用。其实macOS也自带TFTP,只不过是没有自动启用。

TFTP默认使用的目录是/private/tftpboot,首先给其增加权限:

sudo chmod -R 777 /private/tftpboot

然后启用服务:

sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist
sudo launchctl start com.apple.tftpd

如果觉得命令行方式不直观,macOS上也有类似Windows上的Tftpd32的应用TFTP Server,直接下载安装即可:

TFTP的目录也可以在应用中修改。

Read More +

搭建L2TP/IPSec VPN

之前曾经介绍过SoftEthern VPN的搭建,最近换了新的VPS,需要重新搭建VPN,由于除了iOS以外的其他平台都可以用ShadowSocks的梯子,就想搭建一个最简单的无需安装第三方App的VPN给iOS使用。想到系统自带的VPN可以连接L2TP over IPSec,就决定搭一个L2TP的VPN。

由于新VPS装的是CentOS 6,所以CentOS 7风格的命令就写在注释里了。

安装

先安装openswanxl2tpd

yum install openswan xl2tpd

如果没有ppp也要安装。

配置IPSec

/etc/ipsec.d中新建一个vpn.conf文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=YOUR_PUBLIC_IP_ADDRESS
leftprotoport=17/1701
right=%any
rightprotoport=17/%any

其中left的值改为VPS的公网IP。

再新建一个vpn.secrets文件,里面写一行:

1
YOUR_PUBLIC_IP_ADDRESS %any: PSK "YOUR_PRE_SHARED_KEY"

前面还是公网IP,后面引号里面是自己设置的预共享密钥。

更改系统参数

编辑/etc/sysctl.conf文件,修改或添加成以下配置:

1
2
3
4
5
6
7
8
9
10
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

sysctl -p命令使更改生效。

然后用以下脚本将/proc/sys/net/ipv4/conf下配置的值都改为0

1
2
3
4
5
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done

启动IPSec

启动IPSec并加入开机启动:

service ipsec start        #systemctl start ipsec
chkconfig ipsec on        #systemctl enable ipsec

然后用ipsec verify检查一下是否配置正确,正常如下:

Version check and ipsec on-path                           [OK]
Libreswan 3.15 (netkey) on 4.12.9-1.el6.elrepo.x86_64
Checking for IPsec support in kernel                      [OK]
 NETKEY: Testing XFRM related proc values
     ICMP default/send_redirects                          [OK]
     ICMP default/accept_redirects                        [OK]
     XFRM larval drop                                     [OK]
Pluto ipsec.conf syntax                                   [OK]
Hardware random device                                    [N/A]
Two or more interfaces found, checking IP forwarding      [OK]
Checking rp_filter                                        [OK]
Checking that pluto is running                            [OK]
 Pluto listening for IKE on udp 500                       [OK]
 Pluto listening for IKE/NAT-T on udp 4500                [OK]
 Pluto ipsec.secret syntax                                [OK]
Checking 'ip' command                                     [OK]
Checking 'iptables' command                               [OK]
Checking 'prelink' command does not interfere with FIPSChecking for obsolete ipsec.conf options                  [OK]
Opportunistic Encryption                                  [DISABLED]

如果有异常请检查之前的配置。

配置xl2tpd

编辑/etc/xl2tpd/xl2tpd.conf配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[global]
listen-addr = YOUR_PUBLIC_IP_ADDRESS
ipsec saref = yes

[lns default]
ip range = 192.168.1.128-192.168.1.254
local ip = 192.168.1.99
require chap = yes
refuse pap = yes
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

其实主要注意监听地址和几个yes就行了,其他基本不用动。

然后编辑/etc/ppp/options.xl2tpd配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000

/etc/ppp/chap-secrets里添加帐号密码:

1
2
3
# client	server	secret			IP addresses
username1 * password1 *
username2 * password2 *

按照对应格式填上帐号密码即可。

启动xl2tpd并加入开机启动:

service xl2tpd start        #systemctl start xl2tpd
chkconfig xl2tpd on        #systemctl enable xl2tpd

最后在本地设备上填上地址、预共享密钥、用户名、密码就可以连接了。

Read More +

Let's Encrypt SSL证书配置

Let’s Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。

官方建议用EFF开发的Certbot ACME客户端签发证书。

安装certbot

CentOS可以通过yum直接安装:

yum install certbot

如果yum找不到certbot,建议安装或重装epel-release

获取证书

用以下命令对相应的若干域名生成证书:

certbot certonly --webroot --email [email protected] -w /usr/share/nginx/blog -d www.shintaku.cc -w /usr/share/nginx/info -d info.shintaku.cc

然后在/etc/letsencrypt/live/下就会生成存放证书链接的目录,将它们配置到Web服务器就可以了。

配置Nginx

/etc/nginx/conf.d新建ssl.conf文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
server {
listen 443;
server_name www.shintaku.cc;

ssl on;
ssl_certificate /etc/letsencrypt/live/www.shintaku.cc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.shintaku.cc/privkey.pem;

ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";

add_header Strict-Transport-Security max-age=31536000;

location / {
root /usr/share/nginx/blog;
index index.html;
}

error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/blog;
}
}

server {
listen 443;
server_name info.shintaku.cc;
autoindex on;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.shintaku.cc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.shintaku.cc/privkey.pem;

ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";

add_header Strict-Transport-Security max-age=31536000;

root /usr/share/nginx/info;

location / {
index index.html index.htm index.php;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

最后重载Nginx配置就可以了。可以到SSL Labs检测一下SSL状态。使用上述配置一般可以获得A+评分,也可以使用Mozilla SSL Configuration Generator生成配置。

评分

证书续期

Let’s Encrypt的证书有效期为90天,所以需要定期更新,离过期30天以内可以续期:

certbot renew && nginx -s reload
Read More +

Hexo博客部署到VPS

Hexo的博客本身之前是挂在github.io的,但是想用自己的域名,本来配一个CNAME就可以了,但是再想使用https就很麻烦了,索性就在VPS上也部署一份,自己运行维护。

服务器hook配置

首先要装好Nginx,然后在/usr/share/nginx下新建一个临时目录:

mkdir blog.git

然后在里面创建git裸库:

cd blog.git
git init --bare
cd hooks

之后就可以在hooks目录里配置自动执行的脚本了,编辑post-receive

1
2
3
4
5
6
#!/bin/bash -l
GIT_REPO=/usr/share/nginx/blog.git
PUBLIC_WWW=/usr/share/nginx/blog
rm -rf $PUBLIC_WWW
git clone $GIT_REPO $PUBLIC_WWW
rm -rf $PUBLIC_WWW/.git

记得给这个脚本添加执行权限:

chmod +x post-receive

通过这个hook就可以将新生成的博客放到/usr/share/nginx/blog下了。

修改部署配置

编辑本地Hexo仓库的_config.yml,在deploy下面增加一个新的配置,参考官方文档

1
2
3
- type: git
repo: [email protected]_VPS_IP:/usr/share/nginx/blog.git
branch: master

保存后使用hexo d命令重新部署,在这之前确认一下是否已经配置过VPS的公私钥登录。部署完成后到VPS的/usr/share/nginx下看是否出现blog目录,且里面是Hexo生成的页面内容。

服务器Nginx配置

进入/etc/nginx/conf.d目录新建一个配置文件blog.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 80;
server_name www.shintaku.cc;

location / {
root /usr/share/nginx/blog;
index index.html;
}

error_page 404 /404.html;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

保存后用nginx -s reload重载配置,打开上面配置的域名(首先应该配置过解析)应该就能访问Hexo博客了。这样只是http访问,之后可以按需配置https,这里不再赘述。

Read More +