Linux/실습 기록

[컴퓨터시스템관리] 2021.06.01 14주차 실습일지 - 방화벽 서버 구축, Docker 실습

daeunnniii 2021. 6. 2. 02:12
728x90
반응형

실습과제 결과

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

 


새로 배운 내용

1. 방화벽 Firewall

1) 방화벽이란

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

- 정책 기반 방화벽

ex) 특정 서버에서 오는 얼마 이상의 http 트래픽을 허용하고 로그 남기기

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

• SW 방화벽: 상대적으로 속도가 느리지만 쉽게 설정하고 제어할 수 있음.
• HW 방화벽: 속도와 성능이 좋은 대신에 비용이 많이 든다. 설정하는데 어려움. 초당 패킷 처리 수 증가
• NPU 기반 방화벽: SW+HW 방화벽

 

2) 방화벽의 역사

1세대 방화벽: 패킷 필터

=>패킷 단위로 검사함. 하지만 패킷 수가 증가하게 되면 시간이 매우 오래걸림.

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

=>1세대 방화벽의 단점을 보완. 세션 단위로 검사함.

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

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

 

3) iptables

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

- 체인 chain : 넷필터에서 제공하는 5개의 hook 지점 (패킷처리 지점)
(1) PREROUTING: 장치에 패킷이 도착했을 때
(2) INPUT: 호스트 컴퓨터를 향한 모든 패킷에 대한 처리
(3) OUTPUT: 호스트 컴퓨터에서 발생하여 외부로 내보내는 패킷에 대한 처리
(4) FORWARD: 호스트 컴퓨터가 목적지가 아닌(단지 지나가는) 패킷에 대한 처리
(5) POSTROUTING: 패킷이 장치 밖으로 나가는 시점

 

규칙 : ACCEPT, DROP(없던 것 처럼 버림), REJECT(버리고 응답 패킷 전송), LOG, RETURN(호출 체인 내에서 패킷 처리 계속)
• 기본정책 : 모든 패킷에 대해 DROP 하고, 특별히 지정된 포트와 IP주소에 대해 ACCEPT 수행

 

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

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

 

5) IP 마스커레이딩 IP Masquerading

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

 

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

1. 방화벽 정책

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

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

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

 

2. Server(b) 설정

1) 네트워크 설정을 Bridged로 설정한 뒤 실행

2) IP 주소 변경

 

3. Client 설정 (Kubuntu)

마찬가지로 네트워크 설정을 bridged로 설정 후 실행 후 아래와 같이 설정

Serber(b)로 ping 3번 보내기. 외부망에는 접속할 수 없음.

 

4. Server 설정 - 방화벽 역할

1) 이번에는 Settings에서 Network adapter를 하나 더 추가해서 Bridged로 설정 후 실행

2) 네트워크 설정에서 하나는 자동, 나머지 하나는 수동으로 설정

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

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

/etc/sysctl.conf에서 28행 주석 제거

방화벽 규칙 추가 후 iptables -nL --line-numbers 명령어로 규칙 확인

ens32 에 마스커레이드 허가 후 iptables-save > /etc/iptables.rules 로 설정한 내용 저장

이제 Client에서 인터넷 접속이 잘 되는 것을 확인할 수 있다. (이제 내부 컴퓨터가 외부망에 연결 가능)

5. 웹 서버 연결하기

Server(b)에 nginx 웹 서버 설치(apt install nginx) 후 http로 접근하는 패킷 접속을 허용해준다.

정책 3 적용: server에 다음과 같이 규칙 추가

- nat 테이블에 규칙 추가함.(append)

- ens32 장치로 패킷이 들어오면, 패킷의 도착지 주소를 변경(DNAT) 하는데, tcp 프로토콜(80번 포트)인지 체크하고, 도착지 ip 주소는 10.1.1.20 로 설정한다.

Host computer 에서 웹 서버 접속

도커 Docker

- 컨테이너 기반의 오픈소스 가상화 플랫폼
- 컨테이너 container: 격리된 공간에서 프로세스가 동작하는 기술로 가상화 기술 중 하나

→ 컨테이너는 CPU 나 메모리를 필요한 만큼만 추가로 사용하여 성능 저하 문제가 거의 없음

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

→ 이미지 내부에는 컨테이너 실행을 위한 모든 정보(의존성 파일)가 포함

 

Docker 실습

1. Docker 실행

 

2. Docker를 활용하여 mysql 설치하기

 

3. 컨테이너 생성 및 실행 & container name 붙이기

- 컨테이너 이름은 mysql-container, sql 패스워드는 1234, 연결 포트는 3306, 실행 버전은 mysql:latest 버전

 

4. Mysql 컨테이너 접속

 

문제가 발생하거나 고민한 내용 & 해결 과정

▶ 문제 발생

실습 과제를 할 때 Server(b)를  /etc/netplan/00-installer-config.yaml 경로에서 네트워크를 알맞게 설정했는데도 불구하고 reboot를 했을 때 ip주소가 적용이 되지 않았다. 다시 reboot를 시도해도 적용이 되지 않았다.


▶ 해결 방안

Server(b)를 초기화 한 뒤에 동일하게 진행하였더니 해결할 수 있었다.

참고할 만한 자료

방화벽 iptables 설정 시 참고:

https://yunyoung1819.tistory.com/20

 

[Linux iptables를 이용해 방화벽 설정하기]

[Linux iptables를 이용해 방화벽 설정하기] iptables는 시스템 관리자가 리눅스 커널 방화벽(다른 넷필터 모듈로 구현됨)이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주

yunyoung1819.tistory.com

https://library.gabia.com/contents/infrahosting/2214/

 

가비아 라이브러리

IT 콘텐츠 허브

library.gabia.com


회고 (+, -, !)

+: 실습을 통해 방화벽의 역할을 직접 실감할 수 있었던 수업이었다. Server(b)와 Client가 처음에는 외부망으로 연결되지 못했지만, Server의 방화벽 정책 설정 뒤 외부망으로 접속이 가능하게 되는 것을 확인해보았던 과정이 흥미로웠다. 또한 방화벽 정책 설정을 통해서 내부망과 외부망 그리고 DMZ에 대한 이해를 다시 생각해 볼 수 있었던 시간이었다.

-: 방화벽 iptable 기본 정책을 설정하는 방법에 대해 더 자세히 알아보지 못해 아쉬웠다. 시험기간이 끝나면 방화벽 iptable 정책을 설정하는 방법을 더 자세히 공부하고 직접 리눅스에서 적용해보고 싶다.

!: 실습 부분에서 iptable을 직접 설정해볼 수 있었다. PREROUTING, INPUT, OUTPUT, FORWARD, POSTROUTING에 대한 개념을 정리할 수 있었다. 그리고 내부 컴퓨터들이 리눅스 서버를 통해 인터넷 등 다른 네트워크에 접속할 수 있게 해주는 기능인 마스커레이드에 대해 알게 되었다. 이번 수업에서 실습해본 방화벽 정책 이외에도 여러 새로운 정책을 직접 적용해보는 실습을 진행해봐야겠다.

728x90
반응형