LabHub

네트워크 기초 — 리눅스 VM 에서 손으로 · HTTP 와 종합 · 실습

라우터·DNS·방화벽·NAT 를 갖춘 작은 네트워크

LabHub 에서 이어서 보기

이 실습은 VM 에서 돕니다

앞의 아홉 실습을 하나로 모읍니다. 네임스페이스 home(사용자 쪽)과 dmz(서버 쪽)
사이에 VM 자신이 라우터로 서고, 그 라우터가 DNS 서버·방화벽·NAT 까지
맡습니다. 집 공유기 한 대가 하는 일의 축소판입니다. 60분 실습이라 시간을
한 번 연장해야 할 수 있습니다 — 작업물은 VM 과 함께 사라지니 미리 알아 두세요.

목표

두 서브넷을 잇고, 이름으로 서버를 찾게 하고, 웹만 통과시키고, 사설망을
인터넷에 내보내고, 그 전부를 패킷으로 확인한 뒤 보고서로 남깁니다.

왜 중요한가

지금까지는 한 번에 한 층만 봤습니다. 실제 장애는 여러 층이 겹쳐 있습니다 —
이름은 풀리는데 방화벽이 막고, 방화벽은 열렸는데 돌아오는 경로가 없고. 한
네트워크를 처음부터 끝까지 세워 본 사람은 "안 된다" 를 들었을 때 어느 층부터
볼지 순서가 있습니다: 링크 → 주소 → 이웃 → 경로 → 이름 → 포트 → 방화벽 → 응답.

단계

1. 네임스페이스 home·dmz 와 veth home0(home, 10.40.1.10/24)↔r-home(루트, 10.40.1.1/24), dmz0(dmz, 10.40.2.10/24)↔r-dmz(루트, 10.40.2.1/24)를 만들고, 두 네임스페이스의 기본 경로와 루트의 ip_forward 를 설정해 homedmz ping 이 되게 하세요.
2. /root/final/www/index.html 을 만들고 dmz 안에 10.40.2.10:80 을 듣는 웹 서버를 띄워(로그는 /root/final/http.log) home 에서 curl http://10.40.2.10/ 이 되게 하세요.
3. /etc/dnsmasq.d/lab.conf 로 dnsmasq 가 10.40.1.1 에서 듣고 web.lab.internal10.40.2.10 을 답하며 나머지는 상류로 넘기게 하고, /etc/netns/home/resolv.confhome 이 그 서버를 쓰게 하세요.
4. home 에서 curl -si http://web.lab.internal/ 의 응답을 /root/final/byname.txt 에 저장하세요.
5. 루트에 테이블 inet labfwforward 훅 체인(정책 drop)을 만들고, established,relatedhomedmztcp dport 80 만 허용해 웹은 되고 ping 은 안 되게 하세요.
6. 테이블 ip labnat10.40.1.0/24 의 마스커레이드를 넣고 forwardhome→uplink 의 tcp dport { 80, 443 } 을 허용해, home 에서 curl -sI http://archive.ubuntu.com/ 의 첫 줄을 /root/final/internet.txt 에 저장하세요.
7. r-dmz 에서 캡처하며 home 에서 웹을 한 번 더 받아, 10.40.1.1010.40.2.10.80 으로 보낸 SYN 이 보이는 출력을 /root/final/capture.txt 에 저장하세요.
8. 전체 규칙을 /root/final/ruleset.nft 에 저장하고, /root/final/report.mdhome_ip=·dmz_ip=·dns=·ping_blocked= 네 줄과 함께 "web.lab.internal 이 안 열린다" 는 신고를 받았을 때 어느 순서로 볼지를 적으세요.

참고

단계 8개

  1. 두 서브넷과 라우터
  2. DMZ 의 웹 서버
  3. 라우터가 DNS 도 맡는다
  4. 이름으로 연다
  5. 웹만 통과
  6. 집 안을 인터넷으로
  7. 패킷으로 확인
  8. 규칙과 보고서