在 kubernetes 集群中暴露邮件或 ssh 蜜罐

exposing mail or ssh honeypot in kubernetes cluster

我正在 Kubernetes 集群中试验 SMTP (mailoney) 和 SSH 蜜罐,以暴露给大坏蛋 WWW。我似乎无法弄清楚如何让它工作,因为我最近才开始了解 Kubernetes。

我现在有一些配置,例如我的 mailoney.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mailoney
spec:
  selector:
    matchLabels:
      app: mailoney
  template:
    metadata:
      labels:
        app: mailoney
    spec:
      containers:
      - name: mailoney
        image: dtagdevsec/mailoney:2006
        ports:
        - containerPort: 25

和服务配置:

apiVersion: v1
kind: Service
metadata:
  name: ingress-mailoney
  labels:
    name: mailoney
spec:
  type: LoadBalancer
  ports:
    - name: smtp
      port: 25
      targetPort: 25
      protocol: TCP
  selector:
    name: mailoney

但是当配置负载均衡器时,它会在端口 >30000 上公开服务,我知道这是 Kubernetes 的默认行为。但是我如何准确地配置负载均衡器以分别允许端口 25 和 22 上的连接并实际允许连接到蜜罐?

我是否忽略了一些非常明显的东西?

感谢任何帮助。

您可能在 kubectl get service 输出中看到了节点端口?这是一个转移注意力的问题,最终的 LB 端口仍将按照要求为 25。您可以在您的云提供商的系统中确认这一点。节点端口是云端LB与内网的中间中继。

正如@coderanger 提到的,您的云提供商将处理所有事情并使原始端口可用。 阅读您的服务清单我可以注意到您的选择器是错误的,它应该指向 app: mailoney 而不是 name:。我测试了它,它使用了正确的选择器。

清单应如下所示:

apiVersion: v1
kind: Service
metadata:
  name: ingress-mailoney
  labels:
    name: mailoney
spec:
  type: LoadBalancer
  ports:
    - name: smtp
      port: 25
      targetPort: 25
      protocol: TCP
  selector:
    app: mailoney

将其更改为 app: mailoney 后,我得到以下结果:

$ kubectl get service ingress-mailoney -o wide
NAME               TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE   SELECTOR
ingress-mailoney   LoadBalancer   10.31.250.51   104.197.119.16   25:30601/TCP   44m   app=mailoney
$ telnet 104.197.119.16 25
Trying 104.197.119.16...
Connected to 104.197.119.16.
Escape character is '^]'.
220 mailrelay.local ESMTP Exim 4.81 #1 Thu, 29 Jul 2010 05:13:48 -0700

如您所见,它正在按设计运行。如果这个答案对您有帮助,请告诉我。