IMG-LOGO
공지사항 :

리눅스 서버 보안의 시작: 초기 설치 직후 필수 보안 설정

lmkfox - 2026-06-02 06:52:36 4 Views 0 Comment

리눅스 서버 보안의 시작: 초기 설치 직후 필수 보안 설정

새로운 리눅스 서버를 클라우드나 가상화 환경, 혹은 물리 장비에 막 설치한 직후의 순간은 개발자나 시스템 관리자에게 가장 설레는 시간입니다. 하지만 이 시기는 역설적으로 서버가 보안 위협에 가장 취약하게 노출되어 있는 순간이기도 합니다. 인터넷망에 연결된 공용 IP를 할당받는 순간, 전 세계의 수많은 자동화된 봇(Bot)들이 공격 대상을 찾아 포트 스캔을 시작하기 때문입니다.

초기 설정을 소홀히 한 채 서비스를 올리는 데만 급급하다면, 불과 몇 시간 만에 서버의 권한이 탈취되어 암호화폐 채굴이나 디도스(DDoS) 공격의 숙주로 악용되는 참사를 겪을 수 있습니다. 리눅스 서버 보안 연재의 첫 번째 시간으로, 초기 설치 직후 최소한의 안전벨트를 매기 위한 필수 보안 설정 5가지를 구체적인 예시와 명령어를 통해 알아보겠습니다.

1. 최신 보안 패치 적용: 시스템 업데이트

모든 보안의 기본은 알려진 취약점을 빠르게 메우는 것입니다. 리눅스 배포판 배포 시점과 사용자가 실제로 서버를 설치하는 시점 사이에는 수많은 보안 취약점(CVE)이 새로 발견되고 이를 해결하기 위한 패치가 나옵니다. 서버 접속 후 가장 먼저 시스템 업데이트를 수행해야 합니다.

OS 계열에 따라 사용하는 패키지 관리자가 다르므로, 자신의 환경에 맞는 명령어를 실행합니다.

Ubuntu / Debian 계열:

Bash

sudo apt update && sudo apt upgrade -y

Rocky Linux / AlmaLinux / RedHat 계열:

Bash

sudo dnf update -y

실무 팁: 단순히 최초 1회 업데이트로 끝내서는 안 됩니다. 중요한 보안 패치가 누락되지 않도록 unattended-upgrades(Ubuntu)나 dnf-automatic(RedHat 계열) 같은 도구를 활용해 보안 업데이트를 일 단위로 자동화하는 것이 좋습니다.

2. 최고 관리자 권한 통제: Root 원격 접속 차단 및 관리자 전용 계정 생성

리눅스 시스템의 root 계정은 시스템의 모든 것을 제어하고 파괴할 수 있는 무소불위의 권한을 가집니다. 해커들이 리눅스 서버를 공격할 때 가장 먼저 대입해 보는 아이디가 바로 root입니다. 따라서 root 계정으로의 직접적인 원격 접속(SSH)을 원천 차단하고, 별도의 일반 사용자 계정을 생성한 뒤 필요할 때만 권한을 격상하는 방식을 사용해야 합니다.

단계 1: 관리자 역할을 수행할 일반 계정 생성

root 대신 사용할 계정(예: sysadmin)을 생성하고 비밀번호를 설정합니다.

Bash

# 계정 생성
useradd sysadmin

# 비밀번호 설정 (대소문자, 숫자, 특수문자 포함 12자리 이상 권장)
passwd sysadmin

단계 2: 일반 계정에 sudo 권한 부여

생성한 계정이 관리자 명령을 내릴 수 있도록 wheel(RedHat 계열) 또는 sudo(Ubuntu 계열) 그룹에 추가합니다.

Bash

# Ubuntu / Debian 계열
usermod -aG sudo sysadmin

# Rocky Linux / RedHat 계열
usermod -aG wheel sysadmin

이제 생성한 sysadmin 계정으로 서버에 다시 로그인한 뒤, sudo su 또는 명령어 앞에 sudo를 붙여 관리자 권한이 정상적으로 작동하는지 확인합니다.

3. SSH 데몬 보안 강화: Root 로그인 차단

일반 관리자 계정이 정상 작동하는 것을 확인했다면, 이제 외부에서 root 계정으로의 SSH 접근을 불허하도록 설정 파일을 수정해야 합니다.

단계 1: SSH 설정 파일 수정

텍스트 편집기로 SSH 설정 파일을 엽니다.

Bash

sudo nano /etc/ssh/sshd_config

단계 2: 주요 보안 옵션 변경

