Ubuntu 22.04 Server / ufw로 방화벽 설정하는 방법
Ubuntu 22.04 Server에서는 UFW(Uncomplicated Firewall)로 서버에 들어오고 나가는 네트워크 트래픽을 관리할 수 있습니다. 원격 서버라면 방화벽을 켜기 전에 현재 사용하는 SSH 포트를 허용하고, 다른 터미널이나 콘솔로 복구할 수 있는지 확인하세요.
시작하기 전에 확인할 사항
UFW는 리눅스 방화벽을 관리하는 도구입니다. 방화벽에서 포트를 허용해도 해당 서비스가 설치되어 실행 중이고 올바른 주소와 포트에서 대기해야 접속할 수 있습니다. 클라우드 보안 그룹이나 외부 방화벽이 있다면 그곳의 규칙도 별도로 확인하세요.
운영 중인 서버에서 기존 정책을 무작정 바꾸지 마세요. 현재 방화벽 상태, 등록된 규칙, 필요한 서비스와 접속 포트를 먼저 확인하고, 클라우드 콘솔이나 서버 관리 콘솔처럼 SSH가 끊겨도 사용할 수 있는 접속 수단을 준비합니다. 명령은 관리자 권한이 필요합니다.
sudo ufw status verbose
sudo ufw show added
sudo ss -lntup
status verbose는 활성 상태의 UFW 정책과 규칙을 보여 줍니다. 비활성 상태라면 이 화면만으로 모든 등록 규칙을 확인할 수 없으므로 show added도 살펴보세요. ss는 대기 중인 소켓 확인에 도움이 되지만, 이것만으로 외부에서 접속 가능하다고 판단할 수는 없습니다.
SSH를 허용한 뒤 활성화
다음은 SSH가 기본 TCP 22번 포트에서 실행되는 새 서버의 예입니다. 포트가 다르면 실제 포트로 바꾸세요. 이 규칙은 특정 IP로 제한하지 않고 해당 포트를 허용하므로, 접근 범위가 넓다는 점을 고려해야 합니다. 이미 활성화된 서버에서는 기존 규칙과 우선순위를 먼저 검토하세요.
sudo ufw allow 22/tcp
필요한 다른 서비스 규칙과 기본 정책도 확인한 다음 방화벽을 켭니다. UFW를 켤 때 규칙을 다시 적용하면서 기존 SSH 연결이 끊길 수도 있습니다. 현재 세션을 유지한 채 별도 터미널에서 새 SSH 연결을 시험하고, 실패하면 준비한 콘솔로 접속해 규칙을 수정하세요.
sudo ufw enable
sudo ufw status verbose
상태가 active이고 의도한 SSH 규칙이 표시되는지 확인합니다. 그다음 실제로 필요한 서비스에 허용된 네트워크와 허용되지 않은 네트워크에서 각각 접속을 시험합니다. 이 절차와 예외는 Ubuntu 22.04 UFW 설명서의 원격 관리 항목에서도 확인할 수 있습니다.
기본 정책과 포트 규칙
새로 설치한 UFW의 기본값은 일반적으로 들어오는 연결 거부와 나가는 연결 허용이지만, 서버마다 변경되어 있을 수 있습니다. status verbose로 실제 정책을 확인하세요. 예를 들어 필요한 서비스가 모두 확인된 새 서버에서 들어오는 연결을 기본적으로 거부하려면 다음 명령을 사용할 수 있습니다. 이미 운영 중인 서버에서는 정책 변경이 기존 서비스와 연결에 미칠 영향을 먼저 검토하세요.
sudo ufw default deny incoming
웹 서버를 외부에 제공해야 한다면 실제 사용하는 포트와 프로토콜을 허용합니다. 다음은 HTTP와 HTTPS의 TCP 포트 예이며, 웹 서비스를 사용하지 않는 서버에 일괄 적용할 필요는 없습니다.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
DNS 서비스를 제공하는 서버라면 필요에 따라 53번 포트의 UDP와 TCP를 각각 허용할 수 있습니다. DNS 서비스를 제공하지 않는 서버에서 예제라는 이유로 포트를 열지 마세요.
sudo ufw allow 53/udp
sudo ufw allow 53/tcp
allow는 허용 규칙, deny는 거부 규칙을 추가합니다. 프로토콜을 지정하지 않은 포트 규칙은 TCP와 UDP 모두에 적용될 수 있으므로 필요한 프로토콜을 명시하는 편이 명확합니다. 규칙은 순서가 중요하고 먼저 일치한 규칙이 적용될 수 있으므로, 기존 허용 규칙이 있는 상태에서 거부 규칙을 추가했다고 반드시 차단되는 것은 아닙니다.
특정 IP에서만 접근 허용
다음은 하나의 IPv4 주소에서 TCP 22번 포트로 들어오는 연결만 허용하는 예입니다. 192.0.2.10은 설명용 주소이므로 실제 관리자 접속 IP로 바꾸고, 변경 가능한 IP라면 복구 방법을 먼저 준비하세요.
sudo ufw allow from 192.0.2.10 to any port 22 proto tcp
이 규칙을 추가해도 기존에 모든 주소에서 22번 포트를 허용하는 규칙이 남아 있으면 접근이 제한되지 않을 수 있습니다. 번호가 있는 목록으로 기존 규칙과 순서를 확인한 뒤, 실제 필요한 규칙만 남기세요. IPv6가 활성화된 서버라면 IPv4 규칙만으로 IPv6 접근이 제한된다고 가정하지 말고 IPv6 정책과 규칙도 확인해야 합니다.
sudo ufw status numbered
규칙 삭제와 비활성화
추가한 규칙을 정확한 내용으로 삭제하려면 원래 명령에 delete를 넣습니다. 예를 들어 아래 명령은 UDP 53번 허용 규칙을 삭제하며, TCP 규칙은 별개입니다.
sudo ufw delete allow 53/udp
번호로 삭제할 수도 있지만 규칙을 하나 삭제하면 번호가 바뀝니다. 매번 sudo ufw status numbered로 현재 번호와 내용을 다시 확인하세요. 번호 삭제는 표시된 IPv4 또는 IPv6 규칙 한 개만 삭제할 수 있으므로 다른 IP 버전의 대응 규칙도 확인해야 합니다. 삭제 후에도 상태를 다시 확인하고 실제 연결을 시험하세요.
방화벽을 끄려면 다음 명령을 사용합니다. 비활성화하면 UFW가 적용하던 보호가 해제되므로, 다른 방화벽이 있다는 이유만으로 안전하다고 가정하지 말고 영향 범위를 먼저 확인하세요.
sudo ufw disable
규칙이 예상대로 동작하지 않을 때
서비스가 대기 중인지, 올바른 포트와 프로토콜을 허용했는지, 규칙의 순서와 기본 정책이 무엇인지 확인합니다. 클라우드 방화벽·공유기·상위 네트워크의 규칙, 접속에 사용된 IPv4 또는 IPv6 주소도 함께 살펴보세요. 컨테이너나 별도로 관리되는 네트워크 규칙은 UFW 상태 목록만으로 전체 동작을 판단하기 어려울 수 있습니다.
실제 규칙을 바꾸기 전에 --dry-run으로 변경될 내용을 미리 볼 수 있습니다. 예를 들어 다음 명령은 TCP 80번 허용 규칙의 변경 내용을 보여 주지만 적용하지는 않습니다.
sudo ufw --dry-run allow 80/tcp
UFW의 상태 화면은 UFW 명령으로 관리하는 규칙을 중심으로 보여 주며 시스템의 모든 방화벽 설정을 빠짐없이 나타내지는 않습니다. 추가 설명과 명령 형식은 Ubuntu Server 방화벽 문서를 확인하세요.




