리눅스(우분투)에서 ufw로 간단하게 방화벽 설정하기

오늘은 리눅스 서버를 운영하거나 개발하는 분들에게 필수적인 방화벽 설정에 대해서 알아보려고 합니다.

보안을 강화하고, 방문을 원하는 서비스만 접근할 수 있도록 제어하는 역할을 하는 방화벽을 설정하는 것은 매우 중요합니다. 그러나 방화벽을 설정하는 것은 리눅스에서는 꽤 복잡하고 어려울 수 있습니다.

이에 따라 이번에는 우분투에서 방화벽을 쉽게 설정할 수 있는 "ufw"라는 도구를 소개하고자 합니다. 이 도구는 파이썬으로 개발된 ufw는 iptables를 기반으로 netfilter 방화벽을 관리할 수 있으며, 쉽게 CLI(Command Line Interface)를 이용하여 방화벽을 설정할 수 있습니다.

이번 포스트에서는 ufw의 설치부터 활성화, 비활성화, 규칙 설정 및 삭제 등에 대해 자세히 알아보겠습니다. 부담없이 따라와 주세요.

포스트 목차

이 포스트는 다음과 같은 내용을 포함하고 있습니다.
  • ufw 설치하기
  • ufw 활성화 및 비활성화
  • ufw 기본 정책 설정하기
  • ufw 규칙 설정하기
  • ufw 규칙 삭제하기
  • ufw 초기화하기
  • ufw 로그 확인하기
  • ufw 삭제하기

ufw 설치하기

우분투 18.04 LTS 이후 버전에서는 기본적으로 ufw가 설치되어 있습니다.
만약 설치되어 있지 않다면 다음 명령어로 설치할 수 있습니다.

1
2
sudo apt update
sudo apt install ufw
cs

ufw 활성화 및 비활성화

ufw는 기본적으로 비활성화 상태이므로 다음 명령어로 활성화할 수 있습니다.

1
sudo ufw enable
cs

만약 ufw를 비활성화하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw disable
cs

ufw의 상태를 확인하려면 다음 명령어를 사용합니다.

1
sudo ufw status verbose
cs

ufw 기본 정책 설정하기

ufw는 들어오는(incoming) 패킷과 나가는(outgoing) 패킷에 대한 기본 정책을 설정할 수 있습니다. 
기본적으로 들어오는 패킷은 거부(deny), 나가는 패킷은 허용(allow) 상태입니다.
이러한 기본 정책은 다음 명령어로 확인할 수 있습니다.

1
sudo ufw show raw
cs

만약 기본 정책을 모두 허용으로 변경하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw default allow
cs

반대로 기본 정책을 모두 거부로 변경하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw default deny
cs

ufw 규칙 설정하기

ufw는 포트, IP, 서비스 등에 대한 방화벽 규칙을 설정할 수 있습니다. 규칙을 설정하는 방법은 다음과 같습니다.

포트 허용 및 거부하기

특정 포트에 대한 접근을 허용하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw allow <port>/<optional: protocol>
cs

예를 들어 22번 포트에 대한 접근을 허용하고 싶다면 다음과 같이 입력합니다.

1
sudo ufw allow 22
cs

만약 TCP와 UDP 프로토콜을 구분하여 설정하고 싶다면 뒤에 프로토콜 이름을 추가합니다.

1
2
sudo ufw allow 22/tcp
sudo ufw allow 53/udp
cs

포트 범위를 지정하고 싶다면 콜론(:)으로 구분하여 입력합니다.

1
sudo ufw allow 1000:2000/tcp
cs

특정 포트에 대한 접근을 거부하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw deny <port>/<optional: protocol>
cs

예를 들어 80번 포트에 대한 접근을 거부하고 싶다면 다음과 같이 입력합니다.

1
sudo ufw deny 80
cs

포트와 프로토콜을 구분하거나 범위를 지정하는 방법은 허용할 때와 동일합니다.

IP 허용 및 거부하기

특정 IP에 대한 접근을 허용하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw allow from <ip address>
cs

예를 들어 192.168.0.44에서의 접근을 허용하고 싶다면 다음과 같이 입력합니다.

1
sudo ufw allow from 192.168.0.44
cs

이렇게 하면 해당 IP에 대한 모든 포트 접근이 개방됩니다.
만약 특정 포트나 프로토콜에 대해서만 허용하고 싶다면 다음과 같이 입력합니다

1
sudo ufw allow from <ip address> to any port <port number> proto <protocol name>
cs

예를 들어 192.168.0.33에서의 80번 포트 TCP 접근을 허용하고 싶다면 다음과 같이 입력합니다.

