개요

Linux 서버를 운영하면서 보안은 가장 중요한 요소 중 하나입니다. 최신 보안 위협에 대응하기 위해 2025년 기준으로 반드시 점검해야 할 보안 강화 체크리스트를 정리했습니다. 이 가이드는 Ubuntu/Debian 및 RHEL/CentOS 계열 모두에 적용 가능합니다.

핵심 개념

서버 보안은 다층 방어(Defense in Depth) 전략을 기반으로 합니다. 네트워크 레벨, 시스템 레벨, 애플리케이션 레벨에서 각각 보안 조치를 취해야 하며, 정기적인 모니터링과 업데이트가 필수입니다.

1. SSH 보안 강화

SSH는 서버 접근의 주요 경로이므로 철저한 보안 설정이 필요합니다.

# /etc/ssh/sshd_config 주요 설정
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Port 2222  # 기본 포트 변경
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers deploy admin  # 특정 사용자만 허용

# 설정 적용
sudo systemctl restart sshd

# SSH 키 생성 (클라이언트)
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server -p 2222

2. 방화벽 설정 (UFW/firewalld)

필요한 포트만 열고 나머지는 모두 차단하는 화이트리스트 방식을 적용합니다.

# UFW (Ubuntu/Debian)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp  # SSH
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS
sudo ufw enable

# firewalld (RHEL/CentOS)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

3. fail2ban 설정

반복적인 로그인 시도를 차단하여 brute-force 공격을 방어합니다.

# 설치
sudo apt install fail2ban  # Debian/Ubuntu
sudo yum install fail2ban  # RHEL/CentOS

# /etc/fail2ban/jail.local 생성
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
destemail = admin@example.com
sendername = Fail2Ban
action = %(action_mwl)s

[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 3

# 서비스 시작
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status sshd

4. 자동 보안 업데이트

취약점 패치를 자동으로 적용하여 보안을 유지합니다.

# Ubuntu/Debian - unattended-upgrades
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

# /etc/apt/apt.conf.d/50unattended-upgrades 확인
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "false";

# RHEL/CentOS - dnf-automatic
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer

5. 파일 무결성 모니터링 (AIDE)

시스템 파일의 변조를 탐지합니다.

# 설치
sudo apt install aide  # Debian/Ubuntu
sudo yum install aide  # RHEL/CentOS

# 초기 데이터베이스 생성
sudo aideinit
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 정기 검사 (cron)
echo "0 5 * * * /usr/bin/aide --check | mail -s 'AIDE Report' admin@example.com" | sudo crontab -

6. 커널 보안 파라미터 (sysctl)

네트워크 스택과 커널 레벨 보안을 강화합니다.

# /etc/sysctl.d/99-security.conf
# IP 스푸핑 방지
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# ICMP 리다이렉트 차단
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# SYN flood 공격 방어
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048

# IP 포워딩 비활성화 (라우터가 아닌 경우)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0

# 적용
sudo sysctl -p /etc/sysctl.d/99-security.conf

실전 예제

전체 보안 점검 스크립트

#!/bin/bash
# security-check.sh

echo "=== Linux Security Audit ==="
echo ""

# 1. SSH 설정 확인
echo "[SSH Configuration]"
grep -E "PermitRootLogin|PasswordAuthentication|Port" /etc/ssh/sshd_config
echo ""

# 2. 방화벽 상태
echo "[Firewall Status]"
if command -v ufw &> /dev/null; then
    sudo ufw status verbose
elif command -v firewall-cmd &> /dev/null; then
    sudo firewall-cmd --list-all
fi
echo ""

# 3. fail2ban 차단 목록
echo "[Fail2ban Banned IPs]"
sudo fail2ban-client status sshd 2>/dev/null || echo "fail2ban not configured"
echo ""

# 4. 최근 로그인 시도
echo "[Recent Login Attempts]"
sudo lastb | head -10
echo ""

# 5. 열린 포트
echo "[Open Ports]"
sudo ss -tulpn | grep LISTEN
echo ""

# 6. 업데이트 필요한 패키지
echo "[Available Updates]"
if command -v apt &> /dev/null; then
    apt list --upgradable 2>/dev/null | grep -v "Listing..."
elif command -v dnf &> /dev/null; then
    dnf check-update | tail -n +2
fi
echo ""

# 7. 수상한 프로세스 (높은 CPU 사용)
echo "[High CPU Processes]"
ps aux --sort=-%cpu | head -6
echo ""

# 8. AIDE 무결성 검사 (설치된 경우)
if command -v aide &> /dev/null; then
    echo "[File Integrity Check]"
    sudo aide --check 2>&1 | head -20
fi

활용 팁

  • SELinux/AppArmor 활성화: 강제 접근 제어(MAC)로 침해 범위를 제한합니다. CentOS는 SELinux, Ubuntu는 AppArmor가 기본 탑재되어 있습니다.
  • 로그 중앙화: rsyslog나 journald를 외부 로그 서버로 전송하여 로그 조작을 방지합니다.
  • 2FA 적용: Google Authenticator 같은 OTP를 SSH에 적용하면 키 탈취 시에도 안전합니다.
  • 컨테이너 보안: Docker/Podman 사용 시 rootless mode 활성화, seccomp 프로파일 적용, 이미지 취약점 스캔(Trivy)을 정기적으로 수행합니다.
  • 정기 점검: Lynis 같은 보안 감사 도구로 주기적으로 전체 시스템을 점검합니다 (sudo lynis audit system).
  • 백업 암호화: 백업 데이터는 반드시 암호화하고, 3-2-1 규칙(3개 복사본, 2개 매체, 1개 오프사이트)을 따릅니다.

마무리

Linux 서버 보안은 일회성 작업이 아닌 지속적인 프로세스입니다. 이 체크리스트를 기반으로 월 1회 정기 점검을 수행하고, 새로운 취약점이 발견되면 즉시 패치를 적용하세요. 특히 SSH 보안, 방화벽 설정, fail2ban 적용은 서버 구축 직후 반드시 완료해야 할 필수 항목입니다. 보안은 완벽할 수 없지만, 이러한 기본 조치만으로도 대부분의 자동화된 공격을 효과적으로 차단할 수 있습니다.