Ubuntu 24.04에서 UFW로 특정 IP의 SSH 접속만 허용하는 방법

안녕하세요. VISION IDC 기술팀입니다.

오늘은 Ubuntu 24.04에서 UFW를 사용해 특정 IP 주소에서 들어오는 SSH 접속만 허용하는 방법을 알아보겠습니다. 관리용 고정 IP만 SSH 포트에 접근하도록 제한하면 불필요한 외부 접속 시도를 줄이고 서버의 원격 관리 범위를 명확하게 통제할 수 있습니다.

핵심은 허용할 관리자 IP의 규칙을 먼저 추가한 뒤, 기존에 모든 IP에 열려 있는 SSH 허용 규칙을 제거하는 것입니다. 현재 SSH 세션을 유지한 상태에서 별도의 터미널로 새 접속을 확인한 후 작업을 마무리해야 원격 접속 차단 사고를 예방할 수 있습니다.

적용 환경

문서 적용 기준
항목 내용
운영체제 Ubuntu 24.04 LTS
방화벽 UFW 0.36.2 계열
SSH 포트 22/tcp 기준
예시 서버 IP 203.0.113.10
허용할 관리자 IP 198.51.100.20

이 문서에서 알아볼 내용

  • 현재 SSH 접속에 사용 중인 클라이언트 IP 확인
  • UFW와 SSH 서비스 상태 점검
  • 특정 IPv4 주소에만 SSH 포트 허용
  • 모든 IP에 열려 있는 기존 SSH 규칙 제거
  • 허용된 IP와 허용되지 않은 IP에서 접속 검증
  • 접속 차단 시 복구 및 원상복구 방법

작업 전 준비사항

다음 조건을 먼저 확인하십시오.

  • sudo 권한이 있는 계정으로 서버에 접속해 있어야 합니다.
  • 허용할 관리자 측 공인 IP가 고정되어 있거나 변경 주기를 알고 있어야 합니다.
  • 작업 중 현재 SSH 세션을 종료하지 않아야 합니다.
  • 접속 문제가 발생했을 때 사용할 수 있는 VPS 콘솔, KVM 또는 시리얼 콘솔 접근 방법을 확보하는 것이 좋습니다.
  • 클라우드 방화벽이나 보안 그룹을 함께 사용하는 경우 해당 계층의 SSH 허용 규칙도 확인해야 합니다.

현재 IP와 방화벽 상태 확인

1. 현재 SSH 클라이언트 IP 확인

현재 SSH 세션에서 서버가 인식한 클라이언트 IP를 확인합니다. SSH_CONNECTION의 첫 번째 값이 접속한 클라이언트의 주소입니다.

echo "$SSH_CONNECTION"

첫 번째 값이 실제 관리자 측 공인 IP인지 확인하십시오. 회사 VPN, 가정용 공유기 또는 통신사 네트워크를 사용하면 단말기의 사설 IP가 아니라 서버에 도달한 공인 출발지 IP가 표시됩니다.

2. SSH 서비스와 22번 포트 확인

SSH 서비스가 실행 중인지 확인합니다.

sudo systemctl is-active ssh
sudo systemctl status ssh --no-pager

systemctl is-active ssh 결과가 active이면 서비스가 실행 중입니다. 기본 SSH 포트 22가 수신 대기 중인지도 확인합니다.

sudo ss -ltnp | grep ':22 '

SSH 포트를 변경한 서버라면 22 대신 실제 포트 번호를 사용하십시오.

3. UFW 설치 여부와 현재 규칙 확인

UFW 명령이 설치되어 있는지 확인합니다.

command -v ufw
sudo ufw status verbose
sudo ufw status numbered

command -v ufw에서 경로가 출력되지 않으면 다음 명령으로 설치합니다.

sudo apt update
sudo apt install -y ufw

sudo ufw status numbered 결과에서 22/tcp ALLOW IN Anywhere, OpenSSH ALLOW IN Anywhere 또는 이와 유사한 전체 허용 규칙이 있는지 확인하십시오. 해당 규칙이 남아 있으면 특정 IP 규칙을 추가해도 다른 IP의 접속이 계속 허용됩니다.

특정 IP의 SSH 접속 허용

관리자 IP 198.51.100.20에서 서버의 TCP 22번 포트로 들어오는 연결만 허용합니다. 실제 환경에서는 예시 IP를 현재 확인한 관리자 공인 IP로 변경하십시오.

sudo ufw allow proto tcp from 198.51.100.20 to any port 22 comment 'SSH from admin IP'

CIDR 표기를 명확히 사용하려면 단일 IPv4 주소 뒤에 /32를 붙여도 됩니다.

sudo ufw allow proto tcp from 198.51.100.20/32 to any port 22 comment 'SSH from admin IP'

