클릭하여 터미널 활성화

Rocky Linux 서버 초기 설정 | 설치 후 반드시 해야 할 보안 10단계

Rocky Linux 서버 초기 설정 가이드 | 보안 설정 10단계 완전 정복 2026
Rocky Linux Linux Server Security SSH fail2ban

Rocky Linux 서버 초기 설정 가이드 | 보안 설정 10단계 완전 정복

// 설치 직후 아무것도 안 하면 위험하다 — 업데이트부터 fail2ban까지 순서대로

작업 환경 · Environment
OSRocky Linux 9.2 (Blue Onyx)
커널5.14.0-284 → 5.14.0-611 (업데이트 후)
아키텍처aarch64 (ARM 64bit)
접속 방식SSH (admin 계정)

서버를 설치하고 아무 설정도 하지 않으면 기본값 그대로 인터넷에 노출된다. root 계정으로 SSH 접속이 가능하고, 방화벽은 기본값이고, 패키지는 취약점이 포함된 버전 그대로다. 공격자 입장에서는 그냥 들어오면 된다.

서버 설치 직후 반드시 해야 할 초기 설정 10단계를 순서대로 정리한다. 리눅스를 처음 접하는 사람도 따라할 수 있도록 각 명령어의 의미와 이유를 같이 설명한다.

전체 설정 순서
01시스템 전체 업데이트 — 알려진 취약점 패치
02타임존 설정 — 로그 시간 한국 기준으로 맞추기
03호스트명 설정 — 서버 식별자 지정
04NTP 시간 동기화 — chronyd로 정확한 시간 유지
05SSH 보안 강화 — root 로그인 차단·인증 횟수 제한
06방화벽(firewalld) 설정 — 필요한 포트만 허용
07fail2ban 설치 — 자동 IP 차단으로 무차별 공격 방어
08SELinux 상태 확인 — 강제 접근 제어 유지

STEP 01
시스템 전체 업데이트
dnf update · 가장 먼저 해야 할 작업

서버 설치 직후 이미지에는 배포 시점의 패키지가 그대로 들어있다. 그 사이에 발견된 보안 취약점들이 이미 공개되어 있을 수 있다. 첫 번째 작업은 무조건 업데이트다.

Rocky Linux의 패키지 관리자는 dnf(Dandified YUM)다. CentOS나 RHEL에서 쓰던 yum의 다음 버전이라고 보면 된다.

Rocky Linux · root
[root@rockylinux ~]# dnf update -y

Dependencies resolved.
...
Complete!
명령어 의미 —
dnf update : 설치된 모든 패키지를 최신 버전으로 업데이트
-y : 중간에 "계속할까요?" 같은 확인 프롬프트가 나올 때 자동으로 yes 응답

업데이트 후 커널이 바뀌었다면 재부팅이 필요하다.

Rocky Linux · root
[root@rockylinux ~]# reboot
STEP 02
타임존 설정
timedatectl · UTC → Asia/Seoul

서버 기본값은 UTC(협정 세계시)다. 로그를 볼 때 UTC 기준으로 기록되면 한국 시간과 9시간 차이가 나서 분석이 번거롭다. 한국 표준시(KST, UTC+9)로 바꾼다.

Rocky Linux · root
# 타임존 변경
[root@rockylinux ~]# timedatectl set-timezone Asia/Seoul

# 변경 확인
[root@rockylinux ~]# timedatectl
Local time: Tue 2026-03-03 21:32:47 KST
Universal time: Tue 2026-03-03 12:32:47 UTC
Time zone: Asia/Seoul (KST, +0900)
BEFORE
UTC (협정 세계시)
로그: 12:32:47
AFTER
Asia/Seoul (KST, +0900)
로그: 21:32:47
timedatectl 이란 — systemd 기반 시간 관리 유틸리티다. 내부적으로 /etc/localtime 심볼릭 링크를 자동으로 업데이트해준다.
STEP 03
호스트명 설정
hostnamectl · localhost → 식별 가능한 이름으로

서버를 처음 설치하면 기본값이 localhost.localdomain이다. 서버가 여러 대면 어떤 서버인지 구분이 안 된다. 역할이나 용도를 알 수 있는 이름으로 변경한다.

Rocky Linux · root
# 호스트명 변경
[root@rockylinux ~]# hostnamectl set-hostname rockylinux-server

# 확인
[root@rockylinux ~]# hostname
rockylinux-server
BEFORE
localhost.localdomain
AFTER
rockylinux-server
팁 — hostnamectl/etc/hostname 파일을 자동으로 업데이트해준다. static, transient, pretty 세 가지 호스트명이 동시에 설정된다. 재부팅 후에도 유지된다.
STEP 04
NTP 시간 동기화
chronyd · 정확한 시간을 자동으로 유지

서버 시간은 혼자 두면 조금씩 틀어진다. 시간이 틀어지면 SSL 인증서 오류, 로그 불일치, 크론 작업 오류 등이 발생한다. NTP(Network Time Protocol) 서버와 자동 동기화해서 항상 정확한 시간을 유지해야 한다.

Rocky Linux 기본 NTP 클라이언트는 chronyd다. 이미 설치되어 있고, 활성화만 해주면 된다.

Rocky Linux · root
# 부팅 시 자동 시작 + 즉시 실행
[root@rockylinux ~]# systemctl enable --now chronyd

# 동기화 상태 확인
[root@rockylinux ~]# chronyc tracking
Reference ID : C17BF302 (193.123.243.2)
System time : 0.000000041 seconds fast of NTP time
명령어 의미 —
systemctl enable : 부팅 시 자동으로 서비스 시작 등록
--now : enable과 동시에 지금 즉시 시작
chronyc tracking : 현재 NTP 동기화 상태 확인. System time 항목의 오차가 0에 가까울수록 정밀하다.
STEP 05
SSH 보안 강화
sshd_config · root 차단 · 인증 횟수·시간 제한

SSH는 서버에 원격으로 접속하는 주요 수단이라 공격자의 주요 타겟이다. 기본 설정 그대로 두면 root 계정으로 직접 로그인 시도가 가능하고, 비밀번호를 무한정 틀려볼 수 있다. 세 가지를 바꾼다.

변경할 설정 3가지

PermitRootLogin no ← root 직접 로그인 차단
MaxAuthTries 3 ← 인증 실패 3회 초과 시 연결 차단 (기본값: 6)
LoginGraceTime 30 ← 로그인 허용 시간 30초로 단축 (기본값: 2분)
Rocky Linux · root · /etc/ssh/sshd_config
# root 로그인 차단
[root@rockylinux ~]# sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

# 인증 횟수 3회로 제한
[root@rockylinux ~]# sed -i 's/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config

# 로그인 허용 시간 30초로 단축
[root@rockylinux ~]# sed -i 's/#LoginGraceTime 2m/LoginGraceTime 30/' /etc/ssh/sshd_config

# SSH 데몬 재시작으로 즉시 적용
[root@rockylinux ~]# systemctl restart sshd
sed 명령어란 — Stream EDitor. 파일의 특정 문자열을 찾아 교체하는 명령어다.
sed -i 's/찾을문자열/바꿀문자열/' 파일명 형식으로 사용한다.
#PermitRootLogin yes처럼 #으로 주석 처리된 기본값을 활성화된 설정으로 교체하는 것이다.
주의 — SSH 설정을 바꾸기 전에 반드시 일반 계정(admin 등)으로 sudo 가능한지 먼저 확인해야 한다. root 로그인을 차단했는데 다른 계정으로 접속이 안 되면 서버를 잠그는 결과가 된다.
각 설정의 의미 —
PermitRootLogin no : root 계정은 모든 권한을 가지므로 해커의 주요 타겟이다. 직접 접속을 차단하고, 일반 계정 로그인 후 sudo로 관리한다.

MaxAuthTries 3 : 비밀번호를 6번 틀릴 수 있으면 자동화 공격에 취약하다. 3번으로 줄이면 무차별 대입(Brute Force) 시도가 어려워진다.

LoginGraceTime 30 : 2분은 너무 길다. 30초로 줄이면 느린 자동화 공격 도구를 방어할 수 있다.
STEP 06
방화벽(firewalld) 설정
필요한 포트만 허용 · 나머지 전부 차단

방화벽은 외부에서 서버로 들어오는 네트워크 트래픽을 제어한다. 기본적으로 불필요한 포트는 닫고, 필요한 것만 여는 화이트리스트 방식으로 운영한다.

Rocky Linux 기본 방화벽은 firewalld다. 서비스 이름으로 포트를 관리할 수 있어서 편하다.

Rocky Linux · root · firewalld
# SSH 허용 (TCP 22번 포트)
[root@rockylinux ~]# firewall-cmd --permanent --add-service=ssh

# cockpit 제거 (웹 관리 UI, 포트 9090 — 안 쓰면 닫는다)
[root@rockylinux ~]# firewall-cmd --permanent --remove-service=cockpit

# 변경 사항 즉시 적용
[root@rockylinux ~]# firewall-cmd --reload

# 현재 허용된 서비스 확인
[root@rockylinux ~]# firewall-cmd --list-services
dhcpv6-client ssh
옵션 의미 —
--permanent : 재부팅 후에도 설정이 유지된다. 이 옵션 없이 추가하면 재부팅 시 초기화된다.
--reload : 변경된 규칙을 서비스 중단 없이 즉시 적용한다.
dhcpv6-client : IPv6 네트워크 자동 설정을 위해 필요하다. 건드리지 않는다.
⚠️ 웹 서버(HTTP/HTTPS)를 운영할 계획이라면 아래를 추가해야 한다:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
STEP 07
fail2ban 설치 및 설정
무차별 대입 공격 IP 자동 차단

SSH 인증 횟수를 3회로 줄였지만, 공격자는 연결을 끊고 다시 시도할 수 있다. fail2ban은 로그를 실시간으로 모니터링하다가 지정한 횟수 이상 실패한 IP를 방화벽에서 자동으로 차단한다.

설치

Rocky Linux · root
# EPEL 저장소 추가 (fail2ban이 여기 있다)
[root@rockylinux ~]# dnf install -y epel-release

# fail2ban 설치
[root@rockylinux ~]# dnf install -y fail2ban

# 부팅 시 자동 시작 + 즉시 실행
[root@rockylinux ~]# systemctl enable --now fail2ban
EPEL이란 — Extra Packages for Enterprise Linux. Red Hat 계열 리눅스에서 공식 저장소에 없는 패키지들을 제공하는 추가 저장소다. fail2ban은 여기 있다.

설정 파일 생성

fail2ban은 /etc/fail2ban/jail.conf가 기본 설정 파일인데, 이 파일을 직접 수정하면 업데이트 시 덮어써진다. 반드시 jail.local을 따로 만들어 덮어쓰는 방식으로 설정한다.

Rocky Linux · root · /etc/fail2ban/jail.local
[root@rockylinux ~]# vi /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600 ← 차단 지속 시간: 1시간 (초 단위)
findtime = 600 ← 탐지 시간 범위: 10분 내에
maxretry = 5 ← 기본 최대 재시도: 5회
backend = systemd ← 로그 백엔드: systemd 저널 사용

[sshd]
enabled = true ← SSH 모니터링 활성화
port = ssh ← 모니터링 포트: 22
maxretry = 3 ← SSH는 3회로 강화 (DEFAULT보다 엄격)
bantime = 7200 ← SSH 차단은 2시간 (DEFAULT보다 길게)
Rocky Linux · root
# 설정 적용을 위해 재시작
[root@rockylinux ~]# systemctl restart fail2ban

# 상태 확인
[root@rockylinux ~]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
fail2ban 동작 방식
01fail2ban이 systemd 저널(로그)을 실시간 모니터링
0210분(findtime) 내 SSH 로그인 3회(maxretry) 실패 감지
03해당 IP를 firewalld 차단 규칙에 자동 추가
042시간(bantime) 후 자동 차단 해제
수동으로 차단 해제하려면 —
fail2ban-client set sshd unbanip 차단할IP
STEP 08
SELinux 상태 확인
Enforcing 모드 유지 · 비활성화하지 말 것

SELinux(Security-Enhanced Linux)는 프로세스와 파일에 대한 강제 접근 제어(MAC, Mandatory Access Control)를 제공한다. 설정이 복잡하다는 이유로 비활성화하는 경우가 많은데, 그러면 안 된다.

Rocky Linux는 기본적으로 SELinux가 활성화되어 있다. 건드리지 않고 상태만 확인한다.

