Security

서버/인프라 보안 체크리스트

서버 및 인프라 환경의 보안 설정을 점검하세요. · 2025.02 기준

전체 진행률
0%
0 / 45 항목 완료
OS 보안0/7
접근 제어0/8
방화벽/포트0/7
로그 관리0/7
서비스 관리0/8
시스템 강화0/8
운영체제 최신 보안 패치 적용

운영체제의 보안 패치를 정기적으로 적용하여 알려진 취약점을 해소해야 합니다. 패치 적용 주기를 수립하고 긴급 패치는 즉시 반영하세요.

확인 방법:yum check-update 또는 apt list --upgradable 명령으로 미적용 패치를 확인하고, 보안 업데이트가 최신 상태인지 점검합니다.
커널 보안 파라미터 설정 (sysctl)

IP 포워딩 비활성화, SYN 쿠키 활성화, ICMP 리다이렉트 차단 등 커널 네트워크 보안 파라미터를 적절히 설정해야 합니다.

확인 방법:sysctl -a 명령으로 net.ipv4.ip_forward=0, net.ipv4.tcp_syncookies=1, net.ipv4.conf.all.accept_redirects=0 등이 설정되어 있는지 확인합니다.
불필요한 커널 모듈 비활성화

USB 스토리지, Bluetooth, IPv6 등 사용하지 않는 커널 모듈을 비활성화하여 공격 표면을 최소화해야 합니다.

확인 방법:/etc/modprobe.d/ 디렉토리에서 불필요한 모듈이 blacklist 처리되어 있는지 확인하고, lsmod 명령으로 로드된 모듈을 점검합니다.
자동 업데이트 설정 확인

unattended-upgrades(Debian/Ubuntu) 또는 dnf-automatic(RHEL/CentOS) 등을 통해 보안 업데이트가 자동으로 적용되도록 설정해야 합니다.

확인 방법:systemctl status unattended-upgrades 또는 dnf-automatic 서비스의 활성화 상태를 확인하고 설정 파일에서 보안 업데이트만 자동 적용되는지 점검합니다.
GRUB 부트로더 비밀번호 설정

부트로더에 비밀번호를 설정하여 물리적 접근 시 부팅 파라미터 변조나 단일 사용자 모드 진입을 방지해야 합니다.

확인 방법:/etc/grub.d/40_custom 또는 /boot/grub2/grub.cfg에 password_pbkdf2 설정이 존재하는지 확인합니다.
파일 시스템 마운트 옵션 강화

/tmp, /var/tmp 등의 파티션에 noexec, nosuid, nodev 옵션을 적용하여 실행 파일 업로드 공격을 방지해야 합니다.

확인 방법:mount 명령 또는 /etc/fstab 파일에서 /tmp, /var/tmp 파티션에 noexec, nosuid, nodev 옵션이 적용되어 있는지 확인합니다.
NTP 시간 동기화 설정

정확한 로그 타임스탬프와 인증서 유효성 검증을 위해 NTP 또는 chrony를 통한 시간 동기화를 설정해야 합니다.

확인 방법:timedatectl 명령으로 NTP 동기화 상태를 확인하고, chronyc sources 또는 ntpq -p로 시간 서버 연결 상태를 점검합니다.
SSH root 직접 로그인 차단

SSH를 통한 root 직접 로그인을 비활성화하고, 일반 계정으로 접속 후 su/sudo를 사용하도록 설정해야 합니다.

확인 방법:/etc/ssh/sshd_config 파일에서 PermitRootLogin no 설정 여부를 확인하고, root 계정으로 SSH 접속을 시도하여 차단되는지 테스트합니다.
SSH 키 기반 인증 적용

비밀번호 인증 대신 SSH 공개키 인증을 사용하고, PasswordAuthentication을 비활성화하여 무차별 대입 공격을 방지해야 합니다.

확인 방법:/etc/ssh/sshd_config에서 PubkeyAuthentication yes, PasswordAuthentication no가 설정되어 있는지 확인합니다.
sudo 권한 최소화 설정

sudo 권한을 필요한 사용자 및 명령어에만 부여하고, NOPASSWD 사용을 최소화하여 권한 남용을 방지해야 합니다.

확인 방법:/etc/sudoers 파일 및 /etc/sudoers.d/ 디렉토리의 설정을 검토하여 ALL=(ALL) ALL 또는 NOPASSWD가 불필요하게 부여되지 않았는지 확인합니다.
불필요한 계정 및 기본 계정 제거

