LabHub
배우기 러닝패스 코스

폐쇄망 현장 — 방산·국방 도메인 · 나가는 통신이 없다는 것을 자료로 보이기 · 실습

나가는 통신이 없다는 것을 자료로 보이기

LabHub 에서 이어서 보기

목표

제품 구성 파일과 세 가지 기록만으로 "인가받지 않은 바깥 통신이 없다" 를 판정하고, 감리에 그대로 낼 수 있는 요약을 만든다. 확인한 범위와 확인하지 못한 것이 같은 문서에 들어 있어야 한다.

왜 중요한가

망 분리 환경의 인도에서 "밖으로 나가지 않습니다" 는 문장으로 받아들여지지 않는다. 제품에는 업데이트 확인, 라이선스 검사, 원격 진단, 사용 통계, 시각 동기가 들어 있고 대부분 기본값이 켜짐이다.
이 실습 파드에는 커널 권한이 하나도 없어 tcpdumpiptables 도 동작하지 않는다. 패킷을 잡아 보이는 길이 애초에 없다는 뜻이다. 실제 현장에서도 그 자리는 네트워크 팀이 내주는 방화벽 정책 사본과 장비 로그가 채우고, 개발자가 낼 수 있는 자료는 구성과 기록이다. 그래서 이 실습은 설정과 기록을 근거로 판정한다. 이것이 이 실습의 가정이다.
숫자를 맞히는 것보다 세 가지를 구분하는 일이 중요하다. 주석으로 가려 둔 항목과 기본값으로 켜져 있는 항목, 막힌 시도와 나간 통신, 그리고 이름으로 대조할 수 없어 아직 모르는 것.

단계

1. python3 /root/egress/mkdata.py 로 판정의 바탕이 될 자료를 만든다. 구성 3개, 허용 목록, 프록시·DNS·형상 변경 기록이 나온다.
2. 구성에서 바깥을 가리키는 주소를 전부 뽑아 /root/egress/endpoints.tsvhost port scheme state source 로 적는다.
3. 허용 목록과 대조해 /root/egress/classify.tsvhost port state verdict 로 세 갈래로 가른다.
4. 프록시 기록에서 미허용 목적지로 간 시도를 세어 /root/egress/attempts.tsvhost port attempts ok auth blocked 로 적는다.
5. 질의 기록에만 있는 목적지를 /root/egress/dns-only.tsvhost queries nxdomain 으로 적고, 이 파드의 이름 해석을 직접 관찰해 /root/egress/resolver.txt 에 남긴다.
6. 세 기록을 시각으로 이어 /root/egress/timeline.tsvhost change_id first_dns first_proxy 로 적는다.
7. 원본을 두고 /root/egress/conf-after/ 에서 구성을 끈 뒤 python3 /root/egress/collect.py 로 기록을 다시 뽑고, /root/egress/after.txt 에 끄기 전후의 숫자를 적는다.
8. /root/egress/egress-report.json/root/egress/egress-report.txt 에 감리 제출용 요약을 낸다.

참고

단계 8개

  1. 판정의 바탕이 될 자료를 망 안에서 만들기
  2. 구성에서 바깥 주소를 빠짐없이 뽑기
  3. 허용 목록과 대조해 세 갈래로 가르기
  4. 프록시 기록에서 실제 시도를 응답별로 세기
  5. 연결은 없고 이름만 물어본 목적지 찾기
  6. 세 기록을 시각으로 이어 언제부터인지 짚기
  7. 끄고 다시 수집해 사라졌음을 보이기
  8. 감리 제출용 요약 내기