대상 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