서버를 생성하고 공인 IP를 할당받은 지 몇 분 지나지도 않아 /var/log/auth.log 파일에 무수히 찍히는 SSH 접속 시도 로그를 본 적이 있을 것이다. 세상의 수많은 자동화 스캐너들이 22번 포트를 타깃으로 무차별 대입 공격(Brute Force Attack)을 퍼붓기 때문이다. 다만 대다수의 개발자들은 SSH 기본 포트를 22번 그대로 방치한 채 허술한 비밀번호를 사용하다가 서버 주도권을 빼앗기는 사고를 겪는다. 이번에는 SSH 기본 포트를 안전하게 변경하고, UFW 방화벽을 설정하여 무차별 대입 공격을 근본적으로 차단하는 방법을 완벽하게 정리해서 소개하겠다.

 

SSH 포트 변경과 방화벽 설정이 필요한 이유

Linux 서버를 처음 구축하면 SSH 서비스는 기본적으로 22번 포트(TCP)에서 요청을 대기한다. 해커들은 특정 IP 대역 전체의 22번 포트를 스캔하여 root, admin, test 같은 흔한 계정명으로 초당 수십 회 이상의 로그인 시도를 수행한다. SSH 포트를 잘 알려지지 않은 고유한 포트 번호(예: 22222번)로 변경하는 것만으로도 자동화 스캐너의 99% 이상을 무력화할 수 있다.

여기에 UFW(Uncomplicated Firewall) 방화벽을 적용해 특정 포트만 열어두고, 불필요한 접근을 차단하면 보안성이 비약적으로 상승한다. 다만 작업 순서를 잘못 적용하면 현재 연결된 SSH 세션이 끊긴 후 서버에 영영 접속하지 못하는 '락아웃(Lockout)' 상태에 빠질 수 있으므로 정확한 절차를 따라야 한다.

보안 항목기본 설정(위험)권장 설정(안전)보안 효과
SSH 포트22번 (Well-known)1024~65535 사이 임의 포트자동화 스캐닝 및 단순 공격 99% 차단
비밀번호 인증PasswordAuthentication yesPasswordAuthentication noSSH Key(공개키) 기반 인증으로 무차별 대입 무효화
root 로그인PermitRootLogin yesPermitRootLogin no최고 권한 계정 직접 표적 공격 방지
방화벽 상태UFW 비활성화 또는 22번 전체 개방UFW 활성화 및 특정 포트만 허용허가되지 않은 포트 접근 원천 차단

 

SSH 포트 변경 및 UFW 설정 4단계 실전 가이드

작업은 반드시 현재 로그인된 SSH 세션을 유지한 상태에서 새로운 터미널 창을 열어 테스트하는 방식으로 진행해야 한다.

 

1단계: UFW 방화벽에 새로운 SSH 포트 미리 등록하기

SSH 포트를 먼저 바꾸고 방화벽을 켜면, 방화벽이 새 포트를 막아 서버에 접속할 수 없게 된다. 반드시 신규 포트 허용 설정을 먼저 진행해야 한다. 여기서는 임의의 포트 번호인 22222번을 예시로 사용한다.

# UFW 방화벽에 신규 SSH 포트(22222/tcp) 허용 규칙 추가
sudo ufw allow 22222/tcp

# UFW 방화벽 활성화 (이미 활성화되어 있다면 reload)
sudo ufw enable

# 방화벽 규칙 적용 상태 확인
sudo ufw status verbose

 

2단계: SSH 데몬 설정 파일(sshd_config) 수정하기

SSH 설정 파일을 열어 기본 포트인 22번을 새로운 포트로 변경하거나 추가한다.

# SSH 설정 파일 백업 및 편집
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

설정 파일 내부에서 #Port 22 주석을 제거하고 Port 22222 로 수정한다. 만약 만약의 사태에 대비하고 싶다면 기존 Port 22를 남겨두고 아래 줄에 Port 22222를 추가로 작성한 뒤, 접속 테스트 성공 후 22번을 제거하는 방법이 가장 안전하다.

 

3단계: SSH 서비스 재시작 및 신규 포트 접속 검증

설정 변경 후 SSH 데몬을 재시작하여 변경 사항을 적용한다. 이때 **현재 접속해 있는 터미널 창은 절대로 닫지 마라.**

# SSH 서비스 문법 오류 검사
sudo sshd -t

# 이상이 없다면 SSH 서비스 재시작
sudo systemctl restart ssh

이제 새로운 터미널 창을 열어 변경된 포트로 정상 접속되는지 확인한다.

# 로컬 PC에서 변경된 포트로 서버 접속 테스트
ssh -p 22222 user@your_server_ip

 

4단계: 기존 22번 포트 차단 및 보안 강화

새 포트로 접속이 성공한 것을 확인했다면 기존 22번 포트 허용 규칙을 제거하고 방화벽에서 완전히 차단한다.

# 기존 22번 포트 UFW 규칙 삭제
sudo ufw delete allow 22/tcp

# 방화벽 설정 재로드
sudo ufw reload

 

실무에서 자주 하는 실수와 올바른 대처법

SSH 포트를 변경할 때 자주 발생하는 문제점과 올바른 해결법을 명확히 확인해두자.

✗ 잘못된 방식: 클라우드 인바운드 보안 그룹(Security Group) 설정을 잊고 OS 내부 UFW만 설정함.
✓ 올바른 방식: AWS EC2, NCP, GCP 등 클라우드 인프라를 사용하는 경우 OS 내부 UFW 설정 외에도 웹 콘솔의 Security Group 인바운드 규칙에 22222번 포트를 먼저 개방해야 한다.

✗ 잘못된 방식: SELinux가 활성화된 CentOS/RHEL 계열에서 SSH 포트만 변경하고 SELinux 포트 정책을 업데이트하지 않음.
✓ 올바른 방식: SELinux 환경에서는 semanage port -a -t ssh_port_t -p tcp 22222 명령어로 신규 포트를 SELinux 정책에 등록해야 SSH 데몬이 정상 작동한다.

# SELinux 환경에서 SSH 신규 포트 허용 방법
sudo semanage port -a -t ssh_port_t -p tcp 22222
sudo systemctl restart sshd

 

Fail2ban을 활용한 무차별 대입 공격 2차 방어

포트를 변경했더라도 공격자가 변경된 포트를 스캔해내면 다시 무차별 대입 공격을 시도할 수 있다. 접속 실패 횟수를 감지하여 공격자의 IP를 자동으로 일정 시간 차단하는 Fail2ban을 추가로 설치하는 것이 완벽한 방어책이다.

# Fail2ban 설치 및 기본 설정 파일 생성
sudo apt update && sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

jail.local 파일에서 sshd 섹션을 찾아 다음과 같이 변경된 포트와 차단 정책을 등록한다.

[sshd]
enabled = true
port = 22222
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 5
findtime = 10m
bantime = 1h

위 설정은 10분 동안 5회 이상 SSH 로그인 실패 시 해당 IP를 1시간 동안 자동으로 UFW 방화벽에서 차단한다.

SSH 포트 변경과 UFW 방화벽 설정은 리눅스 서버 운영 시 가장 기본이 되는 보안 절차다. 작은 설정 차이 하나가 무수한 자동화 공격으로부터 서버를 안전하게 지켜낸다는 점을 잊지 말자. 이 글의 4단계 가이드를 참고해 지금 바로 SSH 포트를 변경하면, 무차별 대입 공격 로그로 가득 찬 서버 로그 대신 쾌적하고 안전한 서버 환경을 얻을 수 있을 것이다.