서버 방화벽 설정 ufw, 잠김 방지 순서와 보안그룹 관계
- ufw는 켜기 전에 SSH 포트 허용 규칙부터 넣어야 접속이 끊기지 않는다.
- ufw는 Ubuntu에서 기본 꺼짐 상태이며, 켜면 들어오는 연결은 기본 거부 정책이 적용된다.
- 클라우드 보안그룹과 서버 방화벽은 별개의 두 겹이라 양쪽 모두 열려야 접속된다.
서버 방화벽은 어떤 포트로 들어오는 연결을 받고 어떤 것을 버릴지 정하는 문 관리자입니다. 필요한 포트(웹 80·443, 관리용 SSH 22)만 열고 나머지는 닫아 두면, 실수로 켜진 데이터베이스나 관리 도구가 인터넷에 노출되는 사고를 줄일 수 있습니다.
그런데 방화벽 초보자가 가장 많이 겪는 사고는 공격이 아니라 내가 만든 규칙에 내가 잠기는 것입니다. SSH 허용 규칙 없이 방화벽을 켜면 서버 밖에서는 아무리 해도 들어갈 방법이 없어질 수 있습니다. 이 글은 Ubuntu의 ufw(Uncomplicated Firewall, 쉬운 방화벽 도구)를 기준으로, 잠기지 않는 순서를 먼저 설명합니다.
방화벽은 두 겹이다. 보안그룹과 서버 방화벽
AWS 같은 클라우드에서는 서버 안의 방화벽 말고도 서버 바깥에 보안그룹(security group)이 있습니다. AWS 문서에서 확인한 보안그룹의 특징은 다음과 같습니다.
- 허용 규칙만 만들 수 있고 거부 규칙은 만들 수 없습니다.
- 처음 만든 보안그룹에는 인바운드(들어오는) 규칙이 없어서, 규칙을 추가하기 전까지 들어오는 트래픽이 모두 허용되지 않습니다.
- 규칙을 추가하거나 수정하면 연결된 모든 자원에 자동으로 적용됩니다.
| 구분 | 위치 | 설정하는 곳 | 특징 |
|---|---|---|---|
| 클라우드 보안그룹 | 서버 바깥 | 클라우드 콘솔 | 허용 규칙만 가능 |
| ufw 등 서버 방화벽 | 서버 안 | 서버 명령어 | 허용과 거부 모두 가능 |
두 겹은 서로 대체하지 않고 둘 다 통과해야 접속됩니다. 그래서 ufw에서 80번을 열었는데 사이트가 안 열리면 보안그룹에서 80번이 열려 있는지도 봐야 합니다. 반대의 경우도 같습니다. 보안그룹 설정 이후에도 안 된다면 HTTPS 연결 오류 글의 점검 순서가 도움이 됩니다.
잠김 방지 순서
순서가 전부입니다. 접속 창을 하나 더 열어 두고 진행하세요.
- 비상 접속 수단을 확인합니다. 클라우드 웹 콘솔이나 VNC 콘솔로 서버에 들어갈 수 있는지 미리 봅니다.
- 현재 상태를 봅니다.
sudo ufw status - SSH 허용 규칙을 먼저 넣습니다. SSH 포트를 바꿨다면 바꾼 포트로 넣습니다.
- 웹 서비스 포트를 허용합니다.
- 그 뒤에 켭니다.
sudo ufw enable - 새 창에서 SSH로 접속해 봅니다. 기존 창은 확인이 끝날 때까지 닫지 않습니다.
ufw 매뉴얼은 켜는 순간 기존 연결이 끊길 수 있고, SSH로 접속한 상태에서 켜면 확인 질문을 한다고 설명합니다. 또 허용 규칙을 먼저 넣고 켜라는 취지도 분명합니다. 포트 변경 중이라면 SSH 보안 설정 글에서 설정을 바꾸는 순서를 먼저 확인합니다.
내 사이트의 HTTPS·인증서·보안 헤더를 바로 확인할 수 있습니다.
무료 보안 검사 시작기본 명령 모음
Ubuntu 문서에 나온 명령입니다. ufw는 설치 직후 꺼져 있고, 매뉴얼에 따르면 들어오는 연결의 기본 정책은 거부입니다.
sudo ufw allow 22/tcp # SSH 허용 (먼저)
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw default deny incoming # 들어오는 기본 정책을 거부로 명시
sudo ufw enable # 켜기
sudo ufw status verbose # 상태 확인
sudo ufw status numbered # 규칙 번호 보기
특정 IP에서만 SSH를 받으려면 다음 형식을 씁니다. 내 IP가 바뀌는 환경이면 오히려 잠기기 쉬우니 주의합니다.
sudo ufw allow proto tcp from 192.168.0.2 to any port 22
규칙을 지우는 방법은 두 가지입니다.
sudo ufw delete 3 # 번호로 삭제
sudo ufw delete allow 80/tcp # 규칙 내용으로 삭제
규칙을 적용하기 전에 결과만 보고 싶으면 sudo ufw --dry-run allow http처럼 --dry-run을 붙입니다.
접속 시도 제한과 로그
ufw 매뉴얼에는 limit 규칙이 있습니다. 같은 IP가 30초 안에 6번 이상 연결을 시도하면 이후 연결을 거부하는 방식이고, 예시는 ufw limit ssh/tcp입니다. SSH에 적용해 단순 대입 시도를 늦출 수 있지만, 여러 사람이 같은 공용 IP를 쓰는 곳에서는 정상 접속도 막힐 수 있습니다. 반복 실패 IP를 자동 차단하는 방법은 SSH 글의 fail2ban 부분에 있습니다.
켠 뒤 점검 목록
sudo ufw status verbose에서 열어 둔 포트가 의도한 것뿐인지 봅니다. 쓰지 않는 포트가 열려 있으면 삭제합니다.- 데이터베이스(MySQL 3306 등)를 외부에 열 필요가 없으면 열지 않습니다. 같은 서버 안에서만 쓰면 방화벽에서 허용하지 않아도 동작합니다.
- 새로 서비스를 붙일 때마다 방화벽과 보안그룹 양쪽을 함께 갱신합니다.
- 서버 전체 점검 흐름은 리눅스 서버 보안 점검 체크리스트에서 확인합니다.
이 글에서 firewalld 명령과 ufw의 앱 프로파일(OpenSSH 이름 등) 사용법은 직접 문서에서 확인하지 못해 뺐습니다.
웹사이트 기본 보안 검사HTTPS·리디렉션·인증서·보안 헤더·서버 정보 노출 10개 항목을 무료로 확인할 수 있습니다.
무료 보안 검사 시작자주 묻는 질문
ufw를 켰더니 SSH가 끊겼습니다. 어떻게 하나요?
클라우드 웹 콘솔이나 VNC 콘솔 같은 별도 접속 경로로 들어가 sudo ufw allow 22/tcp를 추가하거나 sudo ufw disable로 잠시 끕니다. 이후 규칙을 정리해서 다시 켭니다.
보안그룹이 있는데 서버 방화벽도 필요한가요?
보안그룹은 서버 바깥에서 거르는 첫 번째 관문이고 ufw는 서버 안쪽의 두 번째 관문입니다. 한쪽 설정이 실수로 풀려도 다른 쪽이 막아 주는 이중 구조를 만들 수 있습니다. 다만 둘 다 관리해야 해서 규칙이 어긋나기 쉽습니다.
ufw 규칙을 지우려면 어떻게 하나요?
sudo ufw status numbered로 번호를 확인한 뒤 sudo ufw delete 번호로 지웁니다. IPv6가 켜져 있으면 번호로 지울 때 한 줄만 지워지므로 IPv4와 IPv6 규칙을 둘 다 확인합니다.
firewalld 사용법도 이 글에 있나요?
이 글은 직접 문서를 확인한 ufw 중심으로 썼습니다. CentOS나 Rocky 계열의 firewalld는 해당 배포판 문서에서 명령을 확인해 사용하세요.
확인한 자료
기술 정보는 2026-10-24에 위 자료로 확인했습니다. 소프트웨어 버전·기본값·서비스 정책은 바뀔 수 있으므로 적용 전 각 문서의 최신 내용을 확인하세요. 이 글은 일반 정보이며 특정 서비스 가입을 권하지 않습니다.