1
sudo ufw allow from 192.168.0.33 to any port 80 proto tcp
cs

특정 IP에 대한 접근을 거부하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw deny from <ip address>
cs

예를 들어 192.168.0.33에서의 접근을 거부하고 싶다면 다음과 같이 입력합니다.

1
sudo ufw deny from 192.168.0.33
cs

포트나 프로토콜을 구분하여 거부하는 방법은 허용할 때와 동일합니다.

서비스 허용 및 거부하기

서비스나 프로토콜의 이름으로 방화벽 규칙을 설정하고 싶다면 다음 명령어로 서비스 이름을 확인할 수 있습니다.

1
cat /etc/services
cs

서비스 이름으로 접근을 허용하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw allow <service name>
cs

예를 들어 ssh 서비스에 대한 접근을 허용하고 싶다면 다음과 같이 입력합니다.

1
sudo ufw allow ssh
cs

서비스 이름으로 접근을 거부하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw deny <service name>
cs

예를 들어 ftp 서비스에 대한 접근을 거부하고 싶다면 다음과 같이 입력합니다.

1
sudo ufw deny ftp
cs

ufw 규칙 삭제하기

설정했던 방화벽 규칙을 삭제하고 싶다면 다음 명령어를 사용합니다.

1
sudo ufw delete <rule>
cs

예를 들어 22번 포트에 대한 접근을 허용했던 규칙을 삭제하고 싶다면 다음과 같이 입력합니다.

1
sudo ufw delete allow 22
cs

좀 더 쉽게 방화벽 규칙을 삭제하기 위해서는 다음 명령어로 방화벽 규칙의 순서를 확인할 수 있습니다.

1
sudo ufw status numbered
cs

그리고 다음 명령어로 순서에 해당하는 번호를 입력하여 삭제할 수 있습니다.

1
sudo ufw delete <number>
cs

예를 들어 첫번째 규칙을 삭제하고 싶다면 다음과 같이 입력합니다.

1
sudo ufw delete 1
cs

ufw 초기화하기

방화벽 규칙을 이리저리 설정하다가 초기화하고 싶은 경우에는 다음 명령어로 간단하게 초기화할 수 있습니다.

1
sudo ufw reset
cs

초기화시 ufw는 비활성화 상태로 되돌아갑니다.

ufw 로그 확인하기

ufw는 방화벽 규칙에 따라 허용되거나 거부된 패킷들에 대한 로그를 남깁니다. 로그는 다음 경로에 저장됩니다.

1
/var/log/ufw.log
cs

로그 파일의 내용은 다음과 같은 형식으로 표시됩니다.

[UFW BLOCK] IN=<interface> OUT= MAC=<mac address> SRC=<source ip> DST=<destination ip> LEN=<length> TOS=<type of service> PREC=<precedence> TTL=<time to live> ID=<id> PROTO=<protocol> SPT=<source port> DPT=<destination port> WINDOW=<window size> RES=<reserved bit> SYN URGP=<urgent pointer>

예를 들어 다음과 같은 로그가 있다면,

[UFW BLOCK] IN=eth0 OUT= MAC=00:0c:29:6f:3c:58:00:50:56:c0:00:01:08:00 SRC=192.168.0.33 DST=192.168.0.44 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=65277 DF PROTO=TCP SPT=80 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=0 

eth0 인터페이스를 통해 192.168.0.33에서 192.168.0.44로 TCP 프로토콜의 80번 포트에서 22번 포트로 접근하는 패킷이 거부되었다는 의미입니다.

ufw 삭제하기

ufw를 완전히 삭제하고 싶다면 다음 명령어를 사용합니다.

1
sudo apt remove --purge ufw
cs

이렇게 하면 ufw와 관련된 모든 파일과 설정이 제거됩니다.

마치며

이번 글에서는 우분투에서 방화벽을 설정하는 것이 다소 어렵다는 문제점을 해결하기 위해, 쉽고 직관적인 방식으로 방화벽 규칙을 관리할 수 있는 ufw에 대해 다뤄보았습니다.
ufw는 iptables보다 간단하고 더 쉬운 CLI를 제공하므로, 리눅스 서버 관리자나 개발자라면 꼭 알아두어야 할 도구입니다.
ufw를 사용하여 서버를 더욱 안전하게 보호하고 필요한 서비스에 대한 접근 권한을 제공해보는건 어떨까요?

이상으로 포스팅을 마치겠습니다. 감사합니다.

글 쓰는 Jiniwar


댓글

이 블로그의 인기 게시물

crontab 설정방법과 로그 확인하는 법

Microsoft Defender 방화벽 설정 또는 해제하는 방법

한국 군비지출 세계 9위