14주차 CSM_실습일지📝

ᴶᴬᴱᵞᴼᴼᴺ·2021년 6월 4일
0

컴퓨터 시스템관리

목록 보기
14/15
post-thumbnail

💡 14주차에는 방화벽 서버와 관련된 용어와 작동방식에 대해 배웠으며 방화벽 서버를 구현해보는 실습을 하였다.

실습과제

📌 아래와 같이 방화벽 컴퓨터 구축 (사설IP 주소 사용)하고, Server(b)에 웹 서버 구축 한 뒤, wordpress 를 설치하고, Host Computer 에서 접속하기


실습과제 결과 : https://youtu.be/HfjPbVidTSA

새로 배운 내용

✔ 방화벽 Firewall
: 미리 정의된 보안 규칙에 기반하여, 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템

▪ 신뢰할 수 있는 내부 네트워크와 신뢰할 수 없는 외부 네트워크간의 장벽 구성

▪ 정책 기반 방화벽

-모두 차단 또는 모두 허용
-특정 서버에서 오는 얼마 이상의 http 트래픽을 허용하고 로그 남기기

▪ 구현 방법에 따른 방화벽 분류

  1. SW 방화벽
    👉속도는 상대적으로 느리지만 쉽게 설치, 설정, 제어 가능
  2. HW 방화벽 : 초당 패킷 처리 수 증가
    👉속도 빠르고 성능 좋음. 하지만 비싸고 공간을 차지하며 설정하는데 불편함
  3. NPU 기반 방화벽 : SW+HW 방화벽

▪ 방화벽 역사

▪ nonroutable IP 주소를 활용한 네트워크 구성

-사설 IP를 이용하여 내부 컴퓨터 사이의 트래픽을 허용하고, 외부 인터넷과의 접속은 허용 또는 제한하는 방법

-사설 IP 범위
👉10.0.0.0~10.255.255.255 / 172.16.0.0~172.31.255.255 / 192.168.0.0~192.168.255.255
-사설 IP 범위에 있는 컴퓨터는 인터넷 라우터를 통과할 수 없으나 설정(IP 마스커레이딩)을 통해 외부 인터넷 접속 가능

▪ IP 마스커레이딩 (IP Masquerading)

-내부 컴퓨터들이 리눅스 서버를 통해 인터넷 등 다른 네트워크에 접속할 수 있게 해주는 기능

-리눅스의 NAT (Network Address Translation)
📍NAT : IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록 하면서 라우터를 통해 네트워크 트래픽을 주고받는 기술. 주로 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위해 사용됨.

✔ iptables
: 시스템 관리자가 리눅스 커널 방화벽이 제공하는 테이블과 그것을 저장하는 체인, 규칙들을 구성할 수 있도록 해주는 사용자 공간 응용 프로그램

▪ 체인 chain : 넷필터에서 제공하는 5개의 hook 지점 (패킷처리 지점)

🔗이미지 출처 : https://webterror.net/?p=1622

PREROUTING : 장치에 패킷이 도착했을 때
INPUT : 호스트 컴퓨터를 향한 모든 패킷에 대한 처리
OUTPUT : 호스트 컴퓨터에서 발생하여 외부로 내보내는 패킷에 대한 처리
FORWARD : 호스트 컴퓨터가 목적지가 아닌(단지 지나가는) 패킷에 대한 처리
POSTROUTING : 패킷이 장치 밖으로 나가는 시점
-규칙 : ACCEPT, DROP(없던 것처럼 버림), REJECT(버리고 응답 패킷 전송), LOG, RETURN(호출 체인 내에서 패킷 처리 계속)
-기본정책 : 모든 패킷에 대해 DROP 하고, 특별히 지정된 포트와 IP 주소에 대해 ACCEPT 수행

▪ 테이블 table 종류 (기본 테이블은 필터 테이블)
-filter : 패킷 필터링에 사용되는 기본 테이블
-nat : 출발지, 목적지 IP주소와 포트번호 변환하는 nat 에서 사용하는 테이블
-mangle : 패킷 헤더의 특별한 갱신에 사용되는 테이블
-raw : 연결을 추적하지 않는 패킷의 처리에 사용되는 테이블

