서버를 구축한 후에는 단순히 작동 여부만 확인해서는 안 됩니다. 외부 공격으로부터 서버를 안전하게 보호하는 보안 설정이 필수입니다. 서버 해킹, 데이터 유출, 서비스 중단은 대부분 보안 미비로 인해 발생합니다. 특히 방화벽, SSH 보안, SSL 인증서는 서버 운영의 핵심 보안 요소입니다. 이 글에서는 서버 보안의 기초가 되는 세 가지 항목을 초보자도 따라할 수 있도록 단계별로 정리해보았습니다.
1. 방화벽(Firewall) 설정하기
방화벽은 서버로 들어오는 트래픽 중에서 허용된 것만 통과시키고, 나머지는 차단하는 보안 시스템입니다. 리눅스 서버에서는 대표적으로 UFW(Uncomplicated Firewall)나 iptables를 사용합니다. 방화벽 설정을 통해 불필요한 포트를 차단하고, 특정 서비스만 접근 가능하게 설정할 수 있습니다.
UFW 방화벽 설정 기본 명령어
# UFW 설치 및 활성화 sudo apt install ufw sudo ufw enable # 기본 정책 설정 (모든 외부 접근 차단) sudo ufw default deny incoming sudo ufw default allow outgoing # 필요한 포트만 열기 (예: SSH 22번, HTTP 80번, HTTPS 443번) sudo ufw allow 22 sudo ufw allow 80 sudo ufw allow 443 # 상태 확인 sudo ufw status verbose
설정 후에는 반드시 SSH 접속이 막히지 않았는지 확인한 뒤 저장하세요. 방화벽은 서버 해킹의 1차 방어선이므로, 항상 기본 설정부터 시작하는 것이 좋습니다.
2. SSH 보안 강화하기
SSH(Secure Shell)는 서버에 원격 접속할 때 사용하는 기본 통신 프로토콜입니다. 그러나 기본 설정 상태로 운영할 경우, 무차별 대입 공격(Brute Force Attack) 등으로 계정 탈취 위험이 존재합니다. 다음과 같은 방법으로 SSH 접속을 보다 안전하게 만들 수 있습니다.
2-1. 루트 계정 직접 로그인 차단
# 설정 파일 열기 sudo nano /etc/ssh/sshd_config # 아래 항목 수정 PermitRootLogin no # SSH 재시작 sudo systemctl restart sshd
루트 계정으로 직접 접속하지 못하게 차단하면, 공격 대상이 줄어들고 보안이 강화됩니다.
2-2. 포트 번호 변경
기본 포트(22번)를 그대로 사용할 경우 공격 대상이 되기 쉽습니다. 포트 번호를 다른 숫자로 변경하면 자동 스캔 공격을 방지할 수 있습니다.
# 설정 파일 수정 sudo nano /etc/ssh/sshd_config # 포트 변경 (예: 2222) Port 2222 # 방화벽에서 해당 포트 허용 sudo ufw allow 2222 # SSH 재시작 sudo systemctl restart sshd
2-3. 공개키 기반 로그인 설정
비밀번호 대신 공개키(Public Key) 방식으로 SSH 접속을 설정하면 보안이 훨씬 강화됩니다.
# 클라이언트에서 키 생성 ssh-keygen -t rsa # 공개키 서버에 복사 ssh-copy-id -p 2222 사용자명@서버IP # 또는 수동 복사: ~/.ssh/authorized_keys에 붙여넣기
공개키 기반 인증을 설정하면 비밀번호를 통한 접속을 완전히 차단할 수도 있습니다.
3. SSL 인증서 설정으로 HTTPS 보안 강화
SSL(Secure Sockets Layer)은 클라이언트와 서버 간의 데이터를 암호화하여 전송하는 보안 프로토콜입니다. SSL 인증서를 설치하면 웹사이트 주소가 HTTP가 아닌 HTTPS로 시작하며, 사용자의 개인정보 보호에 중요한 역할을 합니다.
무료 SSL 인증서 발급 서비스 중 가장 많이 사용되는 것은 Let’s Encrypt입니다.
Let's Encrypt SSL 인증서 설치 예시 (Apache 기준)
# certbot 설치 sudo apt install certbot python3-certbot-apache # 인증서 발급 및 자동 설정 sudo certbot --apache # 인증서 갱신 테스트 sudo certbot renew --dry-run
Let’s Encrypt 설치 예시 (Nginx 기준)
# certbot 설치 sudo apt install certbot python3-certbot-nginx # 인증서 발급 및 적용 sudo certbot --nginx
인증서의 유효 기간은 90일이므로 자동 갱신이 활성화되었는지 확인하는 것이 중요합니다.
정리: 서버 보안은 기본부터 시작해야 합니다
방화벽, SSH, SSL은 모든 서버에서 반드시 설정해야 하는 보안 요소입니다. 복잡한 해킹 기법보다 단순한 보안 미비로 인한 사고가 훨씬 많습니다. 따라서 서버 구축 직후, 다음 3가지는 반드시 확인하고 설정해 두는 것이 좋습니다.
- 불필요한 포트는 방화벽으로 차단
- SSH 포트 변경 및 루트 로그인 차단
- SSL 인증서 설치로 HTTPS 보안 강화
이후 Fail2ban, 2단계 인증, 보안 로그 모니터링 등의 고급 보안도 고려해볼 수 있습니다. 하지만 기본 보안만 제대로 지켜도 대부분의 위험을 효과적으로 차단할 수 있습니다. 서버는 한 번 뚫리면 되돌릴 수 없는 피해가 발생할 수 있으므로, '지금' 당장 보안을 강화하는 것이 최선의 방법입니다.