分类
Linux

GRUB菜单密码

为GRUB菜单增加密码保护,在系统启动或修改GRUB引导选项时要求输入密码。

参考ArchWikiGRUB官方文档,输入下列命令生成密码密文:

grub-mkpasswd-pbkdf2

得到类似输出:

[hacc@Hacc-Laptop ~]$ grub-mkpasswd-pbkdf2
输入口令:
Reenter password: 
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.B8E131613525DCA838924A60E71C6CBB374D94EC58B24D32B385B7C744060A14D709A50A0CC0218579068E6A62CBCEB6BC4E2D9157DE31A881219F0B37DA370A.DD2E8E488C862597EF88C4445BA6DDBEDB75B5654D2E2690C2152B7C45FB49993F91B4DC177B94046FFBABBBDD2A9DFF61AFC4CB7A14B954C5FC9365B4271829

修改/etc/grub.d/40_custom在文件尾部加入:

set superusers="username"
password_pbkdf2 username <password>

将username换成你的用户名,如root,将<password>换成grub-mkpasswd-pbkdf2命令生成的密码,修改好后类似如下:

set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.B8E131613525DCA838924A60E71C6CBB374D94EC58B24D32B385B7C744060A14D709A50A0CC0218579068E6A62CBCEB6BC4E2D9157DE31A881219F0B37DA370A.DD2E8E488C862597EF88C4445BA6DDBEDB75B5654D2E2690C2152B7C45FB49993F91B4DC177B94046FFBABBBDD2A9DFF61AFC4CB7A14B954C5FC9365B4271829

重新生成GRUB配置文件即可

sudo grub-mkconfig -o /boot/grub/grub.cfg

当然,为GRUB菜单设置密码也只是防君子不防小人,若别人真心想搞你,在能够物理访问你的设备的情况下这种密码是然并卵的。

分类
Linux

反代Duden

由于Duden的官方网站上引用了一些被墙的资源,导致Duden访问起来巨慢无比,查词巨不方便。博主便决定用Nginx的“反向代理”功能建立一个Duden的镜像站。

先在Freenom上申请一个免费的顶级域名

为镜像站建立一个目录

sudo mkdir /usr/share/nginx/html/ddproxy

在Nginx配置文件中加入以下代码(镜像站首页):

server {
        listen [::]:443;

        ssl        on;
        ssl_certificate         ssl/ddproxy.cf.pem;
        ssl_certificate_key     ssl/ddproxy.cf.key;

        server_name    ddproxy.cf www.ddproxy.cf;
        access_log     /var/log/nginx/nginx.vhost.access.log;
        error_log      /var/log/nginx/nginx.vhost.error.log;
        location / {
                root   /usr/share/nginx/html/ddproxy;
        }
}

Duden反向代理:

server {
        listen [::]:443 ssl http2;

        ssl        on;
        ssl_certificate         ssl/ddproxy.cf.pem;
        ssl_certificate_key     ssl/ddproxy.cf.key;

        server_name    dictacceleration.ddproxy.cf;
        access_log     /var/log/nginx/nginx.vhost.access.log;
        error_log      /var/log/nginx/nginx.vhost.error.log;
        root   /usr/share/nginx/html/ddproxy;
        location / {
                proxy_redirect https://www.duden.de/ /;
                proxy_cookie_domain duden.de dictacceleration.ddproxy.cf;
                proxy_pass https://www.duden.de;
                proxy_set_header X-Real-IP $realip_remote_addr;
                proxy_set_header X-Forwarded-For $realip_remote_addr;
                proxy_set_header Host "www.duden.de";
                proxy_set_header Accept-Encoding "";
                proxy_set_header User-Agent $http_user_agent;
                proxy_set_header Accept-Language "zh-CN";
                sub_filter www.duden.de dictacceleration.ddproxy.cf;
                sub_filter ajax.googleapis.com ajax.ddproxy.cf;
                sub_filter rs.epoq.de none.ddproxy.cf;
                sub_filter static.site24x7rum.com none.ddproxy.cf;
                sub_filter cdn-a.yieldlove.com none.ddproxy.cf;
                sub_filter d29pb5sqvxbrp8.cloudfront.net none.ddproxy.cf;
                sub_filter_once off;
        }
}

这里用sub_filter替换字符串,并将一部分被墙的非重要资源给导向none.ddproxy.cf这个域名,该域名被解析到127.0.0.1[::1]。以此来变相阻止浏览器加载被墙资源,加速页面加载。

