LabHub

SSH 와 파일 전송 · SSH 설정 강화 · 실습

sshd 하드닝

LabHub 에서 이어서 보기

목표

drop-in 설정 파일로 sshd 를 하드닝하고, sshd -tsshd -T 로 검증한 뒤, 키 접속은 유지되고 비밀번호 인증은 거부되는지 실제로 확인합니다.

왜 중요한가

원격 서버의 sshd 를 고치는 것은 타고 있는 나뭇가지를 자르는 일입니다. 그래서 순서가 정해져 있습니다: 세션 유지 → 수정 → sshd -t → 재적재 → 새 세션으로 확인 → 그다음에 기존 세션 종료. 그리고 요즘 배포판은 Include /etc/ssh/sshd_config.d/*.conf 로 설정을 조각냅니다. 같은 키가 여러 번 나오면 첫 번째 값이 이기므로 "고쳤는데 안 먹는다" 가 흔합니다. sshd -T 로 최종 적용 값을 확인하는 습관이 이 문제를 원천 차단합니다.\n\n## 이 실습은 가상머신에서 돕니다\n\nsshd 가 실제 systemd 서비스로 돌기 때문에 systemctl reload ssh 로 설정을 다시 읽히고, 새 세션으로 붙어서 확인할 수 있습니다. 예전에는 파드에서 돌아 systemctl 이 없었고 pkill sshd 로 프로세스를 직접 다뤄야 했습니다.\n\n환경을 세울 때 하나를 미리 처리해 두었습니다. 우분투 24.04 는 ssh.socket 이 켜져 있고, 그 상태에서는 듣는 포트를 systemd 가 정합니다sshd_configPort 는 무시됩니다. 설정을 고치고 재시작해도 22번으로만 듣고 오류도 경고도 나오지 않습니다. 실습용 2222 포트를 열기 위해 소켓 활성화를 끄고 ssh.service 를 켜 두었습니다. 실제 서버에서 "포트를 바꿨는데 안 열린다" 를 만나면 여기를 먼저 보세요.\n\n22번 포트는 그대로 둡니다. 설정을 잘못 써도 되돌아갈 길을 남겨 두기 위해서입니다 — 실제 서버에서도 같은 이유로 새 포트를 먼저 열어 확인한 뒤 옛 포트를 닫습니다.

단계

1. /root/harden 디렉터리를 만들고, 현재 유효 설정 전체를 /root/harden/baseline.txt 로 저장하세요.
2. /etc/ssh/sshd_config.d/90-labhub.conf 를 만들고 다음 값을 넣으세요.
PasswordAuthentication no, KbdInteractiveAuthentication no, PubkeyAuthentication yes, MaxAuthTries 3, LoginGraceTime 30, X11Forwarding no, PermitEmptyPasswords no, LogLevel VERBOSE
3. 문법 검사를 실행해 통과하는 것을 확인하고, 종료 코드를 /root/harden/syntax.txtrc=0 형식으로 적으세요.
4. 최종 적용 값 중 passwordauthentication, kbdinteractiveauthentication, maxauthtries, logingracetime 네 줄만 골라 /root/harden/effective.txt 로 저장하세요.
5. 같은 파일 끝에 Match User backup 블록을 추가해 ForceCommand internal-sftpAllowTcpForwarding no 를 넣으세요. 그리고 그 조건에서의 유효 설정을 /root/harden/match.txt 로 저장하세요. 파일에 forcecommand internal-sftp 가 보여야 합니다.
6. /root/.ssh/authorized_keys 에서 id_labhub 키가 들어 있는 줄 맨 앞에 restrict,pty,from="127.0.0.0/8" 옵션을 붙이세요. (pty 를 다시 켜야 셸 접속이 유지됩니다.)
7. sshd 를 다시 띄운 뒤 두 가지를 확인하세요.

참고

단계 8개

  1. 현재 유효 설정 기록
  2. drop-in 설정 작성
  3. 문법 검사 통과
  4. 적용 값 확인
  5. Match 블록 조건부 적용
  6. authorized_keys 옵션 강화
  7. 재기동 후 실제 검증
  8. 하드닝 체크리스트