[실습💻] 방화벽 컴퓨터 구현하기

  • 네트워크 구성도
  1. Server(b) 설정

    : VMware 네트워크 설정 변경
    👉Network connection 옵션 네트워크 정보를 VMnet0(Bridged) 체크)

    : Server(b) IP 주소 설정하고 reboot

    : ip addr 또는 hostname -I 로 IP 주소 변경된거 확인 ▶ ping -c 3 www.kernel.org 를 입력하여 외부와 연결이 되는지 확인 (외부인터넷으로 연결하는건 아직 설정하지 않았기 때문에 외부로는 연결이 되지 않고있음)
    참고로 ping -c 으로 ping 을 보내는 횟수 지정할 수 있음!

  2. Client 설정

    : Client IP 설정
    (IP 설정 전에 Server(b)에서 했던 것처럼 네트워크 설정을 Bridged 로 설정해줘야 함)

    : ping -c 3 www.kernel.org 를 입력하여 외부와 연결이 되는지 확인 (외부인터넷으로 연결하는건 아직 설정하지 않았기 때문에 외부로는 연결이 되지 않고있음)

  3. Server 설정

    : VMware 네트워크 설정에서 네트워크 장치 하나 추가하고 새롭게 추가된 Network Adapter2 는 Bridged 로 네트워크 설정함

    : 새롭게 추가된 네트워크 장치(ens35) 의 IP 설정하고 reboot

    : ifconfig 로 IP 주소 확인 (ens32, ens35)

  4. Server, Server(b), Client 가 모두 동작중인 상태에서 네트워크 상태 확인

    : Server(b)가 자기 자신,Server의 ens35, Client 각각에 ping을 날려서 네트워크 상태 확인

    : Client가 ping을 통해 자기 자신, Server의 ens35, Server의 ens32 그리고 외부와의 연결상태 확인
    (외부와의 연결 안되어있음을 확인함)

    : Windows Powershell을 통해 외부에서 내부로의 연결 확인

  • 방화벽 정책
  1. 외부 컴퓨터는 내부에 접속할 수 없도록 한다.

  2. 내부 컴퓨터는 외부 인터넷을 사용할 수 있도록 한다.

    : 커널 설정 파일 변경

    : 커널 설정 파일 적용 및 내용 확인

    : ens35 장치로 모든 패킷 통과하도록 설정하는 방화벽 규칙 추가 ▶ iptables -nL --line-numbers 로 규칙확인 ▶ (이미지 첨부는 안했지만) ens32 에 마스커레이드 허가 // iptables --table nat --append POSTROUTING --out-interface ens32 --jump MASQUERADE ▶ 설정한 내용 저장 // iptables-save > /etc/iptables.rules

    : Client 에서 인터넷 접속

  3. 외부 컴퓨터가 방화벽 서버의 공인 IP로 웹 서비스를 요청하면, 내부 웹 서버가 서비스한다.

    : Server(b)에 nginx 웹 서버 설치하고 서비스 시작 systemctl start nginx , 시스템 부팅시 서비스 자동실행 설정 systemctl enable nginx 하고 http 로 접근하는 패킷 접속 허용을 위해 ufw allow http를 함

    : Server에 규칙 추가
    iptables --table nat --append PREROUTING --in-interface ens32 --jump DNAT --proto tcp --dport 80 --to-destination 10.1.1.20
    // nat 테이블에 규칙 추가(append), ens32 장치로 패킷이 들어오면, 패킷의 도착지 주소를 변경(DNAT) 하는데, tcp 프로토콜인지 체크하고, 80 포트로, 도착지 ip 주소는 10.1.1.20 로 설정함.
    iptables-save > /etc/iptables.rules // 규칙 반영

    : Server에서 ufw disable 로 방화벽 비활성화한 후 Host computer에서 웹 서버에 접속

