logo

𝝅번째 알파카의 개발 낙서장

[Ubuntu] ufw로 방화벽 포트 설정하기

게시글
⏰ 2021-09-03 16:26:20

D O W N

https://user-images.githubusercontent.com/50317129/132039520-3efc64ec-28c2-499c-af29-dfe153f53852.png
https://user-images.githubusercontent.com/50317129/260317030-e4b8575b-f09e-47f4-ab70-168a817268c6.png

Table of Contents

https://user-images.githubusercontent.com/50317129/260317030-e4b8575b-f09e-47f4-ab70-168a817268c6.png

개요

모든 건물에는 입구가 존재한다. 일반적인 상황에서, 누구든지 해당 건물에 드나들기 위해선 좋든 싫든 입구를 통과해야한다.

이 입구라는 것이 또 마냥 열려있는 건 아니라서, 필요 시엔 개방되어있다가도 특정 시간에는 폐쇄되기도 한다.

심지어 어떤 곳은 까다롭기 그지없어서, 사람을 가려받기도 한다. 이를테면 보안구역이라던가, 금요일 밤의 클럽이라던가.


PC통신도 이와 원리가 별반 다를 바 없다. 보기엔 그냥 막 통신하는 것 같아도, 저마다 할당받은 입구를 통해 PC에 드나든다.

PC가 건물이라고 한다면, PC의 입구는 포트(PORT)라 할 수 있다.


모든 프로그램은 PC와의 통신 시 임의의 입구, 포트를 할당받는다. 프로그램은 해당 포트를 통해 들어오고, 나가며 정해진 동작을 수행한다.

만약 해당 포트가 막혀있다면, 해당 컴퓨터를 대상으론 정상적으로 동작할 수 없을 것이다.

이 프로그램이 내 PC에 필요하다면 포트를 열어주면 될 것이고, 아니라면 포트를 닫음으로써 접근하지 못하게 함이 바람직하다. 혹은 인증된 소수의 프로그램에게만 포트를 허용할 수도 있을 것이다.


말 그대로 보안과 매우 밀접한 개념으로써, 방화벽 설정을 통해 원하는 포트를 원하는 대상에게 개방/폐쇄할 수 있다.

Ubuntu에서 ufw를 통해 방화벽 설정을 원하는대로 설정해보자.

그냥 다 열면 안 돼?

조선시대 제주도는 문을 잠근다는 개념이 매우 미약했다고 한다.

옛 교통방식과 섬이라는 폐쇄적인 환경 덕분에 유동인구가 매우 적었고, 각 마을 주민에 대한 신원이 확실했을 것이다. 내륙에 비해 외지인이 방문/거주할 일도 매우 적었을 것이다.

이처럼 주변 환경과 사람들 간의 신뢰성이 있다면 굳이 그렇게 폐쇄적일 필요는 없을지도 모른다.


하지만 인터넷이라는 환경은 이와 결이 매우 다르다. 인터넷에 연결만 되어있다면 누구나 내 PC에 접근할 수 있는 잠재적 가능성을 가진다. 누가, 왜, 무엇을 위해 오는지도 알 수 없다.

이 경우 문을 아무렇게나 열어재껴놓는건 바람직한 상황이 아닐 것이다.


방화벽은 이러한 문제로부터 PC를 최대한 보호하기위해, 기본적으로 폐쇄적인 설정을 가진다. 일단 안 된다고 질러놓고 보는 셈이다.

보안을 위해서 방화벽은 가급적 폐쇄하되, 필요한 프로그램만 개방하는 화이트리스트 방식을 쓰는 습관을 들이도록 하자.

ufw

기본적인 방화벽 명령어 iptables가 있지만, 명령어가 그리 직관적이지 않다는 단점이 있다. 이에 비해 ufwiptables에 비해 훨씬 쉽고 직관적인 명령어로 다룰 수 있다.

iptables과 성능상의 차이가 거의 없다는 점을 감안하면 확실한 장점.

ufw 설치

ufw는 기본 명령어가 아니다. ufw를 설치하자.

BASH

1
sudo apt-get install ufw

위 명령어를 통해 설치할 수 있다.

ufw 상태 관리 명령어

ufw의 상태를 관리하는 명령어다.

BASH

1
2
3
4
5
6
7
8
 # ufw 활성화
sudo ufw enable

 # ufw 비활성화