두 명령은 같은 단일 IPv4 주소를 허용하는 용도이므로 둘 중 하나만 실행합니다. 규칙이 추가되었는지 확인합니다.

sudo ufw status numbered

출력에서 22번 포트의 허용 출발지가 198.51.100.20 또는 198.51.100.20/32로 표시되는지 확인하십시오.

여러 관리자 IP를 허용하는 경우

보조 관리 IP가 있다면 각 IP별로 별도 규칙을 추가합니다.

sudo ufw allow proto tcp from 198.51.100.20 to any port 22 comment 'SSH from primary admin IP'
sudo ufw allow proto tcp from 203.0.113.25 to any port 22 comment 'SSH from backup admin IP'

관리 네트워크 대역 전체를 허용하는 경우

특정 사무실이나 VPN의 네트워크 대역 전체를 허용해야 한다면 CIDR 범위를 사용합니다. 다음 예시는 198.51.100.0/24 대역을 허용합니다.

sudo ufw allow proto tcp from 198.51.100.0/24 to any port 22 comment 'SSH from admin network'

모든 IP에 열려 있는 SSH 규칙 제거

특정 IP 허용 규칙을 추가했더라도 Anywhere에서 SSH를 허용하는 기존 규칙이 남아 있으면 접속 제한이 완성되지 않습니다. 현재 규칙 번호를 다시 확인합니다.

sudo ufw status numbered

출력에서 다음과 같은 전체 허용 규칙의 번호를 찾습니다.

  • 22/tcp ALLOW IN Anywhere
  • OpenSSH ALLOW IN Anywhere
  • 22/tcp (v6) ALLOW IN Anywhere (v6)
  • OpenSSH (v6) ALLOW IN Anywhere (v6)

예를 들어 전체 허용 규칙이 3번이라면 다음과 같이 삭제합니다.

sudo ufw delete 3

규칙을 하나 삭제하면 뒤에 있던 규칙 번호가 다시 정렬됩니다. 삭제할 규칙이 여러 개라면 매번 sudo ufw status numbered를 다시 실행한 뒤 현재 번호를 확인하십시오.

삭제 후 최종 규칙을 확인합니다.

sudo ufw status numbered

SSH 포트 22의 허용 출발지가 지정한 관리자 IP로만 남아 있어야 합니다. IPv6를 사용하지 않더라도 기존에 모든 IPv6 주소에 열려 있던 SSH 허용 규칙이 있다면 함께 제거해야 합니다.

기본 정책 설정과 UFW 활성화

UFW가 아직 비활성 상태라면 허용 규칙이 실제 트래픽에 적용되지 않습니다. 먼저 들어오는 연결은 기본 차단하고, 나가는 연결은 기본 허용하도록 설정합니다.

sudo ufw default deny incoming
sudo ufw default allow outgoing

웹 서버, DNS, 데이터베이스 등 외부에서 접근해야 하는 다른 서비스가 있다면 필요한 포트의 허용 규칙도 UFW 활성화 전에 추가해야 합니다.

UFW를 활성화합니다.

sudo ufw enable

이미 Status: active인 서버에서는 다시 활성화할 필요가 없습니다. 추가하거나 삭제한 일반 UFW 규칙은 활성 상태에서 즉시 반영됩니다. 최종 상태를 확인합니다.

sudo ufw status verbose

정상적으로 설정되었다면 UFW 상태가 active이고, 기본 수신 정책은 deny, 22번 포트의 허용 출발지는 지정한 관리자 IP로 표시됩니다.

정상 작동 확인

1. 서버에서 최종 UFW 규칙 확인

sudo ufw status numbered
sudo ufw status verbose

다음 항목을 확인하십시오.

  • UFW 상태가 active인지 확인
  • 22번 포트가 198.51.100.20에서만 허용되는지 확인
  • Anywhere 또는 Anywhere (v6)에 대한 SSH 허용 규칙이 남아 있지 않은지 확인
  • 다른 운영 서비스에 필요한 허용 규칙이 유지되고 있는지 확인

2. 허용된 IP에서 새 SSH 접속 확인

현재 SSH 창은 그대로 유지하고, 허용한 관리자 IP를 사용하는 별도 터미널에서 새 연결을 시도합니다.

ssh [email protected]

SSH 포트가 2222처럼 변경되어 있다면 -p 옵션을 사용합니다.

ssh -p 2222 [email protected]

새 터미널에서 로그인이 완료된 뒤에만 기존 SSH 세션을 종료하십시오.

3. 허용되지 않은 IP에서 차단 확인

휴대전화 테더링, 다른 회선 또는 별도 외부 서버처럼 출발지 공인 IP가 다른 환경에서 다음과 같이 접속을 시도합니다.