문제 발생 및 해결방안

  • Server(b) 설정에서 네트워크 장치를 브릿지(Bridged)로 변경하면 외부 인터넷 접속이 안되어서 apt update 를 입력했을때 실행이 되지 않아야 하는데 내 Server(b)에서는 외부 인터넷 접속이 잘 되어서 apt update를 하든 ifconfig 를 하든 다 실행이 되는 특이한 문제가 발생하였다.🔽

    네트워크 장치를 브릿지를 설정하고 부팅한 뒤 ifconfig 로 Server(b)의 ip 주소를 확인해봤는데 사진과 같이 192.168.~ 의 사설 ip 로 지정되어 나타났다. 교수님께서 네트워크 장치를 브릿지로 설정할 경우 사설 ip 로 지정되지 않을거라고 말씀하셔서 다시 네트워크 설정을 하고 실행해봐도 이전과 동일하게 나왔다.🔽

    네트워크 설정을 Bridged로 설정한 상태에서 Server(b)에서 IP 주소를 10.1.1.20으로 변경한 후에도 외부 인터넷 접속이 되는지 확인해봤는데 여전히 외부 인터넷 접속이 잘 되었다.🔽

    방화벽 규칙을 설정하기 전에는 외부에서 내부로의 연결을 확인했을 때 연결이 되지 않는다고 나와야 하는데 나의 경우, Windows Powershell에서 Server의 내부망에서 쓰이는 네트워크 장치인 ens35(ip 주소 : 10.1.1.1) 에 ping을 날렸을 때 연결이 잘 된다고 나왔다.🔽

    ✍해결 시도 : 교수님께서 VMware 자체의 문제일 수도 있다고 말씀하셨고 어떤 큰 문제가 발생하기 전까지 실습을 이어서 진행해보라고 하셨다. 다행히 실습과 과제를 하는데 지장은 없었다. 위와 같은 문제가 왜 발생했는지 명확하게 알아내진 못했지만 VMware 자체의 문제일 가능성이 크다고 판단되어서 기존에 설치되어있던 VMware 를 삭제하고 다시 깔아보았다. 그리고 나서 브릿지로 네트워크 설정을 변경하고 외부 인터넷 접속을 확인해봤는데 이전과 동일한 문제가 나타났다..이 문제의 원인이 뭔지, 어떻게 해결할 수 있는건지 알아내고 싶었는데 그러지 못했다는게 너무 아쉽고 속상하다.

  • Server(b) 에 웹 서버 구축을 위해 APM을 설치하고 웹 서버의 ip 주소를 확인한 다음, 외부 접속 허용 ufw allow 80 까지 한 상태에서 호스트 컴퓨터의 웹 브라우저에서 웹 서버가 잘 작동하는지 확인을 해봤는데 사이트에 연결할 수 없다고 나왔다.

    ✍해결 : Client의 웹 브라우저 firefox에 Server(b)의 ip 주소를 입력하여 웹 서버가 작동하는지 확인해봤는데 거기서는 웹 서버가 잘 작동하였다. 그래서 뭐가 문제일까 이번 주에 배운 강의자료를 살펴보던 중 방화벽 컴퓨터 구현에서 외부 컴퓨터가 방화벽 서버의 공인 IP로 웹 서비스를 요청하면, 내부 웹 서버가 서비스하도록 하는 규칙을 Server에 추가하지 않아서 생긴 문제 같다고 생각했다. 네트워크 구성도를 보면 Host computer에서 Server의 ens32 장치의 ip주소를 통해 내부로 연결됨을 알 수 있다. Server ip 주소를 입력하여 웹 서비스를 요청하고 도착지 주소를 내부(server(b))의 ip주소로 변환하여 웹 서버가 작동하도록 하기 위해 방화벽 정책3을 설정해줘야 함을 알게되었다. Server에 규칙을 추가한 후 호스트 컴퓨터의 웹 브라우저에서 Server의 ip주소로 접속하였더니 Wordpress 설치하는 페이지가 잘 나왔다.

참고할 만한 내용

회고

  • 플러스(+)
    : 방화벽 컴퓨터 구축과 웹 서버를 둘다 해야하는 과제가 주어져서 이번 주에 배운 내용과 저번 주에 배운 내용들을 짚고 넘어갈 수 있었다. 방화벽 컴퓨터 구축하는 것은 실습에서 진행된 것과 비슷해서 어려움 없이 할 수 있었는데 Server(b)에 웹 서버를 구축할 때는 저번 주에 배운 내용인데도 헷갈리는 부분들이 몇몇 있었다. 웹 서버 구축할 때 발생한 문제를 해결하는 과정에서 내가 어떤 개념들에 대한 이해가 부족한지 어느 부분을 다시 복습해야 하는지를 알 수 있었다. 방화벽 서버의 작동방식에 대해서도 처음에는 익숙하지 않아서 이해하기 쉽지 않았지만 네트워크 구성도 그림을 보고 강의자료를 다시 살펴보니 이해가 점점 되는 것 같았다.

  • 마이너스(-)
    : 메일 서버를 다룰 때와 비슷하게 실습과 과제를 하면서 문제가 많이 발생하였고 브릿지 설정 후 외부 인터넷 접속 문제는 왜 발생한건지 알 수 없어서 답답하기도 하고 아쉽기도 했다. VMware 재설치로도 해결되지 않는 문제라면 어떻게 해결할 수 있는 것인지 궁금하고 나중에라도 꼭 알아내고 싶다. 그래도 실습을 이어나가는데 큰 문제가 발생하지 않아서 다행이었다.

  • !!!!!
    : 방화벽의 기본적인 용어들과 작동방식을 새롭게 알아가며 실습을 통해 방화벽 서버를 구현해볼 수 있었다. 실습과 과제를 하던 중 문제해결을 위해 시간이 많이 소요되고 중간중간 해결이 잘 안되어 어려움을 겪기도 했지만 내가 아직 제대로 이해하지 못한 개념이 무엇인지 알아갈 수 있었고 포기하지 않고 계속 고민해보며 결국은 만족스러운 결과를 얻을 수 있어서 좋았다. 리눅스를 전혀 모르던 내가 한 학기 동안 매주 다양한 주제로 실습과 과제를 통해 새로운 내용들을 배워갈 수 있었다는 점에서 유익했고 문제가 발생했을때 대처해나가는 방법을 알 수 있었다. 실습일지를 작성하면서 공부한 내용을 정리하며 복습할 수 있었고 실습을 어떤 과정으로 진행하였으며 어떻게 문제를 해결했는지 하나하나 기록이 되어있어서 나중에 시간이 지났을때 보더라도 도움이 많이 될 것 같다는 생각을 했다. 한 학기 동안 컴퓨터 시스템관리 수업을 해주시고 문제해결에 어려움을 겪을 때 질문을 드리면 도움이 될만한 답변을 주셨던 교수님께 감사드린다:-)

0개의 댓글