홈 서버를 구축할 이유는 무궁무진합니다. 미디어 서버, 파일 서버, 로컬 백업 서버로 활용할 수도 있고, 굳이 인터넷에 올릴 필요가 없는 파일들을 보관하는 용도로도 적합합니다. 요즘은 리눅스 기반 홈 서버를 구축하는 일이 비교적 쉬워졌지만, 문제는 그 이후입니다. 서버를 안전하게 지키는 일은 생각보다 까다롭고, 그만큼 중요하기도 합니다.
꼭 필요한 것만 설치하세요
홈 서버 보안을 지키는 가장 쉬운 방법 중 하나는 처음부터 보안을 염두에 두는 것입니다. 이는 설치 단계에서 시작됩니다. 특정 애플리케이션이나 서비스가 필요한지 확실하지 않다면 설치하지 마세요. 나중에 언제든 설치할 수 있습니다.
리눅스를 몇 번 설치해 본 경험이 있다면 더욱 수월합니다. 기본 설정을 그대로 따르기보다는 설치 과정을 세밀하게 제어할 수 있는 모드(흔히 '전문가 모드(expert mode)' 등으로 불림)를 활용하세요.
설치 옵션을 꼼꼼히 관리해 두면, 나중에 보안상의 이유로 서비스를 하나하나 비활성화하는 데 드는 시간을 크게 아낄 수 있습니다.
sudo 설정하기
다른 단계로 넘어가기 전에 반드시 sudo를 설정해야 합니다. 그 이유는 앞으로 SSH를 통해 서버에 접속하게 되는데, root 계정으로는 직접 로그인하지 못하도록 막을 것이기 때문입니다. 이후 시스템에 변경 사항을 적용하려면 sudo를 사용해야 합니다.
먼저 현재 계정에서 이미 sudo를 사용할 수 있는지 확인합니다. 사용자 계정에서 USERNAME 부분을 자신의 사용자명으로 바꿔 다음 명령어를 실행하세요:
sudo -lU USERNAME
"(ALL) ALL" 또는 이와 유사한 메시지가 표시되면 바로 다음 단계로 진행할 수 있습니다.
이제 서버에서 root 계정으로 다음 명령어를 실행해 "/etc/sudoers" 파일을 편집합니다. nano 대신 다른 에디터를 선호한다면 그것을 사용해도 됩니다.
EDITOR=nano visudo
파일에 다음 내용을 추가합니다. USERNAME은 자신의 사용자명으로 바꾸세요:
USERNAME ALL=(ALL) ALL
SSH 설정하기

이미 홈 서버에서 SSH가 활성화되어 있을 가능성이 높습니다. 실제로 서버와 상호작용하는 가장 일반적인 방법이 SSH이기 때문입니다.
먼저 OpenSSH가 설치되어 있는지 확인하세요. 배포판에 따라 명령어는 조금씩 다르지만 패키지 이름은 거의 동일합니다. 우분투에서는 다음을 실행합니다:
sudo apt install openssh-server
키 기반 인증이 비밀번호 인증보다 훨씬 안전하므로, SSH를 이 방식으로 작동하도록 설정하겠습니다. 이 작업은 서버가 아니라 서버에 접속할 클라이언트 컴퓨터에서 진행해야 합니다. 먼저 기존 SSH 키가 있는지 확인합니다:
ls ~/.ssh/
목록에 "id_rsa"와 "id_rsa.pub"가 보인다면 이미 키가 있는 것이므로 다음 단계는 건너뛰세요.
ssh-keygen -t rsa -b 4096 -C "youremail@domain.com"
이제 생성한 SSH 키를 서버로 복사합니다:
ssh-copy-id USERNAME@SERVER
홈 서버라면 도메인 이름 대신 IP 주소를 사용하는 경우가 많습니다. 서버 이름을 모른다면 위 명령어의 SERVER 부분에 IP 주소를 입력하세요.
이제 SSH 설정을 편집해 보안을 한층 강화합니다. 키를 생성한 클라이언트에서 서버에 로그인한 뒤 다음 명령어를 실행하세요(nano 대신 원하는 에디터를 사용해도 됩니다). 이렇게 하면 이후 단계에서도 다시 로그인할 수 있습니다.
sudo nano /etc/ssh/sshd_config
파일에서 다음 설정값들을 찾아 수정합니다. 해당 항목들은 파일 곳곳에 흩어져 있으므로 주의해서 찾고, 중복되는 항목이 없도록 하세요. 첫 번째 설정만 적용되기 때문입니다.
ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no PermitRootLogin no
마지막으로 다음 명령어로 SSH 서버를 재시작합니다.
우분투에서는:
sudo systemctl restart ssh
방화벽 설정하기
실행 중인 서비스와 서버가 인터넷에 연결되는 정도에 따라 방화벽을 운영하는 것이 좋습니다. 선택지는 여러 가지지만, 리눅스에서 오랫동안 검증된 방법은 iptables입니다.
iptables 설정은 이 글의 범위를 벗어나지만 걱정하지 마세요. iptables 설정 방법을 다룬 완전한 가이드가 이미 준비되어 있습니다.
더 간편한 방법으로는 ufw를 사용하는 것이 있습니다. 다음 명령어로 설치할 수 있습니다:
sudo apt install ufw
기본적으로 ufw는 모든 포트를 차단합니다. 웹 접속과 SSH를 허용하려면 다음 명령어로 80, 443, 22번 포트를 열어주세요:
sudo ufw allow 80 sudo ufw allow 443 sudo ufw allow 22
마지막으로 ufw 서비스를 활성화합니다:
sudo ufw enable
최신 상태로 유지하기

서버는 잘 작동만 하면 잊고 지내기 쉽지만, 이는 위험한 습관입니다. 소프트웨어를 항상 최신 상태로 유지하세요. unattended-upgrades(자동 보안 업데이트)를 사용할 수도 있지만 결과를 예측하기 어려울 때가 있습니다. 가장 안전한 방법은 매주 또는 매월 정기적인 서버 점검 일정을 잡아 모든 소프트웨어가 제대로 관리되고 있는지 확인하는 것입니다.
그다음 단계는?
이제 외부 위협으로부터 서버를 보호하기 위한 탄탄한 기초를 마련했습니다. 하지만 집 밖에서 서버에 접근해야 한다면 어떻게 해야 할까요? 여는 문마다 공격자에게 악용될 가능성이 있으며, 열려 있는 포트가 늘어날수록 취약점도 함께 커집니다.
외부에서 홈 네트워크에 안전하게 접속하는 가장 쉬운 방법 중 하나는 VPN을 사용하는 것입니다. VPN 역시 이 글의 범위를 벗어나지만 걱정하지 마세요. 최고의 보안 VPN 서비스 목록을 살펴보고 어떤 선택지가 있는지 확인해 보시기 바랍니다.