대상 OS: Ubuntu Server 24.04 LTS

SSH 하드닝을 하다 보면 곧 한계에 부딪힙니다.
“모든 사용자에게 똑같은 정책”을 적용하면, 보안은 좋아지지만 운영 편의가 망가지고,
반대로 운영 편의를 위해 정책을 느슨하게 풀면, 가장 약한 계정이 전체 서버의 약점이 됩니다.
이럴 때 OpenSSH의 Match 블록을 쓰면, 사용자/그룹/접속 대역별로 SSH 정책을 분리해 ‘필요한 사람에게만 필요한 기능’을 줄 수 있습니다.

이 글은 Ubuntu Server 24.04에서 sshd_config의 Match를 이용해
- 관리자 그룹만 포트포워딩/터널링 허용
- 외주/협력사 계정은 SFTP만 허용하거나 쉘/포워딩을 강하게 제한
- 내부 관리망에서는 조금 더 편하게, 공용망에서는 더 엄격하게
같은 정책 분리를 안정적으로 적용하는 방법을 정리합니다.

---

1) Match 블록이 유용한 대표 시나리오

1)

관리자(ops)만 포워딩/에이전트 포워딩 허용

2)

배포 계정(deploy)은 특정 커맨드만 강제(ForceCommand)

3)

외주 계정(vendor)은 SFTP만, chroot로 범위 제한

4)

관리망(VPN 대역)에서만 PasswordAuthentication 같은 예외를 ‘임시’로 허용(권장하진 않음)

5)

특정 IP 대역에서는 더 강한 로그/재시도 정책 적용

Match는 ‘세밀한 정책’을 가능하게 하지만, 설정 실수 시 접속 불능이 될 수 있으니 검증 절차가 중요합니다.

---

2) 적용 전 필수 점검(원격 서버 안전장치)

1)

현재 SSH 포트/유효 설정 확인

sudo sshd -T | head -n 40
sudo sshd -T | grep -i '^port '

2)

Include 구조 확인(Ubuntu 24.04는 sshd_config.d 사용 권장)

sudo grep -n "^Include" /etc/ssh/sshd_config || true
ls -la /etc/ssh/sshd_config.d 2>/dev/null || true

3)

작업 중 SSH 세션 2개 유지(한 개는 예비)

4)

콘솔 접근 가능 여부 확인(최후의 복구)

---

3) 기본 정책을 먼저 ‘안전하게’ 깔기(전역)

Match를 쓰기 전에, 전역 정책을 먼저 적당히 단단하게 잡아두는 것이 좋습니다.

1)

전역 하드닝 파일 생성

sudo tee /etc/ssh/sshd_config.d/20-baseline-hardening.conf >/dev/null