ajax.googleapis.com反代:

server {
        listen [::]:443 ssl http2;

        ssl        on;
        ssl_certificate         ssl/ddproxy.cf.pem;
        ssl_certificate_key     ssl/ddproxy.cf.key;

        server_name    ajax.ddproxy.cf;
        access_log     /var/log/nginx/nginx.vhost.access.log;
        error_log      /var/log/nginx/nginx.vhost.error.log;
        root   /usr/share/nginx/html/ddproxy;
        location / {
                proxy_redirect https://ajax.googleapis.com/ /;
                proxy_cookie_domain ajax.googleapis.com ajax.ddproxy.cf;
                proxy_pass https://ajax.googleapis.com;
                proxy_set_header X-Real-IP $realip_remote_addr;
                proxy_set_header X-Forwarded-For $realip_remote_addr;
                proxy_set_header Host "ajax.googleapis.com";
                proxy_set_header Accept-Encoding "";
                proxy_set_header User-Agent $http_user_agent;
                proxy_set_header Accept-Language "zh-CN";
                sub_filter ajax.googleapis.com ajax.ddproxy.cf;
                sub_filter_once off;
        }
}
分类
Linux

让Nginx获取访问者的真实IP

这项特性需要Nginx模块ngx_http_realip_module来实现

参考Cloudflare官方文档在配置文件的http块中加入

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;

# use any of the following two
real_ip_header CF-Connecting-IP;
#real_ip_header X-Forwarded-For;
分类
Linux

在Vultr上的Archlinux配置IPv6

一直奉行「生命在于折腾」的博主在VPS购买后没多久便将系统换成了Archlinux,配置时为了省事就用了dhcpcd自动配置了IP地址。

自动配置的IPv4是完美的,可自动配置的IPv6就出事了。。。之前一直没有用过IPv6做过网站,直到最近脑抽突然想用Cloudflare的IPv6网关时才将问题暴露出来。

服务器可以ping外界IPv6主机,但外界IPv6主机却没法ping服务器。用systemctl status dhcpcd查看dhcpcd的日志后发现,这玩意自动获取的IPv6地址和Vultr给的固定IPv6地址不是一个地址。。。

man DHCPCD.CONF查询,得到dhcpcd的静态地址配置方法。在/etc/dhcpcd.conf的尾部加入如下内容

interface eth0 #网卡名
static ip6_address= #你的静态IPv6地址

然后sudo systemctl restart dhcpcd重启dhcpcd后就OK了。


然而博主在配置Nginx时并没有监听IPv6地址,因此想要使用Cloudflare的IPv6网关还得要在配置文件中的server块中有

listen [::]:80;

或者是

listen [::]:443 ssl http2;
分类
Linux

Web服务IP白名单

孤陋寡闻的博主某天突然知道还可以通过“全网扫描”这种骚操作来获取CDN背后网站的真实IP。于是乎为了(hao)增(wan)强网站的安全性,博主开始折腾通过白名单来屏蔽全网扫描大法。

博主首先想到的是通过Nginx来屏蔽。

首先通过https://www.cloudflare.com/ips/来get到Cloudflare的IP段。

将allow指令添加到配置文件的http块下,依次添加Cloudflare的IP段。

allow 103.21.244.0/22;
…
allow 2400:cb00::/32;
…

然后再添加

deny all;

访问源站,服务器确实返回了403,可这是在https握手之后才返回的。。。

证书暴露了。。。

然后想到让Nginx返回444,说不定可以在握手前断开与白名单外主机的连接。

参考Ilham Sulaksono的回答后,在配置文件的http块中加入

geo $remote_addr $allowed_trafic {
default false;
103.21.244.0/22 true;
…
2400:cb00::/32 true;
…
}

来添加Cloudflare的IP段

在每个server块下添加

if ( $allowed_trafic = 'false'){
return 444;
}

重启Nginx后发现。。。

依然是在握手后才断开连接。。。

好吧,服气。。。

看来只能用iptables屏蔽了。。。

依次输入

sudo systemctl enable iptables
sudo systemctl enable ip6tables

启用iptables

然后输入

sudo touch /etc/iptables/iptables.rules
sudo touch /etc/iptables/ip6tables.rules

新建一个空配置文件

再依次输入

sudo systemctl start iptables
sudo systemctl start ip6tables

