리눅스 서버를 운영하거나 클라우드 서비스를 이용하는 분이라면 SSH(Secure Shell)에 대해 잘 알고 계실 것입니다. SSH는 원격으로 리눅스 시스템에 안전하게 접속하여 명령을 실행하고 파일을 전송하는 데 사용되는 필수적인 도구입니다. 하지만 이 편리함 뒤에는 간과해서는 안 될 보안 위험이 숨어 있습니다. 제대로 관리되지 않은 SSH는 해커의 손쉬운 침입 경로가 될 수 있기 때문입니다.
이 가이드에서는 리눅스 보안의 가장 기본적인 시작점인 SSH 포트 변경과 root 로그인 차단 방법에 대해 자세히 알아볼 것입니다. 이 두 가지 간단하지만 강력한 보안 설정은 여러분의 서버를 무단 접근으로부터 보호하는 데 큰 도움이 될 것입니다.
SSH 보안 왜 중요한가요
SSH는 서버 관리에 있어 없어서는 안 될 도구이지만, 그만큼 해커들의 주요 공격 대상이 되기도 합니다. 인터넷에 연결된 모든 SSH 포트 22번은 끊임없이 무작위 대입 공격(Brute-force attack)에 시달립니다. 이는 해커가 가능한 모든 사용자 이름과 비밀번호 조합을 시도하여 서버에 침입하려는 시도를 말합니다.
이러한 공격이 성공하면 서버의 모든 데이터가 유출되거나, 악성코드가 설치되거나, 심지어 서버 전체가 장악될 수도 있습니다. 개인 정보 유출, 서비스 중단, 금전적 손실 등 심각한 결과를 초래할 수 있으므로 SSH 보안은 절대 소홀히 할 수 없는 부분입니다.
다행히 SSH 보안을 강화하는 데는 몇 가지 효과적이고 실용적인 방법이 있습니다. 그중에서도 SSH 포트 변경과 root 로그인 차단은 가장 기본적이면서도 강력한 첫걸음입니다.
SSH 포트 변경으로 숨바꼭질 효과를
대부분의 리눅스 시스템에서 SSH는 기본적으로 22번 포트를 사용합니다. 이는 해커들이 가장 먼저 공격을 시도하는 포트이기도 합니다. SSH 포트를 기본값인 22번에서 다른 임의의 포트로 변경하는 것은 마치 집에 들어오는 문을 모두가 아는 정문에서 아무도 모르는 뒷문으로 바꾸는 것과 같습니다. 이는 직접적인 보안 강화책이라기보다는 공격자들의 접근을 어렵게 만드는 ‘숨바꼭질’ 효과를 가져옵니다.
SSH 포트 변경 단계별 가이드
SSH 포트를 변경하는 과정은 비교적 간단하지만, 정확한 절차를 따르는 것이 중요합니다. 잘못된 설정은 서버에 접속하지 못하게 되는 불상사를 초래할 수 있습니다.
1. SSH 설정 파일 찾기
SSH 서버의 설정 파일은 일반적으로 /etc/ssh/sshd_config 경로에 위치합니다. 이 파일을 수정하기 전에 항상 백업을 만들어두는 것이 좋습니다.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
2. 설정 파일 수정하기
텍스트 편집기(예: vi, nano)를 사용하여 sshd_config 파일을 엽니다.
sudo nano /etc/ssh/sshd_config
파일 내에서 #Port 22 또는 Port 22로 시작하는 줄을 찾습니다. 만약 #으로 주석 처리되어 있다면, #을 제거하고 원하는 포트 번호로 변경합니다. 일반적으로 1024번 이상의, 잘 알려지지 않은 포트 번호를 사용하는 것이 좋습니다. 예를 들어, 22222번으로 변경하려면 다음과 같이 수정합니다.
Port 22222
#Port 22
기존 Port 22 줄을 주석 처리하거나 삭제하고 새로운 Port 22222 줄을 추가하는 것이 일반적입니다. 원하는 포트 번호는 1024에서 65535 사이의 사용되지 않는 포트여야 합니다. 너무 흔한 포트(예: 80, 443, 8080)는 피하는 것이 좋습니다.
3. 방화벽 설정 업데이트
포트 변경 후 가장 중요한 단계 중 하나는 방화벽을 업데이트하여 새로운 SSH 포트를 허용하는 것입니다. 이 단계를 건너뛰면 서버에 접속할 수 없게 됩니다.
UFW (Uncomplicated Firewall) 사용 시 (Ubuntu, Debian 등)
sudo ufw allow 22222/tcp
sudo ufw delete allow 22/tcp # 기존 22번 포트 허용 규칙 삭제 (선택 사항, 보안 강화)
sudo ufw enable # 방화벽이 비활성화되어 있다면 활성화
sudo ufw status verbose
firewalld 사용 시 (CentOS, RHEL, Fedora 등)
sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --permanent --remove-service=ssh # 기존 SSH 서비스 제거 (선택 사항, 보안 강화)
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
기존 22번 포트 규칙을 삭제하는 것은 보안을 더 강화하지만, 만일의 사태에 대비해 잠시 유지하는 것도 방법입니다. 하지만 최종적으로는 닫는 것이 좋습니다.
4. SSH 서비스 재시작
설정 변경을 적용하려면 SSH 서비스를 재시작해야 합니다.
sudo systemctl restart sshd
또는
sudo service sshd restart
5. 새로운 포트로 접속 테스트
가장 중요한 단계입니다. 현재 접속된 SSH 세션을 끊지 않은 상태에서 새로운 터미널을 열어 변경된 포트로 접속을 시도해야 합니다. 만약 접속이 실패하면, 기존 세션으로 돌아가 설정을 수정하고 다시 시도할 수 있습니다.
ssh -p 22222 사용자이름@서버IP주소
성공적으로 접속이 된다면, 이제 기존 22번 포트는 닫아도 안전합니다. 접속에 실패했다면, 방화벽 설정이나 sshd_config 파일의 오타 등을 다시 확인해야 합니다.
root 로그인 차단으로 최고 권한 접근을 막으세요
root 계정은 리눅스 시스템에서 모든 권한을 가진 슈퍼유저 계정입니다. 이 계정으로 직접 SSH 로그인을 허용하는 것은 매우 위험합니다. 만약 해커가 root 계정의 비밀번호를 알아내면, 서버의 모든 것을 장악할 수 있기 때문입니다. 따라서 root 계정의 직접적인 SSH 로그인을 차단하고, 일반 사용자 계정으로 로그인한 후 필요할 때만 sudo 명령을 사용하여 관리 작업을 수행하는 것이 강력히 권장됩니다.
root 로그인 차단 단계별 가이드
SSH 포트 변경과 마찬가지로, root 로그인 차단도 sshd_config 파일 수정을 통해 이루어집니다.
1. SSH 설정 파일 백업 및 열기
앞서 포트 변경 시와 동일하게 sshd_config 파일을 백업하고 엽니다.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config
2. PermitRootLogin 설정 변경
파일 내에서 #PermitRootLogin yes 또는 PermitRootLogin yes로 시작하는 줄을 찾습니다. 이 줄을 찾아 다음과 같이 변경합니다.
PermitRootLogin no
만약 PermitRootLogin 줄이 없다면, 파일의 적절한 위치에 추가해주면 됩니다. PermitRootLogin prohibit-password 옵션도 사용할 수 있는데, 이는 비밀번호를 통한 root 로그인은 차단하지만, SSH 키를 통한 root 로그인은 허용합니다. 하지만 가장 안전한 방법은 PermitRootLogin no로 설정하여 모든 root 직접 로그인을 차단하는 것입니다.
3. 일반 사용자 계정 생성 및 sudo 권한 부여 (필요시)
아직 일반 사용자 계정이 없다면, root 로그인 차단 전에 반드시 일반 사용자 계정을 생성하고 sudo 권한을 부여해야 합니다. 그렇지 않으면 서버에 로그인할 방법이 없어질 수 있습니다.
sudo adduser 새사용자이름
sudo usermod -aG sudo 새사용자이름 # 또는 wheel 그룹 (CentOS/RHEL)
새로운 사용자의 비밀번호도 설정해야 합니다.
sudo passwd 새사용자이름
4. SSH 서비스 재시작
설정 변경을 적용하려면 SSH 서비스를 재시작해야 합니다.
sudo systemctl restart sshd
또는
sudo service sshd restart
5. 일반 사용자 계정으로 접속 테스트
새로운 터미널에서 일반 사용자 계정으로 SSH 접속을 시도합니다. 성공적으로 접속된 후, sudo 명령을 사용하여 관리자 권한이 필요한 작업을 수행할 수 있는지 확인합니다.
ssh -p 22222 새사용자이름@서버IP주소 # 변경된 포트 사용
sudo apt update # 또는 sudo yum update
root 계정으로 직접 로그인을 시도하면 접속이 거부되는 것을 확인할 수 있습니다.
더 나은 보안을 위한 추가 팁과 조언
SSH 포트 변경과 root 로그인 차단은 훌륭한 시작이지만, 서버 보안을 더욱 강화하기 위한 추가적인 조치들도 고려해야 합니다.
강력한 비밀번호 사용
기본적이지만 매우 중요합니다. 대문자, 소문자, 숫자, 특수문자를 조합한 12자 이상의 복잡한 비밀번호를 사용하세요. 주기적으로 비밀번호를 변경하는 것도 좋은 습관입니다.
SSH 키 기반 인증 사용
비밀번호 인증보다 훨씬 강력한 보안을 제공합니다. SSH 키는 공개키와 개인키 쌍으로 이루어져 있으며, 개인키 없이는 서버에 접속할 수 없습니다. 이는 무작위 대입 공격으로부터 거의 완벽하게 보호해줍니다.
- SSH 키 생성:
ssh-keygen
- 공개키 서버에 복사:
ssh-copy-id 사용자이름@서버IP주소 sshd_config에서 비밀번호 인증 비활성화:PasswordAuthentication no
Fail2ban 설치 및 설정
Fail2ban은 SSH 로그를 모니터링하여 무작위 대입 공격을 시도하는 IP 주소를 자동으로 차단하는 도구입니다. 특정 횟수 이상 로그인 실패 시 해당 IP를 방화벽에서 일정 시간 동안 차단하여 공격을 효과적으로 방어합니다.
sudo apt install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # CentOS/RHEL
설치 후 /etc/fail2ban/jail.local 파일을 수정하여 SSH 설정을 활성화하고 자신에게 맞는 규칙을 정의할 수 있습니다.
정기적인 시스템 업데이트
운영체제와 모든 소프트웨어 패키지를 최신 상태로 유지하는 것은 보안 취약점을 패치하고 새로운 위협으로부터 서버를 보호하는 데 필수적입니다.
sudo apt update && sudo apt upgrade # Debian/Ubuntu
sudo yum update # CentOS/RHEL
불필요한 서비스 비활성화
서버에서 사용하지 않는 서비스는 불필요한 보안 구멍을 만들 수 있습니다. 필요한 서비스만 활성화하고, 사용하지 않는 서비스는 비활성화하거나 제거하세요.
로그 모니터링
SSH 로그인 시도 및 시스템 로그를 주기적으로 확인하여 의심스러운 활동이 있는지 감시하세요. /var/log/auth.log (Debian/Ubuntu) 또는 /var/log/secure (CentOS/RHEL) 파일에 SSH 관련 로그가 기록됩니다.
흔한 오해와 사실 관계
오해 1 SSH 포트만 변경하면 완벽하게 안전하다
사실: SSH 포트 변경은 ‘보안 강화’가 아닌 ‘보안 난독화’에 가깝습니다. 이는 공격자들이 쉽게 포트를 찾지 못하게 할 뿐, 일단 포트가 발견되면 여전히 무작위 대입 공격의 대상이 됩니다. 포트 변경은 첫 번째 방어선일 뿐이며, 강력한 비밀번호, SSH 키 인증, Fail2ban과 같은 추가적인 보안 조치가 반드시 필요합니다.
오해 2 root 로그인을 차단하면 서버 관리가 복잡해진다
사실: 일반 사용자 계정으로 로그인한 후 sudo 명령어를 사용하여 관리자 권한으로 작업을 수행하는 것은 오히려 보안을 강화하고 관리자 실수를 줄이는 데 도움이 됩니다. 중요한 명령을 실행하기 전에 한 번 더 생각하게 만들고, 불필요하게 root 권한으로 작업하는 것을 방지합니다. 대부분의 리눅스 배포판은 sudo 사용이 편리하게 설정되어 있습니다.
오해 3 SSH 키는 한 번만 만들면 된다
사실: SSH 키는 한 번 생성하면 여러 서버에서 재사용할 수 있지만, 보안상으로는 서버마다 다른 키를 사용하거나, 적어도 중요한 서버와 덜 중요한 서버에 다른 키를 사용하는 것이 좋습니다. 개인키가 유출될 경우, 해당 키로 접근 가능한 모든 서버가 위험에 처할 수 있기 때문입니다.
자주 묻는 질문과 답변
Q1 SSH 포트 변경 후 접속이 안 돼요 어떻게 해야 하나요
A1 가장 흔한 원인은 방화벽 설정 오류입니다. 기존 SSH 세션을 끊지 않았다면, 해당 세션으로 돌아가 방화벽 설정을 다시 확인하고 새로운 포트가 허용되었는지 확인하세요. 그리고 SSH 서비스를 재시작한 후 다시 접속을 시도합니다. 만약 기존 세션이 끊겼다면, 클라우드 서비스의 경우 콘솔 접속 기능을 이용하여 서버에 직접 접속하여 문제를 해결해야 합니다.
Q2 여러 개의 SSH 포트를 동시에 사용할 수 있나요
A2 네, 가능합니다. sshd_config 파일에 Port 지시어를 여러 줄 추가하면 됩니다. 예를 들어:
Port 22222
Port 33333
이 경우, 두 포트 모두 방화벽에서 허용해야 합니다. 이는 특정 상황에서 유용할 수 있지만, 일반적으로는 하나의 포트만 사용하는 것이 관리하기 더 쉽습니다.
Q3 root 로그인 차단 후 root 계정으로 작업을 해야 할 때는 어떻게 하나요
A3 일반 사용자 계정으로 로그인한 후 sudo -i 또는 sudo su - 명령을 사용하여 root 쉘로 전환할 수 있습니다. 이렇게 하면 필요한 작업만 root 권한으로 수행하고, 평상시에는 일반 사용자 권한으로 작업할 수 있어 보안에 더욱 유리합니다.
Q4 SSH 설정을 원래대로 되돌리고 싶어요
A4 sshd_config.bak 파일을 백업해 두었다면, 해당 파일을 원본 sshd_config 파일로 복원하고 SSH 서비스를 재시작하면 됩니다. 또는 직접 sshd_config 파일을 열어 Port 22와 PermitRootLogin yes로 되돌리고 방화벽 설정을 원래대로 변경한 후 SSH 서비스를 재시작하면 됩니다.
sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
방화벽 설정도 원래대로 복구
sudo systemctl restart sshd
비용 효율적인 SSH 보안 활용 방법
여기서 다룬 SSH 포트 변경 및 root 로그인 차단 방법은 모두 추가 비용 없이 적용할 수 있는 강력한 보안 조치입니다. 서버를 운영하는 데 드는 비용은 그대로 유지하면서, 보안 수준을 대폭 향상시킬 수 있다는 점에서 매우 비용 효율적입니다.
- 무료 도구 활용: SSH 자체는 리눅스 시스템에 기본적으로 포함되어 있으며, Fail2ban과 같은 추가 보안 도구도 오픈 소스로 무료로 제공됩니다.
- 시간 투자: 초기 설정에 약간의 시간 투자가 필요하지만, 이는 잠재적인 해킹 피해를 예방하는 데 드는 비용과 비교할 수 없을 만큼 저렴합니다.
- 관리 효율성: SSH 키 인증, Fail2ban 등은 초기 설정 후에는 자동화되어 보안 관리의 효율성을 높여줍니다.
이러한 기본적인 보안 설정만으로도 여러분의 리눅스 서버는 훨씬 안전해질 것입니다. 귀찮다고 미루지 말고, 지금 바로 서버의 SSH 보안을 강화해보세요.