왜 초기 설정이 중요한가
클라우드 서버는 IP가 공개되는 순간부터 SSH 무차별 대입 공격이 시작됩니다. 기본 설정 그대로 두면 수 분 안에 수백 건의 로그인 시도가 쌓입니다.
# 신규 서버의 실제 로그인 시도 확인
sudo journalctl -u ssh --since "1 hour ago" | grep "Failed password" | wc -l아래 순서대로 따라가면 대부분의 자동화 공격을 차단할 수 있습니다.
Step 1 — 패키지 업데이트
서버를 받자마자 가장 먼저 해야 할 일입니다.
sudo apt update && sudo apt upgrade -y
# 불필요한 패키지 정리
sudo apt autoremove -y && sudo apt autoclean
# 재부팅이 필요한지 확인
cat /var/run/reboot-required 2>/dev/null && echo "재부팅 필요" || echo "재부팅 불필요"
# 필요하면 재부팅
sudo rebootStep 2 — 비루트 관리자 계정 생성
root 계정으로 직접 작업하는 것은 위험합니다. 전용 관리자 계정을 만들고 root 직접 로그인을 막습니다.
# 새 사용자 생성
sudo adduser deploy
# sudo 권한 부여
sudo usermod -aG sudo deploy
# 전환 후 sudo 동작 확인
su - deploy
sudo whoami # root 출력되어야 함Step 3 — SSH 키 인증 설정
비밀번호 대신 SSH 키 인증을 사용하면 무차별 대입 공격을 원천 차단합니다.
내 PC에서 키 쌍 생성
# 내 로컬 PC에서 실행
ssh-keygen -t ed25519 -C "my-server"
# 저장 경로: ~/.ssh/id_ed25519 (기본값 엔터)
# 패스프레이즈: 설정 권장
# 공개키 확인
cat ~/.ssh/id_ed25519.pub서버에 공개키 등록
# 방법 1: ssh-copy-id (가장 간편)
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@서버IP
# 방법 2: 수동 등록 (서버에서)
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "공개키_내용을_여기에_붙여넣기" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys키 인증 동작 확인
# 새 터미널에서 키로 접속 테스트 (비밀번호 없이 접속되어야 함)
ssh -i ~/.ssh/id_ed25519 deploy@서버IP반드시 키 접속이 성공한 것을 확인한 뒤 다음 단계로 넘어가세요. 이전에 비밀번호 인증을 끄면 서버에 접근할 수 없게 됩니다.
Step 4 — SSH 보안 설정 강화
sudo nano /etc/ssh/sshd_config아래 항목을 찾아 수정합니다.
# root 직접 로그인 차단
PermitRootLogin no
# 비밀번호 인증 비활성화 (키 접속 확인 후!)
PasswordAuthentication no
# 빈 패스워드 허용 금지
PermitEmptyPasswords no
# 인증 시도 횟수 제한
MaxAuthTries 3
# 로그인 대기 시간 제한 (30초)
LoginGraceTime 30
# 사용할 사용자 명시 (선택 사항)
AllowUsers deploy# 설정 문법 검사
sudo sshd -t
# 문제 없으면 적용
sudo systemctl reload ssh
# 현재 세션 유지한 채 새 터미널로 접속 테스트
ssh deploy@서버IPStep 5 — UFW 방화벽 설정
필요한 포트만 열고 나머지는 모두 차단합니다.
# UFW 설치 확인
sudo apt install -y ufw
# 기본 정책: 들어오는 연결 차단, 나가는 연결 허용
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH 허용 (현재 접속 끊기지 않도록 먼저!)
sudo ufw allow ssh # 22번 포트
# 웹서버 운영 시 추가
sudo ufw allow http # 80
sudo ufw allow https # 443
# UFW 활성화
sudo ufw enable # y 입력
# 상태 확인
sudo ufw status verboseUFW를 활성화하기 전에 반드시 SSH(22번) 포트를 허용하세요. 그렇지 않으면 서버 접속이 끊깁니다.
Step 6 — fail2ban 설치
반복 로그인 실패 IP를 자동으로 차단합니다.
sudo apt install -y fail2ban
# 로컬 설정 파일 생성 (원본을 직접 수정하지 않음)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local[DEFAULT]
# 10분 내 5번 실패 시 1시간 차단
findtime = 600
maxretry = 5
bantime = 3600
[sshd]
enabled = true
port = sshsudo systemctl enable --now fail2ban
# 차단 현황 확인
sudo fail2ban-client status sshd
# 특정 IP 차단 해제
sudo fail2ban-client set sshd unbanip 1.2.3.4Step 7 — 자동 보안 업데이트 설정
패치를 수동으로 챙기기 어렵다면 보안 업데이트만 자동으로 설치합니다.
sudo apt install -y unattended-upgrades
# 설정 확인 및 활성화
sudo dpkg-reconfigure -plow unattended-upgrades
# 설정 파일 확인
cat /etc/apt/apt.conf.d/20auto-upgrades# /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1"; # 매일 목록 갱신
APT::Periodic::Unattended-Upgrade "1"; # 매일 보안 업데이트 설치
APT::Periodic::AutocleanInterval "7"; # 7일마다 캐시 정리Step 8 — 최종 확인 체크리스트
# SSH 키 인증만 허용되는지 확인
sudo sshd -T | grep -E "permitrootlogin|passwordauthentication|maxauthtries"
# 방화벽 상태
sudo ufw status verbose
# fail2ban 동작 여부
sudo systemctl is-active fail2ban
# 자동 업데이트 활성화 여부
cat /etc/apt/apt.conf.d/20auto-upgrades
# 최근 로그인 기록
last | head -10설정 완료 후 예상 결과:
| 항목 | 확인 결과 |
|---|---|
| root SSH 로그인 | 차단됨 |
| 비밀번호 로그인 | 차단됨 |
| 방화벽 | SSH/HTTP/HTTPS만 허용 |
| fail2ban | 5회 실패 시 1시간 차단 |
| 보안 업데이트 | 자동 적용 중 |
다음 단계 — 각 항목 심화 가이드
이 가이드는 빠짐없이 훑기에 집중했습니다. 각 항목을 더 깊이 파고들려면 아래 가이드를 참고하세요.
| 주제 | 가이드 | 난이도 |
|---|---|---|
| sshd_config 하드닝·키 인증·AllowGroups·MFA | SSH 설정·접근 제어 완전 가이드 | 중급 |
| fail2ban jail·recidive 영구 차단·이메일·Cloudflare | fail2ban으로 SSH 무차별 대입 차단 | 중급 |
| UFW 포트 범위·앱 프로파일·로깅 | UFW 방화벽 설정 완전 가이드 | 초급 |
이 가이드의 역할: 서버를 처음 받았을 때 놓치는 항목이 없도록 하는 출발점입니다. 운영 환경에서는 위 심화 가이드를 반드시 추가로 적용하세요.
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.