[보안] 내 서버가 뚫린다고? SSH 보안 설정과 기본 방화벽(UFW) 구축

안녕하세요! 지난 3편에서 우분투 서버 설치를 마치셨다면, 이제 여러분의 서버는 네트워크라는 거대한 바다에 첫발을 내디딘 셈입니다. 하지만 기쁨도 잠시, 여러분이 서버에 고정 IP를 할당하고 포트를 여는 순간, 전 세계의 자동화된 해킹 봇(Bot)들이 여러분의 서버 대문을 두드리기 시작합니다.

"내 서버는 볼 것도 없는데 누가 공격하겠어?"라는 생각은 금물입니다. 해커들은 특정 타겟을 노리기도 하지만, 대부분은 보안이 취약한 서버를 찾아내 '좀비 PC'로 만들거나 암호화폐 채굴에 이용하려 합니다. 오늘은 내 소중한 홈서버를 철통보안으로 감싸는 실전 보안 전략 3단계를 전해드립니다.

1. 1단계: SSH 패스워드 로그인 금지 (가장 중요!)

서버 관리의 핵심인 SSH(Secure Shell)는 기본적으로 비밀번호를 입력해 접속합니다. 하지만 이는 '무차별 대입 공격(Brute-force Attack)'에 매우 취약합니다. 우리는 비밀번호 대신 훨씬 강력한 'SSH 키 쌍(Key Pair)' 인증 방식을 사용할 것입니다.

[SSH 키 생성 및 등록 방법]

  1. 내 메인 PC(Windows/Mac)에서 키 생성: 터미널(또는 CMD)을 열고 ssh-keygen -t ed25519를 입력합니다. (ed25519는 2026년 현재 가장 빠르고 안전한 암호화 알고리즘입니다.)
  2. 서버로 키 복사: ssh-copy-id 사용자명@서버IP 명령어를 통해 생성된 공개키를 서버에 전달합니다.
  3. 패스워드 로그인 차단: 서버에서 sudo nano /etc/ssh/sshd_config 파일을 엽니다. PasswordAuthentication yes라고 되어 있는 부분을 no로 수정하고 저장합니다.
  4. 적용: sudo systemctl restart ssh를 입력하면 이제 키 파일이 없는 사람은 아예 로그인 시도조차 할 수 없게 됩니다.

2. 2단계: UFW(Uncomplicated Firewall)로 성벽 쌓기

방화벽은 서버로 들어오는 통로를 검사하는 수문장입니다. 리눅스에는 강력한 iptables가 있지만, 우리는 이를 쉽게 다룰 수 있는 UFW를 사용합니다.

[실전 방화벽 규칙 설정]

기본 원칙은 '모든 수신 차단, 필요한 것만 허용'입니다.

  • 기본 정책 설정: sudo ufw default deny incoming (들어오는 모든 것 차단), sudo ufw default allow outgoing (나가는 모든 것 허용)
  • 필수 포트 허용: SSH 접속을 위해 sudo ufw allow ssh를 반드시 입력해야 합니다. (이걸 잊고 방화벽을 켜면 본인도 접속을 못 하게 됩니다!)
  • 방화벽 활성화: sudo ufw enable을 입력하고 sudo ufw status verbose로 현재 상태를 확인하세요.

3. 3단계: Fail2Ban으로 무차별 공격자 박멸하기

방화벽이 성벽이라면, Fail2Ban은 성벽을 넘으려는 수상한 자를 즉시 감옥에 가두는 경비원입니다. 특정 횟수 이상 로그인에 실패한 IP를 자동으로 일정 시간 동안 차단(Ban)해 버립니다.

[Fail2Ban 설치 및 설정]

  1. 설치: sudo apt install fail2ban -y
  2. 기본 설정: sudo systemctl enable fail2ban --now 명령어로 실행합니다.
  3. 확인: sudo fail2ban-client status sshd를 입력해 보세요. 얼마나 많은 해커 IP가 이미 차단되었는지 눈으로 확인할 수 있습니다. 직접 확인해 보면 세상에 해커가 얼마나 많은지 실감하게 될 것입니다.

4. 전문가의 조언: SSH 포트 변경, 꼭 해야 할까?

많은 가이드에서 기본 22번 포트를 다른 숫자(예: 2222)로 바꾸라고 권장합니다. 이를 '보안 정책에 의한 은폐(Security by Obscurity)'라고 합니다. 물론 자동화 봇들의 공격 횟수를 줄이는 데는 효과적입니다. 하지만 SSH 키 인증을 완벽하게 설정했다면, 포트 변경보다는 키 인증 강제화가 훨씬 근본적인 대책입니다. 관리의 편의성을 고려해 결정하시되, 키 인증은 절대 타협하지 마세요.

5. 마치며: 보안은 '습관'입니다

완벽한 보안은 없습니다. 하지만 오늘 설정한 이 세 가지만으로도 여러분의 서버는 전 세계 하위 90%의 취약한 서버 대열에서 벗어나 상위 10%의 안전한 서버가 되었습니다. 보안 설정을 마쳤을 때의 그 든든함, 직접 느껴보셨나요?

다음 편에서는 드디어 외부에서도 내 서버에 접속할 수 있게 만들어주는 마법, 'DDNS 설정과 포트 포워딩의 원리'를 알아봅니다. 이제 카페에서도 내 집 서버를 관리할 수 있게 됩니다!


[핵심 요약]

  • SSH 키 인증: 비밀번호 로그인을 끄고 키 쌍 인증을 사용하는 것이 보안의 최우선 순위입니다.
  • UFW 방화벽: 필요한 포트(SSH 등) 외에는 모든 대문을 걸어 잠그는 것이 기본입니다.
  • Fail2Ban: 반복적으로 로그인을 시도하는 악성 IP를 자동으로 격리하여 서버 자원을 보호합니다.
  • ED25519: 2026년 기준 가장 권장되는 현대적 암호화 알고리즘입니다.

다음 편 예고: "[네트워크] 외부에서도 접속하기: DDNS 설정과 포트 포워딩의 원리" - 우리 집 공유기 너머로 서버를 연결하는 방법을 공개합니다.

질문: fail2ban을 설치하고 몇 분 뒤에 확인했을 때, 벌써 차단된 IP가 있나요? 있다면 어느 나라 IP인지 궁금하네요! (geoiplookup 명령어로 확인 가능합니다)