본문 바로가기

개발공부/컴퓨터시스템관리

[컴퓨터시스템관리] 14주차 실습일지

● 실습 과제 결과

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

 

 

< 네트워크 상태 확인 >

Server에서
Server(b)에서 / Client에서

 

● 새로 배운 내용

1. 방화벽 Firewall

방화벽

: 미리 정의된 보안 규칙에 기반하여, 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템 - 신뢰할 수 있는 내부 네트워크와 신뢰할 수 없는 외부 네트워크간의 장벽 구성

ㄴ 신뢰할 수 있는 내부망 (LAN으로 연결되어있음)와 신뢰할 수 없는 외부망 (WAN)

 

- 내부망? 개발자 또는 관리자가 직접 설치하거나 사용하고있는 온라인 또는 오프라인을 통해 확인할 수 있는 (신뢰할 수 있는) 컴퓨터

- 외부망? 인터넷에 연결되어있는 수많은 컴퓨터 중에는 신뢰할 수 없는, 악의적인 목적을 가진 해커들의 컴퓨터도 연결 되어있음. 

=> 신뢰할 수 있는 내부와 신뢰할 수 없는 외부를 구분할 수 있는 장벽이 방화벽!

 

정책 기반 방화벽 : 모두 차단 또는 모두 허용 / 특정 서버에서 오는 얼마 이상의 http 트래픽을 허용하고 로그 남기기

(정책을 수립하고 그 정책에 따라 데이터를 주고받음.)

 

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

• SW 방화벽 : 속도가 상대적으로 느리지만 쉽게 설정, 제어, 설치 가능 

  (소프트웨어를 통해 방화벽을 구축)

• HW 방화벽 : 초당 패킷 처리 수 증가 / 성능(속도)이 좋지만 비싸고 공간 차지, 설정 불편

  (방화벽 기능을 하는 하드웨어 장치를 별도로 만들어서 사용)

• NPU 기반 방화벽 : SW+HW 방화벽

 

 방화벽의 역사 

패킷

패킷은 헤더정보와 데이터정보가 담겨있음. 

보내려고 하는 데이터를 패킷 단위로 끊고 (D1, D2, D3 ...) 이 데이터를 누가 어디로 보낼건지에 관련된 메타정보가 헤더에 포함됨. 

=> 방화벽이 패킷이 들어올 때 해당 패킷이 들어오게 할 것인지 고름. 헤더정보를 확인해서 출발과 목적지(IP주소)를 보고 정책을 확인해서 : 1세대 방화벽 (IP나 포트 정보등을 가지고 해당 패킷을 통과시킬 것인지 말 것인지 결정)

 

 1세대 방화벽 : 패킷 필터 

- 패킷 Packet 단위 검사

- 특정한 ip 를 허용 또는 거부 / 특정한 port 를 허용 또는 거부

 

• 2세대 방화벽 : 스테이트풀 인스펙션

- 패킷 필터시 단점을 보완하기 위한 세션 단위 검사

- 스테이트 풀 state poll

 

패킷 단위로 검사할 때, 패킷의 수가 증가한다면 방화벽의 일이 많아짐. - 패킷을 필터링하는데 시간이 너무 많이 걸림.

-> 이 단점을 보완하기 위해 세션 단위로 검사 (세션이 안전하다고 인증된다면 그걸 통해서 들어오는 패킷들은 안전하다고 인정)

 

• 3세대 방화벽 : 애플리케이션 방화벽

- 응용 프로그램에 미칠 영향을 분석하는 방화벽

- 인간 친화적으로 ip, MAC 주소가 아닌 도메인 주소를 이용하여 정책 수집

 

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

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

  예) 무선공유기(무선 AP)를 달면 여러 대의 컴퓨터에 인터넷을 접속해서 사용 가능 : 사설 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

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

  내부의 사설 IP를 외부로 접속할 때 그 사설 IP를 그대로 보여주는 것이 아니라 공개된 공인 IP 하나를 가지고 외부 인터넷을 접속 

내부망(LAN)을 통해 컴퓨터들이 연결되어있음. 외부의 인터넷에 접속할 때는 공인 IP 필요 : 203.10.23.1

 

사설 IP 주소가 192.168.1.2인 컴퓨터가 외부의 인터넷에 접속하기 위해 Router를 통해 지나가는 순간에, 패킷의 헤더정보를 수정해서 203.10.23.1으로 바꿔서 (일종의 숨김) 외부로 보냄. -> 인터넷에 접속되어있는 외부 컴퓨터의 입장에서는 203.10.23.1이 보낸 것으로 인식함. 

외부 컴퓨터에서 보낼 때도 203.10.23.1로 보내면, Masquerade Router가 192.168.1.2로 변환해서 보내줌. 

 

 

2. 방화벽 컴퓨터 구현하기 실습 

 방화벽 정책

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

