공인 IP를 부여받은 리눅스(Ubuntu) 서버를 인터넷에 연결하고 단 몇 시간 뒤 /var/log/auth.log를 열어보면 놀라운 광경을 마주하게 됩니다. 전 세계의 수많은 좀비 PC와 해커 봇들로부터 무차별 대입(Brute-force) 공격이 빗발쳐 SSH 로그인이 시도되는 흔적이 가득 차 있기 때문입니다. 해커들은 자동 스캐너를 돌려 기본 SSH 포트인 22번을 대상으로 흔한 ID(admin, root, ubuntu, user)와 널리 쓰이는 비밀번호 사전 파일을 대입해 수만 번 로그인을 찌릅니다.
이러한 침입 위협으로부터 개인 개발 서버, 클라우드 가상 머신(AWS, NCP 등), 또는 홈 서버 인프라를 안전하게 지켜낼 수 있는 **필수 기초 보안 조치 3단계(SSH 포트 변경, UFW 방화벽 세팅, Fail2ban 연동, SSH 키 인증 도입)**를 완벽하게 가이드해 드립니다.
1. 기본 SSH 포트(22번) 변경하기
자동화 해커 봇들의 공격 대상 1순위는 언제나 기본 포트인 22번입니다. 이 연결 포트를 엉뚱한 임의의 다른 번호(예: 1024~65535 사이의 사설 포트 대역)로 변경해 두는 것만으로도 단순 스캐너 봇 공격의 99% 이상을 원천 회피할 수 있습니다.
1.1. SSH 설정 파일 수정
SSH 서버 구성 파일인 sshd_config를 편집기로 엽니다.
sudo nano /etc/ssh/sshd_config
설정 줄 중에서 #Port 22 부분을 찾아 주석(#)을 해제하고, 사용할 커스텀 포트 번호(예: 50022)로 변경합니다.
# 수정 전
#Port 22
# 수정 후
Port 50022
수정 후 파일을 저장(Ctrl + O, Enter 후 Ctrl + X 종료)합니다.
1.2. SSH 데몬 재시작 및 동작 검증
포트를 변경했으면 SSH 데몬을 재시작하여 설정을 적용합니다.
sudo systemctl restart sshd
⚠️ 주의: 현재 접속해 있는 SSH 세션을 절대 끊지 마세요! 만약 방화벽 등 설정 오류가 있어 포트가 막혔다면 세션을 끊는 순간 영원히 서버에 원격 접속할 수 없게(Lockout) 됩니다. 새 터미널 창을 켜서
ssh -p 50022 user@server_ip로 접속이 성공적으로 되는지 확인한 후에 기존 세션을 닫으시기 바랍니다.
2. 기본 방화벽(UFW) 활성화 및 포트 관리
포트를 변경했다면 해당 포트만 통과시키고 나머지 포트는 원천 차단하는 방화벽(UFW) 설정이 이어져야 합니다.
# 1. 방화벽 기본 규칙 설정 (들어오는 트래픽 전부 차단, 나가는 것 허용)
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. 변경된 커스텀 SSH 포트 허용 (필수!)
sudo ufw allow 50022/tcp
# 3. 필요한 추가 포트가 있다면 허용 (예: 웹 서버 80, 443)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 4. 방화벽 활성화
sudo ufw enable
# 5. 방화벽 상태 조회
sudo ufw status verbose
3. 무단 침입자를 자동 밴(Ban)하는 Fail2ban 설치 및 세팅
SSH 포트를 바꾸더라도 해커가 포트 스캔을 돌려 변경된 포트를 기어코 찾아내 끈질기게 로그인을 두드릴 수 있습니다. Fail2ban은 로그 파일을 감시하다가 단시간 내에 로그인 실패를 반복한 IP를 감지하고, 방화벽(iptables) 규칙에 차단 목록으로 즉시 등록하여 접근을 원천 차단하는 침입 차단 시스템(IPS)입니다.
3.1. 패키지 설치 및 local 설정 파일 생성
설정 원본 파일(jail.conf)을 보호하기 위해 복사본인 jail.local을 작성하여 오버라이드합니다.
sudo apt update && sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
3.2. SSH 감시 감옥(Jail) 활성화 옵션 입력
jail.local 파일 하단이나 [sshd] 섹션에 아래 내용을 수정 및 추가합니다.
[sshd]
enabled = true
port = 50022 # 아까 변경한 커스텀 SSH 포트 번호 입력
filter = sshd
logpath = /var/log/auth.log
maxretry = 5 # 10분 동안 최대 5번 로그인 실패 시
findtime = 10m # 실패 집계 시간 간격
bantime = 1h # 대상 IP를 1시간 동안 완전 차단 (Ban)
3.3. 서비스 적용 및 모니터링 명령어
# 데몬 재시작
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
# 차단 상태 실시간 모니터링
sudo fail2ban-client status sshd
차단 현황을 보면 공격이 들어온 국가별 IP 대역들이 차단 목록(Banned IP list)에 실시간 등록되어 격리되고 있는 쾌적한 화면을 확인하실 수 있습니다.
4. 핵심 권장: SSH 키(Key-Pair) 기반 인증 도입하기
보안의 종착지는 **"비밀번호 로그인 자체를 금지하는 것"**입니다. 복잡한 패스워드도 해킹당할 수 있으나 암호화된 RSA/ED25519 공개키 키 쌍을 사용하면 물리 키 파일 없이는 로그인이 원천 불가능해집니다.
4.1. 로컬 컴퓨터(클라이언트)에서 키 쌍 생성 (Windows PowerShell 또는 macOS 터미널)
# 암호학적으로 안전한 ED25519 알고리즘으로 키 쌍 생성
ssh-keygen -t ed25519 -b 4096 -C "my-server-key"
# 경로 지정 메시지가 나오면 Enter를 쳐서 기본 경로(~/.ssh/id_ed25519)에 생성합니다.
4.2. 서버에 공개키 등록하기
로컬에서 생성된 id_ed25519.pub(공개키)의 텍스트 내용을 우분투 서버의 ~/.ssh/authorized_keys 파일 내부에 그대로 붙여넣습니다.
# 서버 계정 폴더의 권한 구조 정리 (권한이 너무 넓으면 SSH가 키를 거부함)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
4.3. 패스워드 로그인 비활성화 설정
키 로그인 확인이 잘 된다면 다시 /etc/ssh/sshd_config를 열어 패스워드 인증을 꺼버립니다.
# 패스워드 로그인 완전 차단 (키 파일 소지자만 허용)
PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes
설정 후 sudo systemctl restart sshd를 돌리면 이제 외부 해커가 아무리 비밀번호 사전 공격을 해 와도 "인증 수단 없음(Permission denied)" 에러를 뱉으며 시도조차 불가능한 무적의 보안 서버가 됩니다.
5. 자주 묻는 질문 (FAQ)
Q1. Fail2ban에 내 IP가 실수로 차단되었습니다. 어떻게 해제하나요?
스스로 비밀번호를 여러 번 틀려 서버에서 완전히 차단된 경우, 다른 모바일 데이터 통신이나 외부 IP로 우회하여 서버에 접근한 후 다음 명령어로 차단을 해제해야 합니다.
# 특정 IP 차단 강제 해제 (Unban)
sudo fail2ban-client set sshd unbanip [내_IP_주소]
이런 차단 실수를 방지하려면 jail.local 파일의 ignoreip = 127.0.0.1/8 ::1 [사내_또는_집_고정_IP] 옵션에 내 로컬 고정 IP를 신뢰 목록으로 사전 등록해 두는 것을 권장합니다.
Q2. AWS나 클라우드 제공사 보안 그룹(Security Group)이 있는데 UFW를 또 켜야 하나요?
AWS EC2 같은 클라우드 VM을 사용 중이라면 제공사의 **보안 그룹(Security Group)**이 가상 방화벽 역할을 선제적으로 수행하므로 굳이 UFW를 서버 내에 중복 구동해 시스템 리소스를 낭비하지 않는 것이 좋습니다. 그러나 집에서 직접 굴리는 미니 PC, 라즈베리 파이, 오프라인 실제 단독 서버 환경 등에는 OS 수준에서 보호해 주는 UFW 설정이 무조건 필수적입니다.
Q3. SSH 포트를 바꿨는데도 여전히 Fail2ban 로그에 접속 공격 시도가 들어오는 이유는 무엇인가요?
포트 스캐너 중에는 단순히 22번 포트만 찌르지 않고 1번부터 65535번까지 모든 포트를 맹렬하게 열어보며(Port Scanning) 반응을 살피는 무차별 해커 봇이 존재하기 때문입니다. 이를 더 완벽히 막으려면 특정 노크 규칙(예: 7001포트 찌른 뒤 8002포트를 노크해야만 10초간 SSH 포트를 열어주는 Port Knocking) 기법을 사용하거나, SSH 접속 허용 IP 대역을 특정 IP 그룹으로 아예 타이트하게 묶어버리는 화이트리스트 접근 제어 정책을 펴야 합니다.
6. 마무리 및 권장사항
공개망에 연결된 모든 서버는 잠재적인 해킹 타겟입니다. "나중에 설정하지 뭐" 하고 미루다가 하루 만에 서버 권한을 해커에게 탈취당하고 채굴 좀비 서버로 악용당하는 비극이 빈번하게 일어납니다. 우분투 서버를 생성하셨다면 (1) 포트 변경, (2) 비밀번호 로그인 금지 및 SSH 키 도입, (3) Fail2ban 자동 차단 3종 세트만큼은 10분만 투자해 초기 필수 루틴으로 반드시 세팅해 주시길 권장합니다.
'IT뉴스' 카테고리의 다른 글
| [글로벌 규제] EU AI 규제법(AI Act) 발효와 글로벌 기업들의 규제 준수(Compliance) 대응 전략 (0) | 2026.07.26 |
|---|---|
| [테크 트렌드] 패스워드리스(Passwordless)의 미래: 패스키(Passkey) 도입 가이드와 보안성 분석 (0) | 2026.07.26 |
| [차세대 테크] 양자 컴퓨팅(Quantum Computing)의 상용화 로드맵과 보안 암호화(PQC) 생태계의 변화 (0) | 2026.07.25 |
| [IT 트렌드] 슈퍼앱(Super App)의 부상: 메신저와 결제, 모빌리티가 결합된 글로벌 디지털 생태계의 판도 (0) | 2026.07.24 |
| [AI 테크] 내 컴퓨터에서 LLM 실행하기: Ollama와 Llama 3 활용 로컬 AI 구축법 (0) | 2026.07.24 |