games, ftp, news 등 사용하지 않는 기본 계정을 잠금 또는 삭제하고, 퇴직자 계정을 즉시 비활성화해야 합니다.

확인 방법:cat /etc/passwd로 전체 계정 목록을 확인하고, 불필요한 계정의 쉘이 /sbin/nologin으로 설정되어 있는지 또는 잠금 상태인지 점검합니다.
비밀번호 복잡도 및 만료 정책 설정

PAM 모듈을 통해 비밀번호 최소 길이, 복잡도, 히스토리를 설정하고, 비밀번호 만료 주기를 적용해야 합니다.

확인 방법:/etc/login.defs의 PASS_MAX_DAYS, PASS_MIN_LEN 및 /etc/pam.d/common-password의 pam_pwquality 설정을 확인합니다.
SSH 포트 변경 및 접속 IP 제한

SSH 기본 포트(22)를 변경하고, AllowUsers 또는 방화벽을 통해 접속 가능한 IP를 제한하여 스캔 공격을 줄여야 합니다.

확인 방법:/etc/ssh/sshd_config에서 Port 설정을 확인하고, AllowUsers 또는 iptables/firewalld에서 SSH 접속 IP가 제한되어 있는지 점검합니다.
로그인 실패 횟수 제한 (계정 잠금)

pam_faillock 또는 fail2ban을 사용하여 일정 횟수 이상 로그인 실패 시 계정을 일시적으로 잠금 처리해야 합니다.

확인 방법:faillock --user [사용자] 명령으로 잠금 상태를 확인하거나, fail2ban-client status sshd로 차단된 IP 목록을 점검합니다.
umask 기본값 강화 설정

새로 생성되는 파일의 기본 권한을 제한하기 위해 시스템 umask를 027 이상으로 설정해야 합니다.

확인 방법:/etc/profile, /etc/bashrc 또는 /etc/login.defs에서 UMASK 값이 027 이상으로 설정되어 있는지 확인합니다.
호스트 방화벽 활성화 및 기본 정책 설정

iptables, firewalld 또는 ufw 등 호스트 기반 방화벽을 활성화하고, 기본 정책을 DROP/REJECT로 설정해야 합니다.

확인 방법:systemctl status firewalld 또는 ufw status 명령으로 방화벽 활성화 상태를 확인하고, 기본 정책이 deny/drop인지 점검합니다.
불필요한 인바운드 포트 차단

서비스 운영에 필요한 포트만 허용하고, 사용하지 않는 포트는 모두 차단하여 외부 공격 표면을 최소화해야 합니다.

확인 방법:ss -tlnp 또는 netstat -tlnp로 열린 포트를 확인하고, 방화벽 규칙에서 서비스에 필요한 포트만 ALLOW 되어 있는지 대조합니다.
아웃바운드 트래픽 제어

서버에서 외부로 나가는 트래픽도 필요한 목적지와 포트만 허용하여 데이터 유출 및 리버스 쉘 공격을 방지해야 합니다.

확인 방법:iptables -L OUTPUT -n 또는 firewall-cmd --list-all 명령으로 아웃바운드 규칙을 확인하고, 불필요한 외부 통신이 차단되어 있는지 점검합니다.
관리 포트 IP 화이트리스트 적용

SSH, 관리 콘솔 등 관리 목적 포트는 허용된 IP 대역에서만 접근 가능하도록 방화벽 규칙을 설정해야 합니다.

확인 방법:방화벽 규칙에서 SSH(22번 또는 변경 포트) 및 관리 포트가 특정 IP/대역에만 허용되어 있는지 확인합니다.
ICMP 요청 제한 설정

ping flood 공격을 방지하기 위해 ICMP echo 요청을 제한하거나 rate limiting을 적용해야 합니다.

확인 방법:sysctl net.ipv4.icmp_echo_ignore_all 값 또는 방화벽 규칙에서 ICMP 관련 제한이 설정되어 있는지 확인합니다.
방화벽 규칙 정기 검토 및 문서화

방화벽 규칙을 정기적으로 검토하여 더 이상 필요하지 않은 규칙을 제거하고, 모든 규칙의 목적을 문서화해야 합니다.

확인 방법:방화벽 규칙 목록을 출력하여 각 규칙의 필요성을 검토하고, 미사용 규칙이 존재하지 않는지, 문서화가 되어 있는지 확인합니다.
TCP Wrapper 또는 호스트 기반 접근 제어 설정

/etc/hosts.allow 및 /etc/hosts.deny를 활용하여 서비스별 접근 제어를 추가 적용해야 합니다.

