Rocky Linux 서버 초기 설정 | 설치 후 반드시 해야 할 보안 10단계
Rocky Linux 서버 초기 설정 가이드 | 보안 설정 10단계 완전 정복
// 설치 직후 아무것도 안 하면 위험하다 — 업데이트부터 fail2ban까지 순서대로
서버를 설치하고 아무 설정도 하지 않으면 기본값 그대로 인터넷에 노출된다. root 계정으로 SSH 접속이 가능하고, 방화벽은 기본값이고, 패키지는 취약점이 포함된 버전 그대로다. 공격자 입장에서는 그냥 들어오면 된다.
서버 설치 직후 반드시 해야 할 초기 설정 10단계를 순서대로 정리한다. 리눅스를 처음 접하는 사람도 따라할 수 있도록 각 명령어의 의미와 이유를 같이 설명한다.
서버 설치 직후 이미지에는 배포 시점의 패키지가 그대로 들어있다. 그 사이에 발견된 보안 취약점들이 이미 공개되어 있을 수 있다. 첫 번째 작업은 무조건 업데이트다.
Rocky Linux의 패키지 관리자는 dnf(Dandified YUM)다. CentOS나 RHEL에서 쓰던 yum의 다음 버전이라고 보면 된다.
dnf update : 설치된 모든 패키지를 최신 버전으로 업데이트-y : 중간에 "계속할까요?" 같은 확인 프롬프트가 나올 때 자동으로 yes 응답
업데이트 후 커널이 바뀌었다면 재부팅이 필요하다.
서버 기본값은 UTC(협정 세계시)다. 로그를 볼 때 UTC 기준으로 기록되면 한국 시간과 9시간 차이가 나서 분석이 번거롭다. 한국 표준시(KST, UTC+9)로 바꾼다.
로그: 12:32:47
로그: 21:32:47
/etc/localtime 심볼릭 링크를 자동으로 업데이트해준다.
서버를 처음 설치하면 기본값이 localhost.localdomain이다. 서버가 여러 대면 어떤 서버인지 구분이 안 된다. 역할이나 용도를 알 수 있는 이름으로 변경한다.
hostnamectl은 /etc/hostname 파일을 자동으로 업데이트해준다. static, transient, pretty 세 가지 호스트명이 동시에 설정된다. 재부팅 후에도 유지된다.
서버 시간은 혼자 두면 조금씩 틀어진다. 시간이 틀어지면 SSL 인증서 오류, 로그 불일치, 크론 작업 오류 등이 발생한다. NTP(Network Time Protocol) 서버와 자동 동기화해서 항상 정확한 시간을 유지해야 한다.
Rocky Linux 기본 NTP 클라이언트는 chronyd다. 이미 설치되어 있고, 활성화만 해주면 된다.
systemctl enable : 부팅 시 자동으로 서비스 시작 등록--now : enable과 동시에 지금 즉시 시작chronyc tracking : 현재 NTP 동기화 상태 확인. System time 항목의 오차가 0에 가까울수록 정밀하다.
SSH는 서버에 원격으로 접속하는 주요 수단이라 공격자의 주요 타겟이다. 기본 설정 그대로 두면 root 계정으로 직접 로그인 시도가 가능하고, 비밀번호를 무한정 틀려볼 수 있다. 세 가지를 바꾼다.
변경할 설정 3가지
sed -i 's/찾을문자열/바꿀문자열/' 파일명 형식으로 사용한다.#PermitRootLogin yes처럼 #으로 주석 처리된 기본값을 활성화된 설정으로 교체하는 것이다.
PermitRootLogin no : root 계정은 모든 권한을 가지므로 해커의 주요 타겟이다. 직접 접속을 차단하고, 일반 계정 로그인 후
sudo로 관리한다.MaxAuthTries 3 : 비밀번호를 6번 틀릴 수 있으면 자동화 공격에 취약하다. 3번으로 줄이면 무차별 대입(Brute Force) 시도가 어려워진다.
LoginGraceTime 30 : 2분은 너무 길다. 30초로 줄이면 느린 자동화 공격 도구를 방어할 수 있다.
방화벽은 외부에서 서버로 들어오는 네트워크 트래픽을 제어한다. 기본적으로 불필요한 포트는 닫고, 필요한 것만 여는 화이트리스트 방식으로 운영한다.
Rocky Linux 기본 방화벽은 firewalld다. 서비스 이름으로 포트를 관리할 수 있어서 편하다.
--permanent : 재부팅 후에도 설정이 유지된다. 이 옵션 없이 추가하면 재부팅 시 초기화된다.--reload : 변경된 규칙을 서비스 중단 없이 즉시 적용한다.dhcpv6-client : IPv6 네트워크 자동 설정을 위해 필요하다. 건드리지 않는다.
firewall-cmd --permanent --add-service=httpfirewall-cmd --permanent --add-service=https
SSH 인증 횟수를 3회로 줄였지만, 공격자는 연결을 끊고 다시 시도할 수 있다. fail2ban은 로그를 실시간으로 모니터링하다가 지정한 횟수 이상 실패한 IP를 방화벽에서 자동으로 차단한다.
설치
설정 파일 생성
fail2ban은 /etc/fail2ban/jail.conf가 기본 설정 파일인데, 이 파일을 직접 수정하면 업데이트 시 덮어써진다. 반드시 jail.local을 따로 만들어 덮어쓰는 방식으로 설정한다.
fail2ban-client set sshd unbanip 차단할IP
SELinux(Security-Enhanced Linux)는 프로세스와 파일에 대한 강제 접근 제어(MAC, Mandatory Access Control)를 제공한다. 설정이 복잡하다는 이유로 비활성화하는 경우가 많은데, 그러면 안 된다.
Rocky Linux는 기본적으로 SELinux가 활성화되어 있다. 건드리지 않고 상태만 확인한다.
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 |
| 04 | NTP 시간 동기화 | 완료 | chronyd 활성화 |
| 05 | SSH root 로그인 차단 | 완료 | PermitRootLogin no |
| 06 | SSH 인증 횟수 제한 | 완료 | MaxAuthTries 3 |
| 07 | SSH 접속 시간 제한 | 완료 | LoginGraceTime 30s |
| 08 | 방화벽 설정 | 완료 | SSH만 허용 |
| 09 | fail2ban 설치 | 완료 | 3회 실패 시 2시간 차단 |
| 10 | SELinux 확인 | 완료 | Enforcing 모드 유지 |
설정 후 서버 접속 방법
자주 묻는 질문 (FAQ)
dnf update -y로 시스템 전체를 업데이트해야 한다. 설치 직후 이미지에는 이미 공개된 보안 취약점이 포함된 패키지가 있을 수 있다. 업데이트가 끝나면 커널이 바뀌었을 경우 재부팅한다.PermitRootLogin no로 차단하면 비밀번호를 알아도 직접 접속이 불가능하다. 일반 계정으로 로그인 후 sudo로 관리하는 것이 안전하다.firewalld는 포트 단위로 트래픽을 허용·차단하는 정적 방화벽이다. fail2ban은 로그를 실시간 모니터링하다가 비정상 접근이 감지되면 해당 IP를 자동으로 방화벽에서 차단하는 동적 방어 도구다. 두 가지를 함께 써야 효과적이다.audit2allow로 정책을 추가해서 해결하는 것이 올바른 방향이다.chronyd를 활성화해두면 NTP 서버와 자동 동기화되어 항상 정확한 시간이 유지된다.
서버 설치 직후는 가장 취약한 상태다. 10단계 모두 마치는 데 10분도 안 걸린다.
업데이트 → 타임존 → NTP → SSH 보안 → firewalld → fail2ban → SELinux 확인.
이 순서대로 한 번만 해두면 기본 보안은 갖춰진다. 그 다음부터는 목적에 맞는 서비스를 올리면 된다.