Linux 서버 강화 체크리스트

15분 소요 - 2026년 5월 8일

hero section cover
목차
  • 리눅스 서버 보안 강화 체크리스트
  • SSH 보안 강화
  • 방화벽 및 Fail2Ban 구성
  • 패치 및 자동 업데이트
  • 파일 시스템 및 권한 강화
  • 강제 접근 제어 활성화
  • 감사 로깅 및 모니터링 설정
  • 지속적인 유지 관리
공유

Linux 서버를 강화하기 위한 단계별 체크리스트. SSH, 방화벽, 패치, 파일 권한, SELinux/AppArmor 및 감사 로깅을 다룹니다

리눅스 서버 보안 강화 체크리스트

기본 Linux 설치 상태는 안전한 상태가 아닙니다. 루트 SSH 접근 허용, 취약한 방화벽, 패치되지 않은 소프트웨어와 같은 잘못된 구성은 보안 침해 사고의 대부분을 차지합니다. 새로운 서버는 온라인에 연결된 지 몇 분 만에 자동 스캔을 받게 되므로, 다른 어떤 작업보다 먼저 보안을 강화해야 합니다.

이 체크리스트는 SSH 잠금, 방화벽 구성, 패치 적용, 파일 권한 강화, 강제 접근 제어 활성화, 감사 로깅 설정 등 핵심 단계를 다룹니다.

SSH 보안 강화

SSH는 주요 접속 지점이며, 공격자가 가장 먼저 탐색하는 대상입니다. 기본 설정(비밀번호 인증, 루트 로그인, 포트 22)은 자동 스캐너가 정확히 찾아내는 대상입니다.

RSA보다 더 나은 보안성과 성능을 제공하는 Ed25519 키 쌍을 생성하십시오:

ssh-keygen -t ed25519

키 기반 로그인이 작동하면 다음을 업데이트하십시오 /etc/ssh/sshd_config:

PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
AllowUsers yourname
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

기본 포트를 22에서 덜 눈에 띄는 번호로 변경하십시오. 이는 집요한 공격자를 막지는 못하겠지만, 자동 스캔으로 인한 잡음을 크게 줄여줍니다.

현재 세션을 종료하기 전에 항상 다른 터미널에서 변경 사항을 테스트하십시오. sudo sshd -t 를 실행하여 구문 오류를 확인한 후, systemctl reload sshd 를 실행하여 활성 연결을 끊지 않고 적용하십시오.

2단계 인증 추가

2단계 인증(2FA)을 적용하면 공격자는 사용자의 SSH 키와 기기에 대한 물리적 접근 권한을 모두 확보해야만 합니다. Google Authenticator PAM 모듈을 설치하십시오:

sudo apt install libpam-google-authenticator   # Debian/Ubuntu
sudo dnf install google-authenticator           # RHEL/Fedora

각 사용자에 대해 google-authenticator 각 사용자마다 이 명령을 실행하여 비밀 키와 복구 코드를 생성합니다. 복구 코드는 오프라인에 보관하십시오.

다음 줄을 /etc/pam.d/sshd:

auth required pam_google_authenticator.so

그런 다음 다음을 업데이트하십시오 /etc/ssh/sshd_config:

KbdInteractiveAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive

테스트하는 동안 활성 세션을 열어 두십시오. TOTP 코드는 정확한 시스템 시간에 의존하므로 NTP가 실행 중인지 확인하십시오.

방화벽 및 Fail2Ban 구성

서버가 네트워크 방화벽 뒤에 위치해 있더라도 호스트 기반 방화벽을 실행하십시오. 원칙은 간단합니다. 기본적으로 모든 수신 트래픽을 차단하고, 필요한 트래픽만 허용하는 것입니다.

Ubuntu/Debian (UFW)의 경우:

ufw default deny incoming
ufw default allow outgoing
ufw limit ssh
ufw enable

RHEL/Rocky/AlmaLinux(Firewalld)의 경우:

firewall-cmd --set-default-zone=public
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

다음 항목을 /etc/sysctl.conf:

net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1

Fail2Ban 설치

Fail2Ban은 로그인 시도를 모니터링하고, 반복적인 실패 후 IP를 차단합니다. 다음을 생성하십시오 /etc/fail2ban/jail.local (파일을 직접 편집하지 마세요 jail.conf ; 업데이트 시 덮어쓰기됨) 파일을 생성하고, 10분 이내에 3회 실패 시 1시간 동안 IP를 차단하도록 구성하십시오. 사용 중인 방화벽에 맞는 백엔드를 설정하십시오 (banaction = ufw 또는 banaction = nftables).

감사 서비스 및 레거시 프로토콜 제거

