2025-07-16 00:00:00
traefik 可以帮你:
本文是对traefik的一个简单介绍,主要介绍如何使用 traefik 来代替 waf(使用 CrowdSec)、nginx、acme.sh、mtls-auth 等。
traefik会是你服务器的入口,所有的请求都会先经过 traefik,然后再转发到后端服务。
后端服务也不用配置绑定的端口和ip了(例如docker.port: 127.0.0.1:8080:8080
,然后nginx反代,每个服务都要记住端口很麻烦),traefik 会自动处理。
info
主要贴出配置,注意多看注释
IMPORTANT
CrowdSec 的工作原理之后会说
info
简单说一下 mtls 的好处
此项配置了之后可以
1 |
traefik/ |
ERROR
ban.html
我就不贴了,需要的自己 ai 写一个
IMPORTANT
acme.json
的权限要设置为600
,否则 traefik 无法写入证书。traefik-net
网络,或者在docker-compose.yml
中注释掉网络部分。1 |
services: |
1 |
tls: |
1 |
# traefik/dynamic_conf/middlewares.yml |
1 |
http: |
1 |
http: |
这里配置 CrowdSec,通过 docker 搭建。
整个安全方案由两部分组成:
crowdsec
服务): 负责分析日志、检测威胁,并管理决策(例如,哪个 IP 应该被禁止)。crowdsec
服务) 通过挂载的 Docker Socket 读取 Traefik 的日志。crowdsecurity/traefik
collection 中的解析器和场景分析日志,检测到攻击行为(如暴力破解、扫描等)。1 |
services: |
主要通过 traefik 的标签(labels)来配置反代。
1 |
services: |
2025-06-22 22:37:56
如果在使用aws lambda中,你的lambda函数需要访问aws的其他服务,例如EFS、RDS,那么大概率需要将你的lambda和efs放置在同一vpc中(不在同一vpc的情况下你可以使用endpoint),这个时候即使你的lambda是在公开子网(public subnet)中也是是没有访问互联网的能力的,这是因为你的lambda只有子网的ip10.0.0.0,流量路由到互联网网关的时候会被网关丢弃,因为你没有配置公网ip。本文会给出几个解决方案,并分析优缺点。
因为aws的文档大部分是英文,中文文档都是机翻,所以有些专有名词的翻译就很别扭,所以干脆直接用英文。
正如前面所说,你的lambda函数
所在的vpc
需要配置公网ip
才能拥有访问互联网的能力。你可能会说,为什么我平时用的lambda不需要加入vpc呢?
这是因为:
json
文件并持久化,你需要s3或者EFS;例如你要访问ec2实例或RDS数据库。如果只是临时写入文件则可以在/tmp
目录下写入,lambda运行结束则会被清空,不能持久化。要让lambda拥有同时访问互联网和vpc下的服务的能力,首先你要有公网ip,另外你的lambda能访问vpc下的服务。
我查阅了网上提到的几种方法,并总结下来
存在的解决方案有:
nat网关
。endpoint
。将你的程序解耦,分为两个lambda函数,一个用于访问互联网,另一个访问aws服务,二者通过endpoint进行通讯。API gateway
。同样地,你的程序需要解耦,其中用于访问aws服务的lambda被主lambda函数通过API调用。api
。使用aws sdk(python使用boto3
),通过invoke方法同步或异步调用另一个lambda。这是官方推荐的方法。
新建一个vpc,选择带有公网子网和私有子网的模板,然后勾选nat网关就可以。在可视化界面中你可以看到私有子网通过路由表(route table)将流量路由到nat网关。你把你的lambda和aws服务放进私有子网内,你的lambda就拥有了同时访问互联网和vpc下的aws服务的能力。路由表会根据destination
帮你处理好一切。
最简单也最贵。单单是一个nat网关开着它就要30美元一个月,转发的流量还需要另外收费。不清楚公网ip是否另外收费
aws设置endpoint的目的是为了让处于不同的vpc下的服务不通过互联网而通过aws的内部网络相互通讯,从而减少安全风险。
利用这个特性,你可以在将需要访问互联网的lambda放在aws他自己管理的vpc中(在创建lambda的时候默认会放进该vpc),将另一个lambda放到你的vpc中,该lambda函数用于访问同vpc下的aws服务,例如RDS。前者lambda通过endpoint访问后者。
值得注意的是,endpoint
是安装在服务消费者(service consumers
)上的,在上面的例子中,假设我是希望能访问互联网的lambda访问处于自定义vpc中的lambda,读取RDS数据并发送邮件。在这里,服务消费者是访问互联网的lambda,服务提供者(service providers
)是处于自定义vpc中的lambda,前面提到,endpoint
应该被安装在服务消费者——也就是访问互联网的lambda中,但是,该lambda是放在aws自己管理的vpc中的,我们没有权限去创建一个endpoint
,只能改变思路,就像下面的图所示,把处于自定义vpc中的lambda作为服务消费者,读取数据库,之后通过endpoint
调用vpc外面的lambda。
NOTE
在你的lambda中,可以通过编程的方式使用aws sdk(python是boto3
)链接endpoint。sdk通常是发送一个http请求
来调用endpoint
。
优点
RDS proxy
来复用同一个数据库连接。缺点
API gateway
的最佳用途应该是用来写REST api
,你可以通过API gateway
调用lambda函数
编写两个lambda,其中用于访问aws服务的lambda设置API gateway
触发器(trigger
),因而用于访问互联网的lambda可以通过发送http请求
到该url而调用另一个lambda,进而访问aws服务。
优点
http
来调用,调用起来更加方便缺点
和其他aws服务一样,lambda也有自己的api。其中就包括调用lambda函数的invoke
方法。
如果你使用python
,详见invoke
优点
缺点
2025-06-22 22:37:56
因为我用的甲骨文 vps,可能会玄学删 vps,所以需要频繁备份。放在国内公有云又怕审查,放谷歌微软的公有云容量又太少,歪门邪道又可能被删数据。有了 alist 就可以方便加密和解密数据,把加密后的数据放国内公有云就不怕审查了。用 alist 还有一个好处就是,如果你的数据同步到了多个公有云,alist 是可以很方便集中显示和管理公有云的文件的。rclone 也是常规的同步工具,直接备份 docker 文件夹就是了,这边就稍微记录一下。
想要达成前面说到的目的,你需要:
需要的东西
alist 可以很方便加密数据并上传到公有云。见官网教程。
这里稍微说明一下怎么做
alist
Crypt
驱动,填写Crypt
的路径,并且填写加密后的文件所在路径。例如,阿里云挂在到了/ali
,那么需要在这个/ali
里面预先创建一个空的文件夹,例如/ali/test
,之后在Crypt
配置里,填写Crypt
本身的路径,例如/Crypt
,之后填写加密后的文件所在路径,也就是/ali/test
。那么就可以通过访问/Crypt
来加密解密/ali/test
里的文件了,上传文件到/Crypt
也就同样可以加密文件到/ali/test
。
之后如果你选择把同一个文件加密到多个公有云,使用 alist 的别名功能可以方便集中显示和管理分布在各个公有云的文件。
同样不要忘记导出 alist 的配置,可以用中文的密码,更加难破解。在 alist 的 dash 中不能直接输入中文,可以在别处输入了密码后,再复制粘贴到 dash。
通过 alist 来中转而不是直接在 rclone 中挂载公有云的原因是,rclone 挂载起来没有 alist 方便,而且 alist 文档写的比较清楚。我一开始是用 rclone 来挂载谷歌云盘的,官网教程用的谷歌云盘的 oauth api,结果弄到后面需要我在有浏览器的电脑里,下载 rclone 然后再用浏览器登录,把 cookie 复制到 vps,,,
rclone 可以直接挂载 alist 的 webdav,例如挂载 alist 的 /ali/test
,就填写 http://127.0.0.1:port/dav/ali/test,注意你 alist 的端口,还要要加/dav
前缀。
输入 rclone config
就可以挂载 webdav。webdav 的用户和密码同 alist 的登录用户密码。
rclone sync and copy
rclone sync
命令可以方便同步改变了内容的文件,例如 test.txt 中改变了一个字符,这时候运行同步命令就可以同步,如果再一次运行同步命令,则不会重复上传文件到公有云,节省了带宽。如果删除文件也会同步删除,rclone copy
则不会同步删除。sync
命令同样可以备份公有云端要删除的文件,具体见官网文档。
建议把同步命令写到 .sh 里,方便管理。rclone sync
需要先了解怎么用。
1 |
rclone sync /home/dcoker-data ali:/dcoker-data \ |
可以在 exclude.txt 中定义不同步哪些文件。这里给一个样板。
1 |
tmp/** |
可以定时备份。
1 |
|
2025-06-22 22:37:56
cron笔记,包含cron不执行shell脚本的解决办法
也许shell脚本本身可以执行,但是cron中不能执行,需要像下面这样设置
1 |
SHELL=/bin/bash |
NOTE
最后一定要有一个回车!后者会导入失败
1 |
|
最后设置到cron
1 |
crontab /pathto/cron-for-run-per-1h.cron |
warning
使用此命令会覆盖之前所有的cron任务
如果你不想覆盖之前的,那么就/etc/cron.d
中新建文件,然后写进去。
warning
cron的话基本必有一个?
,它仅可存在于dayofmouth
或者dayofweek
个人docker配置备份
1 |
FROM python:3.11 |
1 |
version: '3.8' |
2025-06-22 22:37:56
一开始我是这么写的
1 |
# 获取更新后的证书和私钥文件路径 |
这么写看着没用什么问题,但是-d
命令是默认进行urlencode
的,这样子我的证书就会改变。需要改成--form-string
才行。
这种默认就urlencode
的,curl -h
中又没说明,真的好坑
2025-06-22 22:37:56
先放链接
由于vercel最近在你的个人账户里添加了一个团队(team),你会发现你左上角的头像变了,然后点击中间domain
按钮的时候发现里面并没有你之前使用过的域名。这个时候你在项目里添加域名,会提示说域名已经被其他账号使用。但是很困惑的是,只在前几天之前,你一直能够没有限制地添加域名,为什么这几天就变了。
这是由于你的项目现在全部变为你的team的项目,而你的域名却仍然在你的账号之下。
解决方法也很简单,点击右上角你的账号设置,然后点击左边的domain
,选择你想要转移的域名,点击左边的三个点的按钮,然后点击move
,就可以开始转移了。