sudo ufw disable

 # ufw 상태 확인
sudo ufw status verbose

ufw가 설치된 후 방화벽에 영향을 주는 걸 방지하기 위해 기본적으로 비활성화 상태로 설치된다.

sudo ufw enable 명령어를 입력하여 활성화하자.

ufw 정책 관리 명령어

ufw에 적용된 정책을 관리한다.

BASH

1
2
3
4
5
6
7
8
 # 정책 조회
sudo ufw show raw

 # 기본 정책 허용
sudo ufw default allow

 # 기본 정책 차단
sudo ufw default deny

모든 포트 통신에 대한 일괄 허용/차단이 가능하다.

BASH

1
2
3
4
5
 # 들어오는 통신 차단
sudo ufw default deny incoming

 # 나가는 통신 허용
sudo ufw default allow outgoing

오는사람 막고 가는사람 안 막는다라는 말을 들어본 적이 있을 것이다. 보안도 똑같다. 내게 들어오는 통신은 최대한 폐쇄적으로, 내게서 나가는 통신은 개방적으로 대한다.

ufw 정책 설정 명령어

BASH

1
2
3
4
5
6
7
8
9
10
11
 # 443포트(HTTPS) 허용
sudo ufw allow 443

 # 443포트(HTTPS) TCP 허용
sudo ufw allow 443/tcp

 # 443포트(HTTPS) UDP 허용
sudo ufw allow 443/udp

 # 443포트(HTTPS) 허용
sudo ufw allow https

위 명령어는 HTTPS 포트 443을 허용하는 명령어들의 모음이다.

ufw는 고유 서비스 이름을 사용해서 포트를 관리할 수 있다. HTTP(80), HTTPS(443), FTP(21), SSH(22) 등이 이에 해당한다.

allow 이외에도 deny를 통해 통신을 거부하거나, delete를 통해 해당 정책을 아예 지워버릴 수도 있다.

정책을 지우게 되면 ufw에 설정된 기본 정책을 따르게 된다.

ufw 정책 세부설정 명령어

IP 통신 정책

BASH

1
2
3
4
5
 # 192.168.0.5 IP의 통신 허용
sudo ufw allow from 192.168.0.5

 # 192.168.0.5 ~ 200 대역의 IP의 통신 허용
sudo ufw allow from 192.168.0.5/200

위 명령어를 통해서 특정 IP 혹은 IP 대역의 통신을 관리할 수 있다.

IP 및 포트 통신 정책

BASH

1
2
3
4
5
 # 192.168.0.5 IP의 443포트 허용
sudo ufw allow from 192.168.0.5 to any port 443

 # 192.168.0.100 IP의 443포트 TCP 허용
sudo ufw allow from 192.168.0.5 to any port 443 proto tcp

특정 IP의 특정 포트만 허용/차단할 수도 있다.

ufw 정책 수정 명령어

BASH

1
sudo ufw status numbered

현재 적용된 정책을 인덱스 번호와 함께 보여준다.

해당 번호를 통해 정책을 수정, 삭제할 수 있다.

BASH

1
2
3
4
5
 # 1번 정책을 443포트 차단 정책으로 변경
sudo ufw insert 1 deny 443

 # 2번 정책을 192.168.0.5 IP의 통신 허용 정책으로 변경
sudo ufw insert 2 allow from 192.168.0.5

ufw 정책 삭제 명령어

BASH

1
2
 # 1번 정책 삭제
sudo ufw delete 1

정리

서비스에서 서버가 갖는 역할과 비중을 생각해본다면, 서버의 보안은 서비스의 안정성과 직결되는 중요한 문제다.

때문에 서버의 보안은 귀찮을정도로 견고하게 구성되는 것이 바람직하다.


프로그램, 웹 등 모든 서비스의 기초는 데이터의 통신이므로, 통신을 잘 제어하는 것이 중요하다.

반드시 필요한 통신만을 허가하고 관리하여 서버가 항상 최상의 보안을 유지할 수 있도록 보안정책을 구성하자.

🏷️ Related Tag

# Ubuntu
# 방화벽

😍 읽어주셔서 감사합니다!
도움이 되셨다면, 💝공감이나 🗨️댓글을 달아주시는 건 어떤가요?
블로그 운영에 큰 힘이 됩니다!
https://blog.itcode.dev/posts/2021/09/04/firewall-with-ufw