본문 바로가기

카테고리 없음

리눅스 서버 SSH 보안 강화 방법: 기본 포트 변경보다 중요한 설정들

리눅스 서버를 운영하면서 보안을 위해 가장 먼저 하는 작업 중 하나가 SSH 기본 포트(22번)를 변경하는 것입니다. 하지만 포트 변경은 자동화된 스캐너의 무차별 접속 시도를 잠시 피하는 '은폐를 통한 보안(Security by Obscurity)'일 뿐, 근본적인 해결책이 되지 못합니다. Port Scan 도구를 사용하면 변경된 포트도 금방 노출되기 때문입니다.

진정한 서버 보안 강화를 위해 기본 포트 변경보다 훨씬 강력하고 필수적인 SSH Core 보안 설정 4가지를 소개합니다.

1. 비밀번호 로그인 차단 및 SSH 키 인증 도입

리눅스

대부분의 서버 침해 사고는 취약한 비밀번호를 노린 '무차별 대입 공격(Brute Force Attack)'이나 '사전 대입 공격(Dictionary Attack)'에서 시작됩니다. 비밀번호 기반 로그인을 완전히 비활성화하고, 암호학적으로 안전한 SSH Key Pair(공개키/개인키) 인증 방식만 허용해야 합니다.

설정 방법

  1. 로컬 PC에서 SSH 키 쌍을 생성합니다 (이미 생성된 키가 있다면 생략 가능).
Bash
 
ssh-keygen -t ed25519 -C "your_email@example.com"

(기존 RSA보다 가볍고 안전한 ed25519 알고리즘 사용을 권장합니다.)

  1. 공개키를 서버에 복사합니다.
Bash
 
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
  1. 키 인증 정상 동작 확인 후, 서버의 /etc/ssh/sshd_config 파일을 열어 다음 설정을 수정합니다.
Bash
 
PasswordAuthentication no
PubkeyAuthentication yes

비밀번호 로그인을 차단하면 무차별 대입 공격자가 올바른 비밀번호를 맞추더라도 서버 접속 자체가 불가능해집니다.

2. root 계정 직속 로그인 금지 (PermitRootLogin no)

root 계정은 리눅스 시스템의 모든 권한을 가진 최고 관리자입니다. 공격자들은 관리자 아이디가 root라는 점을 이미 알고 있기 때문에, root 계정으로의 직접 접근을 허용하는 것은 공격자에게 목표의 절반을 제공하는 것과 같습니다.

일반 사용자 계정을 생성한 뒤 sudo 권한을 부여하고, root의 SSH 직접 접속을 금지해야 합니다.

설정 방법

  1. /etc/ssh/sshd_config 파일에서 아래 항목을 찾아 수정합니다.
Bash
 
PermitRootLogin no
  1. 필요시 특정 사용자만 sudo 권한을 사용할 수 있도록 관리하며, 서버 접속 후 sudo -i 또는 su 명령어를 통해 관리자 권한으로 전환하는 방식을 사용합니다.

3. Fail2ban 도입을 통한 무차별 대입 공격 자동 차단

비밀번호 로그인을 막아두었더라도, 지속적인 접속 시도는 서버 로그를 더럽히고 시스템 자원(CPU, Network)을 waste 시킵니다. Fail2ban은 서버 로그를 실시간으로 감시하다가 일정 횟수 이상 로그인에 실패한 IP를 방화벽(iptables, ufw 등)에서 자동으로 일시적/영구적 차단하는 강력한 보안 도구입니다.

설치 및 기본 설정 (Ubuntu/Debian 기준)

  1. Fail2ban 설치:
Bash
 
sudo apt update && sudo apt install fail2ban -y
  1. 설정 파일 복사 및 편집 (/etc/fail2ban/jail.local 생성):
Ini, TOML
 
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 600
bantime = 3600
  • maxretry: 허용할 실패 횟수 (예: 5회)
  • findtime: 실패 횟수를 집계할 시간 단위 (초)
  • bantime: 차단 지속 시간 (초, -1 설정 시 영구 차단)

Fail2ban을 구축하면 자동화된 봇(Bot) 공격의 99% 이상을 효과적으로 방어할 수 있습니다.

4. SSH 접속 사용자 및 IP 제한 (AllowUsers / IP Filtering)

서버에 접속할 수 있는 인원과 네트워크 범위를 구체적으로 제한하는 것은 강력한 보안 계층을 추가하는 방법입니다.

사용자 제한 (sshd_config)

서버에 등록된 수많은 계정 중 실제로 SSH 접속이 필요한 계정만 명시합니다.

Bash
 
AllowUsers myadminuser developer1

IP 제한 (방화벽 및 ufw)

가능하다면 SSH 포트 자체를 특정 IP(예: 사무실 고정 IP, 집 고정 IP 또는 VPN IP)에서만 접근 가능하도록 방화벽 레벨에서 통제합니다.

  • UFW 사용 예시:
Bash
 
sudo ufw default deny incoming
sudo ufw allow from 203.0.113.50 to any port 22 proto tcp
sudo ufw enable

안전한 설정 적용 절차 (주의사항)

SSH 설정을 변경할 때 가장 흔히 하는 실수는 설정 오류로 인해 본인의 접속까지 차단되는 상황입니다. 반드시 다음 절차를 지켜 적용하세요.

1.설정 파일 수정 및 검증:오류 확인.

/etc/ssh/sshd_config 설정 수정 후, 아래 명령어로 구문 오류가 없는지 확인합니다.

Bash
 
sudo sshd -t

(아무런 출력도 나오지 않는다면 정상입니다.)

2.SSH 서비스 재시작:기존 세션 유지.

서비스를 재시작합니다. 이때 현재 접속된 터미널 창을 절대 닫지 마세요.

Bash
 
sudo systemctl restart sshd
3.새 터미널에서 접속 테스트:검증.

새로운 터미널 창을 열어 변경된 설정(키 인증, 일반 계정 등)으로 정상 접속되는지 확인합니다. 접속이 잘 되는 것을 확인한 후 기존 터미널을 종료합니다.

요약

포트 변경은 스팸 성격의 접속 시도를 줄여주는 보조 수단일 뿐입니다. 리눅스 서버의 SSH 보안을 완성하기 위해서는 1) SSH Key 기반 인증 전환, 2) root 직접 접속 차단, 3) Fail2ban을 통한 차단 자동화, 4) IP 및 계정 접근 제어가 반드시 선행되어야 합니다. 최소한의 필수 보안 설정을 통해 소중한 서버 자원을 안전하게 보호하세요.


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 블로그 이름