우분투 · 리눅스 입문 — 17편 (중급)

우분투 방화벽 ufw — 포트 열고 닫기

"방화벽 = iptables = 어렵다"는 옛말. ufw는 "이 포트 열어 / 닫아"를 영어 문장처럼 쓰는 도구입니다 — 서버 보안의 가장 기본기.

2026년 5월 13일 · 약 7분 · 26편 입문 시리즈 17편

터미널에 ufw allow·status 명령으로 방화벽을 설정하는 화면 — 우분투 방화벽 ufw를 상징하는 일러스트

16편에서 ss -tlnp로 "내 컴퓨터의 어떤 프로그램이 어느 포트를 열어놨나"를 봤죠. 그런데 그 포트가 외부에서도 닿을 수 있는지를 정하는 건 별개 — 그게 방화벽입니다. "이 포트로 들어오는 건 허용 / 저 포트는 차단"을 정하는 문지기예요.

리눅스의 방화벽 엔진은 iptables(요즘은 nftables)인데 — 문법이 무시무시합니다. 그래서 우분투는 ufw(Uncomplicated FireWall — "안 복잡한 방화벽")라는, 그 위에 얹은 쉬운 껍데기를 줍니다. sudo ufw allow 22처럼 거의 영어 문장이에요. 서버를 운영한다면 ufw 설정은 거의 필수고, 데스크탑이면 기본은 꺼져 있지만 알아두면 좋습니다. 26편 입문 시리즈 17편, "중급" 묶음. ⚠️ 단 하나 — SSH로 원격 서버에 작업 중이라면 켜기 전에 꼭 봐야 할 게 있으니, 4번 섹션 경고를 먼저 읽으세요.

준비물 — 우분투 + 터미널. 가상 머신을 강력 권장합니다 — 방화벽 설정을 잘못하면(특히 원격이면) 자기 자신을 막아버릴 수 있어서, VM이면 스냅샷으로 되돌리거나 콘솔로 들어가면 됩니다. 16편(ss·포트)을 봤다면 이어집니다.

방화벽이 뭔가 — ufw의 역할

비유하자면 — 내 컴퓨터(특히 서버)는 여러 개의 "문(포트)"이 있는 건물입니다. 22번 문은 SSH(원격 접속), 80·443번 문은 웹, 그 외 수만 개. 방화벽은 그 문들의 경비원이에요 — "22번은 통과, 나머지는 막아"처럼 규칙을 정해줍니다. 그래야 안 쓰는 문으로 누가 들어오는 걸 막죠.

  • 우분투 데스크탑: ufw는 깔려 있지만 기본 비활성(inactive). 데스크탑은 보통 들어오는 연결이 별로 없어서요. 켜두면 더 안전하긴 함.
  • 우분투 서버 / 클라우드 인스턴스: 외부에 노출돼 있으니 ufw를 켜고 필요한 포트만 여는 게 사실상 표준. 안 그러면 안 쓰는 서비스 포트가 다 열려 있게 됨.
  • ufw가 하는 일: 복잡한 iptables 규칙을 사람이 읽기 좋은 명령(allow/deny)으로 바꿔줌. 기본 정책 = "들어오는 건 다 막고(deny incoming), 나가는 건 다 허용(allow outgoing)" — 그 위에 "이건 예외로 열어줘"를 추가하는 방식.

켜고 끄고 보기 — enable · status

$ sudo ufw status verbose Status: inactive ← 지금 꺼져 있음. (켜져 있으면 규칙 목록과 기본 정책이 나옴) $ sudo ufw default deny incoming $ sudo ufw default allow outgoing ← 기본 정책 설정(보통 이미 이렇게 돼 있음): 들어오는 건 차단, 나가는 건 허용 $ sudo ufw enable Firewall is active and enabled on system startup ← 방화벽 켬 + 부팅 시 자동 시작 $ sudo ufw status numbered [ 1] 22/tcp ALLOW IN Anywhere ← 켜진 뒤 규칙 목록 (번호는 삭제할 때 씀) $ sudo ufw disable ← 방화벽 끄기 (규칙은 남아있고, 다시 enable 하면 적용됨) $ sudo ufw reset ← 모든 규칙 초기화 (처음부터 다시. 신중히)
⚠️ sudo ufw enable 누르기 전에: 기본 정책이 "들어오는 건 다 막음"이라, 아무 규칙도 안 넣고 enable 하면 SSH(22번)도 막힙니다. 지금 SSH로 원격 서버에 접속해 있다면 — enable 하는 순간 연결이 끊기고 다시 못 들어갑니다(콘솔로 가야 함). 그래서 반드시 순서: ① sudo ufw allow OpenSSH(또는 allow 22) → ② 그 다음 sudo ufw enable. 로컬 데스크탑이면 이 위험은 없지만(키보드가 바로 있으니), 습관으로 들이세요. 클라우드 인스턴스는 대부분 콘솔/시리얼 접속 방법이 따로 있으니 막혀도 복구는 되지만, 안 막히게 하는 게 낫죠.

