urbernetes로 프로덕션 환경 구축을 목표로 - 네트워크 보안 편 -

소개



docker+kubernetes로 웹 애플리케이션이 움직이는 환경이 우선 구축한 것은 좋지만, 네트워크적으로 안전한지 불분명했기 때문에 조사했습니다.

시스템 구성



시스템 구성은 이런 느낌입니다.


1. IP 주소와 포트 개방 상황



외부에서 연결할 수 있는 IP 주소와 어떤 포트가 해제되었는지 확인합니다.

1.1 결과


  • 외부 공개되고 있는 IP는 4개였습니다.
  • ingress : 웹 서버 앞의 부하 분산
  • kubernetes 관련 API : kubernetes를 실행하는 데 필요한 것
  • node A : node 1번째
  • node B : node 2번째

  • 외부 공개되고 있는 TCP 포트도 대체로 기대치대로이지만, ingresss가 불필요한 포트를 너무 개방하고 있습니다. (443만으로도 좋지만)
  • service와 pod는 각각 직접 통신할 수 없고, ingress에의 http 통신은 어떻게 pod에 액세스 하고 있는지 몰랐습니다.
  • node에 대해서는 ssh의 대책은 할 필요가 있지만, 직접은 공격할 수 없을 것 같습니다.
  • docker나 kubernetes 경유로 공격되는 곳을 막을 필요가 매우 있을 것 같습니다.

  • 1.2 조사 방법



    ping, route, ifconfig, nmap을 구사하여 조사했습니다.


    $ ping 10.146.0.4
    10.146.0.4 に ping を送信しています 32 バイトのデータ:
    要求がタイムアウトしました。
    要求がタイムアウトしました。
    要求がタイムアウトしました。
    要求がタイムアウトしました。```
    

    nmap
    $ nmap -P0 34.85.112.**
    Not shown: 998 filtered ports
    PORT     STATE  SERVICE
    22/tcp   open   ssh
    3389/tcp closed ms-term-serv```
    

    ifconfig
    Node A ~ $ ifconfig
    cbr0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1460
        inet 10.52.1.1  netmask 255.255.255.0  broadcast 0.0.0.0
        ・・・
    docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 169.254.123.1  netmask 255.255.255.0  broadcast 0.0.0.0
        ・・・
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.146.0.4  netmask 255.255.255.255  broadcast 10.146.0.4
        ・・・
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        ・・・
    

    2. 대책



    생각보다 밖에서 액세스할 수 있는 상태가 되어 있지 않았기 때문에, 특히 없습니다. pod간 통신을 제어하려고 하면 Network Policy를 사용해 하는 것 같지만, 지금은 하지 말아 둡니다.
    정말로 프로덕션 환경을 만들려고 하면, 앞에 waf라든지 ips·ids라든지 넣지 않으면 안 되겠지요.

    좋은 웹페이지 즐겨찾기