转载备份
影子 DOM(Shadow DOM)
你的 docker stop,它优雅吗? - 无糖拿铁,谢谢
清理Docker的container,image与volume · 零壹軒·笔记
Create a PyPI Mirror Site with devpi-server – SRE
优雅的终止 docker 容器 | iTimothy
Odoo 14 开发者指南第二十一章 性能优化 | Alan Hou 的个人博客
Odoo 14 开发者指南第八章 高级服务端开发技巧 | Alan Hou 的个人博客
kafka 系列:设置日志数据保存过期时间(含某个 topic)、日志策略_NIO4444-CSDN 博客_kafka 配置数据过期时间
Chromium 历史版本离线安装包 - 下载方法
怎样将 props 传递给 {this.props.children} | WebFuse
HappyBaseDoc
用户指南 — HappyBase 1.2.0 文档
安装指南 — HappyBase 1.2.0 文档
API 参考 — HappyBase 1.2.0 文档
PostgreSQL 时间转换
JS 中创建给定长度的数组
GSAP 入门 - 学习中心 - 绿袜
操作系统复习 | Happy Coding
如何理解 ip 路由和操作 linux 的路由表 - CodeAntenna
Elasticsearch 7.11 tokenizer, analyzer and filter 以及 IK 分词配置同义词、远程拓展词库 – Brave new world
podman 容器内访问 host 主机的端口 - 知识库 - BSMI KB 基础标准矿产工业
吐血总结!100 道经典 Python 面试题集锦上(附答案)
中共党史简表(1919 年 - 1949 年)
Dockerfile 详解_万 wu 皆可爱的博客 - CSDN 博客_dockerfile
为你的 Python 应用选择一个最好的 Docker 映像 | 亚马逊 AWS 官方博客
Ubuntu Server 支持中文
docker push | Docker Documentation
docker 创建本地仓库详解 (push/pull)_乱红飞的博客 - CSDN 博客_docker push 本地仓库
基于 Ubuntu 20.04 安装 Kubernetes 1.18
PostgreSQL 集群篇——PostgreSQL 的配置文件解析_51CTO 博客_postGresql
【PostgreSQL】——主从流复制_Teingi 的博客 - CSDN 博客_postgresql 主从复制
PostgreSQL: Documentation: 14: 27.4. Hot Standby
postgresql 主从复制、主从切换_偷懒的小陈的博客 - CSDN 博客_postgresql 主从
Postgres 用户、角色与权限 :: 68hub — 技术博客
中国共产党第二十次全国代表大会在京开幕 一图速览二十大报告
配置 docker 通过代理服务器拉取镜像
IPVS no destination available - Kubernetes 实践指南
Python 风格规范 — Google 开源项目风格指南
互动测试!党的二十大报告 100 题
自定义 ESlint 规则
Java 读取 OpenSSL 生成的秘钥, 进行 RSA 加解密 | 数字魔法
CSS(一)chrome 浏览器表单自动填充默认样式 - autofil_半个 GIS 半个前端的博客 - CSDN 博客
Nginx 多级代理下的真实 IP 透传 - CodeAntenna
Jenkins 环境变量
人民币金额大写规范 - 内蒙古农业大学财务处
[转]nginx 开启 websocket - 浅忆博客
ceph 创建使用 rbd
《三》配置 ceph 存储池 pool - Buxl's blog
基于 K8S 搭建 Ceph 分部署存储 – 唐玥璨 | 博客
序言 · Kubernetes 中文指南——云原生应用架构实战手册
服务器配置 - Redis 安装配置 | 灰帽子 - 任令仓的技术博客
Ubuntu 配置 sudo 命令不需要输入密码_ubuntu sudo 免密_一路向前 - 执着的博客 - CSDN 博客
修改 Docker 数据目录位置,包含镜像位置 - 腾讯云开发者社区 - 腾讯云
微服务架构实践(API Gateway)
微服务网关:从对比到选型,由理论到实践 | Java 程序员进阶之路
聊聊微服务网关
微服务网关:从对比到选型,由理论到实践
odoo 实现表分区 partition
使用 keepalived 搭建高可用服务 - 简书
业务网关的落地实践_文化 & 方法_Qunar 技术沙龙_InfoQ 精选文章
部署 Kubernetes PostgreSQL 实例 | domac 的菜园子
一套包含完整前后端的系统如何在 K8S 中部署?_k8s 前端_木讷大叔爱运维的博客 - CSDN 博客
前端安全系列(二):如何防止 CSRF 攻击? - 美团技术团队
traefik 自定义中间件 | coolcao 的小站
CSRF 原理和实战利用 - FreeBuf 网络安全行业门户
安全运维 - 如何在 Kubernetes 中使用注释对 ingress-nginx 及后端应用进行安全加固配置实践_唯一极客知识分享的技术博客_51CTO 博客
Kubernetes 进阶使用之 Helm,Kustomize
各种加密算法比较
Docker 的三种网络代理配置 · 零壹軒 · 笔记
本文档使用 MrDoc 发布
-
+
首页
安全运维 - 如何在 Kubernetes 中使用注释对 ingress-nginx 及后端应用进行安全加固配置实践_唯一极客知识分享的技术博客_51CTO 博客
> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [blog.51cto.com](https://blog.51cto.com/weiyigeek/5701489) 关注「**WeiyiGeek**」公众号 **本章目录:** * * * 0x08 Kubernetes 中 ingress-nginx 安全配置 * 1. 配置指定的 Ingress Class * 2. 安全配置之强制跳转 HTTPS * 3. 安全配置之跨域访问 cors * 4. 安全配置之防止 DDOS 请求限流 * 5. 安全配置之请求访问白名单 6. 安全配置之请求访问日志记录 * 7. 安全配置之 Nginx 指定代理响应标头 * 8. 安全配置之 Nginx 禁止访问某一目录 * 9. 安全配置之请求访问认证 * 10. 安全配置之启用 SSL 握手加密套件 * 11. 安全配置之启用 modsecurity waf 模块 * * * * * * 0x08 Kubernetes 中 ingress-nginx 安全配置 描述: 在 K8s 集群中部署安装 ingress-nginx 后默认并未根据应用安全需要进行相应的安全配置,本小结将针对于生产环境的中的 ingress-nginx 控制器以及应用常见进行安全安全配置。 **1. 配置指定的 Ingress Class** 描述: 如果一个 K8S 集群中部署了多个 ingress controller 时,我们可以在创建 ingress 的时候,通过 ingressClassName 指定 ingress class,如下所示: ``` $ kubectl get ingress -n web www-weiyigeek -o yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: blog-weiyigeek-top annotations: # ....Kubernetes 注释添加到特定的 Ingress 对象自定义其行为.... nginx.ingress.kubernetes.io/rewrite-target: / labels: app: blog ref: blog.weiyigeek.top spec: ingressClassName: nginx # 关键点 rules: - host: weiyigeek.top http: paths: - backend: service: name: blog port: number: 8080 path: / pathType: ImplementationSpecific ``` **2. 安全配置之强制跳转 HTTPS** 描述: 通过这个 annotation 可以强制 https,如果是 http 请求,会通过 308 redirect 到 https. 示例: ``` metadata: annotations: # 通过重定向实施服务器端 HTTPS # 启用了TLS,则控制器会将 (308) 重定向到 HTTPS nginx.ingress.kubernetes.io/ssl-redirect: "true" # 强制重定向到 HTTPS nginx.ingress.kubernetes.io/force-ssl-redirect: "true" # 保留 URI 中的尾部斜杠 redirectnginx.ingress.kubernetes.io/preserve-trailing-slash: "true" ``` **3. 安全配置之跨域访问 cors** 描述: 当将 Ingress-Nginx 作为 API 网关,必须进行跨域配置否则会对业务造成影响,例如我们公司的 CDN 业务必须设置跨域方面配置。 示例: ``` metadata: annotations: # 启用cors跨域 (字面意义) nginx.ingress.kubernetes.io/enable-cors: "true" # 设置控制 CORS 的可接受来源,遵循以下格式 http(s)://origin-site.com[:port] nginx.ingress.kubernetes.io/cors-allow-origin:"https://*.weiyigeek.top" # 设置支持跨域请求的方法 (GET, PUT, POST, DELETE, PATCH, OPTIONS) nginx.ingress.kubernetes.io/cors-allow-methods: "GET, PUT, POST, OPTIONS" # 设置支持跨域请求的标头 (DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization) nginx.ingress.kubernetes.io/cors-allow-headers: "X-Forwarded-For, X-App-Weiyigeek" # 设置支持响应公开那些指定表头 nginx.ingress.kubernetes.io/cors-expose-headers: "*, X-CustomResponseHeader" # 设置在 CORS 操作期间传递凭据 (为了安全设置false除非业务确实需要) nginx.ingress.kubernetes.io/cors-allow-credentials: "false" # 设置控制可以缓存预检请求的时间长度 1728000 nginx.ingress.kubernetes.io/cors-max-age: 600 ``` **4. 安全配置之防止 DDOS 请求限流** 描述: 通常针对于文件下载服务器我们需要进行一系列的配置, 我们可以通过 rps 限制每秒请求数,rpm 限制每分钟请求数,connections 限制连接数, 如若超过将返回 503 。 示例: ``` metadata: annotations: # 每分钟从给定 IP 接受的请求数。突发流量限制设置为此限制乘以突发乘数,默认乘数为 5。(顺序3) nginx.ingress.kubernetes.io/limit-rps: "5" # 每秒从给定 IP 接受的请求数,突发流量限制设置为此限制乘以突发乘数,默认乘数为 5。(顺序2) nginx.ingress.kubernetes.io/limit-rpm: "300" # 允许来自单个 IP 地址的并发连接数,超过此限制时返回 503 错误。(顺序1) nginx.ingress.kubernetes.io/limit-connections: "10" # 突发大小限制速率的乘数。默认突发乘数为 5 nginx.ingress.kubernetes.io/limit-burst-multiplier:"5" # 配置白名单不受速率限制。(局部) nginx.ingress.kubernetes.io/limit-whitelist: "10.0.0.0/24,172.10.0.1" ``` **5. 安全配置之请求访问白名单** 描述: 配置白名单比黑名单更加安全,与最小所需权限一样,主要是用于安全限制,只允许特定的客户端请求,但由于现在网络中 NAT 的广泛应用,但是参数使用的场景比较有限,例如针对于内网采集监控服务调用,即将其访问请求 IP 加入到白名单中,才不受安全策略限制影响。 示例: ``` metadata: annotations:# 通过注释指定允许的客户端 IP 源范围,该值是以逗号分隔的CIDR列表。(全局) ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/24,172.10.0.1" ``` **6. 安全配置之请求访问日志记录** 描述: 为了等保合规通常需要将各类日志存储 180 天及以上,所以 ingress 也是非常重要,当业务被攻击时我们可以快速溯源追踪,以及其行为分析。 示例: ``` metadata: annotations: # 启用访问日志,默认情况处于启用状态.但在某些情况下可能需要为给定入口禁用访问日志设置为False即可。 nginx.ingress.kubernetes.io/enable-access-log: "true" # 启用重写日志,默认情况处于未启用状态,如启用重写日志在通知级别发送到error_log文件。 nginx.ingress.kubernetes.io/enable-rewrite-log: "true" ``` **7. 安全配置之 Nginx 指定代理响应标头** 描述: 在使用 ingress-nginx 场景中免不了配置使用代理或响应表头,例如常见的`X-Frame-Options`规定了允许那些站点嵌入配置目标 iframe 站点。 示例: ``` metadata: annotations: # 用于插入 server 块中的代码段 nginx.ingress.kubernetes.io/server-snippet: | # 隐藏nginx版本 server_tokens off; # Frame 安全控制 添加 X-Frame-Options 头 add_header X-Frame-Options SAMEORIGIN; # MIME 模拟探测 、XXS-Protection、Spider Robots 爬取策略限制 more_set_headers 'x-content-type-options: nosniff ' 'x-xss-protection: 1; mode=block' 'X-Robots-Tag: none;'; # 用于插入 location 块代码段 nginx.ingress.kubernetes.io/configuration-snippet: | # 自定义访问后端服务时所带头 proxy_set_header My-Custom-Header $http_my_custom_header; # 将 X-FORWARDED-FOR 字段获取到外部IP带入后端服务 proxy_set_header X-FORWARDED-FOR $http_X_FORWARDED_FOR; ``` **8. 安全配置之 Nginx 禁止访问某一目录** 描述: 在使用 ingress-nginx 场景中,如何禁止客户端访问 ingress 站点某一目录下的所有资源,我们可以配置 server-snippet 注释,例如。 示例: ``` metadata: annotations: # 用于插入 server 块中的代码段,禁止访问 站点的 /itwork/ 目录下资源 nginx.ingress.kubernetes.io/server-snippet: | location /itwork/ { deny all;return 403;} ``` **9. 安全配置之请求访问认证** 描述: 针对于某些未有认证的 API 接口应用,可以通过在 Ingress 规则中添加额外的注释来添加身份验证。 ``` metadata: annotations: # 认证类型 [basic|digest] nginx.ingress.kubernetes.io/auth-type: # 包含用户/密码定义的密码的名称,使用configMap存储htpasswd生成热认证 # $ htpasswd -c auth weiyigee # $ kubectl create secret generic basic-auth --from-file=auth nginx.ingress.kubernetes.io/auth-secret: basic-auth # 认证密钥有两种形式: # auth-secret 默认,密钥中的 htpasswd 文件位于密钥中auth # auth-map 密钥是用户名,值是散列密码 nginx.ingress.kubernetes.io/auth-secret-type:auth-file # 设置认证提示 nginx.ingress.kubernetes.io/auth-realm: "身份认证" ``` **10. 安全配置之启用 SSL 握手加密套件** 描述: 通常为了应用安全我们会为其添加证书,但是一些已知脆弱性的 SSL 加密方式会影响到应用信息安全,例如 RC4 与 MD5 等 示例: ``` # 方式1.ConfigMap$ kubectl edit cm -n ingress-nginx ingress-nginx-controller apiVersion: v1 data: # 指定可以用的加密套件 ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE:ECDH:AES:HIGH:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DH:!DES:!MD5:!RC4" # ssl 协议 ssl-protocols: "TLSv1.1 TLSv1.2 TLSv1.3" # ssl 会话复用 ssl_session_cache: "shared:SSL:10m;" ssl-session-timeout: "10m"# 方式2.Annotations metadata: annotations: # 配置指定在使用 SSLv3 和 TLS 协议时,服务器密码应优先于客户端密码。 nginx.ingress.kubernetes.io/ssl-prefer-server-ciphers: "true" # 指定加密套件 nginx.ingress.kubernetes.io/ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE:ECDH:AES:HIGH:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DH:!DES:!MD5:!RC4;" ``` **11. 安全配置之启用 modsecurity waf 模块** 描述: ModSecurity (http://modsecurity.org/) 是一个开源的 Web Application 防火墙, 可以为一组特定的入口位置启用它。必须首先通过在 ConfigMap 中启用 ModSecurity 来启用 ModSecurity 模块。 请注意,这将为所有路径启用 ModSecurity,并且必须手动禁用每个路径。 ``` # 方式1.ConfigMap$ kubectl edit cm -n ingress-nginx ingress-nginx-controller apiVersion: v1 data: # 启用 modsecurity waf模块拦截常规Web攻击 enable-modsecurity: "true"# 方式2.Annotations metadata: annotations: # 启用 modsecurity nginx.ingress.kubernetes.io/enable-modsecurity: "true" # 设置以下注释来启用 OWASP 核心规则集 nginx.ingress.kubernetes.io/enable-owasp-core-rules: "true" # 设置以下内容从nginx传递事务ID nginx.ingress.kubernetes.io/modsecurity-transaction-id: "$request_id" # 通过代码段添加自己的一组 modsecurity 规则: nginx.ingress.kubernetes.io/modsecurity-snippet: | Include /etc/nginx/owasp-modsecurity-crs/nginx-modsecurity.conf SecRuleEngine On SecDebugLog /tmp/modsec_debug.log ``` OWASP 核心规则集 :https://www.modsecurity.org/CRS/Documentation/ 建议的配置参考 :https://github.com/SpiderLabs/ModSecurity/blob/v3/master/modsecurity.conf-recommended
幻翼
2023年9月21日 11:41
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码