启动iptables

输入sudo bash提权

参考Frank Rietta的文章还有Cloudflare的文档用root权限执行以下指令来将Cloudflare的IP段以及本地回环地址添加进iptables。

for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -p tcp -s $i --dport http -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -p tcp -s $i --dport https -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -p tcp -s $i --dport http -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -p tcp -s $i --dport https -j ACCEPT; done

然后再输入下列指令来丢弃掉白名单外主机的数据包

iptables -A INPUT -p tcp --dport http -j DROP
iptables -A INPUT -p tcp --dport https -j DROP
ip6tables -A INPUT -p tcp --dport http -j DROP
ip6tables -A INPUT -p tcp --dport https -j DROP

此时设置就已经完成了,可设置还没有保存,还需要输入

iptables-save > /etc/iptables/iptables.rules
ip6tables-save > /etc/iptables/ip6tables.rules

将设置保存到配置文件

分类
Linux

Nginx的WordPress伪静态配置

参考Nginx官方文档WordPress官方文档在location块中加入

try_files $uri $uri/ /index.php?$args;
分类
日常性抽风

拖延症晚期

越接近DDL内心就越有一种临近死亡时的宁静

分类
日常性抽风 硬件

【日常性抽风】水洗键盘

注意:本文是博主日常性抽风后所写,切勿模仿本文中所记述的行为

在历经过3次键盘进水后,博主这台多灾多难的UX31A的键盘终于扑街了。键盘按键错乱,按下某几个键后屏幕上会跳出些其他的东西(这告诉我们纵使电脑质量再好,上网时也不要把水杯放在旁边:-D)

在上次尝试修复键盘无果后,对键盘问题忍无可忍的博主决用一些粗暴的方法来修复键盘。

首先将电脑的底部拆开,上一张动手前的全尸照

拿掉电池、主板、风扇、扬声器什么的,露出键盘(和贴在上面的黑色不明物体)

就是这层黑膜阻止了对电子产品谨慎的博主上次对键盘的继续拆解,于是乎博主决定强行撕掉这层膜~

将键盘排线与黑膜强行分离~

撕下黑膜~

原来这玩意是键盘的背光板啊。。。继续继续

露出键盘底部全貌(菊花)

尝试拆下键盘,然鹅,手上并没有匹配的螺丝刀头。用小平口螺丝刀强拆,然后。。。

螺丝就滑丝了。。。

螺丝刀头也扭成了浪味仙。。。

好吧那就不拆了

博主看了一下键盘,发现经过了这么多天的自然风干,键盘里并没有水。于是博主就想是不是(残)有(留)什(在)么(杯)不(上)明(的)液(口)体(水)也同时进入了键盘,造成了键盘短路。博主想要清洗键盘电路,可手上又没有无水酒精。

然后博主就有了个大胆的想法

水!洗!键!盘!

先在键盘下方铺一层卫生纸

再搞一坨吸满自来水的卫生纸

然后把水往键盘上挤

用卫生纸把水吸掉一部分后将键盘这样放着晾一天(然后出去嗨)

回宿舍后用电吹风吹一吹并满怀期待的将电脑拼好

然后

博主发现

键盘还是原来那个(哔~~~~~~~~)样

(╯‵□′)╯︵┴─┴

算了

我放弃了

我还是换个键盘吧。。。

查了下资料,水浸键盘有可能会损坏键盘电路,所以,切勿模仿!

分类
硬件

光威Gloway VAL500GS3开盘

光威Gloway VAL500GS3固态硬盘采用M.2接口,SM2246EN主控。

使量产工具检测到硬盘的过程如下:

短接JP1-1→硬盘上电→取消短接→打开量产工具→点击Scan→检测到硬盘

其余开盘过程参考SM2246EN通用开盘教程

分类
网络

电信、联通4G凌晨测速

由于学校WiFi经常抽风,博主最近便申请了一张联通版的米粉卡。

据说联通访问国外服务器很快,博主就趁着40G的高速流量还在,赶紧跟手头上的电信卡做一个对比测速。

位置:北京

测试手机:Nexus 6(已破解Band1)

电信卡归属地:湖南

联通卡归属地:北京

代理服务器:自建SS(开启TCP-BBR)

测试时间:2:01-2:16

联通测速:

联通出国测速:

测速基带信息:

电信测速:

电信出国测速:

测速基带信息: