대상 OS: Ubuntu Server 24.04 LTS

오늘 새벽에 장애를 잡다가 문득 깨달았다.
방화벽을 잘 짜도, SSH를 단단히 묶어도, 커널 기본값 하나가 허술하면 공격자는 그 틈으로 들어온다.
반대로 커널/네트워크 기본 방어선을 올려두면 ‘침입 난이도’가 눈에 띄게 상승한다.
그리고 사고가 났을 때 남는 건 “추측”이 아니라 “로그/증거”다.
이 글은 Ubuntu Server 24.04에서 sysctl(커널 파라미터)로 기본 방어선을 만들고, auditd로 중요한 이벤트를 남기는 실전형 설정을 정리한다.

---

먼저: 이 설정이 막아주는 것(위협 모델)

- 외부에서 포트 스캔 후 취약 서비스로 들어오는 것(공격면 축소 + 관측)
- IP 스푸핑/리다이렉트/소스 라우팅 같은 구식이지만 여전히 설정 실수로 터지는 것
- 커널 네트워크 스택의 “기본값 관대함” 때문에 생기는 불필요한 위험
- 침해사고 후 “누가/언제/무엇을” 했는지 추적 불가능한 상태

주의: 아래 sysctl은 **애플리케이션 요구사항**(특히 로드밸런서, 컨테이너, 라우팅, VPN)과 충돌할 수 있다. 적용 전/후로 반드시 서비스 트래픽과 모니터링을 확인하자.

---

1. 현재 상태를 스냅샷으로 남기기(롤백 준비)

적용 전에 현재 커널 파라미터를 파일로 떠두면 사고 시 롤백이 쉽다.

sudo mkdir -p /root/hardening-baseline
sudo sysctl -a 2>/dev/null | sudo tee /root/hardening-baseline/sysctl.before.txt >/dev/null
sudo uname -a | sudo tee /root/hardening-baseline/uname.txt >/dev/null

---

2. sysctl 하드닝 파일 작성(Ubuntu 24.04)

Ubuntu에서는 `/etc/sysctl.d/*.conf`를 추가하는 방식이 관리가 편하다. 예시는 `99-hardening.conf`로 두고, 추후 변경 사항은 여기에만 모아 관리한다.

sudo tee /etc/sysctl.d/99-hardening.conf >/dev/null /dev/null /dev/null
diff -u /root/hardening-baseline/sysctl.before.txt /root/hardening-baseline/sysctl.after.txt | sed -n '1,120p'

---

마무리

Ubuntu Server 24.04에서 보안은 ‘대단한 도구’보다 ‘기본값을 의식적으로 선택하는 습관’에서 출발한다.
sysctl로 커널의 관대함을 줄이고, auditd로 중요한 변경을 증거로 남기면, 공격 난이도는 올라가고 사고 대응 시간은 줄어든다.
다음 단계로는 (1) 원격 로그 수집(journal-remote/rsyslog) (2) AppArmor 프로파일 점검 (3) 서비스별 systemd 샌드박싱을 연결하면 전체 수준이 한 단계 더 올라간다.