Rocky Linux · root
# 간단 확인
[root@rockylinux ~]# getenforce
Enforcing

# 상세 확인
[root@rockylinux ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux mount policy: targeted
Current mode: enforcing
모드 설명 —
Enforcing : 정책 위반 시 실제로 차단 + 로그 기록. 이 상태가 정상이다.
Permissive : 차단하지 않고 로그만 기록. 디버깅용.
Disabled : 완전 비활성화. 권장하지 않는다.

targeted 정책 : 특정 네트워크 서비스 프로세스(httpd, sshd 등)에만 SELinux를 적용한다. 일반 사용자 프로세스는 제한하지 않아서 실용적이다.
절대 하지 말 것 —
setenforce 0 또는 /etc/selinux/config에서 SELINUX=disabled로 바꾸는 것은 보안을 포기하는 행위다. SELinux 관련 오류가 나면 비활성화 대신 audit2allow로 정책을 추가해서 해결한다.

설정 완료 요약

# 항목 상태 비고
01시스템 전체 업데이트완료커널 포함 100+ 패키지
02타임존 설정완료Asia/Seoul (KST, +0900)
03호스트명 설정완료rockylinux-server
04NTP 시간 동기화완료chronyd 활성화
05SSH root 로그인 차단완료PermitRootLogin no
06SSH 인증 횟수 제한완료MaxAuthTries 3
07SSH 접속 시간 제한완료LoginGraceTime 30s
08방화벽 설정완료SSH만 허용
09fail2ban 설치완료3회 실패 시 2시간 차단
10SELinux 확인완료Enforcing 모드 유지

설정 후 서버 접속 방법

로컬 터미널
# root 직접 접속 불가 — admin 계정으로 접속
ssh admin@서버IP

# 관리자 권한이 필요한 작업은 sudo 사용
[admin@rockylinux ~]$ sudo dnf install -y nginx

자주 묻는 질문 (FAQ)

Q.Rocky Linux 서버 설치 후 가장 먼저 해야 할 것은 무엇인가요?
가장 먼저 dnf update -y로 시스템 전체를 업데이트해야 한다. 설치 직후 이미지에는 이미 공개된 보안 취약점이 포함된 패키지가 있을 수 있다. 업데이트가 끝나면 커널이 바뀌었을 경우 재부팅한다.
Q.SSH root 로그인을 차단해야 하는 이유는 무엇인가요?
root 계정은 서버의 모든 권한을 가진 계정이라 해커의 주요 공격 대상이다. PermitRootLogin no로 차단하면 비밀번호를 알아도 직접 접속이 불가능하다. 일반 계정으로 로그인 후 sudo로 관리하는 것이 안전하다.
Q.fail2ban과 firewalld의 차이는 무엇인가요?
firewalld는 포트 단위로 트래픽을 허용·차단하는 정적 방화벽이다. fail2ban은 로그를 실시간 모니터링하다가 비정상 접근이 감지되면 해당 IP를 자동으로 방화벽에서 차단하는 동적 방어 도구다. 두 가지를 함께 써야 효과적이다.
Q.SELinux를 비활성화해도 되나요?
권장하지 않는다. SELinux는 프로세스와 파일에 대한 강제 접근 제어를 제공하여 보안 사고 발생 시 피해 범위를 최소화한다. 관련 오류가 나면 비활성화 대신 audit2allow로 정책을 추가해서 해결하는 것이 올바른 방향이다.
Q.NTP 동기화가 왜 서버에 필수인가요?
서버 시간이 틀어지면 SSL 인증서 오류, 로그 시간 불일치, 크론 작업 오류, 분산 시스템 장애가 발생한다. chronyd를 활성화해두면 NTP 서버와 자동 동기화되어 항상 정확한 시간이 유지된다.
// 결론

서버 설치 직후는 가장 취약한 상태다. 10단계 모두 마치는 데 10분도 안 걸린다.

업데이트 → 타임존 → NTP → SSH 보안 → firewalld → fail2ban → SELinux 확인.
이 순서대로 한 번만 해두면 기본 보안은 갖춰진다. 그 다음부터는 목적에 맞는 서비스를 올리면 된다.

#RockyLinux #Linux #서버초기설정 #SSH보안 #fail2ban #firewalld #SELinux #NTP #chronyd #보안