서버/인프라 보안 체크리스트
서버 및 인프라 환경의 보안 설정을 점검하세요. · 2025.02 기준
운영체제의 보안 패치를 정기적으로 적용하여 알려진 취약점을 해소해야 합니다. 패치 적용 주기를 수립하고 긴급 패치는 즉시 반영하세요.
IP 포워딩 비활성화, SYN 쿠키 활성화, ICMP 리다이렉트 차단 등 커널 네트워크 보안 파라미터를 적절히 설정해야 합니다.
USB 스토리지, Bluetooth, IPv6 등 사용하지 않는 커널 모듈을 비활성화하여 공격 표면을 최소화해야 합니다.
unattended-upgrades(Debian/Ubuntu) 또는 dnf-automatic(RHEL/CentOS) 등을 통해 보안 업데이트가 자동으로 적용되도록 설정해야 합니다.
부트로더에 비밀번호를 설정하여 물리적 접근 시 부팅 파라미터 변조나 단일 사용자 모드 진입을 방지해야 합니다.
/tmp, /var/tmp 등의 파티션에 noexec, nosuid, nodev 옵션을 적용하여 실행 파일 업로드 공격을 방지해야 합니다.
정확한 로그 타임스탬프와 인증서 유효성 검증을 위해 NTP 또는 chrony를 통한 시간 동기화를 설정해야 합니다.
SSH를 통한 root 직접 로그인을 비활성화하고, 일반 계정으로 접속 후 su/sudo를 사용하도록 설정해야 합니다.
비밀번호 인증 대신 SSH 공개키 인증을 사용하고, PasswordAuthentication을 비활성화하여 무차별 대입 공격을 방지해야 합니다.
sudo 권한을 필요한 사용자 및 명령어에만 부여하고, NOPASSWD 사용을 최소화하여 권한 남용을 방지해야 합니다.
games, ftp, news 등 사용하지 않는 기본 계정을 잠금 또는 삭제하고, 퇴직자 계정을 즉시 비활성화해야 합니다.
PAM 모듈을 통해 비밀번호 최소 길이, 복잡도, 히스토리를 설정하고, 비밀번호 만료 주기를 적용해야 합니다.
SSH 기본 포트(22)를 변경하고, AllowUsers 또는 방화벽을 통해 접속 가능한 IP를 제한하여 스캔 공격을 줄여야 합니다.
pam_faillock 또는 fail2ban을 사용하여 일정 횟수 이상 로그인 실패 시 계정을 일시적으로 잠금 처리해야 합니다.
새로 생성되는 파일의 기본 권한을 제한하기 위해 시스템 umask를 027 이상으로 설정해야 합니다.
iptables, firewalld 또는 ufw 등 호스트 기반 방화벽을 활성화하고, 기본 정책을 DROP/REJECT로 설정해야 합니다.
서비스 운영에 필요한 포트만 허용하고, 사용하지 않는 포트는 모두 차단하여 외부 공격 표면을 최소화해야 합니다.
서버에서 외부로 나가는 트래픽도 필요한 목적지와 포트만 허용하여 데이터 유출 및 리버스 쉘 공격을 방지해야 합니다.
SSH, 관리 콘솔 등 관리 목적 포트는 허용된 IP 대역에서만 접근 가능하도록 방화벽 규칙을 설정해야 합니다.
ping flood 공격을 방지하기 위해 ICMP echo 요청을 제한하거나 rate limiting을 적용해야 합니다.
방화벽 규칙을 정기적으로 검토하여 더 이상 필요하지 않은 규칙을 제거하고, 모든 규칙의 목적을 문서화해야 합니다.
/etc/hosts.allow 및 /etc/hosts.deny를 활용하여 서비스별 접근 제어를 추가 적용해야 합니다.
Linux auditd를 활성화하여 파일 접근, 권한 변경, 사용자 인증 등 주요 시스템 이벤트를 기록해야 합니다.
/etc/passwd, /etc/shadow, /etc/sudoers 등 주요 설정 파일의 변경 사항을 감사 로그로 기록하도록 규칙을 설정해야 합니다.
/var/log 디렉토리 하위 로그 파일의 소유자를 root로 설정하고, 일반 사용자의 읽기/쓰기 권한을 제한해야 합니다.
rsyslog, syslog-ng 등을 통해 로그를 원격 로그 서버(SIEM)로 전송하여 로그 위변조를 방지하고 중앙 분석이 가능하도록 해야 합니다.
logrotate를 설정하여 로그 파일의 크기와 보존 기간을 관리하고, 법적 요구사항에 맞는 보존 기간을 적용해야 합니다.
SSH 로그인 성공/실패 기록을 모니터링하고, 비정상적인 접속 시도에 대한 알림 체계를 구축해야 합니다.
cron 작업의 실행 내역과 결과를 로그로 기록하여 예기치 않은 작업 등록이나 실행 실패를 추적할 수 있어야 합니다.
telnet, rsh, rlogin, avahi-daemon, cups 등 사용하지 않는 서비스를 비활성화하여 공격 표면을 줄여야 합니다.
서버 토큰 숨기기, 디렉토리 리스팅 비활성화, 불필요한 모듈 제거 등 웹 서버 보안 설정을 강화해야 합니다.
MySQL, PostgreSQL 등 데이터베이스는 원격 접속을 차단하고 localhost 또는 허용된 IP에서만 접근 가능하도록 설정해야 합니다.
NFS 또는 SMB 파일 공유를 사용하는 경우, 접근 가능한 IP를 제한하고 불필요한 공유를 제거해야 합니다.
DNS 서버를 운영하는 경우, Zone Transfer를 제한하고 재귀 쿼리를 내부 네트워크로만 허용해야 합니다.
SMTP 서버가 오픈 릴레이로 설정되지 않도록 하여 스팸 메일 발송에 악용되는 것을 방지해야 합니다.
SNMP를 사용하는 경우 기본 커뮤니티 문자열(public/private)을 변경하고, SNMPv3 사용을 권장합니다.
Docker 사용 시 root로 컨테이너를 실행하지 않고, 권한 상승을 방지하며 리소스 제한을 적용해야 합니다.
AIDE, Tripwire 등 파일 무결성 검사 도구를 설치하여 주요 시스템 파일의 변조를 탐지할 수 있어야 합니다.
SELinux(Enforcing 모드) 또는 AppArmor를 활성화하여 프로세스별 접근 권한을 강제하고 권한 상승 공격을 방지해야 합니다.
SUID/SGID 비트가 설정된 파일을 정기적으로 점검하여 불필요하게 권한이 부여된 파일이 없는지 확인해야 합니다.
민감 데이터가 저장되는 디스크 파티션에 LUKS 암호화를 적용하여 물리적 디스크 탈취 시 데이터를 보호해야 합니다.
소유자가 없는(orphaned) 파일이나 디렉토리는 삭제되었거나 침해된 계정의 흔적일 수 있으므로 정기적으로 점검해야 합니다.
누구나 쓰기 가능한 파일이나 디렉토리를 점검하여 의도하지 않은 권한 설정을 수정해야 합니다.
OpenVAS, Nessus, Lynis 등 취약점 스캐너를 정기적으로 실행하여 시스템의 보안 취약점을 사전에 파악하고 조치해야 합니다.
core dump 파일에 메모리 내 민감 정보가 포함될 수 있으므로, 프로덕션 환경에서는 core dump를 비활성화해야 합니다.