[Server] 미니 홈서버 구축하기 4편 - 우분투 방화벽(UFW) 사용하기

2021. 1. 11. 14:22Server

Icons made by Eucalyp from www.flaticon.com

전자기기의 보안은 현관문과 비슷합니다. 가장 외부에 노출되어있으며, 서버가 켜져 있다면 누구든지 와서 현관문 비밀번호를 눌러볼 수 있죠. 문제점은 현실과는 달리 지역 사람들 뿐만 아니라 인터넷에 연결되어있는 모든 사람이 와서 현관문 비밀번호를 그것도 여러 번 눌러볼 수 있다는 것입니다. 심지어 서버 소유자는 다른 사람이 현관문을 열어보려고 했다는 사실을 시스템 로그상으로 알아야 하기에 모르고 넘어가는 경우가 있습니다.

기본 우분투가 보안에 취약하다고는 말할 수는 없습니다만, 보안을 더욱 강화할 수 있는 방법이 있으니, 강화해서 나쁠 것은 없죠. 이제 우분투를 설치하였으니 보안 강화를 할 시간입니다.

UFW

UFW는 Uncomplicated Firewall의 약자로, iptables의 약간 쉬운 버전이라고 생각하시면 됩니다. 서버의 이용자가 정말 많고 대규모라면 UFW보다는 iptables를 사용하여 더 수준 높은 규칙을 적용시키시는 것을 권장드립니다.

UFW을 통하여 서버의 특정 포트와 프로토콜, 그리고 특정 아이피의 접근을 허용 / 비허용 할 수 있습니다. 다만 잘못 건들이면 사용 중이던 SSH의 포트를 막는 등 부작용(?)이 발생할 수 있으니, 반드시 필요한 서비스의 포트와 규칙을 어딘가에 정리해놓고 방화벽을 관리하는 습관을 들이도록 합시다.

 

설치 및 확인

UFW는 우분투에 기본적으로 설치되어있으나, 다음 명령어로 설치 또한 가능합니다.

sudo apt-get install ufw

 

UFW가 작동중인지는 아래의 명령어로 확인 가능합니다.

sudo ufw status verbose
Status: inactive

기본적으로는 inactive (비활성화) 되어있을 겁니다.

 

기본 룰 (Rule)

UFW는 기본적으로 모든 incoming 패킷을 거부, outgoing은 허용입니다. 

혹은 아래의 명령어를 통하여 그리 설정할 수 있습니다:

sudo ufw default deny incoming
sudo ufw default allow outgoing

 

방화벽을 활성화하기 전에 아래의 명령어를 통하여 SSH포트를 열어두도록 합시다.

sudo ufw allow 22

 

UFW 활성화 / 비활성화

sudo ufw enable
sudo ufw disable

방화벽을 활성화시키려면 enable, 비활성화시키려면 disable을 입력하시면 됩니다.

 

UFW 규칙

기본적인 허용과 차단

아까 위에서 언급했던 것처럼 특정 포트를 활성화 시킬려면 아래와 같이 allow를,

sudo ufw allow <port>

특정 포트를 차단시키려면 deny를 사용하시면 됩니다.

sudo ufw deny <port>

 

통신 프로토콜

sudo ufw allow 22/tcp
sudo ufw allow 22/udp

포트 뒤에 /tcp 혹은 /udp를 입력하여 특정 프로토콜만 차단 혹은 허용하실 수 있습니다.

 

IP 주소

sudo ufw allow from 192.168.1.2
sudo ufw allow from 192.168.1.2 to any port 22
sudo ufw allow from 192.168.1.2 to any port 22 proto tcp

from을 사용하면 특정 아이피만 지정할 수 있습니다.

다만 아까와는 다르게 특정 포트만 허용 혹은 차단하려면 줄 끝에 to any port를 입력하여야 합니다.

프로토콜 또한 마찬가지입니다. 특정 프로토콜만 허용하는 것은 /를 사용하는 것이 아닌 proto를 사용해야 합니다.

 

서비스 기준

cat /etc/services

위 명령어를 입력하면 현재 활성화되어있는 서비스와 해당 포트, 프로토콜 정보 목록을 확인할 수 있습니다. 

 

sudo ufw allow ssh

해당 정보를 사용하여 특정 서비스를 허가하거나 거부할 수 있습니다.

 

우선도

방화벽은 우선도를 가지고 있습니다. 그리하여 처리의 순서를 잘 정하는 것이 중요합니다.

sudo ufw status numbered

위 명령어를 이용하여 방화벽의 우선순위를 확인할 수 있습니다.

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 22 (v6)                    ALLOW IN    Anywhere (v6)

아까 설정했던 SSH의 포트가 보이네요.

 

sudo insert <index> allow <port>

위 명령어를 통하여 특정 위치(index)에 특정 규칙을 넣을 수 있으며, 해당 위치에 있던 규칙들은 한 칸씩 뒤로 밀리게 됩니다.

 

규칙 삭제

규칙을 삭제하시려면 아래의 명령어를 이용합니다:

sudo ufw delete allow <port>

해당 규칙이 삭제되게 됩니다.

 

sudo ufw delete 1

혹은 위와 같이 우선도를 사용하여 삭제할 수도 있습니다.

 

규칙 확인

UFW의 규칙을 확인하시려면 다음 명령어를 입력합니다:

sudo ufw show raw

혹은

cat /etc/ufw/user.rules
cat /etc/ufw/user6.rules

위 명령어를 이용하여 IPv4와 IPv6의 규칙을 확인할 수 있습니다.

 

규칙 초기화

sudo ufw reset

위의 명령어로 모든 규칙을 날려버리고 다시 시작하실 수 있습니다.

앞으로 추가적으로 설치하시는 패키지나 서비스가 있을 경우 늘 UFW 통하여 활성화를 해주셔야 하는 번거로움이 생길 수 있습니다. 하지만 방화벽을 통하여 최소한의 필요한 포트만 열어두는 것은 분명 많은 위험을 줄여줄 것이라고 생각합니다.

다음에는 SSH의 기본 포트를 변경하는 법에 대하여 알아보도록 합시다.

반응형