• 외부 컴퓨터는 내부에 접속할 수 없도록 한다.

• 외부 컴퓨터가 방화벽 서버의 공인 IP로 웹 서비스를 요청할 때는 내부에 있는 웹 서버가 서비스 한다.

컴퓨터 네 대

- Client

- Server(b) : webs erver가 설치

- Server  : 방화벽 서버 (내부망에서 쓰는 네트워크 장치인 ens35와 외부망 연결에 쓰이는 네트워크 장치인 ens32 두 개를 사용)

- Host Computer : 외부, 실제로 인터넷에 접속할 수 있는 공인 IP주소를 갖고있는 외부망 

   

(Client, Server(b), Server가 내부망 / Host Computer가 외부망)

 

설정 -  Bridged로 변경 

 

▶ Server(b)에서 네트워크 주소 설정

vi /etc/netplan/00-installer-config.yaml

reboot 

 

ip addr / hostname -I      #IP 주소가 제대로 변경되었는지 확인

ping -c 3 www.kernel.org           #www.kernel.org라는 사이트에 핑을 3번 보냄

ㄴ> 내부 IP 주소는 설정했지만, 외부로 연결은 설정하지 않았기 때문에 연결 안됨. 

 

▶ Client에서 네트워크 주소 설정

네트워크 연결 설정에서 위와 같이 설정

reboot

ping -c 3 10.1.1.20

 

▶ Server에서 네트워크 주소 설정

네트워크 장치 추가 후 Bridged로 설정
네트워크 연결 설정 > IPv4에서 위와 같이 설정 
재부팅 후 ifconfig

▶ 네트워크 상태 확인

server에서 

 

server(b) / client에서 

-> 내부망끼리는 잘 연결이 되고, 외부망으로는 연결이 안 되어있음. 

 

Host Computer 에서

▶ iptables

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

PC에 패킷이 들어와서 나가는 과정

1) PC에는 동작중인 어플리케이션이 내부에 있음. 패킷이 네트워크 장치를 통해 들어오면 PREROUTING 단계 

2) 그 패킷이 이 컴퓨터의 어플리케이션에 요청되는 패킷이라면, 어플리케이션에 보내야 함. 보내기 위한 단계가 INPUT 단계 -> 어플리케이션에 접속

3) 어플리케이션이 패킷의 데이터들을 처리해서 처리된 결과가 다른 PC로 보내져야 하는 파일이라면 OUTPUT 

4) 실제 PC 밖으로 나가기 전 단계가 POSTROUTING 단계 -> PACKET OUT (장치로부터 나감)

 

PREROUTING과  POSTROUTING 단계가 왜 있을까?

PC의 어플리케이션에 들어가지 않고 PC를 경유하는 패킷도 존재하기 때문 : PREROUTING에서 FORWARD 단계로 -> POSTROUTING을 거쳐  PACKET OUT

 

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

    (PREROUTING / INPUT / OUTPUT / FORWARD / POSTROUTING)

 

이 체인에 규칙을 정할 수 있음. : ACCEPT, DROP(없던 것 처럼 버림), REJECT(버리고 응답 패킷 전송), LOG, RETURN(호출 체인 내에서 패킷 처리 계속)

 

테이블 table : 어떤 체인에서 어떤 규칙을 정할 것인지 저장한 공간 

• filter : 패킷 필터링에 사용되는 기본 테이블

• nat : 출발지, 목적지 IP 주소와 포트번호 변환하는 nat 에서 사용하는 테이블

 

▶ 정책1) 외부 컴퓨터는 내부에 접속할 수 없도록 한다.

forward, input, output : 패킷이 서버에 들어올 때, 나갈 때, 지나갈 때 -> 막음, 서버를 통해 패킷이 들어왔을 때 마치 안온 것처럼 버림 (DROP)

 

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

패킷 포워딩 : ens 35(10.1.1.1)에서 IP주소를 192.168.234.128로 바꾸어주는 기능 필요

vi /etc/sysctl.conf - 28행 주석 제거 

 

 

ens35 장치로 모든 패킷 통과하도록 설정
 ens32 장치로 모든 패킷 통과하도록 설정 / ens32 에 마스커레이드 허가 / 설정한 내용 저장
내부망에서 외부에 연결됨을 확인

 

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

apt install nginx 후 설정
Server에 규칙 추가
Host computer 에서 웹 서버 접속하기

 

3. 도커 Docker

도커 Docker : 컨테이너 기반의 오픈소스 가상화 플랫폼

- 기존 가상화 방식은 Infrastructure에 Virtual Machine을 띄움 : 각각의 operationg system을 별도로 가짐. -> 용량도 크고 동작되는데 무거움 

- Docker에서는 VM을 설치하는 것이 아니라 필요한 것만 사용 -> Host operating system의 메모리를 필요한 만큼만 사용 (더 간결한 기술) 