다음 명령어로 리스닝 중인 항목을 확인하세요 ss -tlnp 를 사용하여 어떤 서비스가 수신 대기 중인지, systemctl list-units --type=service --state=running. 필요 없는 항목은 모두 비활성화하십시오: Bluetooth, CUPS, avahi-daemon, rpcbind.

데이터를 평문으로 전송하는 레거시 프로토콜을 제거하십시오:

구형 프로토콜포트안전한 대안
Telnet23SSH
RSH / Rlogin512, 513, 514SSH
FTP21SFTP / FTPS
TFTP69SFTP / SCP
NIS변수LDAP / Kerberos

Debian/Ubuntu에서: sudo apt-get --purge remove xinetd nis tftpd telnetd rsh-server. RHEL 기반 시스템에서: yum erase xinetd ypserv tftp-server telnet-server rsh-server. 제거 여부를 확인하려면 ss -tulpn.

패치 및 자동 업데이트

시스템을 업데이트하는 것은 알려진 보안 취약점을 해결하는 가장 빠른 방법입니다. 프로비저닝 직후 업데이트를 실행하십시오:

apt update && apt upgrade -y      # Debian/Ubuntu
dnf update -y                      # RHEL/Rocky

그런 다음 보안 패치를 자동화하십시오. Debian/Ubuntu에서는 unattended-upgrades 를 설치하고 보안 패치만 적용되도록 구성하십시오. RHEL/Rocky에서는 dnf-automatic 를 설치하고 upgrade_type = security 을 설정하십시오 /etc/dnf/automatic.conf.

업데이트 결과에 대한 이메일 알림을 설정하십시오. 프로덕션 서버에서는 자동 재부팅을 비활성화하여(Automatic-Reboot = false) 재부팅이 계획된 유지보수 시간대에만 이루어지도록 하십시오. 가동 시간이 긴 환경의 경우, Canonical Livepatch(Ubuntu) 또는 kpatch(RHEL)를 이용한 라이브 패치 적용을 고려해 보십시오.

파일 시스템 및 권한 강화

먼저 SUID 및 SGID 바이너리를 점검하십시오. 이러한 파일은 상승된 권한으로 실행되며 악용의 주요 표적이 됩니다:

find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -ls

중요한 파일의 권한을 강화하십시오: /etc/shadow ~해야 함 600, /etc/passwd 다음과 같아야 합니다 644, /etc/ssh/sshd_config 다음과 같아야 함 600. 전역 umask027/etc/profile 로 설정하여 새 파일이 모든 사용자에게 읽기 권한이 부여되는 것을 방지하십시오.

다음 명령어를 사용하여 모든 사용자가 쓰기 권한을 가진 파일을 찾아 수정하십시오 find / -xdev -type f -perm -0002 -ls. 세계 쓰기 권한을 유지해야 하는 디렉터리(예: /tmp)는 스티키 비트를 적용하십시오: chmod 1777 /tmp.

보안 마운트 옵션

편집 /etc/fstab 중요한 파티션에서 발생할 수 있는 작업을 제한하려면:

파티션마운트 옵션목적
/tmpnodev, nosuid, noexec전체 쓰기 가능한 영역에서 악성 코드 실행 방지
/var/tmpnodev, nosuid, noexec/tmp와 동일한 보호 기능
/dev/shmnodev, nosuid, noexec공유 메모리를 보호합니다
/homenodev, nosuidsetuid 바이너리 및 장치 노드 차단
/var/lognodev, nosuid, noexec로그 무결성 보호

부팅 문제를 방지하기 위해 재부팅 전에 mount -o remount 부팅 문제를 방지하기 위해 재부팅 전에 테스트하십시오.

강제 접근 제어 활성화

SELinux와 AppArmor는 프로세스의 동작에 대해 커널 수준의 제한을 추가합니다. 사용 중인 배포판에 포함된 기능을 사용하십시오: RHEL/CentOS/Fedora의 경우 SELinux, Ubuntu/Debian/SUSE의 경우 AppArmor. 두 기능 간 전환 시 호환성 문제가 발생할 수 있습니다.

SELinux: 다음 명령어로 상태를 확인하십시오 getenforce. 시스템에 문제를 일으키지 않으면서 워크로드 동작을 파악하기 위해 최소 2주 동안 허용 모드(setenforce 0)으로 최소 2주간 실행하여 시스템에 문제를 일으키지 않으면서 워크로드 동작을 파악하십시오. ausearch -m avc -ts recent를 사용하여 위반 사항을 모니터링하십시오. audit2why 를 사용하여 차단 원인을 진단하고 audit2allow -M [module_name] 를 사용하여 정책 모듈을 생성하십시오. 로그에 문제가 없으면 setenforce 1로 전환한 후, /etc/selinux/config.

