개인 서버를 AWS처럼 운영하는 방법 - Ubuntu 보안부터 배포까지
2025. 5. 22. 21:00
728x90

Ubuntu 서버 보안 설정 가이드 (AWS 수준 보안 목표)

이 문서는 AWS EC2 수준의 보안을 목표로 하는 Ubuntu 서버 설정 가이드입니다. 도메인 연결, Docker 기반 배포, 사용자 관리 및 루트 접근 제한 등을 포함합니다. 각 항목은 실무에서 운영 가능한 수준으로 자세히 설명되어 있습니다.


 1. 기본 사용자 및 루트 제한

1.1 관리자 계정 생성 (예: pjh)

서버에 직접 루트 로그인하지 않고 관리 작업을 할 수 있도록 관리자 계정을 생성합니다.

sudo adduser pjh
sudo usermod -aG sudo pjh

1.2 루트 로그인 차단 (SSH)

루트 계정으로의 직접 접근을 막고 보안을 강화합니다.

sudo vim /etc/ssh/sshd_config

설정 변경:

PermitRootLogin no
PasswordAuthentication no
AllowUsers pjh

적용:

sudo systemctl restart sshd

1.3 루트 비밀번호 잠금 (선택)

비밀번호 인증 자체를 막고 루트 계정을 비활성화합니다.

sudo passwd -l root

 2. su 명령 제한 (wheel 그룹)

2.1 PAM 설정

루트 권한 획득을 제한하기 위해 su 명령 사용을 wheel 그룹 사용자에게만 허용합니다.

sudo vim /etc/pam.d/su

내용 추가 또는 주석 해제:

auth       required pam_wheel.so use_uid

2.2 wheel 그룹 생성 및 pjh 추가

sudo groupadd wheel        # 존재하지 않을 경우만
sudo usermod -aG wheel pjh

pjh 외 누구도 wheel 그룹에 추가하지 말 것. wheel은 루트 전환 허용 그룹입니다.


 3. SSH 보안 설정

3.1 공개키 로그인만 허용

비밀번호 로그인은 중지하고, SSH 키를 통한 로그인만 허용합니다.

PasswordAuthentication no

3.2 접속 허용 사용자 제한

SSH 접근을 특정 사용자만 가능하게 설정합니다.

AllowUsers pjh devuser1 devlead

3.3 방화벽 설정 (UFW)

필요한 포트만 열고 나머지는 차단합니다.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

3.4 SSH 설정파일 경로 및 접근 방법

  • 설정파일 경로: /etc/ssh/sshd_config
  • 편집 명령: sudo vim /etc/ssh/sshd_config
  • 변경 후 적용: sudo systemctl restart sshd

SSH 설정 변경 시에는 현재 세션을 유지한 채 다른 세션을 열고 테스트하여 실수 시 복구할 수 있게 대비합니다.


 4. 개발자 계정 추가 및 제한 (서버 측과 개발자 측 역할 구분)

4.1 (서버) 계정 생성

협업할 개발자에게 SSH 계정을 생성합니다.

sudo adduser devuser1

4.2 (서버 + 개발자) 공개키 복사

개발자가 할 일:

  • 로컬 PC에서 SSH 공개키 생성 (없을 경우)
ssh-keygen -t rsa -b 4096 -C "devuser1@example.com"
  • 생성된 ~/.ssh/id_rsa.pub 파일 내용 전달

서버 관리자가 할 일:

sudo mkdir /home/devuser1/.ssh
sudo vim /home/devuser1/.ssh/authorized_keys
# 전달받은 공개키 붙여넣기
sudo chown -R devuser1:devuser1 /home/devuser1/.ssh
sudo chmod 700 /home/devuser1/.ssh
sudo chmod 600 /home/devuser1/.ssh/authorized_keys

4.3 (서버) sudo 권한 부여 여부 (선택)

특정 사용자(devlead 등)에게만 sudo 권한을 제한적으로 부여합니다.

sudo usermod -aG sudo devlead

절대 wheel 그룹에는 추가하지 마십시오. 해당 그룹은 su로 루트 전환이 가능한 그룹입니다.


 5. Docker 기반 배포 준비

5.1 Docker 설치

sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker pjh

5.2 배포 체크리스트

  • Dockerfile, docker-compose.yml 작성 완료
  • .env 파일 구성 완료 (.env.sample 포함)
  • 프론트/백엔드 컨테이너 분리 운영
  • nginx + certbot 적용 (HTTPS)

 6. nginx & 도메인 연결

6.1 nginx 설치 및 설정

sudo apt install nginx -y
sudo vim /etc/nginx/sites-available/your-domain.com

6.2 리버스 프록시 설정 예시 (Node.js)

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

6.3 HTTPS 적용 (Let's Encrypt)

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com

 7. 보안 추가 설정

  • fail2ban 설치 및 설정 (SSH 브루트포스 방지)
  • unattended-upgrades 설치 (보안 패치 자동 적용)
  • 시간 동기화: sudo timedatectl set-timezone Asia/Seoul
  • logrotate 설정 (nginx 등 로그 관리)
  • swap 메모리 설정 (RAM 부족 대비)

 8. 계정별 권한 전략 예시

사용자 sudo su(root) 설명
pjh O O 마스터 관리자 (운영, 보안, 전체 권한)
devlead O X 배포 권한 있는 리드 개발자 (운영 일부 가능)
devuser1 X X 일반 개발자 (코드 작성, SSH 접속만 가능)

이 설정을 마친 후에는 실제 코드 배포 및 서비스 운영이 가능한 상태가 됩니다. 이후 단계는 Dockerfile 구성, CI/CD 파이프라인, 모니터링 시스템 도입(Netdata, UptimeRobot 등)으로 확장 가능합니다.

반응형