리눅스 서버를 처음 생성하고 공용 IP를 부여받는 순간부터, 네트워크상에는 무차별 접속을 시도하는 자동화된 해킹 스크립트들이 끊임없이 접속 시도를 보내기 시작합니다.
기본 설정 상태 그대로 서버를 내버려 두면 불과 며칠 만에 수천, 수만 번의 무차별 대입 공격(Brute Force)을 받게 되는데요.
리눅스 서버를 새로 만들었을 때 가장 먼저 진행해야 하는 필수 보안 조치들을 정리했습니다. SSH 보안 강화법부터 UFW 방화벽 세팅, 그리고 자동 공격을 차단해 주는 Fail2ban 설정까지 차근차근 따라 해 보실 수 있도록 안내해 드립니다.
1. 기본 SSH 포트(22번) 변경하기
해커들이 돌리는 자동 공격 프로그램은 기본적으로 22번 포트만을 집중적으로 공격합니다. 포트 번호만 다른 숫자로 변경해 두어도 불필요한 스캔 공격의 90% 이상을 차단할 수 있습니다.
설정 단계
- 터미널에서 SSH 설정 파일을 엽니다.
Bash
sudo nano /etc/ssh/sshd_config - #Port 22라고 적힌 부분을 찾아 주석(#)을 제거하고, 잘 쓰이지 않는 1024~65535 사이의 포트 번호(예: 22222 또는 50022)로 변경합니다.
Plaintext
Port 50022 - 파일 저장 후 SSH 서비스를 재시작합니다. (주의: 방화벽을 먼저 열지 않고 세션을 끊으면 서버 접속이 차단될 수 있으니 실행 중인 터미널 창은 절대 닫지 마세요.)
Bash
sudo systemctl restart ssh
2. 비밀번호 로그인 완전 차단 및 SSH 키 기반 인증 적용
문자열 비밀번호는 아무리 길게 설정해도 유출이나 무차별 대입 공격에 취약합니다. 비대칭 암호화 키 방식(공개키/개인키)을 도입하고 비밀번호 접속 기능 자체를 꺼버리는 것이 가장 확실한 대책입니다.
① 내 PC에서 키 쌍(Key Pair) 생성하기
로컬 PC(내 컴퓨터) 터미널이나 명령 프롬프트에서 아래 명령어를 실행합니다.
Bash
ssh-keygen -t ed25519 -C “my-server-key”
생성된 두 개의 키 중 .pub 확장자가 붙은 공개키 내용을 복사하여 서버의 ~/.ssh/authorized_keys 파일 안에 붙여넣고 저장합니다.
② 비밀번호 로그인 기능 비활성화
키 접속이 정상적으로 작동하는 것을 확인했다면, 다시 /etc/ssh/sshd_config 파일로 들어가 비밀번호 로그인을 끕니다.
Plaintext
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
- PasswordAuthentication no: 비밀번호 입력 접속을 전면 금지합니다.
- PermitRootLogin no: 최고 권한자인 root 계정으로 바로 접속하는 것을 막습니다.
설정 변경 후 sudo systemctl restart ssh를 실행해 줍니다.
3. UFW 방화벽 세팅으로 필요한 문만 열어두기
UFW(Uncomplicated Firewall)는 우분투 등 리눅스 환경에서 방화벽을 아주 쉽게 관리할 수 있게 해주는 도구입니다. 기본 원칙은 “모든 문을 닫아두고, 필요한 포트만 콕 집어서 열어준다”입니다.
Bash
# 1. 모든 들어오는 트래픽 차단, 나가는 트래픽 허용 (기본 규칙)
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. 위에서 새로 변경한 SSH 포트 열기 (필수!)
sudo ufw allow 50022/tcp
# 3. 웹 서비스에 필요한 80(HTTP), 443(HTTPS) 포트 열기
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 4. 방화벽 활성화
sudo ufw enable
# 5. 방화벽 상태 및 열린 포트 확인
sudo ufw status verbose
4. Fail2ban으로 무차별 공격자 자동 차단하기
비밀번호나 잘못된 포트로 지속해서 접속을 시도하는 수상한 IP를 자동으로 탐지하여 방화벽에서 블랙리스트로 등록해 주는 고마운 도구가 바로 Fail2ban입니다.
설치 및 기본 설정
Bash
sudo apt update
sudo apt install fail2ban -y
설정 원본 보호를 위해 jail.local 복사본 파일을 만들어 편집합니다.
Bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
파일 내 [sshd] 항목을 찾아 다음과 같이 수정합니다.
Ini, TOML
[sshd]
enabled = true
port = 50022
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 5
findtime = 10m
bantime = 24h
- maxretry = 5: 10분(findtime = 10m) 내에 5번 이상 로그인에 실패하면 차단합니다.
- bantime = 24h: 차단된 IP는 24시간 동안 서버 접속이 완전히 막힙니다.
설정을 마친 뒤 서비스를 실행합니다.
Bash
sudo systemctl restart fail2ban
# 차단된 IP 목록 확인 명령어
sudo fail2ban-client status sshd
서버 보안에는 ‘완벽’이 없습니다. 하지만 기본 포트 변경, SSH 키 인증 전용 설정, UFW 방화벽 차단, Fail2ban 자동 모니터링이라는 4단계 기본 방어 체계만 갖추어 두어도 대다수의 자율형 해킹 공격으로부터 서버를 안전하게 지켜낼 수 있습니다.
초기 구축 시 몇 분만 투자하여 차근차근 세팅해 보시길 권장합니다.