리눅스 서버 SSH 보안 강화를 위한 모범 사례
이 필수적인 SSH 강화 기술들을 숙달하여 즉시 리눅스 서버를 보호하십시오. 이 전문가 가이드는 `sshd_config` 파일의 구성 변경에 중점을 둔 실행 가능한 단계를 제공합니다. 위험도가 높은 루트 로그인 비활성화, 취약한 암호를 제거하기 위한 의무적인 키 기반 인증 구현, 기본 포트 변경, 그리고 무차별 대입 공격에 대한 효과적인 속도 제한을 위한 Fail2Ban 설치 방법을 배우십시오. SSH를 견고하고 안전한 채널로 변환하여 시스템을 보호하십시오.
리눅스 서버 SSH 보안 강화를 위한 모범 사례
SSH는 일반적으로 리눅스 서버에서 가장 먼저 여는 문이므로, 호스트를 인터넷에 노출시키기 전에 SSH 보안을 강화해야 합니다. 봇은 포트 22에서 약한 비밀번호, 재사용된 자격 증명, 기본 계정을 지속적으로 시도합니다.
목표는 간단합니다. 원격 액세스는 사용자에게 유용하게 유지하고 공격자에게는 어렵게 만드는 것입니다. 두 번째 터미널 세션에서 시작하고, 현재 SSH 세션을 열어 둔 상태로, 데몬을 다시 시작하기 전에 모든 변경 사항을 테스트하세요.
먼저 구성을 백업하고 테스트하세요
/etc/ssh/sshd_config를 편집하기 전에 백업을 만드세요. 오타 하나로 서버에서 잠길 수 있습니다.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)
편집 후 구문을 확인하세요:
sudo sshd -t
테스트를 통과하면 SSH를 다시 로드하거나 다시 시작하세요. 서비스 이름은 일반적으로 RHEL 계열 시스템에서는 sshd이고 Debian/Ubuntu에서는 ssh입니다:
sudo systemctl restart sshd
# 또는
sudo systemctl restart ssh
1. 루트 로그인 비활성화
직접 root 로그인은 공격자에게 가장 가치 있는 사용자 이름을 미리 제공합니다. 일반 사용자 계정을 사용하고, 관리 액세스가 필요할 때 sudo로 권한을 상승시키세요.
구성 단계
/etc/ssh/sshd_config를 열고 PermitRootLogin 지시문을 찾으세요. 값을 no로 변경합니다.
# 이전:
# PermitRootLogin yes
# 이후 (모범 사례):
PermitRootLogin no
SSH를 다시 시작하기 전에 sudo 권한이 있는 표준 사용자로 로그인할 수 있는지 확인하세요.
2. 키 기반 인증 필수화
비밀번호 인증은 대규모로 공격하기 쉽습니다. SSH 키는 추측하기 어렵고, 교체하기 쉬우며, 개인 키를 암호로 보호할 때 일상적인 관리에 더 안전합니다.
키 생성 및 설치
- 로컬 머신에서 키 쌍을 생성하세요:
ssh-keygen -t ed25519 -C "[email protected]" - 공개 키를 서버에 복사하세요:
ssh-copy-id -i ~/.ssh/id_ed25519 user@your_server_ip
비밀번호 인증 비활성화
SSH 키를 사용하여 성공적으로 로그인할 수 있는지 확인한 후, 비밀번호 인증을 완전히 비활성화하세요.
# 비밀번호 비활성화
PasswordAuthentication no
# 키가 활성화되었는지 확인
PubkeyAuthentication yes
Ed25519는 새 키에 적합한 기본값입니다. 이전 시스템과의 호환성을 위해 RSA가 필요한 경우 4096비트와 같은 큰 키를 사용하세요.
3. 기본 SSH 포트 변경 고려
SSH를 TCP 포트 22에서 비표준 포트로 변경하면 시끄러운 자동 스캔을 줄일 수 있습니다. 누구나 스캔으로 열린 포트를 발견할 수 있기 때문에 키, 액세스 제어 또는 속도 제한을 대체하지는 않습니다.
구성 단계
/etc/ssh/sshd_config에서 Port 지시문을 변경하세요:
# 이전:
# Port 22
# 이후 (비표준 포트 예시):
Port 22222
SSH를 다시 시작하기 전에 방화벽과 모든 클라우드 보안 그룹을 업데이트하세요. 그렇지 않으면 새 SSH 데몬이 연결할 수 없는 포트에서 수신 대기할 수 있습니다.
firewalld 사용 예시 (CentOS/RHEL):
sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload
4. 특정 사용자 및 그룹으로 액세스 제한
소수의 사람만 SSH를 사용해야 하는 경우 sshd_config에 명시하세요. 이렇게 하면 잊혀진 로컬 계정이 원격 진입점이 되는 것을 차단할 수 있습니다.
구성 지시문
sshd_config에서 다음 지시문 중 하나 또는 둘 다를 사용하세요:
- 특정 사용자 허용:
AllowUsers alice bob - 특정 그룹 허용:
AllowGroups sshaccess admins
이러한 지시문이 있으면 명시적으로 나열되지 않은 모든 사용자 또는 그룹의 액세스가 거부됩니다.
5. 최신 SSH 기본값 유지 및 레거시 방법 비활성화
최신 OpenSSH 릴리스는 이미 SSH 프로토콜 2를 사용합니다. 이전 프로토콜 1 지원은 최신 OpenSSH에서 제거되었습니다. 지원되지 않는 Protocol 지시문이나 오래된 암호 목록이 포함된 오래된 강화 스니펫을 복사하지 마세요. 업그레이드 후 SSH가 중단될 수 있습니다.
필요하지 않은 한 레거시 신뢰 메커니즘을 비활성화하는 데 집중하세요:
HostbasedAuthentication no
IgnoreRhosts yes
PermitEmptyPasswords no
조직에서 사용자 지정 암호, MAC 또는 키 교환 정책이 필요한 경우 변경하기 전에 설치된 서버가 지원하는 것을 확인하세요:
sshd -T | grep -E '^(ciphers|macs|kexalgorithms) '
그런 다음 클라이언트 기반과 일치하는 테스트된 정책만 적용하세요. 너무 엄격한 목록은 이전 자동화 호스트를 잠글 수 있습니다.
6. Fail2Ban으로 속도 제한 추가
키 기반 인증을 사용하더라도 반복적인 프로브는 리소스를 낭비하고 로그를 복잡하게 만듭니다. Fail2Ban은 인증 로그를 모니터링하고 반복적인 실패 후 임시 방화벽 차단을 추가합니다.
Fail2Ban 설치:
# Debian/Ubuntu sudo apt update && sudo apt install fail2ban # RHEL/CentOS/Fedora sudo dnf install fail2bansshd감옥을 활성화하세요. 많은 시스템이 기본 구성을 제공하지만, 로컬 재정의는/etc/fail2ban/jail.local또는/etc/fail2ban/jail.d/아래 파일에 넣어야 합니다.[sshd] enabled = true port = 22222 maxretry = 5 bantime = 1h서비스를 시작하세요:
sudo systemctl enable --now fail2ban
SSH 포트를 변경한 경우 Fail2Ban 감옥이 새 포트와 일치하는지 확인하세요.
7. 세션 및 인증 설정 조정
이러한 설정은 유휴 세션을 닫고 약한 인증 경로를 제거하는 데 도움이 됩니다:
| 지시문 | 권장 값 | 목적 |
|---|---|---|
ClientAliveInterval |
300 | 300초마다 서버 측 연결 유지 확인을 보냅니다. |
ClientAliveCountMax |
3 | 응답 없는 확인이 3회 발생하면 연결을 끊습니다. |
UsePAM |
yes | 추가 로컬 시스템 보안 정책을 위해 PAM(Pluggable Authentication Modules)을 활성화합니다. |
PermitEmptyPasswords |
no | 빈 비밀번호가 있는 계정의 로그인을 차단합니다. |
MaxAuthTries |
3 | 연결당 반복적인 인증 시도를 제한합니다. |
X11Forwarding |
no | 실제로 사용하지 않는 한 X11 전달을 비활성화합니다. |
강화 체크리스트
이 체크리스트를 사용하여 서버가 기본 SSH 강화 표준을 충족하는지 확인하세요:
- 변경하기 전에
sshd_config를 백업하세요. - **
PermitRootLogin no**로 설정하세요. - (키 설정 후) **
PasswordAuthentication no**로 설정하세요. - **
Port**를 비표준 값으로 변경하세요. - 새 포트를 허용하도록 방화벽을 업데이트하세요.
-
AllowUsers또는 **AllowGroups**를 사용하여 액세스를 제한하세요. -
HostbasedAuthentication과 같은 레거시 신뢰 방법을 비활성화하세요. - Fail2Ban을 설치하고 구성하세요.
- 다시 시작하기 전에 **
sshd -t**로 구성을 확인하세요.
SSH 보안 강화는 계층적 방어로 가장 효과적입니다. 키는 비밀번호 추측을 막고, 사용자 제한은 연결할 수 있는 사람을 줄이며, 방화벽 규칙은 연결이 오는 위치를 제한하고, Fail2Ban은 반복적인 프로브를 늦춥니다. 테스트하는 동안 하나의 작업 세션을 열어 두고, 서버를 운영하는 모든 사람을 위해 새 포트와 로그인 방법을 문서화하세요.