分类 工作&技术 下的文章

野卡证书很贵,去年是买的digital cert的,好几十刀,已经算便宜的了。
网上也流传alphassl的证书,只要30块钱,不过这个是利用了人家的漏洞,它的正常价格是100多刀。自己玩玩可以,掉证书就掉,不过生产环境的话三思。虽然没有掉的历史,但谁知道呢。。
免费+稳定,这就必然只能R3了。
一、安装certbot。(当然,用acme也可以,只是certbot简单点)
apt install certbot
二、运行:
certbot certonly --manual --agree-tos -d "*.你的域名" -d 你的域名 --email 你的email --preferred-challenges dns --manual-public-ip-logging-ok --server https://acme-v02.api.letsencrypt.org/directory
域名需要同时申请 *.domain.com 和 domain.com ,因为*不包含空。
三、运行时会提示你二次(因为上面输了两个域名):
Please deploy a DNS TXT record under the name:

_acme-challenge.你的域名.

with the following value:

s_vnp6r1TFPaCrO32hFUqCErUeGxEQ9KNbRwyQkNSW4

Press Enter to Continue

在你的dns管理器里面加入dns的txt记录即可。
在上面的例子中,就是加入 名称 _acme-challenge, 类型 TXT,值 s_vnp6r1TFPaCrO32hFUqCErUeGxEQ9KNbRwyQkNSW4
在没加好之前,一定不要敲回车,最好加好了再休息几分钟回车,如果不急的话。因为不排除有些dns不是立即刷新生效的。(dnspod和cloudflare都是立即生效)
一共重复两次。
四、不出意外,下面就是成功的提示:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/你的域名/fullchain.pem
Key is saved at: /etc/letsencrypt/live/你的域名/privkey.pem
把对应的证书设置到nginx或者cdn就可以了。
五、更新需要重新运行上面的过程,certbot renew不能象单域名那样扔crontab使用,因为需要dns认证,不能自动完成。acme可能可以,不过三个月一次,多大件事呢。 这个是wildcard证书,单域名证书当然不需要这么复杂。

折腾了一个晚上,很失败。想象中很简单,就是对 DOCKER-USER 链加上白名单,然后禁止其余即可。然而,它就是不工作,或者全部允许,或者全部不允许,反正不按照预期中的来。
AI就不消说了,我把GPT老娘操了一万次它也改不对,BARD(老名字,现在叫啥忘了),更是差劲。
最后还是只能看GOOGLE,看上去洋人们很认真的讨论了这个问题,并号称找到了解决方案,还有好几种。。然而,在我这里还是失败。
放弃。也不想再深究了,我是实用主义者,不是科学家。
关闭掉DOCKER的iptables,人工维护规则算了: /etc/default/docker加上 DOCKER_OPTS="--iptables=false"。 还别说,就算这个也是坑,文档都说改 /etc/docker/daemon.json这个文件,然而这个文件并不存在。(文档不会和你说,新建一个即可)

完成后的规则,其实就是以前一直用的规则了,和docker无关。列在这里给有需要的人看看吧。

# Generated by iptables-save v1.8.9 (nf_tables) on Wed May  1 01:06:24 2024
*filter
:INPUT DROP [3816:196637]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2700:502529]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT   #SSH,正常应该白名单,我这个玩具机就开着了。
-A INPUT -p tcp -m tcp --dport 81 -j ACCEPT   #这个是NPM的管理端口
-A INPUT -s 173.245.48.0/20 -p tcp -m tcp --dport 80 -j ACCEPT #CF白名单,IP段几十年不变,写死即可。
-A INPUT -s 103.21.244.0/22 -p tcp -m tcp --dport 80 -j ACCEPT #CF使用灵活模式,就是回源HTTP。回源HTTPS没有意义,除了消耗自己的CPU资源。
-A INPUT -s 103.22.200.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 103.31.4.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 141.101.64.0/18 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 108.162.192.0/18 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 190.93.240.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 188.114.96.0/20 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 197.234.240.0/22 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 198.41.128.0/17 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 162.158.0.0/15 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 104.16.0.0/13 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 104.24.0.0/14 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 172.64.0.0/13 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
COMMIT

telegram连续宕机两天,让人不得不研究一下备胎了。下面总结一下几个常见的的app,仅从安全的角度,不说其它。
由低至高排列:

  1. iMessage: 全局使用P2P加密,但云上XX同步有你的明文聊天记录和加密密钥。加密纯属脱裤子放屁。
  2. Telegram 除了私密对话外,均不使用P2P,包括普通对话,包括群组。对话内容用Telegram未公开的加密算法保存于telegram服务器。telegram老板俄国人,但号称反俄并定居海外。
  3. Skype: 微软历来配合审查。在先前的XX区版本中,不使用P2P加密,其它版本使用。但目前所有的版本均已号称使用P2P。
  4. WhatsApp: 全局使用P2P加密,服务器无法获得对话内容。然而,WhatsApp出过泄露用户资料的安全事件,就是不知道你说什么,但知道你是谁。业界一直怀疑,WhatsApp拥有者,facebook公司有意整合两者之间的部分数据,这对安全非常不利。
  5. Signal: 全局P2P加密,并开源。 安全角度无懈可击,包括Skype和WhatsApp均使用Signal加密算法,并被从数论上证明无法破解。然而Signal过于技术流,功能太少及使用不便。

还有两个就不点评了,微信,排名0,QQ排名-100。。这个应该没有争议。
*使用P2P(点对点加密)理论上是无法破解的,就是,对话只有发件人和收件人知道,链路层中间没有任何人可以知道。这是理论上的,不可能违反的。

以前用油猴插件,它是每天第一次上去时自动签,略嫌麻烦,毕竟不是每天上去,影响升仙进度,虽然已经有神仙号了。
自己写了段代码来搞定,然后扔cron表里即可。没什么技术含量的东西,只是存着备忘,有需要的也请自取自己编译了。

main.go
httputil.go

然后建立 account.yaml

account:
  username: "用户名"
  password: "密码"

没必要,但是,生命在于折腾。
blog是用的typecho,标准的lnmp了,基本上别的lnmp网站都是这样的。

docker-compose.yml:

version: '3'

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"    暴露http/https出去
      - "443:443"
    volumes:
      - ./nginx:/etc/nginx/    apt和docker一致,/etc/nginx
      - ./www:/var/www         
      - ./letsencrypt:/etc/letsencrypt/    
    networks:
      - blog
    restart: always

  php:
    image: php:8.2-fpm
    command: bash -c "docker-php-ext-install pdo_mysql && php-fpm"    原始的docker没mysqli
    volumes:
      - ./fpm/www.conf:/usr/local/etc/php-fpm.d/www.conf     apt的是/etc/php/8.2/fpm/xxxxx 这样的
      - ./www:/var/www
    networks:
      - blog
    restart: always

  mariadb:     mysql不好玩,用mariadb
    ports:
      - "127.0.0.1:3306:3306"    方便在宿主机上操作数据库,只宿主机可访问,不对外
    image: mariadb:latest
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - ./mariadb:/var/lib/mysql
    networks:
      - blog
    restart: always
networks:
  blog:
    driver: bridge

然后修改一下typecho中的config.php的数据库连接就好。一个小麻烦是先前数据库是unix socks访问,需要改成tcp,还需要root可以远程访问,因为php和mysql算是远程了。