AppArmor에서 영구적으로 적용하세요: 활성 프로필을 확인하려면 aa-status를 사용하여 활성 프로필을 확인하십시오. 관리 명령을 위해 apparmor-utils 를 설치하여 관리 명령을 사용하십시오. aa-complain로 프로필을 시작하고, aa-enforce 를 사용하여 강제 모드로 전환합니다. aa-genprof 를 사용하여 사용자 지정 애플리케이션용 프로필을 생성하십시오.

감사 로깅 및 모니터링 설정

로깅이 없으면 사고의 흔적을 찾을 수 없습니다. 설치 auditd:

sudo apt-get install auditd audispd-plugins

중요한 파일에 대한 파일 시스템 감시 설정:

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity

모든 루트 레벨 명령어 실행 추적:

-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands

다음 규칙을 로드하고 augenrules --load 를 사용하여 규칙을 로드하고 -e 2 규칙 파일 끝에 추가하여 구성을 변조 방지하도록 만드세요(변경 시 재부팅 필요).

AIDE를 이용한 파일 무결성 모니터링

AIDE는 현재 상태를 정상으로 확인된 기준과 비교하여 무단 파일 변경을 감지합니다. AIDE를 설치하고 aideinit를 사용하여 데이터베이스를 초기화한 후, 생성된 파일을 /var/lib/aide/aide.db.gz로 이동하십시오. 매일 cron 작업을 설정하여 aide --check 를 실행하고 결과를 관리자에게 이메일로 전송하도록 설정하십시오.

로그 중앙 집중화

루트 권한을 가진 공격자가 로지를 삭제하면 로컬 로지는 무용지물이 됩니다. TLS 암호화를 적용한 rsyslog를 사용하여 로지를 원격 서버로 실시간으로 전달하십시오. 다음을 /etc/rsyslog.conf:

*.* @@remote-host:514

Set LogLevel VERBOSE 를 추가하여, 로그에 모든 성공적인 로그인 시의 키 지문이 포함되도록 하십시오. 여러 대의 서버를 관리하는 프로덕션 환경의 경우, Wazuh나 OSSEC과 같은 도구를 사용하면 중앙 집중식 로그 분석과 함께 호스트 기반 침입 탐지 기능을 제공합니다.

지속적인 유지 관리

보안 강화는 일회성 작업이 아닙니다. 구성은 변하고, 새로운 취약점이 나타나며, 직원 변경으로 인해 관리되지 않는 계정이 남게 됩니다.

매주: Fail2Ban 로그를 검토하고, 업데이트 실패 여부를 확인하며, 백업을 검증합니다.

매월: 사용자 계정 및 권한을 감사하고, 실행 중인 서비스를 검토하며, Lynis 또는 OpenSCAP을 사용하여 전체 스캔을 실행합니다.

분기별: 인증 정보를 교체하고, 방화벽 규칙을 업데이트하며, 재해 복구 테스트를 수행합니다.

Ansible과 같은 인프라-어-코드(Infrastructure-as-Code) 도구를 dev-sec.io 강화 역할과 함께 사용하여 전체 인프라에 걸쳐 일관된 구성을 적용하고, 감사 간 설정 편차를 방지하십시오.

FDC의 전용 서버는 완전한 루트 액세스 권한과 보안 스택에 대한 완벽한 제어권을 제공합니다. 모든 계층을 직접 제어할 수 있는 플랫폼을 구축하기 위해 전용 서버 옵션을 살펴보세요.

background image
서버가 성장의 발목을 잡고 있나요?

느린 배포나 대역폭 제한에 지치셨나요? FDC 서버는 즉각적인 전용 전원, 글로벌 범위, 모든 규모에 맞게 구축된 유연한 요금제를 제공합니다.

지금 업그레이드하기

블로그

이번 주 추천

더 많은 기사
강력하고 계량되지 않는 VPS가 중요한 이유

강력하고 계량되지 않는 VPS가 중요한 이유

미터링되지 않은 VPS는 고정된 포트 속도로 정액제 대역폭을 제공합니다. 계량형 요금제와 어떻게 다른지, 언제 요금이 부과되는지, 구매 전에 확인해야 할 사항은 무엇인지 알아보세요.

7분 소요 - 2025년 5월 9일

Linux 메모리 관리: 스왑, OOM 킬러 및 C그룹

12분 소요 - 2026년 5월 31일

더 많은 기사
background image

질문이 있거나 맞춤형 솔루션이 필요하신가요?

icon

유연한 옵션

icon

글로벌 도달 범위

icon

즉시 배포

icon

유연한 옵션

icon

글로벌 도달 범위

icon

즉시 배포