확인 방법:/etc/hosts.allow 및 /etc/hosts.deny 파일을 확인하여 SSH 등 주요 서비스에 대한 접근 제어가 설정되어 있는지 점검합니다.
감사 로그(auditd) 활성화

Linux auditd를 활성화하여 파일 접근, 권한 변경, 사용자 인증 등 주요 시스템 이벤트를 기록해야 합니다.

확인 방법:systemctl status auditd 명령으로 서비스 활성화 상태를 확인하고, auditctl -l로 설정된 감사 규칙을 점검합니다.
주요 설정 파일 변경 감사 설정

/etc/passwd, /etc/shadow, /etc/sudoers 등 주요 설정 파일의 변경 사항을 감사 로그로 기록하도록 규칙을 설정해야 합니다.

확인 방법:auditctl -l 명령으로 /etc/passwd, /etc/shadow, /etc/ssh/sshd_config 등에 대한 감시 규칙(-w)이 설정되어 있는지 확인합니다.
로그 파일 권한 및 소유자 제한

/var/log 디렉토리 하위 로그 파일의 소유자를 root로 설정하고, 일반 사용자의 읽기/쓰기 권한을 제한해야 합니다.

확인 방법:ls -la /var/log/ 명령으로 로그 파일의 소유자와 권한을 확인하여 일반 사용자가 수정할 수 없는 권한(640 이하)으로 설정되어 있는지 점검합니다.
원격 로그 서버로 로그 전송 (중앙화)

rsyslog, syslog-ng 등을 통해 로그를 원격 로그 서버(SIEM)로 전송하여 로그 위변조를 방지하고 중앙 분석이 가능하도록 해야 합니다.

확인 방법:/etc/rsyslog.conf 또는 /etc/syslog-ng/syslog-ng.conf에서 원격 서버 전송 설정(@@remote-server:514)이 되어 있는지 확인합니다.
로그 보존 기간 및 로테이션 설정

logrotate를 설정하여 로그 파일의 크기와 보존 기간을 관리하고, 법적 요구사항에 맞는 보존 기간을 적용해야 합니다.

확인 방법:/etc/logrotate.conf 및 /etc/logrotate.d/ 디렉토리의 설정에서 rotate 횟수, compress, maxage 등이 적절히 설정되어 있는지 확인합니다.
SSH 접속 로그 모니터링

SSH 로그인 성공/실패 기록을 모니터링하고, 비정상적인 접속 시도에 대한 알림 체계를 구축해야 합니다.

확인 방법:/var/log/auth.log 또는 /var/log/secure에서 SSH 관련 로그를 확인하고, 반복적인 실패 접속 시도가 감지되는지 점검합니다.
cron 작업 실행 로그 관리

cron 작업의 실행 내역과 결과를 로그로 기록하여 예기치 않은 작업 등록이나 실행 실패를 추적할 수 있어야 합니다.

확인 방법:/var/log/cron 또는 syslog에서 cron 실행 로그가 기록되는지 확인하고, crontab -l로 등록된 작업이 모두 인가된 것인지 점검합니다.
불필요한 서비스 및 데몬 비활성화

telnet, rsh, rlogin, avahi-daemon, cups 등 사용하지 않는 서비스를 비활성화하여 공격 표면을 줄여야 합니다.

확인 방법:systemctl list-units --type=service --state=running으로 실행 중인 서비스를 확인하고, 불필요한 서비스가 비활성화되어 있는지 점검합니다.
웹 서버 보안 설정 강화 (Apache/Nginx)

서버 토큰 숨기기, 디렉토리 리스팅 비활성화, 불필요한 모듈 제거 등 웹 서버 보안 설정을 강화해야 합니다.

확인 방법:Apache의 경우 ServerTokens Prod, ServerSignature Off 설정을 확인하고, Nginx의 경우 server_tokens off 설정을 점검합니다.
데이터베이스 원격 접속 제한

MySQL, PostgreSQL 등 데이터베이스는 원격 접속을 차단하고 localhost 또는 허용된 IP에서만 접근 가능하도록 설정해야 합니다.

확인 방법:MySQL의 bind-address=127.0.0.1 또는 PostgreSQL의 pg_hba.conf 설정에서 허용된 접속 대역을 확인합니다.
NFS/SMB 공유 설정 점검

NFS 또는 SMB 파일 공유를 사용하는 경우, 접근 가능한 IP를 제한하고 불필요한 공유를 제거해야 합니다.

확인 방법:/etc/exports(NFS) 또는 /etc/samba/smb.conf(SMB) 파일에서 공유 설정과 접근 제어가 적절한지 확인합니다.
DNS 서비스 보안 설정

