네트워크 공부 & 실습/네트워크 실습

[Network] UFW로 리눅스 방화벽 설정 실습하기

강_토발즈 2025. 4. 14. 20:47

 

<< 실습 주제의 선택 >>

 

서버를 운영하거나 특정 프로그램에 네트워크 연결을 시도하다 보면, 특정 포트를 열거나 (열려있는지 확인하거나), 방화벽을 꺼야 연결이 되는 상황이 많다. 또 웹서버가 실행되고 있다면 80, 443만 열고 나머지는 차단해야 보안 위협도 줄어든다고 한다. 리눅스에 기본 설치된 UFW는 복잡한 iptables 없이도 방화벽을 간편하게 구성할 수 있는 도구라고 하니, 실습하여 공부하도록 하자...!

 

 

1. UFW 란? 

 

  • Uncomplicated Firewall 의 줄임말로 "복잡하지 않은 방화벽" 이란 뜻이다.
  • iptables처럼 복잡한 명령어 없이도, 간단한 문법으로 방화벽을 설정할 수 있도록 만든 도구이다.
  • Ubuntu나 Debian 계열의 리눅스 배포판에서 기본 방화벽 인터페이스로 널리 사용된다.

 

 

2. UFW 명령어의 종류

 

  • 방화벽 상태 확인하기
sudo ufw status verbose

 

  • 방화벽 활성화 하기
sudo ufw enable

 

  • 특정 포트 허용 / 차단 방법
sudo ufw allow port/protocol
## SSH 연결 허용하기
## sudo ufw allow 22/tcp

sodu ufw deny port/protocol
## FTP 연결 차단하기
## sudo ufw deny 21

 

  • 특정 ip 만 특정 포트 접속 허용하기
sudo ufw allow from xxx.xxx.xxx.xxx to any port 22
## xxx.xxx.xxx.xxx -> ip address

 

  • 포트 허용,거부 규칙 삭제 및 초기화 하기
sudo ufw status numbered        # 규칙 번호 확인
sudo ufw delete [번호]         # 특정 규칙 삭제
sudo ufw reset                  # 모든 규칙 초기화

 

 

3. 실제 사용해보기

3-1. 방화벽 상태 확인하기 ( 활성 / 비활성 유무)

 

반환되는 명령어가 매우 깔끔하다! 군더더기가 없다!

 

 

3-2. 방화벽 사용하기

 

 

3-3. 방화벽 활성화 후 상태 확인하기

 

 

3-4. 모든 규칙을 deny 로 설정하기

 

3-5. SSH 접근 허용하기

 

3-6. 규칙 적용 후, 상태 확인하기

 

내가 설정한 규칙이 추가되어 있는 것을 직관적으로 확인할 수 있다. 
또한 v6 로 표시된 것은, 외부 ip 주소가 IPv6 인 주소로도 연결을 허용한다는 의미의 규칙이다.

 


4. 다른 컴퓨터로 SSH 접속 시도해보기 

4-1. 현재 22번 포트을 열어놓은 상태에서 다른 ubuntu 노트북으로 SSH 연결을 시도 해본다.

연결 할 데스크탑의 주소는 192.168.0.27 이다.

 

 

이상없이 정상적으로 연결되는 것을 확인할 수 있었다.



4-2. 22번 포트 차단 후 SSH 연결 시도하기.

 

 

ufw deny 명령어를 사용하여 22번 포트를 닫고 연결을 시도해봤다.

 

 

어? 왜? 돼?

 

현재 상태는 아래와 같은데, 해석을 해보면

22/tcp       ALLOW    Anywhere
22           DENY     Anywhere
22/tcp (v6)  ALLOW    Anywhere (v6)
22 (v6)      DENY     Anywhere (v6)
22/tcp **TCP 22번 (SSH)**을 IPv4에서 허용
22 모든 프로토콜의 22번 포트(TCP 와 UDP) 를 IPv4 에서 차단
22/tcp (v6) TCP 22번 포트를 IPv6 에서 허용
22 (v6) IPv6 에서 22번 포트 전체를 차단

 

상태에 대한 해석을 보고 공부한 결과 UFW는 더 구체적인 규칙이 우선적용 된다는 것을 알게 되었다.
ALLOW 22/tcp가 TCP 포트 22에만 정확하게 적용되기 때문에, 모든 프로토콜(22) DENY보다 우선권을 갖게 되었다.
22는 TCP+UDP 전체 DENY이지만, 덜 구체적이기 때문에 우선권이 낮아, 더 구체적인 ALLOW가 먼저 적용되어 SSH 연결이 허용된 것이었다. 


4-3. 포트와 프로토콜을 구체적으로 명시하여 ufw deny 규칙 적용

 

위와 같이 포트와 프로토콜에 대해 구체적으로 명시하여 명령어를 입력하였고, 상태를 확인하니 규칙이 추가 되었다.
이제 노트북으로 다시 연결을 시도해보자

 

 

약 5분 정도 접속을 시도하다가 time out 이 되며 SSH 연결이 실행되지 않았다!!

 

규칙 적용에 대해 실습으로 확인하였고, 규칙을 초기화 하고 종료하였다.

 

 

 

 

 

5. 실무에서 명령어를 어떻게 활용할 수 있을까?

  • 외부 공격자의 IP를 차단하여 보안을 강화할 수 있다. (UFW + fail2ban과 연동 가능)
  • 특정 서비스만 허용해 서버 노출 최소화 할 수 있다.
  • VPN 사용자만 접속 허용하는 내부망 구성도 가능하다.
  • 포트 스캐닝 툴(nmap)로 테스트했을 때 딱 필요한 포트만 노출되도록 구성 가능하다.

 

 

6. 마무리

방화벽 설정은 보안의 시작이라고 볼 수있다.
UFW는 초보자도 쉽게 사용할 수 있는 리눅스 기본 방화벽 도구로, "내가 열어야 할 포트만 정확히 열고 나머지는 닫는다"는 원칙을 간단하게 실현할 수 있게 해준다.