독립된 요소로 사용되는 APP들이 container 

 

• 컨테이너 container : 격리된 공간에서 프로세스가 동작하는 기술로 가상화 기술 중 하나 

• 이미지 Image : 컨테이너 실행에 필요한 파일과 설정값 등이 포함되어 있는 것

 

3-1. 도커 설치하기 실습 

Install Docker Engine on Ubuntu | Docker Documentation

 

Install Docker Engine on Ubuntu

 

docs.docker.com

 

위 링크의 설치 방법대로 설치

 

설치가 잘 되었는지 테스트

3-2. 우분투 18.04 / mysql / 워드프레스 설치하기 실습

우분투 18.04 설치하기
mysql 설치하기

 

 

Quickstart: Compose and WordPress | Docker Documentation

 

Quickstart: Compose and WordPress

 

docs.docker.com

워드프레스 설치하기
192.168.234.128:8000으로 접속

 

문제 발생 및 해결 과정

 

오류 1)

강의 영상에서는 apt update를 했을 때 오류가 나면서 접속이 안되었는데, 나는 apt update가 정상적으로 수행되는 문제가 발생했다. 혹시 예전에 실습한 것이 남아있어서 그런가 싶어 아무 설정도 하지 않은 초기의 백업 파일로 시도해보았는데도 해결되지는 않았다.

q&a에도 같은 오류가 발생한 학생이 있었는데, 교수님께서 일단 실습을 진행해 보라고 하셔서 나도 그대로 진행해보았는데, 다행히 큰 오류는 발생하지 않았다. 다만 원인은 아직 발견하지 못했다.

 

오류 2)

Host computer에서 웹 서버를 접속했을 때는 잘 접속이 되었지만, server(b)에서 접속한 ip 주소를 확인하기 위해 netstat | grep 192.168.234를 했는데 아무것도 뜨지 않는 문제가 발생했다.

검색해보고 이전의 실습 과정을 검토해봐도 이유를 알 수 없어서 교수님께 질문했더니 netstat | grep 192.168.234는 웹 서버에서 외부의 패킷이 전송되는 것을 확인하기 위함인데 서비스가 제공된다면 패킷은 정상적으로 통과 되는 걸로 알 수 있다고 하셨다.

netstat 대신 192.168.234.128에 핑을 보냄으로써 정상적으로 작동함을 확인하였다. 

 

오류 3)

192.168.234.128에 접속했을 때 wordpress 설치화면이 나타나지 않고 계속 Apache 페이지만 나타나는 오류가 발생했다. 무엇이 원인인지 계속 검토하고 한참 고민해보았지만 결국 원인을 발견하지 못해서 server(b)를 초기화한 후 다시 설정했더니 정상적으로 접속됨을 확인할 수 있었다. 아마 작은 실수나 오타가 있었던 것으로 예상한다.

 

 참고할 만한 내용

https://www.redhat.com/ko/topics/containers/what-is-docker

 

Docker(도커)란? 도커 컨테이너 실행, 사용법, 다운로드, 배포

Docker(도커)란 Linux(리눅스) 컨테이너 생성 및 사용을 돕는 컨테이너 기술을 뜻합니다. Docker 사용법, Docker container(도커 컨테이너), 다운로드 방법을 설명합니다.

www.redhat.com

 

● 회고

좋았던 점(+) 

또한 아직 리눅스와 서버 관리에 대해 미숙한 점도 많고 더 알아가고 싶은데 벌써 14주차가 끝나서 아쉽다. 실습하면서 어려운 점도 매우 많았지만 상당히 유익했고 아직은 초보이지만 서버와 한 발짝 가까워진 것 같다는 생각이 들어 아주 좋았던 수업이었다. 

 

아쉬웠던 점(-) 

이번 실습도 중간에 오류가 생기는 바람에 너무 오래걸려서 아쉬웠다. 한참을 고민하면서 끙끙댔는데, 초기화 한 후에 다시 설정하니까 너무 매끄럽게 진행되어서 놀랐다. 잘 안되면 빠르게 포기하고 다시 해보는 것도 방법인 것 같다. 지금까지 한게 아까워서라도 계속 잡고있었는데 시간만 많이 잡아먹은 것 같아 아쉽다. 

 

새로 알게된 점(!)

방화벽 설정에 대해 자세히 알게되었다. 계속 실습을 진행하면서 방화벽을 설정하고, 해제하거나 하는 부분들이 많았었는데 그 때는 제대로 이해하지 못하고 그냥 명령어를 따라하였다면, 이제는 방화벽에 대해 잘 알게되었고 방화벽 서버를 구현해 보는 실습도 유익했다. 또한 도커는 처음 들어보는 개념이었는데 도커에 대해서도 새로 배우게 되었다.