UFWUncomplicated Firewall는 Ubuntu 및 기타 Debian 계열 Linux 배포판에서 사용할 수 있는 netfilter 기반 방화벽 시스템의 간단한 구성 및 관리 도구입니다. ufw는 사용하기 쉽고 구성이 간단하며, 명령줄 인터페이스CLI(Command Line Interface)를 통해 방화벽 정책을 직관적으로 관리할 수 있습니다.
Linux 시스템에는 기본적으로 네트워크 트래픽을 관리하는 iptables 라는 방화벽 프로그램이 있는데 ufw는 이 iptables를 기반으로 작동하는 것입니다. iptables는 매우 강력하고 훌륭한 방화벽 도구이지만, 명령어 구문이 복잡하고 작업이 복잡한 설정 파일을 편집해야하는 등 초보 사용자는 어렵게 느껴질 수 있고 혼자서 서버를 관리한다면 다양한 옵션을 모두 사용하지 않아도 되고 이를 다 사용하는 것또한 쉽지 않을 수 있습니다.
UFW는 iptables에 대한 이해가 없는 초보 사용자도 부담없이 활용할 수 있으며, 기본적으로 초기 설정에서 적용되므로 시스템 부팅 후에도 설정이 유지되기에 여러모로 편리하게 사용할 수 있습니다. 우분투Ubuntu와 같은 데비안Debian 계열 리눅스 환경에서 특정 포트의 액세스를 차단하거나, 특정 IP 주소의 액세스만 허용하는 등의 보안 설정이 필요한 사용자를 위해 기본적인 UFW 사용법을 정리합니다.
튜토리얼 환경: Debian 11(Bullseye)
UFW 설치 및 활성화하기
우분투에서는 UFW가 기본적으로 설치되어 있습니다. 다만, 상황에 따라서는 설치되어 있지 않은 경우도 있을 수 있으니 UFW를 사용하려면 sudo ufw version
명령으로 먼저 설치 여부를 확인하는 것이 좋습니다.
UFW 설치하기
설치되어 있지 않다면 apt
, dpkg
또는 apt-get
과 같은 패키지 관리 도구를 이용해 UFW를 설치합니다.
sudo apt-get install ufw
UFW 활성화 및 비활성화하기
설치 후 다음 명령으로 UFW를 활성화하거나 비활성화할 수 있습니다. UFW는 OS만 설치한 경우 기본적으로 비활성화 상태로 제공되기 때문에 UFW를 사용하려면 먼저 활성화해야 합니다. 일반적으로 활성화 후에 규칙을 정의할 수 있으며, 활성화하지 않은 상태에서도 규칙을 정의하는 것은 가능합니다. 이 럴 때에는 설정한 규칙이 적용되지 않습니다. 그래서 사용하려면 최종적으로 활성화해야 합니다.
활성화 명령
sudo ufw enable
비활성화 명령
sudo ufw disable
UFW 규칙 추가하기
UFW에서는 다양한 방식으로 규칙을 추가할 수 있으며 대표적으로 사용되는 명령어 형식은 다음과 같습니다.
UFW 규칙 추가 명령어 및 형식
sudo ufw [allow/deny] [from source IP] [to destination IP] [port number/protocol]
allow
또는deny
를 사용하여 규칙을 추가할지 결정합니다.[from source IP]
는 액세스를 허용하거나 거부할 IP 주소를 지정합니다. 이 부분을 생략하면 모든 IP 주소에서의 액세스를 허용하거나 거부하는 것 입니다.[to destination IP]
는 대상 IP 주소를 지정합니다. 이 부분도 생략하면 모든 IP 주소에서의 액세스를 허용하거나 거부하게 되는 것 입니다.[port number/protocol]
는 액세스를 허용하거나 거부할 포트 및 프로토콜을 지정합니다. 이 부분도 생략하면 모든 포트와 프로토콜에 대한 액세스를 허용하거나 거부하는 것 입니다.
IP 주소를 기준으로 규칙 추가하기
아래 형식으로 명령하면 [IP address]
주소에서의 접속을 허용하는 것입니다. 예를 들어 위 그림과 같이 sudo ufw allow from 123.123.123.123
과 같이 명령하면 123.123.123.123
아이피로의 접속을 허용합니다.
sudo ufw allow from [IP address]
다음 형식으로 명령하면 [IP address]
주소에서의 접속을 차단하는 것입니다. 예를 들어 위 그림과 같이 sudo ufw deny from 123.123.123.123
과 같이 명령하면 123.123.123.123
아이피로의 접속을 차단합니다.
sudo ufw deny from [IP address]
포트를 기준으로 규칙 추가하기
다음 형식으로 사용하면 특정 프로토콜의 포트로 접속을 허용하는 것입니다. 예를 들어 위 그림과 같이 sudo ufw allow 22/tcp
와 같이 명령하면 TCP 포트 22
(SSH 포트)로 들어오는 모든 연결을 허용합니다.
sudo ufw allow [port number]/[protocol]
다음 형식으로 사용하면 특정 프로토콜의 포트로 접속을 차단하는 것입니다. 하지만 허용한 규칙 이외의 규칙은 모두 차단하는 것이 일반적이기 때문에 의미는 없습니다.
sudo ufw deny [port number]/[protocol]
애플리케이션 프로파일로 규칙 추가하기
애플리케이션 프로파일을 사용하면 포트 번호를 지정하는 대신 애플리케이션 이름으로 쉽게 포트 및 방화벽 규칙을 설정할 수 있습니다. sudo ufw allow nginx full
또는 sudo ufw allow OpenSSH
와 같은 명령어를 사용하여 OpenSSH 애플리케이션에 대한 포트 및 방화벽 규칙을 허용할 수 있습니다.
sudo ufw allow [app name]
시스템에서 사용 가능한 애플리케이션 프로파일의 목록을 하고 싶다면 다음 명령을 사용합니다. 애플리케이션 프로파일은 /etc/ufw/applications.d/
디렉토리에 저장되어 있습니다.
sudo ufw app list
다만 sudo ufw disallow Nginx HTTPS
이런 방식의 명령은 위 결과와 같이 허용되지 않아 이미 허용한 앱 프로파일을 이 차단하고 싶다면 sudo ufw deny
를 사용해야 합니다. 삭제 명령은 아래 UFW 규칙 삭제하기 설명을 참고합니다.
sudo ufw deny [app name]
UFW 상태 확인하기
UFW의 상태를 확인하려면 sudo ufw status
명령어를 사용합니다. 이 명령어를 실행하면 현재 활성화된 규칙 및 UFW의 상태가 표시됩니다.
sudo ufw status
다음 명령으로 규칙의 룰 번호를 확인할 수 있으며 룰번호를 기준으로 규칙을 삭제 할 수 있습니다.
sudo ufw status numbered
현재 활성화된 규칙 확인하기
sudo ufw status verbose
명령어를 사용하면 현재 활성화된 UFW 규칙을 자세히 볼 수 있습니다. 이 명령어를 실행하면 규칙 번호, 규칙 유형, 출발지/목적지, 포트 번호 등의 정보를 볼 수 있습니다.
sudo ufw status verbose
UFW 규칙 삭제하기
UFW를 사용하여 추가한 규칙은 필요 없을 때 삭제할 수 있습니다. 규칙을 삭제하면 방화벽에서 해당 규칙을 사용하지 않게 됩니다.
UFW 규칙 삭제 명령어 및 형식
UFW 규칙 삭제는 delete
명령어를 사용합니다. 다음은 delete
명령어의 형식입니다.
sudo ufw delete [rule]
룰 번호로 삭제하기
특정 규칙을 삭제하려면 delete
명령어 뒤에 삭제할 규칙의 룰 번호를 지정합니다. 앞서 확인 한 Openssh의 룰 번호는 1
로 할당되어 있어 sudo ufw delete 1
로 실행하면 위와 같이 Proceed with operation (y|n)?
확인 후 동의 시 삭제됩니다.
sudo ufw delete [rule number]
앱 이름으로는 UFW 규칙을 삭제할 수 없습니다. 예를 들어, OpenSSH
앱의 규칙을 삭제하기 위해 sudo ufw delete OpenSSH
라고 명령하면 문법 오류를 반환합니다.
규칙을 삭제하기 전에 한 번 더 확인하는 것을 확인 했는데 -y
옵션으로 질문없이 바로 규칙을 삭제할 수 있습니다.
sudo ufw delete [app name] -y
특정 규칙 삭제
특정 아이피 주소에서의 접근 차단 규칙을 삭제하고 싶다면 sudo ufw delete deny from 123.123.123.123
와 같이 명령합니다.
sudo ufw delete deny from [ip adress]
모든 규칙 삭제하기
모든 규칙을 삭제하려면 reset
명령어를 사용합니다. 다음 명령어를 사용하여 모든 규칙을 삭제할 수 있습니다.
다음 명령어는 모든 규칙을 삭제하고 모든 트래픽이 허용됩니다. 정상적으로 사용하기 위해서는 다시 필요한 규칙을 추가해야 합니다.
sudo ufw reset
UFW 로그 기록 로깅 설정하기
UFW는 로그 기능을 제공하며 로그 기능을 사용하면 방화벽에서 차단된 트래픽에 대한 로그를 확인할 수 있습니다. 로그 기능을 사용하려면 /etc/rsyslog.d/20-ufw.conf
파일을 수정하여 로그를 저장할 위치와 로그 레벨을 설정해야 합니다.
/etc/rsyslog.d/20-ufw.conf
파일을 각자 사용하는 에디터를 이용해 열어줍니다. vi 에디터를 사용하는 경우 다음과 같이 명령합니다.
sudo vi /etc/rsyslog.d/20-ufw.conf
아래 구문을 파일에 추가하면 [UFW
문자열이 포함된 커널 생성 UFW 로그 메시지를 /var/log/ufw.log
파일에 로깅하도록 지정합니다. 이 파일은 일반적으로 UFW를 설치하면 자동으로 생성됩니다. 따라서 UFW를 설치했거나, 이미 설치된 시스템을 사용 중이라면 해당 파일이 존재할 것입니다.
# Log kernel generated UFW log messages to file
:msg,contains,"[UFW " /var/log/ufw.log
아래 명령어를 실행하여 rsyslog 서비스를 재시작합니다.
sudo service rsyslog restart
이제 UFW는 차단된 트래픽에 대한 로그를 /var/log/ufw.log
파일에 저장합니다. 로그 레벨을 조정하여 로깅의 세부 수준을 제어할 수 있습니다. sudo ufw logging on
명령어를 사용하여 UFW 로그 기능을 켤 수 있습니다.
마치며
이번 포스트에서는 우분투와 같은 데비안 계열에서 UFW 방화벽을 사용하는 기본적인 방법과 설정 사항에 대해 알아보았습니다. ufw는 iptables를 기반으로 작동하지만, 간단한 명령어 구문을 사용하여 방화벽 규칙을 쉽게 구성할 수 있습니다. 또한 ufw는 초기 설정에서 적용되므로 시스템 부팅 후에도 설정이 유지됩니다. 이러한 장점으로 인해 ufw는 상대적으로 더 쉽게 사용하고 유지보수할 수 있습니다.
개인적으로는 ufw로 기본적인 방화벽을 구성하고 아쉬운 부분이 있다면 그때 iptables 또는 firewalld, nftables 등 과 같은 도구를 체크하는 것을 권장합니다.