열고 닫기 — allow · deny · delete

"이 포트(또는 서비스)를 열어/닫아"를 영어처럼 씁니다.

$ sudo ufw allow 22/tcp ← 22번 TCP 포트 허용 (SSH). 포트 번호 직접 지정 $ sudo ufw allow OpenSSH ← 같은 뜻 — ufw 가 아는 '서비스 이름'으로도 가능. 'sudo ufw app list' 로 목록 확인 $ sudo ufw allow 80,443/tcp ← 80(http)·443(https) 한 번에. 웹서버 운영 시 필수 둘 $ sudo ufw allow from 203.0.113.5 to any port 22 ← '특정 IP(203.0.113.5)에서만' 22번 허용 — SSH 를 내 사무실 IP 에서만 받겠다 $ sudo ufw deny 23 ← 23번(telnet) 차단. (기본이 deny incoming 이라 사실 안 해도 막혀있지만, 명시적으로) $ sudo ufw status numbered $ sudo ufw delete 3 ← 규칙 3번 삭제 (status numbered 로 번호 확인 후). 또는 'sudo ufw delete allow 80' 처럼 규칙 자체로도 $ sudo ufw limit 22/tcp ← 'limit' = 허용하되 같은 IP 가 짧은 시간에 자주 들어오면(무차별 대입 시도) 차단. SSH 에 추천
흔히 쓰는 포트: 22=SSH(원격 접속, 18편), 80=HTTP, 443=HTTPS, 53=DNS, 3306=MySQL, 5432=PostgreSQL, 8080=대체 HTTP. 서버 보안의 기본 = "쓰는 포트만 열고 나머지는 닫는다". DB 포트(3306·5432)는 외부에 열지 말고 from 내IP로 제한하거나 아예 닫고 SSH 터널을 쓰는 게 정석입니다.

흔한 시나리오 + 정리

실전 예시 — 위 명령들의 조합입니다.

# 시나리오 1) 웹서버 (HTTP/HTTPS 공개 + SSH 는 내 IP 만) $ sudo ufw allow from 203.0.113.5 to any port 22 proto tcp $ sudo ufw allow 80,443/tcp $ sudo ufw enable # ← SSH 규칙 넣은 다음에! (위 경고) $ sudo ufw status verbose # 시나리오 2) 데스크탑 — 그냥 다 막고(들어오는 거) 켜두기 $ sudo ufw default deny incoming $ sudo ufw allow OpenSSH # 원격 접속 쓸 거면 (안 쓰면 생략) $ sudo ufw enable # 규칙 보기·로그 $ sudo ufw status numbered # 현재 규칙 (삭제용 번호 포함) $ sudo ufw logging on # 차단된 시도를 /var/log/ufw.log 에 기록 (12편 tail -f 로 보면 됨)
오늘의 정리: ufw = iptables 의 쉬운 껍데기. 데스크탑은 기본 꺼짐, 서버는 켜는 게 표준. 기본 정책 = default deny incoming + default allow outgoing. ⚠️ enable 전에 sudo ufw allow OpenSSH 먼저(원격이면 안 그럼 잠김). 열기: sudo ufw allow 포트/tcp·allow 서비스명·allow from IP to any port N. 닫기/삭제: deny 포트·delete 번호(번호는 status numbered). SSH 엔 limit 22/tcp 추천. 보기: status verbose. 안 쓰는 포트는 열지 말 것.

시리즈 흐름

  1. 1~14편 입문·기초·vim·프로세스 ✔   15편 디스크 ✔   16편 네트워크 ✔
  2. 17편 — 우분투 방화벽 ufw (이 글) ✔
  3. 18편 — SSH 키 설정 (원격 접속을 비번 없이·안전하게 — 22번 포트를 제대로 쓰는 법)
  4. 19편~ — systemd 서비스 / cron / 셸 스크립트 …

오늘 할 일(가상 머신에서!): sudo ufw status로 현재 상태 보고 → sudo ufw allow OpenSSHsudo ufw enablesudo ufw status numbered로 규칙 확인 → sudo ufw allow 8080/tcp 추가했다가 → sudo ufw delete로 지워보기 → sudo ufw disable. "포트를 열고 닫는다"는 감만 잡으면 됩니다. 18편에서 만나요. (ufw 전체는 man ufw 또는 우분투 공식 방화벽 문서.)

우분투·리눅스 입문 시리즈

이제 어느 문을 열고 닫을지 정합니다. 18편 "SSH 키 설정"으로 이어집니다.

다음 편은 JUNAI 블로그에서 이어 보세요.

© 2026 JUNAI · 우분투·리눅스 입문 시리즈 17편 · 본 글은 2026년 5월 13일 기준으로 작성되었습니다.

© 2026 주나이테크(주) @JUNAITECH