본문 바로가기
  • 오늘처럼
소프트웨어 아키텍처/Linux

[Ubuntu] 우분투 UFW 방화벽 사용하기

by bluefriday 2022. 9. 19.
반응형

UFW(Uncomplicated Firewall) 소개

어플리케이션이 구동되는 서버는 서비스를 위하여 통신 포트를 외부에 노출해야 하지만, 이 때 보안 취약점에 유의해야 한다. 모든 포트를 노출해서는 안되며, 노출되는 포트 또한 특정 사용자(IP Address Range)에게만 허용이 되야 한다.

Linux Kernel 에 있는 '네트워크 패킷 필터(이하 Netfilter)' 라는 내부 패킷 필터링 시스템(Network framework)을 통해, 위와 같은 네트워크 패킷에 대한 접근 제어를 수행할 수 있다.

이 'Netfilter' 와 인터페이스 하기 위해 가장 많이 사용되는 툴이 iptables 이다. 그런데 iptables 의 경우 범용성으로 인해 사용 난이도가 다소 높은, 다시말해 러닝커브가 높은 편이다.

이에 대해 Ubuntu 와 같은 Debian 계열 Linux OS는 UFW(Uncomplicated Firewall)라는 방화벽 관리 프로그램을 제공한다. 이름그대로 복잡하지 않은 방화벽이라고 볼 수 있는데, iptables 에 대한 간단한 프론트엔드 인터페이스라고 볼 수 있다.


UFW 설치

UFW 의 설치는 데비안 계열에서 사용되는 패키지 관리자인, apt 를 사용한다.

$ sudo apt-get update
$ sudo apt-get install -y ufw

Reading package lists... Done
Building dependency tree       
Reading state information... Done
ufw is already the newest version (0.36-0ubuntu0.18.04.2).
ufw set to manually installed.
The following package was automatically installed and is no longer required:
  libnuma1
Use 'sudo apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 17 not upgraded.

설치 후 systemctl 을 통하여 활성화/비활성화 제어를 할 수 있다.

$ sudo systemctl status ufw
● ufw.service - Uncomplicated firewall
   Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
   Active: active (exited) since Tue 2022-09-20 02:15:46 UTC; 10min ago
     Docs: man:ufw(8)
 Main PID: 401 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 4660)
   CGroup: /system.slice/ufw.service

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

$ sudo systemctl disable ufw
$ sudo systemctl enable ufw

$ sudo systemctl start ufw

systemctl 로 ufw 를 활성화 시켜 놓아도, ufw 규칙 적용에 대한 활성화는 하단의 ufw 명령어를 사용한다.


UFW 상태 확인 및 활성화

  • $ sudo ufw status : ufw 규칙 상태 확인
  • $ sudo ufw enable : ufw 규칙 활성화. 활성화 시 기존 ssh 연결이 단절될 수 있음
  • $ sudo ufw disable : ufw 규칙 비활성화
$ sudo ufw status
Status: inactive

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

$ sudo ufw status
Status: active

상단과 같이 ufw status 명령의 결과 'status: inactive' 로 표시될 경우 방화벽 규칙을 로드하지 않았으며 아직 방화벽을 활성화하지도 않은 상태이다.


UFW 기본 규칙(Default Rule) 추가 및 삭제

보안을 위해, 다음의 ufw 기본 규칙을 설정한다.

  • outgoing packet : ALL ALLOW. 밖으로 나가는 패킷은 모두 허용
  • incoming packet : ALL DENY. 안으로 들어오는 패킷은 모두 거부

기본 방화벽 규칙을 설정하는 방식은 다음과 같다.

▼ ALL ALLOW. 밖으로 나가는 패킷은 모두 허용

$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
$

 

▼ ALL DENY. 안으로 들어오는 패킷은 모두 거부

$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
$

UFW Rule 추가 및 삭제

기본 규칙 이외에는 다음의 명령어를 사용하여 원하는 방화벽 규칙을 설정할 수 있다.

  • TCP Rule 추가 : $ sudo ufw [allow/deny] [포트번호]/tcp
  • UDP Rule 추가 : $ sudo ufw [allow/deny] [포트번호]/udp
  • TCP/UDP Rule 추가 : $ sudo ufw [allow/deny][포트번호]

▼ Rule 추가 : TCP 80 포트 허용

$ sudo ufw allow 80/tcp