설정 파일 내부에서 다음 항목을 찾아 수정합니다. (주석 # 처리가 되어 있다면 지워주어야 합니다.)

Plaintext

# root 계정의 원격 로그인을 금지합니다.
PermitRootLogin no

# 빈 비밀번호 계정의 접속을 막습니다.
PermitEmptyPasswords no

# 로그인 시도 최대 횟수를 제한합니다. (기본값 보통 6회에서 3회로 축소 권장)
MaxAuthTries 3

단계 3: SSH 서비스 재시작

수정한 설정을 시스템에 적용합니다.

Bash

# Ubuntu / Debian 계열
sudo systemctl restart ssh

# Rocky Linux / RedHat 계열
sudo systemctl restart sshd

주의 사항: SSH 설정을 변경한 후 현재 연결되어 있는 터미널 세션을 절대 바로 닫지 마십시오. 설정 오류로 인해 아예 접속이 막히는 불상사가 생길 수 있습니다. 현재 세션을 유지한 상태에서 새 터미널 창을 열어 생성한 일반 계정(sysadmin)으로 로그인이 잘 되는지, root 계정 접속은 차단되는지 반드시 테스트한 후에 기존 세션을 종료해야 합니다.

4. 네트워크 방어선 구축: 기본 방화벽 설정

네트워크 보안의 핵심은 '필요한 문만 열고 나머지는 전부 닫는 것'입니다. 초기 리눅스 서버는 방화벽이 꺼져 있거나 모든 포트가 열려 있는 경우가 있습니다. 최소한의 포트만 허용하는 화이트리스트 방식의 방화벽 설정이 필수적입니다.

Ubuntu 환경 (UFW 활용)

Ubuntu에서는 UFW(Uncomplicated Firewall)를 사용하여 간단하게 방화벽을 제어할 수 있습니다.

Bash

# 기본 정책을 '모든 들어오는 트래픽 차단', '나가는 트래픽 허용'으로 설정
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 원격 제어를 위한 SSH 포트(22번) 허용 (서비스명 또는 포트 번호 지정 가능)
sudo ufw allow ssh

# 웹 서비스를 운영할 예정이라면 80(HTTP), 443(HTTPS) 허용
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 방화벽 활성화
sudo ufw enable

Rocky Linux / RedHat 환경 (Firewalld 활용)

RedHat 계열은 firewalld 서비스를 표준으로 사용합니다.

Bash

# 방화벽 서비스 시작 및 부팅 시 자동 실행 설정
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 기본 영역(Zone)에 SSH와 웹 서비스 허용 규칙 추가 (--permanent 옵션으로 영구 적용)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# 변경된 규칙 반영을 위한 재로드
sudo firewall-cmd --reload

# 현재 열려 있는 서비스 목록 확인
sudo firewall-cmd --list-services

5. 불필요한 포트 및 서비스 제거

시스템 내부에서 사용하지 않는 네트워크 서비스가 구동 중이라면, 그 자체로 해커에게 취약점 공격의 타깃이 될 수 있습니다. 현재 서버에서 외부 소리를 듣고 있는(Listening) 포트가 무엇인지 점검하고 불필요한 것은 꺼두어야 합니다.

단계 1: 네트워크 연결 상태 점검

다음 명령어를 통해 현재 활성화된 포트와 매핑된 프로세스를 확인합니다. (ss 또는 netstat 도구를 사용합니다.)

Bash

sudo ss -tulnp

출력 결과에서 내가 설치하지 않았거나 인지하지 못한 프로세스(예: 과거 프린터 공유를 위해 켜져 있는 cups, 로컬에서만 쓰는데 외부로 열린 rpcbind 등)가 외부 대기 상태(0.0.0.0:* 또는 *:*)로 열려 있다면 즉시 서비스를 중지하고 비활성화해야 합니다.

단계 2: 불필요한 서비스 중지 예시

사용하지 않는 특정 서비스(예: bad_service)가 있다면 아래 명령어로 즉시 끄고 부팅 시 실행되지 않도록 막습니다.

Bash

sudo systemctl stop bad_service
sudo systemctl disable bad_service

결론: 보안은 기술이 아니라 '습관'입니다

오늘 다룬 5가지 설정(최신 업데이트, Root 로그인 차단, sudo 관리자 분리, 방화벽 활성화, 불필요한 포트 제거)은 리눅스 보안의 거창한 고급 기술이 아닙니다. 집을 지을 때 문단속을 하고 도어락을 다는 것과 같은 최소한의 상식이자 기본 프로토콜입니다.

이 초기 설정들만 올바르게 마쳐도 전 세계 인터넷망을 떠돌며 무차별적으로 방치된 서버를 사냥하는 대다수의 자동화 봇 공격을 가볍게 무력화할 수 있습니다. 첫 단추를 잘 꿴 서버만이 향후 고도화된 서비스 운영 환경에서도 흔들리지 않는 안정성을 보여줍니다.

다음 2회차에서는 오늘 다룬 비밀번호 기반의 SSH 접속을 한 단계 더 업그레이드하여, 비밀번호를 아예 입력하지 않고 물리적인 Key 파일로만 안전하게 인증하는 'SSH 키 기반 인증 구축과 포트 숨기기'에 대해 자세히 알아보겠습니다. 서버의 문을 꼭 닫아두는 안전한 인프라 운영을 응원합니다.


댓글