ssh -o ConnectTimeout=5 [email protected]

허용되지 않은 IP에서는 SSH 연결이 성립하지 않아야 합니다. 네트워크와 상위 방화벽 동작에 따라 클라이언트에 표시되는 오류 형태는 달라질 수 있습니다.

4. 차단 로그 확인

필요한 경우 UFW 로깅을 낮은 수준으로 활성화합니다.

sudo ufw logging low

최근 커널 로그에서 UFW 관련 기록을 확인합니다.

sudo journalctl -k --since "10 minutes ago" | grep UFW

rsyslog 구성에 따라 /var/log/ufw.log에도 기록될 수 있습니다. 로그 양이 과도하면 sudo ufw logging off로 비활성화할 수 있습니다.

운영 및 보안 주의사항

동적 IP 환경에서는 접속 차단에 주의

가정용 인터넷, 모바일 회선 또는 일부 사무실 회선은 공인 IP가 변경될 수 있습니다. IP가 변경되면 기존 허용 규칙과 일치하지 않아 SSH 접속이 차단됩니다. 동적 IP 환경에서는 고정 IP VPN, 관리 전용 VPN 또는 콘솔 접근 수단을 함께 준비하는 것이 안전합니다.

IPv4와 IPv6 규칙을 구분

관리자가 IPv6로 SSH 접속한다면 IPv6 관리자 주소에 대한 별도 허용 규칙이 필요합니다. 반대로 IPv4만 허용했더라도 기존의 전체 IPv6 SSH 허용 규칙이 남아 있으면 IPv6 경로로는 누구나 접근할 수 있으므로 제거해야 합니다.

상위 네트워크 방화벽도 함께 확인

VPS 제공업체의 방화벽, 클라우드 보안 그룹, 라우터 ACL이 별도로 적용되는 환경에서는 UFW 규칙만으로 전체 접근 정책이 결정되지 않습니다. 상위 방화벽과 UFW 모두에서 같은 관리자 IP와 SSH 포트를 일관되게 제한하십시오.

IP 제한과 SSH 키 인증을 함께 사용

특정 IP 제한은 네트워크 접근 범위를 줄이는 방법이며 사용자 인증 자체를 대체하지 않습니다. SSH 공개키 인증, 일반 사용자 계정, 적절한 sudo 권한 관리와 함께 사용하는 것이 좋습니다.

자주 발생하는 오류와 해결 방법

UFW SSH IP 제한 문제 점검표
증상 가능한 원인 확인 방법 해결 방법
허용한 IP에서도 SSH 접속이 되지 않음 관리자 공인 IP 오입력, 동적 IP 변경, SSH 포트 불일치 또는 상위 방화벽 차단 echo "$SSH_CONNECTION", sudo ufw status numbered, sudo ss -ltnp 확인 실제 출발지 IP와 SSH 포트로 허용 규칙을 다시 추가하고 상위 방화벽 규칙을 확인
허용하지 않은 IP에서도 SSH 접속이 됨 모든 IP를 허용하는 22번 포트 또는 OpenSSH 규칙이 남아 있음 sudo ufw status numbered에서 AnywhereAnywhere (v6) 규칙 확인 특정 IP 규칙을 유지한 채 전체 허용 규칙만 번호로 삭제
Status: inactive로 표시됨 UFW가 비활성 상태 sudo ufw status verbose 실행 필요한 모든 허용 규칙을 먼저 추가한 뒤 sudo ufw enable 실행
규칙 번호로 삭제했는데 다른 규칙이 삭제됨 이전 삭제 후 규칙 번호가 재정렬됨 삭제할 때마다 sudo ufw status numbered 재실행 잘못 삭제한 규칙을 다시 추가하고 현재 번호를 기준으로 작업
IPv4에서는 차단되지만 IPv6에서는 접속됨 전체 IPv6 SSH 허용 규칙이 남아 있음 sudo ufw status numbered에서 (v6) 규칙 확인 전체 IPv6 허용 규칙을 삭제하거나 관리자의 실제 IPv6 주소만 별도로 허용
UFW 활성화 후 웹 서비스까지 접속되지 않음 HTTP, HTTPS 등 필요한 서비스 포트 허용 규칙 누락 sudo ufw status verbose와 서비스 수신 포트 확인 실제로 운영 중인 서비스에 필요한 포트만 추가로 허용

원격 접속이 이미 차단된 경우

SSH로 접속할 수 없다면 서버 제공업체의 웹 콘솔, KVM 또는 시리얼 콘솔로 로그인한 뒤 UFW 상태와 규칙을 확인합니다.

sudo ufw status numbered
sudo systemctl status ssh --no-pager
sudo ss -ltnp | grep ':22 '

