☁️ 🏗️

클라우드/인프라 엔지니어가 되는 과정을 기록합니다.

홈서버 구축 일지

[4] 더 안전한 서버를 위한 3가지 보안 조치 🛡️

d4eh0 2026. 4. 8. 00:34

 

키워드
 : ufw, iptables, PermitRootLogin, sshd_config, key

 

완성아키텍처


 

지난 편에 SSH 접속까지 완료했지만,
지금 상태는 비밀번호만 알면 누구든 들어올 수 있는 구조.

 

 → 보안에 취약하다 ! 

 

때문에 3가지의 보안 강화 조치를 해보고자 한다

(1) UFW 방화벽 설정
(2) root 로그인 차단
(3) Key 기반 인증

 

 

 


 


1. UFW  →  방화벽 설정

  • UFW(Uncomplicated Firewall)
    • 리눅스에서는 iptables를 이용하여 방화벽 설정을 할 수 있지만, 되게 복잡하다.
    • iptables를 좀 더 쉽게 설정할 수 있도록 돕는 도구가 ufw
      (간단한 방화벽 구성에는 문제가 없지만, 높은 수준에는 무리가 있다)

방화벽 전략은 두 가지를 고민했다.

A. 전 세계 22번 포트 개방
B. 우리집 네트워크 대역(LAN 대역)만 허용

 

당장 외부에 서비스를 배포한 것도 아니고,

아직은 같은 Wi-Fi 안에서만 쓸 거라 B로 결정

 

(A는 브루트포스 등 여러 공격 위험이 존재함.

나중에 포트포워딩으로 외부 접속 열 때 다루도록 하자)

# 우선 기본 정책으로 : 들어오는 건 전부 차단, 나가는 건 전부 허용
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 포트관련해서는 IP 대역과 함께 allow해줌.
# 같은 네트워크 안의 접속까지는 일단 허용해주자

# sudo ufw allow 22
sudo ufw allow from 172.30.1.0/24 to any port 22 ✅
# sudo ufw allow from 172.30.1.66 to any port 22

 

→ 이제 LAN대역 밖에서의 SSH 접속 시도는 전부 차단된다.

2. PermitRootLogin no  →  root 직접 로그인 차단

이전에 실무에서는 root 로그인을 차단해두는 것이 표준이라 했는데, 의아했었다.

어차피 sudo로 root처럼 동작할 수 있는데 굳이?

 

 여기엔 두 가지 대표적인 이유가 있다.

 

(1) 추적이 가능하다.

  • root로 접속시 누가 접속했는지 알 수가 없음. (나야? 해커야?)
  • 다만 kim, park 등으로 접속 후 sudo 권한을 획득하여 사용하면 추적이 가능함. (누가, 언제, 무엇을)

(2) 공격 난이도가 올라간다.

  • root는 모든 시스템에 존재하는 계정이므로 1순위로 대입해봄.
    • root가 열려있다면, 계정명은 고민할 필요가 없이 pw만 대입해보면 됨.
    • root가 막혀있다면, 계정명과 pw 모두 추적해야 함.

  • /etc/ssh/sshd_config
    - SSH서버(sshd)의 동작 방식을 정의하는 설정 파일
    (어떤 계정의 접속 허용하고, 어떤 인증 방식 쓸지 등)

주석 풀고 prohibit-password를 no로 변경

3. PW가 아닌  →  Key 기반 인증으로 업그레이드

  • 공개키 / 개인키
    • Private Key : 열쇠, 내 맥북에 보관
    • Public Key : 자물쇠, sshd에 등록
  • sshd가 두 키를 비교하여 맞으면 로그인을 허용
    • pw가 네트워크를 타지 않아서 안전함
    • 실무에서는 이 키도 주기적으로 갱신한다고 함
    • 당연히 개인키는 절대 외부에 노출되면 안됨.

Step 1. 맥북에서 키 쌍 생성

ssh-keygen -t ed25519 -C "daepark-macbook"

# -t ed25519 : 키 알고리즘 지정, 현재 가장 권장되는 방식. RSA보다 짧고 빠르고 안전.
# -C : 주석, 키에 대한 설명

 

Step 2. 갤북에 공개키 등록

ssh-copy-id daepark@172.30.1.9

# 갤북의 ~/.ssh/authorized_keys에 공개키가 등록이 됨

 

+ 추가로 sshd_config열어서 PasswordAuthentication no로 설정

 PW로그인까지 차단


 🤔 근데 내가 알던 SSH key접속이랑 다른데? 

 

이전에 AWS나 NCP 등 클라우드를 쓸 때는

CSP에서 만들어준 키 쌍을 .pem파일로 다운로드하여 아래 처럼 접속했었음.

ssh -i {개인키경로} user@192.168.xx.xx

 

지금은 내가 직접 키 쌍을 생성한다.

생성한 개인키는 ~/.ssh/에 자동으로 저장되고, 공개키를 갤북에 직접 등록했으므로.

-i가 없더라도 ~/.ssh/를 자동으로 뒤져서 키를 찾아주기에 개인키 경로를 명시하지 않아도 된다!