새로운 서버를 분양받거나 클라우드 인스턴스를 생성한 후, 가장 먼저 마주하게 되는 운영체제 중 하나가 바로 리눅스 우분투(Linux Ubuntu)입니다. 하지만 서버를 처음 개설한 상태 그대로 방치하고 웹 서비스나 데이터베이스를 구동하는 것은 매우 위험합니다. 전 세계의 수많은 자동화 봇들이 지금 이 순간에도 기본 포트를 통해 끊임없이 해킹 공격을 시도하고 있기 때문입니다.
따라서 안정적인 서버 운영과 강력한 보안을 구축하기 위해서는 초기 설정과 필수 업데이트가 반드시 선행되어야 합니다. 본 가이드에서는 리눅스 Ubuntu 서버를 안전하게 시작하기 위해 누구나 따라 할 수 있는 필수 초기 설정 5단계를 명확한 순서와 함께 자세히 설명합니다.
1. 최신 보안 패치 및 패키지 업데이트
우분투 서버에 처음 원격 접속(SSH)했다면 가장 먼저 수행해야 하는 작업은 운영체제와 기존에 설치된 패키지들을 최신 상태로 업데이트하는 것입니다. 구글 등의 검색 엔진 역시 보안 취약점이 해결된 최신 인프라 환경을 권장합니다.
우분투의 패키지 관리 도구인 APT(Advanced Package Tool)를 활용하여 아래의 명령어를 순서대로 실행합니다.
Bash
sudo apt update && sudo apt upgrade -y
sudo apt update: 설치 가능한 패키지들의 최신 리스트와 버전 정보를 업데이트합니다. 실제 프로그램이 다운로드되는 것은 아니며, 최신 지도를 받아오는 과정입니다.sudo apt upgrade -y: 위에서 업데이트된 리스트를 바탕으로 실제 설치된 패키지들을 최신 버전으로 업그레이드합니다.-y옵션은 설치 과정에서 나오는 확인 질문에 자동으로 ‘Yes’라고 답하도록 설정하는 옵션입니다.
이 작업은 서버의 보안 구멍을 막는 가장 기본적이면서도 핵심적인 단계입니다.
2. 보안을 위한 신규 사용자 계정 생성
우분투를 처음 설치하면 최고 관리자 권한을 가진 root 계정으로 접속하거나, 기본 계정만을 사용하게 됩니다. 하지만 root 계정은 모든 권한을 가지고 있기 때문에, 해커들의 주요 표적이 됩니다. 따라서 root 계정의 직접 접속을 차단하고, 관리자 권한을 가진 새로운 일반 사용자 계정을 생성하는 것이 안전합니다.
신규 계정 추가하기
새로 사용할 사용자 이름(예: adminuser)을 정한 뒤 아래 명령어를 입력합니다.
Bash
sudo adduser adminuser
명령어를 입력하면 새로운 비밀번호를 설정하라는 안내가 나옵니다. 이때 비밀번호는 영문 대소문자, 숫자, 특수문자를 조합하여 복잡하게 설정하는 것이 좋습니다. 이후 나오는 이름이나 전화번호 등의 추가 정보는 엔터(Enter)를 눌러 생략해도 무방합니다.
관리자 권한(sudo) 부여하기
새로 만든 계정이 필요할 때만 관리자 권한을 사용할 수 있도록 sudo 그룹에 포함시켜야 합니다.
Bash
sudo usermod -aG sudo adminuser
이제 생성한 계정으로 다시 접속하여 정상적으로 관리자 명령어를 수행할 수 있는지 확인합니다.
3. SSH 원격 접속 보안 강화 (포트 변경)
기본적으로 리눅스 서버의 원격 접속(SSH) 포트는 22번으로 설정되어 있습니다. 이 포트 번호는 전 세계의 모든 해커가 알고 있기 때문에, 무차별 대입 공격(Brute Force Attack)을 수없이 받게 됩니다. 포트 번호만 바꾸어도 무작위 공격의 90% 이상을 예방할 수 있습니다.
설정 파일을 수정하기 위해 텍스트 편집기(vi 또는 nano)를 열어줍니다.
Bash
sudo nano /etc/ssh/sshd_config
파일 내부를 살펴보면 #Port 22 또는 Port 22라고 적힌 부분을 찾을 수 있습니다. 주석 표시인 #이 있다면 제거하고, 번호를 22에서 다른 사용하지 않는 포트 번호(예: 2222 또는 50022 등, 1024~65535 사이의 번호 추천)로 변경합니다.
Plaintext
Port 50022
또한, root 계정의 직접 로그인을 방지하기 위해 아래 항목을 찾아 no로 수정합니다.
Plaintext
PermitRootLogin no
수정이 완료되었다면 Ctrl + O를 눌러 저장하고, Ctrl + X를 눌러 편집기를 빠져나옵니다. 변경된 설정을 적용하기 위해 SSH 서비스를 재시작합니다.
Bash
sudo systemctl restart ssh
주의: 현재 접속된 SSH 세션을 끊지 않은 상태에서, 새로운 터미널 창을 열어 바뀐 포트 번호로 접속이 잘 되는지 반드시 먼저 검증해야 합니다. 설정 오류로 인해 서버에 영영 접속하지 못하는 불상사를 막기 위함입니다.
4. UFW(Uncomplicated Firewall) 방화벽 설정
방화벽은 외부의 불필요한 접근을 원천 차단하는 강력한 보안 방패입니다. 우분투에는 기본 방화벽 도구인 UFW가 포함되어 있습니다. 초기 상태에는 비활성화되어 있으므로 이를 켜고 필요한 포트만 열어주어야 합니다.
먼저, 방화벽을 켜기 전에 새로 바꾼 SSH 포트 번호를 반드시 허용해 주어야 세션이 끊기지 않습니다. 만약 앞서 포트를 50022로 바꾸었다면 다음과 같이 입력합니다.
Bash
sudo ufw allow 50022/tcp
추후 웹 서비스를 운영할 계획이 있다면 HTTP(80) 및 HTTPS(443) 포트도 미리 열어둘 수 있습니다.
Bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
필요한 규칙을 모두 추가했다면 방화벽을 활성화합니다.
Bash
sudo ufw enable
방화벽이 정상적으로 작동하고 있는지, 어떤 규칙이 적용되었는지 확인하려면 아래 명령어를 사용합니다.
Bash
sudo ufw status verbose
5. 서버 시간대(Timezone) 설정
서버의 시간대를 대한민국 표준시(KST)로 설정하는 것은 매우 중요합니다. 시간 설정이 올바르지 않으면 웹 서비스의 로그 기록 파일(Log File) 분석이 어려워지고, 예약된 작업(Crontab 등)이 엉뚱한 시간에 실행되어 데이터 동기화 문제를 유발할 수 있습니다.
현재 서버의 시간 설정을 확인하려면 아래 명령어를 입력합니다.
Bash
timedatectl
만약 세계 협정시(UTC) 등으로 설정되어 있다면, 아래 명령어를 통해 서울 시간(KST)으로 변경합니다.
Bash
sudo timedatectl set-timezone Asia/Seoul
다시 timedatectl을 입력했을 때 Time zone: Asia/Seoul (KST, +0900) 형태로 올바르게 표시된다면 시스템 시간 설정이 성공적으로 완료된 것입니다.
결론: 지속적인 서버 모니터링의 중요성
리눅스 Ubuntu 서버의 초기 설정과 필수 보안 업데이트는 단 한 번의 작업으로 끝나는 것이 아닙니다. 주기적으로 패키지를 업데이트하고 방화벽 로그를 확인하는 습관이 중요합니다.
초기 환경 조성을 완벽하게 마쳤다면, 이제 인프라의 뼈대를 안전하게 다진 셈입니다. 이 단단한 기반 위에 여러분이 원하는 웹 서버(Nginx, Apache)나 컨테이너 환경(Docker)을 구축하여 더욱 확장성 높고 안정적인 서비스를 구현해 보시기 바랍니다.