Rule 추가 : TCP 443 포트 거부

$ sudo ufw deny 443/tcp

Rule 추가 : TCP/UDP 53 포트 허용

$ sudo ufw allow 53

 

규칙 추가 사용 예) status 명령에 'numbered' 파라미터를 추가하면 번호를 붙여 출력한다.

$ sudo ufw allow 80/tcp
Rule added
Rule added (v6)
$ sudo ufw deny 443/tcp
Rule added
Rule added (v6)
$ sudo ufw allow 53
Rule added
Rule added (v6)
$ 
$ sudo ufw status numbered

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 80/tcp                     ALLOW IN    Anywhere                  
[ 2] 443/tcp                    DENY IN     Anywhere                  
[ 3] 53                         ALLOW IN    Anywhere                  
[ 4] 80/tcp (v6)                ALLOW IN    Anywhere (v6)             
[ 5] 443/tcp (v6)               DENY IN     Anywhere (v6)             
[ 6] 53 (v6)                    ALLOW IN    Anywhere (v6)             

$

 

규칙의 삭제는, 추가 명령어의 앞에 delete를 추가한다.

  • TCP Rule 삭제 : $ sudo ufw delete [allow/deny] [포트번호]/tcp
  • UDP Rule 삭제 : $ sudo ufw delete [allow/deny] [포트번호]/udp
  • TCP/UDP Rule 삭제 : $ sudo ufw delete [allow/deny] [포트번호]

Rule 삭제 : TCP 443 포트 거부

$ sudo ufw delete deny 443/tcp

Rule 삭제 : TCP 80 포트 허용

$ sudo ufw delete allow 80/tcp

 Rule 삭제 : TCP/UDP 53 포트 허용

$ sudo ufw delete allow 53

 

규칙 삭제 사용 예) 없는 규칙을 삭제하려 할 경우 경고 메세지를 출력한다.

$ sudo ufw delete deny 80/tcp
Could not delete non-existent rule
Could not delete non-existent rule (v6)
$
$ sudo ufw delete allow 80/tcp
Rule deleted
Rule deleted (v6)
$
$ sudo ufw delete allow 53
Rule deleted
Rule deleted (v6)
$
$ sudo ufw delete deny 443/tcp
Rule deleted
Rule deleted (v6)
$ 
$ sudo ufw status
Status: active
$

Service 명을 이용한 규칙 설정

포트 번호가 아니라, 실제 포트가 노출되어 사용되고 있는 서비스의 이름으로도 규칙을 설정할 수 있다. 하단의 파일 내용을 확인하여 서비스 이름을 확인할 수 있다.

$ sudo cat /etc/services

서비스 이름을 통하여 다음과 같이 규칙을 추가하거나 삭제 가능하다.

  • $ sudo ufw [allow/deny] [서비스이름]

 

서비스 명을 통한 규칙 추가/삭제의 사용 예). 동일 서비스에 대하여 allow, deny 규칙을 차례로 추가할 경우 뒤의 규칙으로 덮어쓰여(override) 진다.

$ sudo ufw allow ssh

$ sudo ufw status 
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             

$ sudo ufw deny ssh
$ sudo ufw status 
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     DENY        Anywhere                  
22/tcp (v6)                DENY        Anywhere (v6)             

$ sudo ufw delete deny ssh
Rule deleted
Rule deleted (v6)

IP 를 이용한 규칙 설정

다음과 같이 IP를 지정하여 특정 IP에 대한 패킷 통신을 허용/거부할 수 있다.

  • $ sudo ufw [allow/deny] from [IP 주소]

사용 예

$ sudo ufw allow from 192.168.80.13
Rule added
$ sudo ufw deny from 192.168.81.14
Rule added
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
Anywhere                   ALLOW       192.168.80.13             
Anywhere                   DENY        192.168.81.14             

$

UFW 상세 설정

위 IP를 통한 규칙에 추가로 포트 번호 등을 지정하여 상세한 설정을 할 수 있다. 사용 예제는 하단과 같다.

$ sudo ufw allow from 172.16.221.5 to any port 22 proto tcp
Rule added
$ sudo ufw deny from 172.16.221.5 to any port 22 proto tcp
Rule updated
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     DENY        172.16.221.5              

$ sudo ufw delete deny from 172.16.221.5 to any port 22 proto tcp
Rule deleted
$ sudo ufw status
Status: active
$

 

댓글