分类 安全 下的文章

在 Kubernetes 集群中,为服务配置 HTTPS 是生产环境的标配。本文将介绍如何使用 Cert-Manager 结合 Traefik Ingress,通过 Let's Encrypt 自动申请并续签免费的 SSL/TLS 证书。

部署 Cert-Manager

1、首先,我们需要在集群中安装 Cert-Manager。这里我们创建一个独立的命名空间来管理它。

kubectl create namespace cert-manager

2、部署 cert-manager

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml

3、ClusterIssuer 是 Cert-Manager 的核心资源,用于定义证书颁发机构

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: gua3j7@126.com   #*用于接收证书过期通知等*
    privateKeySecretRef:    #指定存储 ACME 客户端私钥的 Kubernetes Secret 的名称
      name: letsencrypt-prod
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:               #定义用于验证证书颁发请求的解析器。
      - http01:
          ingress:
            class: traefik

4、创建ingress 自动申请证书

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: work-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
    cert-manager.io/cluster-issuer: letsencrypt-prod  # letsencrypt-prod为ClusterIssuer名称
spec:
  ingressClassName: traefik # 指定 Ingress Class 为 traefik
  tls:
    - secretName: miiv-tls *# 证书将被存储在此 Kubernetes Secret 中*
      hosts:
        - miiv.top # *指定需要证书的域名*
  rules:
    - host: miiv.top  # 转发规则名称
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: miiv-lnp # 服务名
                port:
                  number: 80 # 服务的端口号 service port,非pod port

如访问Miiv.top出现not found,查看traefik日志发现

intSlice: failed to list *v1.EndpointSlice: endpointslices.discovery.k8s.io is forbidden: User \"system:serviceaccount:kube-system:traefik\" cannot list resource \"endpointslices\" in API group \"discovery.k8s.io\" at the cluster scope" logger="UnhandledError"
W0811 14:29:30.798885       1 reflector.go:561] k8s.io/client-go@v0.31.1/tools/cache/reflector.go:243: failed to list *v1.EndpointSlice: endpointslices.discovery.k8s.io is forbidden: User "system:serviceaccount:kube-system:traefik" cannot list resource "endpointslices" in API group "discovery.k8s.io" at the cluster scope


**原因:缺少对endpointslices、nodes访问规则**
kubectl edit clusterrole traefik-kube-system
ruls末尾增加
- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  - nodes
  verbs:
  - list
  - watch


长亭雷池使用过程中

出现以下两种情况:

1、因规则配置,导致两次安全访问被拦截,尝试多种方法无法恢复访问,最终重新安装防火墙,浪费掉了一定的时间与精力
2、配置拦截规则后,规则拦截异常,以下为情况规则描述
异常规则.png

  拦截情况

拦截情况.png

为了预防这种情况的发生,可实行以下应急方案:

1、`/date`下的`safeline`进行定期备份,此文件夹下的配置文件是长亭雷池防火墙当时的状态,可以理解为一个快照
2、长亭雷池默认端口9443,以上方案生效时可以放开防火墙,实现`IP:9443`访问

在进行测试过程中,规范行为:

1、测试范围中`指定host`,影响最小化
2、发布黑名单之前进行`密码验证`,`完毕后`进行发布黑名单
3、配置`白名单`,针对指定IP组和域名的双重访问条件,使得访问颗粒最小化
测试请不要针对维护模式下的网站测试,维护模式各种规则均不生效

JumpServer安装

1、下载官网下载

cd /opt
tar -xvf jumpserver-offline-installer-v3.10.6-amd64.tar.gz     #长时间等待解压
cd jumpserver-offline-installer-v3.10.6-amd64

2、配置必要的端口设置

vim /opt/jumpserver-offline-installer-v3.10.6-amd64/`config-example.txt` 
HTTP_PORT=8088            # 对外提供服务端口, 如果与现有服务冲突请自行修改

3、修改DOMAINS,否则报错出现

JumpServer报错.png

DOMAINS=192.168.1.1:8088      # 可信任 DOMAINS 定义

1、忘记修改DOMAINS,则修改

vim /opt/jumpserver/config/config.txt
DOMAINS=192.168.1.1:8088

2、然后执行

./jmsctl.sh restart

[tag type="primary"]重新安装后,数据不会丢失,在/data/jumpserver[/tag]

忘记密码

1、进入 jms_core 容器

docker exec -it jms_core /bin/bash

2、切换到apps目录里面

cd apps/

3、修改admin密码

python manage.py changepassword admin

注(admin用户的密码和不能有admin的字样)输入两次密码

Changing password for user 'Administrator(admin)'
Password:      #第一次密码
Password (again):   #在输入一次密码
Password changed successfully for user 'Administrator(admin)'

前言

fail2ban可以监视你的系统日志,然后匹配日志的错误信息执行相应的屏蔽动作。网上大部分教程都是关于fail2ban+iptables组合,考虑到CentOS 7已经自带Firewalld,所以这里我们也可以利用fail2ban+Firewalld来防CC攻击和SSH爆破。

准备工作

1、检查 Firewalld 是否启用

启用Firewalld后会禁止所有端口连接,因此请务必放行常用的端口,以免被阻挡在外,以下是放行SSH端口(22)示例,供参考

#放行22端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
#重载配置
firewall-cmd --reload
#查看已放行端口
firewall-cmd --zone=public --list-ports

2、安装 fail2ban

#CentOS内置源并未包含fail2ban,需要先安装epel源
yum -y install epel-release
#安装fial2ban
yum -y install fail2ban

jail.conf为主配置文件,相关的匹配规则位于filter.d目录
3、配置规则

"新建jail.local文件

[DEFAULT]
ignoreip = 127.0.0.1/8          #白名单
bantime  = 86400                #锁定多少秒
findtime = 600                  #多少分钟内失败多少次锁定
maxretry = 5                    #600秒内失败5次锁定
banaction = firewallcmd-ipset   #屏蔽IP所使用的方法,这里使用firewalld
action = %(action_mwl)s         #触发规则后的选择行为

[sshd]
enabled = true
filter  = sshd                  #使用内置的规则sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure       #监控系统登录失败日志

阅读剩余部分

安全组放行8810

上游端口8810

目标端口443

配置可达

安全组不放行8820端口,waf防火墙就会失效

但是可以直接通过8820端口访问,简而言之就是绕过WAF直接访问


可以设置listen 8810 ssl;

这样只可以直接使用域名或IP,www.lius.fun:8810或https://192.168.1.1:8810

访问验证

auth_basic "Restricted Area"; auth_basic_user_file
/etc/nginx/.htpasswd; #启用访问认证 不会对WAF防火墙转发照成影响,而导致访问失败

阅读剩余部分