DNS 서버를 운영하는 경우, Zone Transfer를 제한하고 재귀 쿼리를 내부 네트워크로만 허용해야 합니다.

확인 방법:named.conf에서 allow-transfer, allow-recursion 설정이 적절한 IP 대역으로 제한되어 있는지 확인합니다.
메일 서비스 오픈 릴레이 방지

SMTP 서버가 오픈 릴레이로 설정되지 않도록 하여 스팸 메일 발송에 악용되는 것을 방지해야 합니다.

확인 방법:Postfix의 경우 mynetworks 및 smtpd_recipient_restrictions 설정을 확인하여 인가되지 않은 릴레이가 차단되는지 점검합니다.
SNMP 커뮤니티 문자열 변경

SNMP를 사용하는 경우 기본 커뮤니티 문자열(public/private)을 변경하고, SNMPv3 사용을 권장합니다.

확인 방법:/etc/snmp/snmpd.conf에서 기본 커뮤니티 문자열이 변경되었는지, SNMPv3 인증이 설정되어 있는지 확인합니다.
컨테이너 런타임 보안 설정 (Docker 등)

Docker 사용 시 root로 컨테이너를 실행하지 않고, 권한 상승을 방지하며 리소스 제한을 적용해야 합니다.

확인 방법:docker inspect 명령으로 컨테이너가 non-root 사용자로 실행되는지, --privileged 플래그 없이 실행되는지 확인합니다.
파일 무결성 검사 도구 설치 (AIDE/Tripwire)

AIDE, Tripwire 등 파일 무결성 검사 도구를 설치하여 주요 시스템 파일의 변조를 탐지할 수 있어야 합니다.

확인 방법:aide --check 명령으로 무결성 검사를 실행하고, 변경된 파일이 정상적인 업데이트로 인한 것인지 확인합니다.
SELinux/AppArmor 활성화

SELinux(Enforcing 모드) 또는 AppArmor를 활성화하여 프로세스별 접근 권한을 강제하고 권한 상승 공격을 방지해야 합니다.

확인 방법:getenforce 명령으로 SELinux 상태를 확인하거나, aa-status 명령으로 AppArmor 프로파일 적용 상태를 점검합니다.
SUID/SGID 파일 점검

SUID/SGID 비트가 설정된 파일을 정기적으로 점검하여 불필요하게 권한이 부여된 파일이 없는지 확인해야 합니다.

확인 방법:find / -perm /4000 -o -perm /2000 명령으로 SUID/SGID 파일을 검색하고, 불필요한 파일에서 해당 비트를 제거합니다.
디스크 암호화 적용 (LUKS)

민감 데이터가 저장되는 디스크 파티션에 LUKS 암호화를 적용하여 물리적 디스크 탈취 시 데이터를 보호해야 합니다.

확인 방법:lsblk -f 또는 cryptsetup status 명령으로 암호화가 적용된 파티션을 확인하고, 민감 데이터 저장 영역이 포함되어 있는지 점검합니다.
소유자 없는 파일 및 디렉토리 점검

소유자가 없는(orphaned) 파일이나 디렉토리는 삭제되었거나 침해된 계정의 흔적일 수 있으므로 정기적으로 점검해야 합니다.

확인 방법:find / -nouser -o -nogroup 명령으로 소유자 없는 파일을 검색하고, 해당 파일의 출처와 필요성을 확인합니다.
world-writable 파일 및 디렉토리 점검

누구나 쓰기 가능한 파일이나 디렉토리를 점검하여 의도하지 않은 권한 설정을 수정해야 합니다.

확인 방법:find / -xdev -type f -perm -0002 명령으로 world-writable 파일을 검색하고, 의도된 설정인지 확인 후 불필요한 권한을 제거합니다.
보안 취약점 스캐너 정기 실행

OpenVAS, Nessus, Lynis 등 취약점 스캐너를 정기적으로 실행하여 시스템의 보안 취약점을 사전에 파악하고 조치해야 합니다.

확인 방법:lynis audit system 명령을 실행하여 보안 점수와 경고 항목을 확인하고, 발견된 취약점에 대한 조치 계획을 수립합니다.
core dump 비활성화

core dump 파일에 메모리 내 민감 정보가 포함될 수 있으므로, 프로덕션 환경에서는 core dump를 비활성화해야 합니다.

확인 방법:/etc/security/limits.conf에서 * hard core 0 설정을 확인하고, sysctl fs.suid_dumpable=0이 적용되어 있는지 점검합니다.