관리자 IP 규칙이 잘못되었다면 콘솔에서 올바른 IP를 다시 허용합니다.

sudo ufw allow proto tcp from 198.51.100.20 to any port 22 comment 'SSH recovery rule'

원상복구 방법

모든 IPv4 주소에서 SSH를 다시 허용

특정 IP 제한을 해제하고 기본 SSH 포트를 다시 전체 허용하려면 먼저 임시 전체 허용 규칙을 추가합니다.

sudo ufw allow 22/tcp comment 'Temporary SSH rollback'

별도 터미널에서 SSH 접속을 확인한 뒤 특정 IP 규칙 번호를 찾습니다.

sudo ufw status numbered

예를 들어 특정 IP 규칙이 2번이라면 다음과 같이 삭제합니다.

sudo ufw delete 2

콘솔에서 UFW를 긴급 비활성화

규칙 문제로 모든 원격 접속이 차단되었고 즉시 복구가 필요하다면 서버 콘솔에서 UFW를 비활성화할 수 있습니다.

sudo ufw disable

UFW가 비활성화되면 호스트 방화벽 보호도 함께 중단됩니다. 잘못된 규칙을 수정하고 필요한 포트를 점검한 뒤 다시 활성화하십시오.

공식 참고자료

  • Canonical Ubuntu Server DocumentationFirewall
    확인 내용: UFW 활성화·비활성화, 특정 호스트에서 SSH 포트 허용, 규칙 조회·삭제, 로깅 방법
    조회일: 2026년 7월 13일
  • Ubuntu Manpages 24.04 LTSufw(8)
    확인 내용: 전체 규칙 문법, 원격 관리 주의사항, 번호 기반 규칙 삭제, 로깅 수준과 기본 정책
    조회일: 2026년 7월 13일
  • Canonical Ubuntu Security DocumentationFirewall
    확인 내용: Ubuntu 24.04 LTS의 UFW 제공 버전과 Netfilter 프런트엔드 동작
    조회일: 2026년 7월 13일

자주 묻는 질문

특정 IP 허용 규칙만 추가하면 다른 IP는 자동으로 차단되나요?

UFW의 기본 수신 정책이 deny이고 모든 IP에 대한 SSH 허용 규칙이 없다면 다른 IP는 차단됩니다. 기존에 Anywhere 또는 OpenSSH 전체 허용 규칙이 남아 있다면 반드시 제거해야 합니다.

공인 IP가 바뀌면 어떻게 하나요?

새 공인 IP에서 접속하기 전에 서버 콘솔이나 기존 허용 네트워크를 통해 새 IP 규칙을 추가해야 합니다. 공인 IP가 자주 바뀌는 환경은 고정 IP VPN이나 관리 전용 VPN을 사용하는 편이 안전합니다.

SSH 포트가 22번이 아니어도 같은 방법을 사용할 수 있나요?

가능합니다. 모든 UFW 명령에서 22를 실제 SSH 포트로 변경하면 됩니다. 예를 들어 2222번 포트라면 to any port 2222를 사용하십시오.

UFW 규칙에 deny 22/tcp를 별도로 추가해야 하나요?

기본 수신 정책이 deny라면 별도의 전체 차단 규칙은 일반적으로 필요하지 않습니다. 특정 관리자 IP의 허용 규칙과 기본 차단 정책을 조합하는 편이 규칙을 단순하게 유지할 수 있습니다.

IP 제한만 설정하면 SSH 보안이 충분한가요?

IP 제한은 접근 가능한 네트워크 범위를 줄여 주지만 인증 보안을 대신하지는 않습니다. 공개키 인증, 강한 계정 정책, 불필요한 루트 로그인 제한과 함께 적용하는 것이 좋습니다.

마무리

오늘은 Ubuntu 24.04에서 UFW로 특정 IP의 SSH 접속만 허용하는 방법을 설명드렸습니다. 관리자 IP 허용 규칙을 먼저 추가하고, 모든 IP에 열려 있는 기존 SSH 규칙을 제거한 뒤, 기본 수신 정책과 실제 접속 결과를 확인하는 것이 핵심입니다.

현재 SSH 세션을 종료하기 전에는 반드시 허용된 IP를 사용하는 별도 터미널에서 새 로그인이 성공하는지 확인하십시오. 공인 IP가 변경될 수 있는 환경이라면 서버 콘솔이나 관리용 VPN 같은 복구 경로도 함께 준비해 두는 것이 안전합니다.

오늘 준비한 내용은 여기까지입니다. 다음에도 서버 운영에 도움이 되는 기술정보로 인사드리겠습니다.

  • 0 사용자에게 유용한 정보 제공
이 답변이 도움이 되었나요?
« Back