대상 OS: Debian 12 (bookworm)
리눅스 보안은 거창한 제품 하나로 완성되기보다, "작은 기본 설정"을 꾸준히 쌓아서 공격 표면을 줄이는 게임에 가깝습니다. 특히 Debian 12 같은 서버/워크스테이션 겸용 배포판은 기본값이 나쁘지 않지만, 운영 습관에 따라 구멍이 쉽게 생깁니다.
아래는 Debian 12에서 제가 가장 먼저 확인하는 체크리스트입니다. 포인트는 "새로운 걸 많이 깔기"가 아니라, 이미 있는 기능을 제대로 켜고(또는 끄고) 로그와 업데이트 흐름을 안정화하는 것입니다.
1) 패키지 업데이트를 자동화하고, 재부팅이 필요한 상황을 눈치채기
Debian은 보안 업데이트가 잘 올라오지만, 손으로만 하다 보면 결국 밀립니다. 자동 업데이트를 켜되, 무엇이 업데이트 되었는지 로그가 남고 실패 시 원인을 추적할 수 있게 하는 게 중요합니다.
sudo apt update
sudo apt install -y unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades
그리고 커널/핵심 라이브러리 업데이트 후 "언제 재부팅해야 하는지"를 운영자가 즉시 알 수 있어야 합니다. 서비스가 오래 떠 있으면 취약한 바이너리가 메모리에 남아있는 시간이 길어지니까요.
2) SSH 접근을 "필요 최소"로 줄이기 (비밀번호 로그인 차단 + 키 기반 + root 직접 로그인 금지)
대부분의 침해 사고에서 SSH는 1순위 표적입니다. 가장 쉬운 방어는 "노출을 줄이고", "실패가 반복되는 시도를 빠르게 차단"하는 것입니다. 먼저 sshd 설정부터 보수적으로 두고, 실제 운영은 개별 사용자 + sudo로 처리하는 편이 안전합니다.
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart ssh
여기에 더해, 외부에서 접속하는 서버라면 "22번 포트만 열어두는" 식의 단순 방어에 기대기보다, 방화벽 규칙(허용 IP 제한), fail2ban 같은 계정 보호, 그리고 가능한 경우 VPN/포트 노출 최소화를 함께 고려하는 게 좋습니다.
3) 서비스 목록을 줄이고, 열려 있는 포트를 습관적으로 확인하기
보안 사고의 상당수는 "내가 띄운 줄도 몰랐던 서비스"에서 시작합니다. 의존성으로 설치된 데몬, 개발 중에 열어둔 테스트 포트, 예전 프로젝트의 잔여 컨테이너 같은 것들요.
- systemd에서 enabled/active 서비스 목록을 정기적으로 훑기
- 현재 리슨 중인 포트와 프로세스 매핑을 확인하기
- 필요 없으면 disable/stop하고 패키지도 정리하기
4) 로그를 "보는 습관"을 만들기 (사후 대응이 아니라 조기 탐지)
journald와 auth 로그는 공격 시도(무차별 대입, 권한 상승 시도)의 흔적이 먼저 찍히는 곳입니다. 보안은 결국 "완벽한 방어"가 아니라 "빠른 발견과 격리"에 가깝기 때문에, 최소한 로그인 실패 급증/낯선 IP 접속/새로운 사용자 생성 같은 이벤트는 눈에 들어오게 만들어야 합니다.
5) 커널/런타임 방어는 "기본값 + 운영성" 균형으로
AppArmor(또는 SELinux), sysctl 하드닝, mount 옵션(noexec/nodev/nosuid) 같은 것들은 효과가 큽니다. 다만 한 번에 세게 조이면 운영 중 장애가 나기 쉬우니, "가장 위험한 경로부터" 단계적으로 적용하는 게 현실적입니다. 예: /tmp, /var/tmp, 사용자 업로드 디렉터리 같은 곳부터요.
결론적으로 Debian 12의 보안은, 새로운 도구를 찾기보다 "업데이트/접근제어/서비스 최소화/로그 관찰"의 네 축을 꾸준히 굴리는 쪽이 장기적으로 강합니다. 오늘 한 줄 바꾼 설정이 내일 사고를 막는 경우가 정말 많습니다.