关闭

caddy的访问认证及频次限制

标签: caddyipfilterratelimitbasicauthjwt
138人阅读 评论(0) 收藏 举报
分类:

Caddy 是一个多功能的 HTTP web服务器,并且使用Let’s Encrypt提供的免费证书,想要自动让网站升级到HTTPS,需要满足一下几个条件:
1. 主机不能为空,不能为localhost,不能是通配符,不能是一个IP地址
2. 端口不能为指定为80
3. 模式不能指定为http
4. 网站定义的TLS不能关闭
5. 不能由你来提供证书和密钥
6. caddy可以绑定到80和443(除非你用DNS挑战)

一、访问认证
1. basicauth
caddy的basicauth 实现了HTTP Basic Authentication。Basic Authentication可以通过使用用户名和密码的方式来保护文件和目录。
注意:基本的认证在http上是不安全的。在决定使用HTTP基本身份验证时要谨慎。
使用语法如下:
保护单个文件或目录:
basicauth path username password
例子:
basicauth /secret Bob hiccup
- path:受保护的文件或目录
- username:访问所需的用户名
- password:访问所需的密码

保护多个文件或目录
basicauth username password {
realm name
resources
}
例子:
basicauth “Mary Lou” milkshakes {
realm “Mary Lou’s documents”
/notes-for-mary-lou.txt
/marylou-files
/another-file.txt
}
- username:访问所需的用户名
- password:访问所需的密码
- realm:可选配置,用于标识受保护的区域,不可重复
- resources:文件或目录的列表,每行一个

2. JWT
JWT为caddy实现了一个基于JSON Web Tokens的认证层。
jwt 指令是 Caddy 的扩展功能,我们需要在官网上选择添加该功能并且获取编译后的版本。
其基本语法为:
jwt [path]
高级语法:
jwt {
path [path]
redirect [location] # 当请求被拒绝时,重定向到该位置
allow [claim] [value]
deny [claim] [value]
}
譬如我们预设了两个令牌:user: someone 与 role: member ,我们的配置项如下:
jwt {
path /protected
deny role member
allow user someone
}
该中间件会拒绝所有 role: member 的访问,除了用户名为 someone 的用户。而另一个 role: admin 或者 role: foo 的用户则可以正常访问。

我们可以通过三种方式来提交令牌:

  • 通过header
    Authorization: Bearer
  • 通过Cookie
    “jwt_token”:
  • 通过URL的请求参数
    /protected?token=

二、频次限制
ratelimit
根据客户端的ip地址来限制请求的处理速率
超出的请求会返回429错误(过多的请求),并且header中会添加X-RateLimit-RetryAfter

ratelimit并非caddy的默认特征,因此下载caddy时需要选择http.ratelimit插件

可以设置每秒、每分钟、每小时可以访问多少次

可以添加白名单

可以对某一IP范围不加限制

可以对某些文件或某些目录不加限制

针对单个资源
ratelimit path rate burst unit
例子:
ratelimit /r 2 3 second
说明:对于/r目录下的文件,限制客户端每秒发送2个请求(3个爆发)

针对多个资源
ratelimit rate burst unit {
whitelist CIDR
resources
}
例子:
ratelimit 2 2 minute {
whitelist 1.2.3.4/32
whitelist 192.168.1.0/30
/foo.html
/dir
^/dir/app.js
}
说明:
whitelist 白名单IP列表
对/foo.html和/dir有ratelimit限制
对/dir/app.js没有限制

三、IP限制
ipfilter

根据客户端的IP来判断允许还是拒绝。
根据IP或CIDR范围来过滤
ipfilter / {
rule block
ip 70.1.128.0/19 2001:db8::/122 9.12.20.16
}

根据国家ISO码过滤
ipfilter / {
rule allow
database /data/GeoLite.mmdb
country US JP
}
定义一个阻塞页(即访问被拒绝时返回的页面)
ipfilter / {
rule allow
blockpage default.html
ip 55.3.4.20 2e80::20:f8ff:fe31:77cf
}
过滤多个路径
ipfilter /notglobal /secret {
rule allow
ip 84.235.124.4
}
配置多个阻碍
ipfilter / {
rule allow
ip 32.55.3.10
}

ipfilter /webhook {
rule allow
ip 192.168.1.0/24
}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

使用redis计数来控制单位时间内对某接口的访问量,防止刷验证码接口之类的

使用自定义注解的方式,在需要被限制访问频率的方法上加注解即可控制。 看实现方式,基于springboot,aop,redis。 新建Springboot工程,引入redis,aop。 创建注解 ...
  • tianyaleixiaowu
  • tianyaleixiaowu
  • 2017-07-06 15:01
  • 1691

nginx限制客户端的访问频次和访问次数

在线上应用过程中,nginx虽然可以承受住高并发,但是否这些并发连接都是有效的访问请求,还是恶意的访问?因此我们可以从限定客户端的访问频次和访问次数来使我们的 nginx服务器来承受更高的有效并发。 ...
  • yanggd1987
  • yanggd1987
  • 2014-11-27 12:08
  • 5190

控制ASP.NET Web API 调用频率

控制ASP.NET Web API 调用频率 很多的api,例如GitHub’s API 都有流量控制的做法。使用速率限制,以防止在很短的时间量客户端向你的api发出太多的请求.例如,我们可以限...
  • huwei2003
  • huwei2003
  • 2015-08-05 15:31
  • 3109

0140 redis实现访问频次限制的几种方式

结合上一篇文章《redis在学生抢房应用中的实践小结》中提及的用redis实现DDOS设计时遇到的expire的坑。其实,redis官网中对incr命令的介绍中已经有关于如何用redis来做rate ...
  • junlinbo
  • junlinbo
  • 2016-07-06 14:59
  • 953

redis实现访问频次限制的几种方式

转自:http://blog.csdn.net/yanghua_kobe/article/details/47904663 结合上一篇文章《redis在学生抢房应用中的实践小结》中提及的用r...
  • zhang_Red
  • zhang_Red
  • 2016-03-02 22:00
  • 1006

redis实现访问频次限制的几种方式

结合上一篇文章《redis在学生抢房应用中的实践小结》中提及的用redis实现DDOS设计时遇到的expire的坑。其实,redis官网中对incr命令的介绍中已经有关于如何用redis来做rate ...
  • yanghua_kobe
  • yanghua_kobe
  • 2015-08-23 12:25
  • 12280

细分方法研究网站用户行为(一):基于访问频次的用户行为研究

细分方法研究网站用户行为(一):基于访问频次的用户行为研究
  • lanmao100
  • lanmao100
  • 2011-01-27 14:40
  • 555

RMQ+ST 区间最值/区间最多频次

区间最值:#include #include #include #include using namespace std; const int MAXN = 100117; int n,que...
  • orion_pistachio
  • orion_pistachio
  • 2017-05-04 21:37
  • 121

java【通用】统计字符串中重复【单个】字符的次数频次并输出重复最多的次数和字符

思路:遍历字符串,存入map统计频次,转存list排序,统计public class Test { public static void main(String[] args) { ...
  • c5113620
  • c5113620
  • 2017-12-17 18:30
  • 37

【python学习笔记】20:numpy广播、分段函数、频次统计

*用int64()取整 >>> x=np.random.rand(10)*50 >>> x array([ 23.22184111, 32.50075356, 42.89971884, 29....
  • SHU15121856
  • SHU15121856
  • 2017-07-25 16:31
  • 1619
    个人资料
    • 访问:3951次
    • 积分:298
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档